From 9b426ebdbe9d283cd6f01719db9a00f2533df286 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 18 五月 2023 16:41:21 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java                           |   12 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java |    2 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payout.java                       |   54 +++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutResponse.java               |   35 ++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java                                  |   28 +
 UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java                                          |   26 +
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Packet.java                       |  132 ++++++++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackResponse.java       |   33 ++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Results.java                      |   56 +++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java            |   21 +
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Credentials.java                  |   49 +++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/ExtraData.java                    |   27 +
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/CallbackRequest.java              |   12 
 /dev/null                                                                                                                   |   35 --
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payload.java                      |   51 +++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayUtil.java                       |   54 ++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayoutUtil.java                    |   75 ++++
 UserIGOTravel/guns-admin/src/main/resources/application.yml                                                                 |   28 
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/enums/BankEnum.java                   |    1 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackRequest.java        |   45 ++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutPacket.java                 |   93 +++++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/AuthStatus.java                   |   35 ++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayOutload.java                   |   33 ++
 23 files changed, 856 insertions(+), 81 deletions(-)

diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/enums/BankEnum.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/enums/BankEnum.java
index 485e059..cd33321 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/enums/BankEnum.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/enums/BankEnum.java
@@ -8,7 +8,6 @@
  */
 @Getter
 public enum BankEnum {
-
     KCB_BANK("0001", "KCB"),
     STANCHART_BANK("0002", "Stanchart"),
     ABSA_BANK("0003", "ABSA"),
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
index 49ad62e..02a55ca 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
@@ -16,10 +16,7 @@
 import com.stylefeng.guns.modular.system.model.UserInfo;
 import com.stylefeng.guns.modular.system.service.*;
 import com.stylefeng.guns.modular.system.util.*;
-import com.stylefeng.guns.modular.system.util.Tingg.model.CallbackRequest;
-import com.stylefeng.guns.modular.system.util.Tingg.model.CallbackResponse;
-import com.stylefeng.guns.modular.system.util.Tingg.model.CheckoutRequest;
-import com.stylefeng.guns.modular.system.util.Tingg.model.Payments;
+import com.stylefeng.guns.modular.system.util.Tingg.model.*;
 import com.stylefeng.guns.modular.system.warpper.*;
 import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
 import com.stylefeng.guns.modular.taxi.model.TransactionDetails;
@@ -1475,4 +1472,27 @@
             e.printStackTrace();
         }
     }
+
+
+
+    @ResponseBody
+    @PostMapping("/base/IGO/tinggPayoutCallback")
+    public PayoutCallbackResponse tinggPayoutCallback(@RequestBody PayoutCallbackRequest request){
+        System.err.println("转账回调>>>>" + JSON.toJSONString(request));
+        PayoutCallbackResponse payoutCallbackResponse = new PayoutCallbackResponse();
+        AuthStatus authStatus = new AuthStatus();
+        authStatus.setAuthStatusCode(131);
+        authStatus.setAuthStatusDescription("Authentication was successful");
+        payoutCallbackResponse.setAuthStatus(authStatus);
+        Results results = new Results();
+        PayoutPacket packet = request.getPayload().getPacket();
+        String beepTransactionID = packet.getBeepTransactionID();
+        String payerTransactionID = packet.getPayerTransactionID();
+        results.setBeepTransactionID(beepTransactionID);
+        results.setPayerTransactionID(payerTransactionID);
+        results.setStatusCode("188");
+        results.setStatusDescription("Response was received");
+        payoutCallbackResponse.setResults(results);
+        return payoutCallbackResponse;
+    }
 }
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java
index bb369cd..e942298 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java
@@ -28,9 +28,6 @@
     @Autowired
     private IUserInfoService userInfoService;
 
-    /*@Autowired
-    private ICBCPayUtil icbcPayUtil;*/
-
     @Autowired
     private PayMoneyUtil payMoneyUtil;
 
@@ -41,8 +38,9 @@
      * @param callbackRequest
      */
     @ResponseBody
-    @PostMapping("/wxCancelUserBalance")
+    @PostMapping("/IGO/wxCancelUserBalance")
     public CallbackResponse wxCancelUserBalance(@RequestBody CallbackRequest callbackRequest){
+        System.err.println("支付成功回调------>" + JSON.toJSONString(callbackRequest));
         CallbackResponse callbackResponse = new CallbackResponse();
         try {
             /**
@@ -61,9 +59,9 @@
                 Payments payments = callbackRequest.getPayments().get(0);
                 String order_id = payments.getPayer_transaction_id();
                 if(ToolUtil.isNotEmpty(out_trade_no)){
-                    Integer language = Integer.valueOf(out_trade_no.substring(17, 18));
-                    Integer id = Integer.valueOf(out_trade_no.substring(18));
-                    userInfoService.payCancelUserBalance(null, order_id, Integer.valueOf(id), 1, language);
+//                    Integer language = Integer.valueOf(out_trade_no.substring(17, 18));
+//                    Integer id = Integer.valueOf(out_trade_no.substring(18));
+//                    userInfoService.payCancelUserBalance(null, order_id, Integer.valueOf(id), 1, language);
                     callbackResponse.setCheckout_request_id(order_id);
                     callbackResponse.setMerchant_transaction_id(out_trade_no);
                     callbackResponse.setStatus_code("183");
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java
index 59f16db..6bd7e2b 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java
@@ -491,7 +491,7 @@
             CheckoutRequest checkoutRequest = new CheckoutRequest();
             checkoutRequest.setMsisdn(Long.valueOf(userInfo.getPhone()));
             checkoutRequest.setCustomerEmail(userInfo.getEmail());
-            checkoutRequest.setAccountNumber(accountNumber);
+            checkoutRequest.setAccountNumber(userInfo.getPhone());
             checkoutRequest.setCustomerFirstName(userInfo.getFirstName());
             checkoutRequest.setCustomerLastName(userInfo.getLastName());
             checkoutRequest.setRequestAmount(orderMoney);
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java
index ccbb289..1b6aab8 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java
@@ -8,6 +8,10 @@
 import com.stylefeng.guns.modular.system.service.IUserInfoService;
 import com.stylefeng.guns.modular.system.service.IWithdrawalService;
 import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.util.Tingg.TinggPayoutUtil;
+import com.stylefeng.guns.modular.system.util.Tingg.model.AuthStatus;
+import com.stylefeng.guns.modular.system.util.Tingg.model.PayoutResponse;
+import com.stylefeng.guns.modular.system.util.Tingg.model.Results;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
@@ -29,8 +33,8 @@
     @Autowired
     private IUserInfoService userInfoService;
 
-  /*  @Autowired
-    private ICBCPayUtil icbcPayUtil;*/
+    @Autowired
+    private TinggPayoutUtil tinggPayoutUtil;
 
     private Map<String, Timer> timerMap = new HashMap<>();
 
@@ -70,8 +74,17 @@
         withdrawal.setUserId(uid);
         withdrawal.setUserType(1);
 
-        /*ResultUtil<String> transfer = icbcPayUtil.transfer(Double.valueOf(withdrawal.getMoney() * 100).longValue(), withdrawal.getCode(), withdrawal.getName());
-        withdrawal.setSerialNo(transfer.getData());*/
+        PayoutResponse payoutResponse = tinggPayoutUtil.sendPayout("+233" + userInfo.getPhone(), withdrawal.getCode(), withdrawal.getMoney(), "", "用户提现");
+        AuthStatus authStatus = payoutResponse.getAuthStatus();
+        Results results = payoutResponse.getResults().get(0);
+        String statusCode = results.getStatusCode();
+        if(!"131".equals(authStatus.getAuthStatusCode())){
+            return ResultUtil.error(authStatus.getAuthStatusDescription());
+        }
+        if(!"139".equals(statusCode)){
+            return ResultUtil.error(results.getStatusDescription());
+        }
+        withdrawal.setSerialNo(results.getBeepTransactionID());
         this.insert(withdrawal);
 
         double v = new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayUtil.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayUtil.java
index ab8458d..1b2ce68 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayUtil.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayUtil.java
@@ -2,10 +2,16 @@
 
 import com.alibaba.fastjson.JSON;
 import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.util.Tingg.model.CallbackRequest;
 import com.stylefeng.guns.modular.system.util.Tingg.model.CheckoutRequest;
 import io.cellulant.model.Payload;
 import io.cellulant.service.CheckoutEncryption;
 
+import javax.servlet.http.HttpServletRequest;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -14,11 +20,11 @@
  */
 public class TinggPayUtil {
 
-    private static String accessKey = "KxjPP444jEE7K88E7juej4PKqqzKq7qKjKj84q744q9zj4Ej4zK47uj4KKj4";
+    private static String accessKey = "8rc1gTV9n91Tc1Sy9oVWry99fgrgrVV8concf9onWooWSg9TVW8nSgo98g88";
 
-    private static String ivKey = "qsffKsCOJJdhSBCQ";
+    private static String ivKey = "ABp0pqpHMteEJM2N";
 
-    private static String secretKey = "9jjz4Ex74P8ue4qK";
+    private static String secretKey = "rf8Vo1n9yTSW98cg";
 
 
     /**
@@ -32,7 +38,7 @@
             Payload payload = getPayload(checkoutRequest);
             String param = checkoutEncrption.encrypt(payload);
             System.out.println("Encrpted payload=" + param);
-            String url = "https://online.uat.tingg.africa/testing/express/checkout?encrypted_payload=" + param + "&access_key=" + accessKey;
+            String url = "https://checkout.tingg.africa/express/checkout?encrypted_payload=" + param + "&access_key=" + accessKey;
             return ResultUtil.success(url);
         }catch (Exception e){
             e.printStackTrace();
@@ -47,7 +53,7 @@
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         String countryCode="GHA";//收取付款的国家的3位ISO代码
         String currencyCode = "GHS";//3位ISO代码的货币,商家正在开发票。
-        String serviceCode="IGOGHANA";//服务代码
+        String serviceCode="I-GO_TECHNOLOGIES_LI";//服务代码
         String dueDate = sdf.format(new Date(System.currentTimeMillis() + 1800000));//到期时间
         String languageCode="EN";
         String paymentOptionCode = "";//支付选项码
@@ -59,19 +65,41 @@
     }
 
 
+    public static CallbackRequest getRequestParam(HttpServletRequest request) throws IOException {
+        // 读取参数
+        InputStream inputStream;
+        StringBuilder sb = new StringBuilder();
+        inputStream = request.getInputStream();
+        String s;
+        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
+        while ((s = in.readLine()) != null) {
+            sb.append(s);
+        }
+        in.close();
+        inputStream.close();
+        String json = sb.toString();
+        System.err.println("结果-----》" + json);
+        CallbackRequest callbackRequest = JSON.parseObject(json, CallbackRequest.class);
+
+        return callbackRequest;
+    }
+
+
+
+
     public static void main(String[] ages){
         CheckoutRequest checkoutRequest = new CheckoutRequest();
-        checkoutRequest.setMsisdn(233240000000L);
+        checkoutRequest.setMsisdn(Long.valueOf("233244915521"));
         checkoutRequest.setCustomerEmail("393733352@qq.com");
-        checkoutRequest.setAccountNumber("4111111111111111");
-        checkoutRequest.setCustomerFirstName("zhibing");
-        checkoutRequest.setCustomerLastName("pu");
+        checkoutRequest.setAccountNumber("233244915521");
+        checkoutRequest.setCustomerFirstName("XIONG");
+        checkoutRequest.setCustomerLastName("GOU");
         checkoutRequest.setRequestAmount(1.00D);
-        checkoutRequest.setMerchantTransactionId("123456T");
+        checkoutRequest.setMerchantTransactionId("00016");
         checkoutRequest.setRequestDescription("payment test");
-        checkoutRequest.setCallbackUrl("https://10pz685243.zicp.fun");
-        checkoutRequest.setPendingRedirectUrl("https://10pz685243.zicp.fun");
-        checkoutRequest.setSuccessRedirectUrl("https://10pz685243.zicp.fun");
+        checkoutRequest.setCallbackUrl("https://10pz685243.zicp.fun/base/IGO/wxCancelUserBalance");
+        checkoutRequest.setPendingRedirectUrl("https://www.baidu.com");
+        checkoutRequest.setSuccessRedirectUrl("https://www.baidu.com");
         checkoutRequest.setFailRedirectUrl("https://www.baidu.com");
         ResultUtil resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest);
         System.err.println(JSON.toJSONString(resultUtil));
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayoutUtil.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayoutUtil.java
new file mode 100644
index 0000000..5a72d56
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayoutUtil.java
@@ -0,0 +1,75 @@
+package com.stylefeng.guns.modular.system.util.Tingg;
+
+import com.alibaba.fastjson.JSON;
+import com.stylefeng.guns.modular.system.util.HttpClientUtil;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.util.Tingg.model.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 转账
+ * @author zhibing.pu
+ * @date 2023/3/17 9:48
+ */
+@Component
+public class TinggPayoutUtil {
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+
+    /**
+     * 转账接口
+     * @param phone                 电话号码,带国家代码+233
+     * @param payerTransactionID    支付单号
+     * @param amount                支付金额
+     * @param callbackUrl           回调地址
+     * @param narration             备注
+     * @return
+     */
+    public PayoutResponse sendPayout(String phone, String payerTransactionID, Double amount, String callbackUrl, String narration) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Credentials credentials = new Credentials("igo_api_user", "mXo%kJM.p;_i)SSZ&^b?6XSH)D+OCPh8");
+        List<Packet> packets = new ArrayList<>();
+        Packet packet = new Packet();
+        packet.setServiceCode("GH-TIGO-B2C");//手机网络运营商 GH-MTN-B2C、GH-TIGO-B2C、GH-VODAFONE-B2C、GH-AIRTEL-B2C
+        packet.setMSISDN(phone);
+        packet.setAccountNumber(phone);
+        packet.setPayerTransactionID(payerTransactionID);
+        packet.setAmount(amount);
+        packet.setNarration(narration);
+        packet.setDatePaymentReceived(sdf.format(new Date()));
+        packet.setExtraData(new ExtraData(callbackUrl));
+        packet.setCurrencyCode("GHS");
+        packets.add(packet);
+        Payload payload = new Payload(credentials, packets);
+        Payout payout = new Payout("GH", "BEEP.postPayment", payload);
+        String string = JSON.toJSONString(payout);
+        string = string.replace("mSISDN", "MSISDN");
+        System.err.println(string);
+        HttpHeaders headers = new HttpHeaders();
+        MediaType type = MediaType.parseMediaType("text/plain");
+        headers.setContentType(type);
+        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
+        HttpEntity<String> formEntity = new HttpEntity<>(string, headers);
+
+        String url = "https://apps.cellulant.co.ke:9801/globalApi/v2/JSON/";
+        String s = restTemplate.postForObject(url, formEntity, String.class);
+        PayoutResponse payoutResponse = JSON.parseObject(s, PayoutResponse.class);
+        System.err.println(s);
+        return payoutResponse;
+    }
+
+
+
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/AuthStatus.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/AuthStatus.java
new file mode 100644
index 0000000..febc11c
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/AuthStatus.java
@@ -0,0 +1,35 @@
+package com.stylefeng.guns.modular.system.util.Tingg.model;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/3/20 16:52
+ */
+public class AuthStatus {
+    /**
+     * 认证状态码
+     * 131 客户端认证成功
+     * 132 客户端认证失败
+     * 174 具有匹配的适当描述的通用故障状态代码
+     */
+    private Integer authStatusCode;
+    /**
+     * 账号认证说明
+     */
+    private String authStatusDescription;
+
+    public Integer getAuthStatusCode() {
+        return authStatusCode;
+    }
+
+    public void setAuthStatusCode(Integer authStatusCode) {
+        this.authStatusCode = authStatusCode;
+    }
+
+    public String getAuthStatusDescription() {
+        return authStatusDescription;
+    }
+
+    public void setAuthStatusDescription(String authStatusDescription) {
+        this.authStatusDescription = authStatusDescription;
+    }
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/CallbackRequest.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/CallbackRequest.java
index 919d015..305ef4f 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/CallbackRequest.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/CallbackRequest.java
@@ -1,8 +1,11 @@
 package com.stylefeng.guns.modular.system.util.Tingg.model;
 
 
+
+import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
+import java.util.Locale;
 
 
 /**
@@ -177,8 +180,13 @@
         return request_date;
     }
 
-    public void setRequest_date(Date request_date) {
-        this.request_date = request_date;
+    public void setRequest_date(String request_date) {
+        try {
+            SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
+            this.request_date = format.parse(request_date);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
     }
 
     public String getService_code() {
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Credentials.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Credentials.java
new file mode 100644
index 0000000..c984aba
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Credentials.java
@@ -0,0 +1,49 @@
+package com.stylefeng.guns.modular.system.util.Tingg.model;
+
+/**
+ * 凭证
+ * @author zhibing.pu
+ * @date 2023/3/17 9:53
+ */
+public class Credentials {
+    /**
+     * 用户名称
+     */
+    private String username;
+    /**
+     * 密码
+     */
+    private String password;
+
+    public Credentials() {
+    }
+
+    public Credentials(String username, String password) {
+        this.username = username;
+        this.password = password;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    @Override
+    public String toString() {
+        return "Credentials{" +
+                "username='" + username + '\'' +
+                ", password='" + password + '\'' +
+                '}';
+    }
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/ExtraData.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/ExtraData.java
new file mode 100644
index 0000000..4fdfc49
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/ExtraData.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.util.Tingg.model;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/3/17 10:13
+ */
+public class ExtraData {
+    /**
+     * 回调地址
+     */
+    private String callbackUrl;
+
+    public ExtraData() {
+    }
+
+    public ExtraData(String callbackUrl) {
+        this.callbackUrl = callbackUrl;
+    }
+
+    public String getCallbackUrl() {
+        return callbackUrl;
+    }
+
+    public void setCallbackUrl(String callbackUrl) {
+        this.callbackUrl = callbackUrl;
+    }
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Packet.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Packet.java
new file mode 100644
index 0000000..ff74346
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Packet.java
@@ -0,0 +1,132 @@
+package com.stylefeng.guns.modular.system.util.Tingg.model;
+
+/**
+ * 实体包信息
+ * @author zhibing.pu
+ * @date 2023/3/17 9:56
+ */
+public class Packet {
+    /**
+     * 服务产品代码
+     */
+    private String serviceCode;
+    /**
+     * 进行支付的客户的手机号码。MSISDN应以国家代码开头,例如254xxxxxxxxx
+     */
+    private String MSISDN;
+    /**
+     * 账号为收款账号。如果是手机号码,则应以国家代码开头,例如254xxxxxxxxx
+     */
+    private String accountNumber;
+    /**
+     * 由银行为该事务生成的惟一transactionID。
+     */
+    private String payerTransactionID;
+    /**
+     * 客户支付的金额
+     */
+    private Double amount;
+    /**
+     * 备注信息
+     */
+    private String narration;
+    /**
+     * 付款人收到付款的日期。yyyy-mm-dd hh: mm: ss。
+     */
+    private String datePaymentReceived;
+    /**
+     * 额外数据
+     */
+    private ExtraData extraData;
+    /**
+     * 交易货币的 ISO 代码。
+     */
+    private String currencyCode;
+
+    public String getServiceCode() {
+        return serviceCode;
+    }
+
+    public void setServiceCode(String serviceCode) {
+        this.serviceCode = serviceCode;
+    }
+
+    public String getMSISDN() {
+        return MSISDN;
+    }
+
+    public void setMSISDN(String MSISDN) {
+        this.MSISDN = MSISDN;
+    }
+
+    public String getAccountNumber() {
+        return accountNumber;
+    }
+
+    public void setAccountNumber(String accountNumber) {
+        this.accountNumber = accountNumber;
+    }
+
+    public String getPayerTransactionID() {
+        return payerTransactionID;
+    }
+
+    public void setPayerTransactionID(String payerTransactionID) {
+        this.payerTransactionID = payerTransactionID;
+    }
+
+    public Double getAmount() {
+        return amount;
+    }
+
+    public void setAmount(Double amount) {
+        this.amount = amount;
+    }
+
+    public String getNarration() {
+        return narration;
+    }
+
+    public void setNarration(String narration) {
+        this.narration = narration;
+    }
+
+    public String getDatePaymentReceived() {
+        return datePaymentReceived;
+    }
+
+    public void setDatePaymentReceived(String datePaymentReceived) {
+        this.datePaymentReceived = datePaymentReceived;
+    }
+
+    public ExtraData getExtraData() {
+        return extraData;
+    }
+
+    public void setExtraData(ExtraData extraData) {
+        this.extraData = extraData;
+    }
+
+    public String getCurrencyCode() {
+        return currencyCode;
+    }
+
+    public void setCurrencyCode(String currencyCode) {
+        this.currencyCode = currencyCode;
+    }
+
+    @Override
+    public String toString() {
+        return "Packet{" +
+                "serviceCode='" + serviceCode + '\'' +
+                ", MSISDN='" + MSISDN + '\'' +
+                ", accountNumber='" + accountNumber + '\'' +
+                ", payerTransactionID='" + payerTransactionID + '\'' +
+                ", amount=" + amount +
+                ", narration='" + narration + '\'' +
+                ", datePaymentReceived='" + datePaymentReceived + '\'' +
+                ", extraData=" + extraData +
+                ", currencyCode='" + currencyCode + '\'' +
+                '}';
+    }
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayOutload.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayOutload.java
new file mode 100644
index 0000000..aada462
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayOutload.java
@@ -0,0 +1,33 @@
+package com.stylefeng.guns.modular.system.util.Tingg.model;
+
+
+/**
+ * @author zhibing.pu
+ * @date 2023/3/20 16:33
+ */
+public class PayOutload {
+    /**
+     * 凭证
+     */
+    private Credentials credentials;
+    /**
+     * 实体包信息
+     */
+    private PayoutPacket packet;
+
+    public Credentials getCredentials() {
+        return credentials;
+    }
+
+    public void setCredentials(Credentials credentials) {
+        this.credentials = credentials;
+    }
+
+    public PayoutPacket getPacket() {
+        return packet;
+    }
+
+    public void setPacket(PayoutPacket packet) {
+        this.packet = packet;
+    }
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payload.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payload.java
new file mode 100644
index 0000000..87dad6f
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payload.java
@@ -0,0 +1,51 @@
+package com.stylefeng.guns.modular.system.util.Tingg.model;
+
+import java.util.List;
+
+/**
+ * 退款实体
+ * @author zhibing.pu
+ * @date 2023/3/17 9:51
+ */
+public class Payload {
+    /**
+     * 凭证
+     */
+    private Credentials credentials;
+    /**
+     * 实体包信息
+     */
+    private List<Packet> packet;
+
+    public Payload() {
+    }
+
+    public Payload(Credentials credentials, List<Packet> packet) {
+        this.credentials = credentials;
+        this.packet = packet;
+    }
+
+    public Credentials getCredentials() {
+        return credentials;
+    }
+
+    public void setCredentials(Credentials credentials) {
+        this.credentials = credentials;
+    }
+
+    public List<Packet> getPacket() {
+        return packet;
+    }
+
+    public void setPacket(List<Packet> packet) {
+        this.packet = packet;
+    }
+
+    @Override
+    public String toString() {
+        return "Payload{" +
+                "credentials=" + credentials +
+                ", packet=" + packet +
+                '}';
+    }
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payout.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payout.java
new file mode 100644
index 0000000..8e14711
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payout.java
@@ -0,0 +1,54 @@
+package com.stylefeng.guns.modular.system.util.Tingg.model;
+
+/**
+ * 退款
+ * @author zhibing.pu
+ * @date 2023/3/17 9:49
+ */
+public class Payout {
+    /**
+     * 国家代码
+     */
+    private String countryCode;
+    /**
+     * 接口类型
+     */
+    private String function;
+    /**
+     * 参数实体
+     */
+    private Payload payload;
+
+    public Payout() {
+    }
+
+    public Payout(String countryCode, String function, Payload payload) {
+        this.countryCode = countryCode;
+        this.function = function;
+        this.payload = payload;
+    }
+
+    public String getCountryCode() {
+        return countryCode;
+    }
+
+    public void setCountryCode(String countryCode) {
+        this.countryCode = countryCode;
+    }
+
+    public String getFunction() {
+        return function;
+    }
+
+    public void setFunction(String function) {
+        this.function = function;
+    }
+
+    public Payload getPayload() {
+        return payload;
+    }
+
+    public void setPayload(Payload payload) {
+        this.payload = payload;
+    }
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackRequest.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackRequest.java
new file mode 100644
index 0000000..64916b2
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackRequest.java
@@ -0,0 +1,45 @@
+package com.stylefeng.guns.modular.system.util.Tingg.model;
+
+/**
+ * 转账回调请求
+ * @author zhibing.pu
+ * @date 2023/3/20 16:31
+ */
+public class PayoutCallbackRequest {
+    /**
+     * 国家代码
+     */
+    private String countryCode;
+    /**
+     * 调用函数
+     */
+    private String function;
+    /**
+     * 数据
+     */
+    private PayOutload payload;
+
+    public String getCountryCode() {
+        return countryCode;
+    }
+
+    public void setCountryCode(String countryCode) {
+        this.countryCode = countryCode;
+    }
+
+    public String getFunction() {
+        return function;
+    }
+
+    public void setFunction(String function) {
+        this.function = function;
+    }
+
+    public PayOutload getPayload() {
+        return payload;
+    }
+
+    public void setPayload(PayOutload payload) {
+        this.payload = payload;
+    }
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackResponse.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackResponse.java
new file mode 100644
index 0000000..50ef0dd
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackResponse.java
@@ -0,0 +1,33 @@
+package com.stylefeng.guns.modular.system.util.Tingg.model;
+
+/**
+ * 转账回调反馈
+ * @author zhibing.pu
+ * @date 2023/3/20 16:40
+ */
+public class PayoutCallbackResponse {
+    /**
+     * 认证状态及说明
+     */
+    private AuthStatus authStatus;
+    /**
+     *
+     */
+    private Results results;
+
+    public AuthStatus getAuthStatus() {
+        return authStatus;
+    }
+
+    public void setAuthStatus(AuthStatus authStatus) {
+        this.authStatus = authStatus;
+    }
+
+    public Results getResults() {
+        return results;
+    }
+
+    public void setResults(Results results) {
+        this.results = results;
+    }
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutPacket.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutPacket.java
new file mode 100644
index 0000000..b69b9d7
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutPacket.java
@@ -0,0 +1,93 @@
+package com.stylefeng.guns.modular.system.util.Tingg.model;
+
+/**
+ * 实体包信息
+ * @author zhibing.pu
+ * @date 2023/3/17 9:56
+ */
+public class PayoutPacket {
+    /**
+     * 返回状态
+     */
+    private String statusCode;
+    /**
+     * 状态说明
+     */
+    private String statusDescription;
+    /**
+     * 正在支付账号。如果是手机号码,应该以国家代码开头,例如2547xxxxxxxx
+     */
+    private String beepTransactionID;
+    /**
+     * 由银行为该事务生成的惟一transactionID。
+     */
+    private String payerTransactionID;
+    /**
+     * 客户支付的金额。
+     */
+    private String receiptNumber;
+    /**
+     * 正在付款的叙述。
+     */
+    private String receiverNarration;
+
+    public String getStatusCode() {
+        return statusCode;
+    }
+
+    public void setStatusCode(String statusCode) {
+        this.statusCode = statusCode;
+    }
+
+    public String getStatusDescription() {
+        return statusDescription;
+    }
+
+    public void setStatusDescription(String statusDescription) {
+        this.statusDescription = statusDescription;
+    }
+
+    public String getBeepTransactionID() {
+        return beepTransactionID;
+    }
+
+    public void setBeepTransactionID(String beepTransactionID) {
+        this.beepTransactionID = beepTransactionID;
+    }
+
+    public String getPayerTransactionID() {
+        return payerTransactionID;
+    }
+
+    public void setPayerTransactionID(String payerTransactionID) {
+        this.payerTransactionID = payerTransactionID;
+    }
+
+    public String getReceiptNumber() {
+        return receiptNumber;
+    }
+
+    public void setReceiptNumber(String receiptNumber) {
+        this.receiptNumber = receiptNumber;
+    }
+
+    public String getReceiverNarration() {
+        return receiverNarration;
+    }
+
+    public void setReceiverNarration(String receiverNarration) {
+        this.receiverNarration = receiverNarration;
+    }
+
+    @Override
+    public String toString() {
+        return "PayoutPacket{" +
+                "statusCode='" + statusCode + '\'' +
+                ", statusDescription='" + statusDescription + '\'' +
+                ", beepTransactionID='" + beepTransactionID + '\'' +
+                ", payerTransactionID='" + payerTransactionID + '\'' +
+                ", receiptNumber='" + receiptNumber + '\'' +
+                ", receiverNarration='" + receiverNarration + '\'' +
+                '}';
+    }
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutResponse.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutResponse.java
new file mode 100644
index 0000000..37b7f5c
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutResponse.java
@@ -0,0 +1,35 @@
+package com.stylefeng.guns.modular.system.util.Tingg.model;
+
+import java.util.List;
+
+/**
+ * 转账回调反馈
+ * @author zhibing.pu
+ * @date 2023/3/20 16:40
+ */
+public class PayoutResponse {
+    /**
+     * 认证状态及说明
+     */
+    private AuthStatus authStatus;
+    /**
+     *
+     */
+    private List<Results> results;
+
+    public AuthStatus getAuthStatus() {
+        return authStatus;
+    }
+
+    public void setAuthStatus(AuthStatus authStatus) {
+        this.authStatus = authStatus;
+    }
+
+    public List<Results> getResults() {
+        return results;
+    }
+
+    public void setResults(List<Results> results) {
+        this.results = results;
+    }
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Results.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Results.java
new file mode 100644
index 0000000..0023e15
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Results.java
@@ -0,0 +1,56 @@
+package com.stylefeng.guns.modular.system.util.Tingg.model;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/3/20 16:55
+ */
+public class Results {
+    /**
+     * beep流水ID
+     */
+    private String beepTransactionID;
+    /**
+     * 交易id
+     */
+    private String payerTransactionID;
+    /**
+     * 188
+     */
+    private String statusCode;
+    /**
+     * 状态说明
+     */
+    private String statusDescription;
+
+    public String getBeepTransactionID() {
+        return beepTransactionID;
+    }
+
+    public void setBeepTransactionID(String beepTransactionID) {
+        this.beepTransactionID = beepTransactionID;
+    }
+
+    public String getPayerTransactionID() {
+        return payerTransactionID;
+    }
+
+    public void setPayerTransactionID(String payerTransactionID) {
+        this.payerTransactionID = payerTransactionID;
+    }
+
+    public String getStatusCode() {
+        return statusCode;
+    }
+
+    public void setStatusCode(String statusCode) {
+        this.statusCode = statusCode;
+    }
+
+    public String getStatusDescription() {
+        return statusDescription;
+    }
+
+    public void setStatusDescription(String statusDescription) {
+        this.statusDescription = statusDescription;
+    }
+}
diff --git a/UserIGOTravel/guns-admin/src/main/resources/application.yml b/UserIGOTravel/guns-admin/src/main/resources/application.yml
index f133d11..8e0b942 100644
--- a/UserIGOTravel/guns-admin/src/main/resources/application.yml
+++ b/UserIGOTravel/guns-admin/src/main/resources/application.yml
@@ -1,5 +1,5 @@
 server:
-  port: 8006
+  port: 82
 
 guns:
   swagger-open: true              #是否开启swagger (true/false)
@@ -13,8 +13,8 @@
   application:
     name: user-server
   profiles:
-#    active: dev
-    active: produce
+    active: dev
+#    active: produce
   mvc:
     static-path-pattern: /static/**
     view:
@@ -50,24 +50,24 @@
   base-package: com.stylefeng.guns.modular
 
 
-spring:
-  datasource:
-    url: jdbc:mysql://127.0.0.1:3306/igotravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
-    username: root
-    password: HjKbXilb9zajmXbl
-    db-name: guns #用来搜集数据库的所有表
-    filters: wall,mergeStat
-
-
-################# 测试环境 ###################
 #spring:
 #  datasource:
 #    url: jdbc:mysql://127.0.0.1:3306/igotravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
 #    username: root
-#    password: 123456
+#    password: HjKbXilb9zajmXbl
 #    db-name: guns #用来搜集数据库的所有表
 #    filters: wall,mergeStat
 
+
+################# 测试环境 ###################
+spring:
+  datasource:
+    url: jdbc:mysql://127.0.0.1:3306/igotravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
+    username: root
+    password: 123456
+    db-name: guns #用来搜集数据库的所有表
+    filters: wall,mergeStat
+
 #多数据源情况的配置
 guns:
   muti-datasource:
diff --git a/UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java b/UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java
new file mode 100644
index 0000000..c939120
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java
@@ -0,0 +1,26 @@
+package com.stylefeng.guns;
+
+import com.stylefeng.guns.modular.system.util.Tingg.TinggPayoutUtil;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/3/17 11:27
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class TestGunsApplication {
+
+    @Autowired
+    private TinggPayoutUtil tinggPayoutUtil;
+
+
+    @Test
+    public void test(){
+        tinggPayoutUtil.sendPayout("+233277211131", "00007", 1D, "https://10pz685243.zicp.fun/base/IGO/tinggPayoutCallback", "Transfer remittance");
+    }
+}
diff --git a/UserIGOTravel/guns-admin/src/test/sql/test.sql b/UserIGOTravel/guns-admin/src/test/sql/test.sql
deleted file mode 100644
index 04b15ca..0000000
--- a/UserIGOTravel/guns-admin/src/test/sql/test.sql
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- Navicat Premium Data Transfer
-
- Source Server         : localhost
- Source Server Type    : MySQL
- Source Server Version : 50719
- Source Host           : localhost:3306
- Source Schema         : guns
-
- Target Server Type    : MySQL
- Target Server Version : 50719
- File Encoding         : 65001
-
- Date: 10/07/2018 14:09:19
-*/
-
-DROP DATABASE IF EXISTS guns_test;
-CREATE DATABASE IF NOT EXISTS guns_test DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
-
-use guns_test;
-
-SET NAMES utf8mb4;
-SET FOREIGN_KEY_CHECKS = 0;
-
--- ----------------------------
--- Table structure for test
--- ----------------------------
-DROP TABLE IF EXISTS `test`;
-CREATE TABLE `test` (
-  `aaa` int(11) NOT NULL AUTO_INCREMENT,
-  `bbb` varchar(255) DEFAULT NULL,
-  PRIMARY KEY (`aaa`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
-
-SET FOREIGN_KEY_CHECKS = 1;

--
Gitblit v1.7.1