From 7a14e1592dd0c2cfd6cd4e8b11f95c9f46f2ffe7 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 05 七月 2023 20:07:04 +0800
Subject: [PATCH] 修改支付相关逻辑代码

---
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java                           |   22 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java |  118 ++++++---
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java                                  |  243 +++++++++++---------
 UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java                                          |    2 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java          |    8 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/WithdrawalController.java                             |   10 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java                   |    2 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/controller/OrderLogisticsController.java   |    9 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml                   |    1 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/IOrderLogisticsService.java         |    8 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java              |   12 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java            |   24 -
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java                    |    4 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java                               |  110 ++++++++-
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/BankCardWarpper.java                       |   42 +++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java  |   71 ++++-
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayoutUtil.java                    |    4 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java                      |    5 
 18 files changed, 445 insertions(+), 250 deletions(-)

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 94ba12f..6dadc7a 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
@@ -880,16 +880,17 @@
      */
     @ResponseBody
     @PostMapping("/api/taxi/cancleOrderTaxi")
-    @ApiOperation(value = "取消操作支付", tags = {"用户端-出租车", "用户端-专车", "用户端-跨城"}, notes = "")
+    @ApiOperation(value = "取消操作支付【1.1】", tags = {"用户端-出租车", "用户端-专车", "用户端-跨城"}, notes = "")
     @ApiImplicitParams({
             @ApiImplicitParam(value = "订单id", name = "id", required = true, dataType = "int"),
             @ApiImplicitParam(value = "订单类型(1=专车,2=出租车,3=跨城)", name = "orderType", required = true, dataType = "int"),
-            @ApiImplicitParam(value = "支付方式(1=线上支付,3=余额)", name = "payType", required = true, dataType = "int"),
+            @ApiImplicitParam(value = "支付方式(1=手机支付,2=银行卡支付,3=余额)", name = "payType", required = true, dataType = "int"),
+            @ApiImplicitParam(value = "银行卡id", name = "bankCardId", required = false, dataType = "int"),
             @ApiImplicitParam(value = "取消单id(取消操作返回)", name = "cancleId", required = false, dataType = "int"),
             @ApiImplicitParam(value = "支付端(1=用户APP端,2=司机APP端,3=用户小程序端)", name = "type", required = true, dataType = "int"),
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResultUtil cancleOrderTaxi(Integer id, Integer orderType, Integer payType, Integer cancleId, Integer type, Integer language, HttpServletRequest request){
+    public ResultUtil cancleOrderTaxi(Integer id, Integer orderType, Integer payType, Integer bankCardId, Integer cancleId, Integer type, Integer language, HttpServletRequest request){
         try {
             Integer uid = userInfoService.getUserIdFormRedis(request);
             if(null == uid){
@@ -897,7 +898,7 @@
             }
             switch (orderType){
                 case 1:
-                    return orderPrivateCarService.cancleOrderPrivateCar(id, payType, "user_" + uid, cancleId, type, language);
+                    return orderPrivateCarService.cancleOrderPrivateCar(id, payType, bankCardId, cancleId, type, language);
 //                case 2:
 //                    return orderTaxiService.cancleOrderTaxi(id, payType, cancleId, type);
 //                case 3:
@@ -971,18 +972,18 @@
                 case 1:
                     map = orderPrivateCarService.queryBalance(orderId, uid);
                     break;
-                case 2:
-                    map = orderTaxiService.queryBalance(orderId, uid);
-                    break;
-                case 3:
-                    map = orderCrossCityService.queryBalance(orderId, uid);
-                    break;
+//                case 2:
+//                    map = orderTaxiService.queryBalance(orderId, uid);
+//                    break;
+//                case 3:
+//                    map = orderCrossCityService.queryBalance(orderId, uid);
+//                    break;
                 case 4:
                     map = orderLogisticsService.queryBalance(orderId, uid);
                     break;
-                case 5:
-                    map = orderLogisticsService.queryBalance(orderId, uid);
-                    break;
+//                case 5:
+//                    map = orderLogisticsService.queryBalance(orderId, uid);
+//                    break;
             }
             return ResultUtil.success(map);
         }catch (Exception e){
@@ -1022,12 +1023,12 @@
                 case 1:
                     list = orderPrivateCarService.queryCoupon(orderId, uid, pageNum, size);
                     break;
-                case 2:
-                    list = orderTaxiService.queryCoupon(orderId, uid, pageNum, size);
-                    break;
-                case 3:
-                    list = orderCrossCityService.queryCoupon(orderId, uid, pageNum, size);
-                    break;
+//                case 2:
+//                    list = orderTaxiService.queryCoupon(orderId, uid, pageNum, size);
+//                    break;
+//                case 3:
+//                    list = orderCrossCityService.queryCoupon(orderId, uid, pageNum, size);
+//                    break;
 //                case 4:
 //                    list = orderLogisticsService.queryCoupon(orderId, uid, pageNum, size);
 //                    break;
@@ -1231,17 +1232,18 @@
                 String order_id = payments.getPayer_transaction_id();
                 if(ToolUtil.isNotEmpty(out_trade_no)){
                     Integer type = Integer.valueOf(out_trade_no.substring(17, 18));
-                    Integer id = Integer.valueOf(out_trade_no.substring(18));
+                    Integer language = Integer.valueOf(out_trade_no.substring(18, 19));
+                    Integer id = Integer.valueOf(out_trade_no.substring(19));
                     switch (type){
                         case 1:
-                            orderPrivateCarService.payCancelOrderPrivateCar(id, order_id, 1);
+                            orderPrivateCarService.payCancelOrderPrivateCar(id, order_id, language);
                             break;
-                        case 2:
-                            orderTaxiService.payCancelOrderTaxi(id, order_id, 1);
-                            break;
-                        case 3:
-                            orderCrossCityService.payCancelOrderCrossCity(id, order_id, 1);
-                            break;
+//                        case 2:
+//                            orderTaxiService.payCancelOrderTaxi(id, order_id, 1);
+//                            break;
+//                        case 3:
+//                            orderCrossCityService.payCancelOrderCrossCity(id, order_id, 1);
+//                            break;
                     }
                     callbackResponse.setCheckout_request_id(order_id);
                     callbackResponse.setMerchant_transaction_id(out_trade_no);
@@ -1271,31 +1273,31 @@
     @PostMapping("/base/aliCancelOrderTaxi")
     public void aliCancelOrderTaxi(HttpServletRequest request, HttpServletResponse response){
         try {
-            Map<String, String> map = payMoneyUtil.alipayCallback(request);//icbcPayUtil.payCallback(request);
-            if(null != map){
-                String out_trade_no = map.get("out_trade_no");
-                String order_id = map.get("trade_no");
-                if(ToolUtil.isNotEmpty(out_trade_no)){
-                    String[] split = out_trade_no.split("_");
-                    Integer id = Integer.valueOf(split[0]);
-                    Integer type = Integer.valueOf(split[1]);
-                    switch (type){
-                        case 1:
-                            orderPrivateCarService.payCancelOrderPrivateCar(id, order_id, 2);
-                            break;
-                        case 2:
-                            orderTaxiService.payCancelOrderTaxi(id, order_id, 2);
-                            break;
-                        case 3:
-                            orderCrossCityService.payCancelOrderCrossCity(id, order_id, 2);
-                            break;
-                    }
-                }
-                response.setContentType("text/html;charset=UTF-8");
-                PrintWriter out;
-                out = response.getWriter();
-                out.println("success"); // 请不要修改或删除
-            }
+//            Map<String, String> map = payMoneyUtil.alipayCallback(request);//icbcPayUtil.payCallback(request);
+//            if(null != map){
+//                String out_trade_no = map.get("out_trade_no");
+//                String order_id = map.get("trade_no");
+//                if(ToolUtil.isNotEmpty(out_trade_no)){
+//                    String[] split = out_trade_no.split("_");
+//                    Integer id = Integer.valueOf(split[0]);
+//                    Integer type = Integer.valueOf(split[1]);
+//                    switch (type){
+//                        case 1:
+//                            orderPrivateCarService.payCancelOrderPrivateCar(id, order_id, 2);
+//                            break;
+//                        case 2:
+//                            orderTaxiService.payCancelOrderTaxi(id, order_id, 2);
+//                            break;
+//                        case 3:
+//                            orderCrossCityService.payCancelOrderCrossCity(id, order_id, 2);
+//                            break;
+//                    }
+//                }
+//                response.setContentType("text/html;charset=UTF-8");
+//                PrintWriter out;
+//                out = response.getWriter();
+//                out.println("success"); // 请不要修改或删除
+//            }
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -1328,25 +1330,25 @@
                 Payments payments = callbackRequest.getPayments().get(0);
                 String order_id = payments.getPayer_transaction_id();
                 if(ToolUtil.isNotEmpty(out_trade_no)){
-                    Integer type = Integer.valueOf(out_trade_no.substring(17, 18));
+                    Integer orderType = Integer.valueOf(out_trade_no.substring(17, 18));
                     Integer language = Integer.valueOf(out_trade_no.substring(18, 19));
                     Integer id = Integer.valueOf(out_trade_no.substring(19));
-                    switch (type){
+                    switch (orderType){
                         case 1:
-                            orderPrivateCarService.payOrderPrivateCarCallback(id, order_id, 1, language);
+                            orderPrivateCarService.payOrderPrivateCarCallback(id, order_id, language);
                             break;
-                        case 2:
-                            orderTaxiService.payOrderTaxiCallback(id, order_id, 1);
-                            break;
-                        case 3:
-                            orderCrossCityService.payOrderCrossCityCallback(id, order_id, 1);
-                            break;
+//                        case 2:
+//                            orderTaxiService.payOrderTaxiCallback(id, order_id, 1);
+//                            break;
+//                        case 3:
+//                            orderCrossCityService.payOrderCrossCityCallback(id, order_id, 1);
+//                            break;
                         case 4:
-                            orderLogisticsService.payOrderLogisticsCallback(id, order_id, 1, language);
+                            orderLogisticsService.payOrderLogisticsCallback(id, order_id, language);
                             break;
-                        case 5:
-                            orderLogisticsService.payOrderLogisticsCallback(id, order_id, 1, language);
-                            break;
+//                        case 5:
+//                            orderLogisticsService.payOrderLogisticsCallback(id, order_id, 1, language);
+//                            break;
                     }
                     callbackResponse.setCheckout_request_id(order_id);
                     callbackResponse.setMerchant_transaction_id(out_trade_no);
@@ -1386,21 +1388,21 @@
                     Integer type = Integer.valueOf(split[1]);
                     Integer language = Integer.valueOf(split[2]);
                     switch (type){
-                        case 1:
-                            orderPrivateCarService.payOrderPrivateCarCallback(id, order_id, 2, language);
-                            break;
-                        case 2:
-                            orderTaxiService.payOrderTaxiCallback(id, order_id, 2);
-                            break;
-                        case 3:
-                            orderCrossCityService.payOrderCrossCityCallback(id, order_id, 2);
-                            break;
-                        case 4:
-                            orderLogisticsService.payOrderLogisticsCallback(id, order_id, 2, language);
-                            break;
-                        case 5:
-                            orderLogisticsService.payOrderLogisticsCallback(id, order_id, 2, language);
-                            break;
+//                        case 1:
+//                            orderPrivateCarService.payOrderPrivateCarCallback(id, order_id, 2, language);
+//                            break;
+//                        case 2:
+//                            orderTaxiService.payOrderTaxiCallback(id, order_id, 2);
+//                            break;
+//                        case 3:
+//                            orderCrossCityService.payOrderCrossCityCallback(id, order_id, 2);
+//                            break;
+//                        case 4:
+//                            orderLogisticsService.payOrderLogisticsCallback(id, order_id, 2, language);
+//                            break;
+//                        case 5:
+//                            orderLogisticsService.payOrderLogisticsCallback(id, order_id, 2, language);
+//                            break;
                     }
                     response.setContentType("text/html;charset=UTF-8");
                     PrintWriter out;
@@ -1419,30 +1421,49 @@
 
     /**
      * 小件物流差价微信支付回调
-     * @param request
      */
     @ResponseBody
     @PostMapping("/base/wxPayOrderLogisticsSpread")
-    public void wxPayOrderLogisticsSpread(HttpServletRequest request, HttpServletResponse response){
+    public CallbackResponse wxPayOrderLogisticsSpread(@RequestBody CallbackRequest callbackRequest){
+        CallbackResponse callbackResponse = new CallbackResponse();
         try {
-            Map<String, String> map = payMoneyUtil.weixinpayCallback(request);//icbcPayUtil.payCallback(request);
-            if(null != map){
-                String out_trade_no = map.get("out_trade_no");
-                String order_id = map.get("transaction_id");
-                String s = null;//icbcPayUtil.queryTransaction("", order_id);
-                if(!s.equals("") && !s.equals("2")){
-                    //icbcPayUtil.answer(response);//回调应答
+            /**
+             * 指示服务是否成功或付费的总体请求代码。。
+             * 177-部分付费请求
+             * 178-表明请求已全额支付
+             * 179-表示请求已部分支付但已过期。
+             * 129-请求已过期,未付款。
+             * 180.商户拒绝请求
+             * 183-商户接受请求,我们可以结算资金
+             * 188-商户收到请求。
+             */
+            String request_status_code = callbackRequest.getRequest_status_code();
+            String out_trade_no = callbackRequest.getMerchant_transaction_id();
+            if("177".equals(request_status_code) || "178".equals(request_status_code)){
+                Payments payments = callbackRequest.getPayments().get(0);
+                String order_id = payments.getPayer_transaction_id();
+                if(ToolUtil.isNotEmpty(out_trade_no)){
+                    Integer orderType = Integer.valueOf(out_trade_no.substring(17, 18));
+                    Integer language = Integer.valueOf(out_trade_no.substring(18, 19));
+                    Integer id = Integer.valueOf(out_trade_no.substring(19));
+                    orderLogisticsService.payOrderLogisticsSpreadCallback(id, order_id, language);
+                    callbackResponse.setCheckout_request_id(order_id);
+                    callbackResponse.setMerchant_transaction_id(out_trade_no);
+                    callbackResponse.setStatus_code("183");
+                    callbackResponse.setStatus_description("Payment processed successfully");
+                    callbackResponse.setReceipt_number(UUIDUtil.getRandomCode(16));
                 }
-                if(ToolUtil.isNotEmpty(out_trade_no) && ToolUtil.isNotEmpty(order_id) && s.equals("0")){
-                    String[] split = out_trade_no.split(",");
-                    Integer id = Integer.valueOf(split[0]);
-                    Integer type = Integer.valueOf(split[1]);
-                    orderLogisticsService.payOrderLogisticsSpreadCallback(id, order_id, 1);
-                }
+            }else{
+                callbackResponse.setCheckout_request_id(UUIDUtil.getRandomCode(16));
+                callbackResponse.setMerchant_transaction_id(out_trade_no);
+                callbackResponse.setStatus_code("180");
+                callbackResponse.setStatus_description("means payment rejected.");
+                callbackResponse.setReceipt_number(UUIDUtil.getRandomCode(16));
             }
         }catch (Exception e){
             e.printStackTrace();
         }
+        return callbackResponse;
     }
 
 
@@ -1454,22 +1475,22 @@
     @PostMapping("/base/aliPayOrderLogisticsSpread")
     public void aliPayOrderLogisticsSpread(HttpServletRequest request, HttpServletResponse response){
         try {
-            Map<String, String> map = payMoneyUtil.alipayCallback(request);//icbcPayUtil.payCallback(request);
-            if(null != map){
-                String out_trade_no = map.get("out_trade_no");
-                String order_id = map.get("trade_no");
-                String s = null;//icbcPayUtil.queryTransaction("", order_id);
-                if(!s.equals("") && !s.equals("2")){
-                    //icbcPayUtil.answer(response);//回调应答
-                }
-                if(ToolUtil.isNotEmpty(out_trade_no) && ToolUtil.isNotEmpty(order_id) && s.equals("0")){
-                    String[] split = out_trade_no.split(",");
-                    Integer id = Integer.valueOf(split[0]);
-                    Integer type = Integer.valueOf(split[1]);
-                    orderLogisticsService.payOrderLogisticsSpreadCallback(id, order_id, 2);
-                }
-
-            }
+//            Map<String, String> map = payMoneyUtil.alipayCallback(request);//icbcPayUtil.payCallback(request);
+//            if(null != map){
+//                String out_trade_no = map.get("out_trade_no");
+//                String order_id = map.get("trade_no");
+//                String s = null;//icbcPayUtil.queryTransaction("", order_id);
+//                if(!s.equals("") && !s.equals("2")){
+//                    //icbcPayUtil.answer(response);//回调应答
+//                }
+//                if(ToolUtil.isNotEmpty(out_trade_no) && ToolUtil.isNotEmpty(order_id) && s.equals("0")){
+//                    String[] split = out_trade_no.split(",");
+//                    Integer id = Integer.valueOf(split[0]);
+//                    Integer type = Integer.valueOf(split[1]);
+//                    orderLogisticsService.payOrderLogisticsSpreadCallback(id, order_id, 2);
+//                }
+//
+//            }
         }catch (Exception e){
             e.printStackTrace();
         }
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 982f9c8..4e29146 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
@@ -61,7 +61,7 @@
                 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);
+                    userInfoService.payCancelUserBalance(null, order_id, Integer.valueOf(id), language);
                     callbackResponse.setCheckout_request_id(order_id);
                     callbackResponse.setMerchant_transaction_id(out_trade_no);
                     callbackResponse.setStatus_code("183");
@@ -90,16 +90,16 @@
     @PostMapping("/aliCancelUserBalance")
     public void aliCancelUserBalance(HttpServletRequest request, HttpServletResponse response){
         try {
-            Map<String, String> map = payMoneyUtil.alipayCallback(request);
-            String id = map.get("out_trade_no");
-            String order_id = map.get("out_trade_no");
-            String[] s = order_id.split("_");
-            Integer language = Integer.valueOf(s[1]);
-            userInfoService.payCancelUserBalance(null, s[0], Integer.valueOf(id), 2, language);
-            response.setContentType("text/html;charset=UTF-8");
-            PrintWriter out;
-            out = response.getWriter();
-            out.println("success"); // 请不要修改或删除
+//            Map<String, String> map = payMoneyUtil.alipayCallback(request);
+//            String id = map.get("out_trade_no");
+//            String order_id = map.get("out_trade_no");
+//            String[] s = order_id.split("_");
+//            Integer language = Integer.valueOf(s[1]);
+//            userInfoService.payCancelUserBalance(null, s[0], Integer.valueOf(id), 2, language);
+//            response.setContentType("text/html;charset=UTF-8");
+//            PrintWriter out;
+//            out = response.getWriter();
+//            out.println("success"); // 请不要修改或删除
         }catch (Exception e){
             e.printStackTrace();
         }
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java
index 0e672e2..0fa2132 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java
@@ -1,21 +1,17 @@
 package com.stylefeng.guns.modular.api;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.google.code.kaptcha.Constants;
 import com.stylefeng.guns.core.common.constant.JwtConstants;
 import com.stylefeng.guns.core.common.exception.InvalidKaptchaException;
 import com.stylefeng.guns.core.support.HttpKit;
 import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.model.BankCard;
 import com.stylefeng.guns.modular.system.model.UserInfo;
-import com.stylefeng.guns.modular.system.service.IReportLossService;
-import com.stylefeng.guns.modular.system.service.ISmsrecordService;
-import com.stylefeng.guns.modular.system.service.IUserInfoService;
-import com.stylefeng.guns.modular.system.service.IVerifiedService;
+import com.stylefeng.guns.modular.system.service.*;
 import com.stylefeng.guns.modular.system.util.*;
-import com.stylefeng.guns.modular.system.warpper.LoginWarpper;
-import com.stylefeng.guns.modular.system.warpper.UserInfoWarpper;
-import com.stylefeng.guns.modular.system.warpper.UserInviteInfoWarpper;
-import com.stylefeng.guns.modular.system.warpper.VerifiedWarpper;
+import com.stylefeng.guns.modular.system.warpper.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -55,6 +51,9 @@
 
     @Autowired
     private IReportLossService reportLossService;
+
+    @Autowired
+    private IBankCardService bankCardService;
 
     @Value("${spring.mail.template-path}")
     private String templatePath;
@@ -788,25 +787,25 @@
      */
     @ResponseBody
     @PostMapping("/api/user/updateInfo")
-    @ApiOperation(value = "修改个人信息", tags = {"用户端-个人中心"}, notes = "")
+    @ApiOperation(value = "修改个人信息【1.1】", tags = {"用户端-个人中心"}, notes = "")
     @ApiImplicitParams({
             @ApiImplicitParam(value = "头像", name = "avatar", required = false, dataType = "string"),
             @ApiImplicitParam(value = "昵称", name = "nickname", required = false, dataType = "string"),
             @ApiImplicitParam(value = "性别(1=男,2=女)", name = "sex", required = false, dataType = "int"),
             @ApiImplicitParam(value = "生日(2020-06-15)", name = "birthday", required = false, dataType = "string"),
             @ApiImplicitParam(value = "邮箱", name = "email", required = false, dataType = "string"),
+            @ApiImplicitParam(value = "邮箱验证码", name = "code", required = false, dataType = "string"),
             @ApiImplicitParam(value = "姓氏", name = "lastName", required = false, dataType = "string"),
             @ApiImplicitParam(value = "名字", name = "firstName", required = false, dataType = "string"),
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResultUtil updateInfo(String avatar, String nickname, Integer sex, Date birthday, String email, String lastName, String firstName, HttpServletRequest request){
+    public ResultUtil updateInfo(String avatar, String nickname, Integer sex, Date birthday, String email, String code, String lastName, String firstName, Integer language, HttpServletRequest request){
         try {
             Integer uid = userInfoService.getUserIdFormRedis(request);
             if(null == uid){
                 return ResultUtil.tokenErr();
             }
-            userInfoService.updateInfo(avatar, nickname, sex, birthday, email, lastName, firstName, uid);
-            return ResultUtil.success();
+            return userInfoService.updateInfo(avatar, nickname, sex, birthday, email, code, lastName, firstName, uid, language);
         }catch (Exception e){
             e.printStackTrace();
             return ResultUtil.runErr();
@@ -988,4 +987,91 @@
             return ResultUtil.runErr();
         }
     }
+
+
+    @ResponseBody
+    @PostMapping("/api/user/queryBankCardList")
+    @ApiOperation(value = "获取银行卡列表【1.1】", tags = {"用户端-个人中心"}, notes = "")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResultUtil<List<BankCardWarpper>> queryBankCardList(HttpServletRequest request){
+        try {
+            Integer uid = userInfoService.getUserIdFormRedis(request);
+            if(null == uid){
+                return ResultUtil.tokenErr();
+            }
+            List<BankCard> bankCards = bankCardService.selectList(new EntityWrapper<BankCard>().eq("userType", 1).eq("userId", uid));
+            List<BankCardWarpper> list = new ArrayList<>();
+            for (BankCard bankCard : bankCards) {
+                BankCardWarpper bankCardWarpper = new BankCardWarpper();
+                bankCardWarpper.setId(bankCard.getId());
+                bankCardWarpper.setBankName(bankCard.getBank());
+                bankCardWarpper.setCode(bankCard.getCode());
+                list.add(bankCardWarpper);
+            }
+            return ResultUtil.success(list);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResultUtil.runErr();
+        }
+    }
+
+
+
+    @ResponseBody
+    @PostMapping("/api/user/addBankCard")
+    @ApiOperation(value = "添加银行卡【1.1】", tags = {"用户端-个人中心"}, notes = "")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "银行", name = "bank", required = true, dataType = "string"),
+            @ApiImplicitParam(value = "姓", name = "lastName", required = true, dataType = "string"),
+            @ApiImplicitParam(value = "名", name = "firstName", required = true, dataType = "string"),
+            @ApiImplicitParam(value = "卡号", name = "code", required = true, dataType = "string"),
+            @ApiImplicitParam(value = "1=中文,2=英文,3=法语", name = "language", required = true, dataType = "int"),
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResultUtil addBankCard(String bank, String lastName, String firstName, String code, Integer language, HttpServletRequest request) {
+        try {
+            Integer uid = userInfoService.getUserIdFormRedis(request);
+            if(null == uid){
+                return ResultUtil.tokenErr();
+            }
+            BankCard bankCard = bankCardService.selectOne(new EntityWrapper<BankCard>().eq("code", code));
+            if(null != bankCard){
+                return ResultUtil.error(language == 1 ? "银行卡重复" : language == 2 ? "Duplicate bank card" : "Double carte bancaire");
+            }
+            bankCard = new BankCard();
+            bankCard.setUserId(uid);
+            bankCard.setUserType(1);
+            bankCard.setCode(code);
+            bankCard.setBank(bank);
+            bankCard.setFirstName(firstName);
+            bankCard.setLastName(lastName);
+            bankCard.setInsertTime(new Date());
+            bankCardService.insert(bankCard);
+            return ResultUtil.success();
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResultUtil.runErr();
+        }
+    }
+
+
+
+    @ResponseBody
+    @PostMapping("/api/user/addBankCard")
+    @ApiOperation(value = "删除银行卡【1.1】", tags = {"用户端-个人中心"}, notes = "")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "银行卡id", name = "id", required = true, dataType = "int"),
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResultUtil delBankCard(Integer id){
+        try {
+            bankCardService.deleteById(id);
+            return ResultUtil.success();
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResultUtil.runErr();
+        }
+    }
 }
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/WithdrawalController.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/WithdrawalController.java
index ff3e0c4..89b4c8f 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/WithdrawalController.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/WithdrawalController.java
@@ -37,28 +37,24 @@
     /**
      * 账户余额提现操作
      * @param money
-     * @param code
-     * @param name
      * @param request
      * @return
      */
     @ResponseBody
     @PostMapping("/api/withdrawal/withdrawal")
-    @ApiOperation(value = "账户余额提现", tags = {"用户端-个人中心"}, notes = "")
+    @ApiOperation(value = "账户余额提现【1.1】", tags = {"用户端-个人中心"}, notes = "")
     @ApiImplicitParams({
             @ApiImplicitParam(value = "提现金额", name = "money", required = true, dataType = "double"),
-            @ApiImplicitParam(value = "银行卡号", name = "code", required = true, dataType = "string"),
-            @ApiImplicitParam(value = "银行卡只有人姓名", name = "name", required = true, dataType = "string"),
             @ApiImplicitParam(value = "语言类型(1=简体中文,2=英语,3=法语)", name = "language", required = false, dataType = "int"),
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResultUtil withdrawal(Double money, String code, String name, Integer language, HttpServletRequest request){
+    public ResultUtil withdrawal(Double money, Integer language, HttpServletRequest request){
         try {
             Integer uid = userInfoService.getUserIdFormRedis(request);
             if(null == uid){
                 return ResultUtil.tokenErr();
             }
-            return withdrawalService.withdrawal(money, code, name, uid, language);
+            return withdrawalService.withdrawal(money, uid, language);
         }catch (Exception e){
             e.printStackTrace();
             return ResultUtil.runErr();
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/controller/OrderLogisticsController.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/controller/OrderLogisticsController.java
index d626b7c..3283856 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/controller/OrderLogisticsController.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/controller/OrderLogisticsController.java
@@ -185,20 +185,21 @@
 
     @ResponseBody
     @PostMapping("/api/orderLogistics/payOrderLogisticsSpread")
-    @ApiOperation(value = "小件物流补差价支付", tags = {"用户端-小件物流"}, notes = "")
+    @ApiOperation(value = "小件物流补差价支付【1.1】", tags = {"用户端-小件物流"}, notes = "")
     @ApiImplicitParams({
-            @ApiImplicitParam(value = "支付方式(1=线上支付,3=余额,4=现金)", name = "payType", required = true, dataType = "int"),
+            @ApiImplicitParam(value = "支付方式(1=手机支付,2=银行卡支付,3=余额,4=现金)", name = "payType", required = true, dataType = "int"),
+            @ApiImplicitParam(value = "银行卡id", name = "bankCardId", required = false, dataType = "int"),
             @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"),
             @ApiImplicitParam(value = "支付端(1=用户APP端,2=司机APP端,3=用户小程序端)", name = "type", required = true, dataType = "int"),
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResultUtil payOrderLogisticsSpread(Integer orderId, Integer payType, Integer type, Integer language, HttpServletRequest request){
+    public ResultUtil payOrderLogisticsSpread(Integer orderId, Integer payType, Integer bankCardId, Integer type, Integer language, HttpServletRequest request){
         try {
             Integer uid = userInfoService.getUserIdFormRedis(request);
             if(null == uid) {
                 return ResultUtil.tokenErr();
             }
-            return orderLogisticsService.payLogisticsOrder_(payType, "user_" + uid, orderId, type, language);
+            return orderLogisticsService.payLogisticsOrder_(payType, bankCardId, orderId, type, language);
         }catch (Exception e){
             e.printStackTrace();
             return ResultUtil.runErr();
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/IOrderLogisticsService.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/IOrderLogisticsService.java
index deaace9..aea536b 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/IOrderLogisticsService.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/IOrderLogisticsService.java
@@ -87,7 +87,7 @@
      * @return
      * @throws Exception
      */
-    ResultUtil payLogisticsOrder_(Integer payType, String accountNumber, Integer orderId, Integer type, Integer language)throws Exception;
+    ResultUtil payLogisticsOrder_(Integer payType, Integer bankCardId, Integer orderId, Integer type, Integer language)throws Exception;
 
 
 
@@ -95,10 +95,9 @@
      * 支付完成后的订单处理
      * @param id            订单=id
      * @param order_id      工行支付单号
-     * @param type          1=微信,2=支付宝
      * @throws Exception
      */
-    void payOrderLogisticsCallback(Integer id, String order_id, Integer type, Integer language) throws Exception;
+    void payOrderLogisticsCallback(Integer id, String order_id, Integer language) throws Exception;
 
 
 
@@ -106,10 +105,9 @@
      * 差价支付完成后的回调处理
      * @param id            订单=id
      * @param order_id      工行支付单号
-     * @param type          1=微信,2=支付宝
      * @throws Exception
      */
-    void payOrderLogisticsSpreadCallback(Integer id, String order_id, Integer type) throws Exception;
+    void payOrderLogisticsSpreadCallback(Integer id, String order_id, Integer language) throws Exception;
 
 
 
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 7178fb7..deffbbc 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
@@ -495,7 +495,13 @@
             checkoutRequest.setPendingRedirectUrl("");
             checkoutRequest.setSuccessRedirectUrl("https://10pz685243.zicp.fun");
             checkoutRequest.setFailRedirectUrl("https://www.baidu.com");
-            return TinggPayUtil.checkoutRequest(checkoutRequest);
+            resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest);
+            if(resultUtil.getCode()==200){
+                paymentRecordService.saveData(1, null, null, orderId, 4, 1, orderMoney, null, 1);//添加预支付数据
+            }else{
+                resultUtil = ResultUtil.error("支付失败");
+            }
+            return resultUtil;
         }
 
         if(payType == 2) {//银行卡支付
@@ -515,7 +521,14 @@
             checkoutRequest.setPendingRedirectUrl("");
             checkoutRequest.setSuccessRedirectUrl("https://10pz685243.zicp.fun");
             checkoutRequest.setFailRedirectUrl("https://www.baidu.com");
-            return TinggPayUtil.checkoutRequest(checkoutRequest);
+            resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest);
+
+            if(resultUtil.getCode()==200){
+                paymentRecordService.saveData(1, null, null, orderId, 4, 2, orderMoney, null, 1);//添加预支付数据
+            }else{
+                resultUtil = ResultUtil.error("支付失败");
+            }
+            return resultUtil;
         }
 
         if(payType == 3){//余额支付
@@ -614,9 +627,9 @@
                     pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0);
                 }
             }).start();
-            systemNoticeService.addSystemNotice(1, language == 1 ? "您已使用余额成功完成小件物流订单支付,谢谢使用!" : language == 2
-                    ? "You have successfully used the balance to complete the small logistics order payment, thank you for using!"
-                    : "Vous avez utilisé le solde pour compléter avec succès le paiement de la commande logistique de petites pièces. Merci d’utiliser!", uid, 1);
+            systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功完成小件物流订单支付,谢谢使用!" : language == 2
+                    ? "You have successfully completed the small parts logistics order payment, thank you for using!" :
+                    "Vous avez complété avec succès le paiement de la commande small pieces logistics. Merci d’utiliser!", uid, 1);
             this.pushOrder(orderLogistics);//推单
         }
 
@@ -712,9 +725,9 @@
                 }
             }).start();
 
-            systemNoticeService.addSystemNotice(1, language == 1 ? "您已使用现金成功完成小件物流订单支付,谢谢使用!" : language == 2
-                    ? "You have successfully completed the payment of small logistics order with cash, thank you for using!" :
-                    "Vous avez utilisé de l’argent pour compléter avec succès le paiement de la commande small pieces logistics. Merci d’utiliser!", uid, 1);
+            systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功完成小件物流订单支付,谢谢使用!" : language == 2
+                    ? "You have successfully completed the small parts logistics order payment, thank you for using!" :
+                    "Vous avez complété avec succès le paiement de la commande small pieces logistics. Merci d’utiliser!", uid, 1);
 
             this.pushOrder(orderLogistics);//推单
         }
@@ -735,33 +748,51 @@
      * @throws Exception
      */
     @Override
-    public ResultUtil payLogisticsOrder_(Integer payType, String accountNumber, Integer orderId, Integer type, Integer language) throws Exception {
+    public ResultUtil payLogisticsOrder_(Integer payType, Integer bankCardId, Integer orderId, Integer type, Integer language) throws Exception {
         OrderLogistics orderLogistics = this.selectById(orderId);
         Integer uid = orderLogistics.getUserId();
         OrderLogisticsSpread orderLogisticsSpread = orderLogisticsSpreadService.selectOne(new EntityWrapper<OrderLogisticsSpread>().eq("orderLogisticsId", orderId));
         Double orderMoney = orderLogisticsSpread.getPrice();
         UserInfo userInfo = userInfoService.selectById(uid);
         ResultUtil resultUtil = ResultUtil.success("");
-        if(payType == 1){//线上支付
+        if(payType == 1){//手机支付
             SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
             String merchantTransactionId = sdf.format(new Date()) + "4" + language + orderId;
             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);
             checkoutRequest.setMerchantTransactionId(merchantTransactionId);
             checkoutRequest.setRequestDescription("Travel completion payment");
-            checkoutRequest.setCallbackUrl(callbackPath + "/base/wxPayOrderTaxi");
+            checkoutRequest.setCallbackUrl(callbackPath + "/base/wxPayOrderLogisticsSpread");
             checkoutRequest.setPendingRedirectUrl("");
             checkoutRequest.setSuccessRedirectUrl("https://10pz685243.zicp.fun");
             checkoutRequest.setFailRedirectUrl("https://www.baidu.com");
             return TinggPayUtil.checkoutRequest(checkoutRequest);
-
-
         }
+        if(payType == 2){//银行卡支付
+            BankCard bankCard = bankCardService.selectById(bankCardId);
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+            String merchantTransactionId = sdf.format(new Date()) + "4" + language + orderId;
+            CheckoutRequest checkoutRequest = new CheckoutRequest();
+            checkoutRequest.setMsisdn(Long.valueOf(bankCard.getCode()));
+            checkoutRequest.setCustomerEmail(userInfo.getEmail());
+            checkoutRequest.setAccountNumber(bankCard.getCode());
+            checkoutRequest.setCustomerFirstName(bankCard.getFirstName());
+            checkoutRequest.setCustomerLastName(bankCard.getLastName());
+            checkoutRequest.setRequestAmount(orderMoney);
+            checkoutRequest.setMerchantTransactionId(merchantTransactionId);
+            checkoutRequest.setRequestDescription("Travel completion payment");
+            checkoutRequest.setCallbackUrl(callbackPath + "/base/wxPayOrderLogisticsSpread");
+            checkoutRequest.setPendingRedirectUrl("");
+            checkoutRequest.setSuccessRedirectUrl("https://10pz685243.zicp.fun");
+            checkoutRequest.setFailRedirectUrl("https://www.baidu.com");
+            return TinggPayUtil.checkoutRequest(checkoutRequest);
+        }
+
         if(payType == 3){//余额支付
             if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){
                 return ResultUtil.error(language == 1 ? "账户余额不足" : language == 2 ? "Insufficient account balance" : "Solde de compte insuffisant");
@@ -819,9 +850,9 @@
                 }
             }).start();
 
-            systemNoticeService.addSystemNotice(1, language == 1 ? "您已使用余额成功完成小件物流订单差价支付,谢谢使用!" : language == 2
-                    ? "You have successfully completed the price difference payment of small logistics order with the balance, thank you for using!"
-                    : "Vous avez utilisé le solde pour compléter avec succès le paiement de la différence de prix de la commande de petites pièces logistiques. Merci d’utiliser!", uid, 1);
+            systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功完成小件物流订单差价支付,谢谢使用!" : language == 2
+                    ? "You have successfully completed the price difference payment of small parts logistics order, thank you for using!"
+                    : "Vous avez complété avec succès le paiement de la différence de prix de la commande de petites pièces logistiques, merci d’utiliser!", uid, 1);
         }
 
         if(payType == 4){//现金支付
@@ -876,9 +907,9 @@
                 }
             }).start();
 
-            systemNoticeService.addSystemNotice(1, language == 1 ? "您已使用现金成功完成小件物流订单差价支付,谢谢使用!" : language == 2
-                    ? "You have successfully completed the price difference payment of small logistics order with cash, thank you for using!"
-                    : "Vous avez utilisé de l’argent pour compléter avec succès le paiement de la différence de prix de la commande de petites pièces logistiques. Merci d’utiliser!", uid, 1);
+            systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功完成小件物流订单差价支付,谢谢使用!" : language == 2
+                    ? "You have successfully completed the price difference payment of small parts logistics order, thank you for using!"
+                    : "Vous avez complété avec succès le paiement de la différence de prix de la commande de petites pièces logistiques, merci d’utiliser!", uid, 1);
         }
 
 
@@ -889,14 +920,14 @@
 
 
     @Override
-    public void payOrderLogisticsCallback(Integer id, String order_id, Integer type, Integer language) throws Exception {
+    public void payOrderLogisticsCallback(Integer id, String order_id, Integer language) throws Exception {
         OrderLogistics orderLogistics = this.selectById(id);
-        PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), orderLogistics.getType(), type, 1);
+        PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), orderLogistics.getType(), null, 1);
         if(null != query){
             //添加交易明细
             transactionDetailsService.saveData(orderLogistics.getUserId(), "完成订单", query.getAmount(), 2, 1, 1, orderLogistics.getType(), query.getOrderId());
             orderLogistics.setState(1);//先支付后抢单
-            orderLogistics.setPayType(type);
+            orderLogistics.setPayType(query.getPayType());
             orderLogistics.setPayMoney(query.getAmount());
             this.updateById(orderLogistics);
 
@@ -989,7 +1020,9 @@
             }).start();
 
 
-            systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : "支付宝") + "成功完成小件物流订单支付,谢谢使用!", orderLogistics.getUserId(), 1);
+            systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功完成小件物流订单支付,谢谢使用!" : language == 2
+                    ? "You have successfully completed the small parts logistics order payment, thank you for using!" :
+                    "Vous avez complété avec succès le paiement de la commande small pieces logistics. Merci d’utiliser!", orderLogistics.getUserId(), 1);
 
             this.pushOrder(orderLogistics);//推单
         }else{
@@ -1000,29 +1033,32 @@
 
 
     @Override
-    public void payOrderLogisticsSpreadCallback(Integer id, String order_id, Integer type) throws Exception {
+    public void payOrderLogisticsSpreadCallback(Integer id, String order_id, Integer language) throws Exception {
         OrderLogistics orderLogistics = this.selectById(id);
         OrderLogisticsSpread orderLogisticsSpread = orderLogisticsSpreadService.selectOne(new EntityWrapper<OrderLogisticsSpread>().eq("orderLogisticsId", id));
-        PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), orderLogistics.getType(), type, 1);
+        PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), orderLogistics.getType(), null, 1);
         if(null != query){
-            //添加交易明细
-            transactionDetailsService.saveData(orderLogistics.getUserId(), "小件物流补差价", query.getAmount(), 2, 1, 1, 4, query.getOrderId());
-            orderLogistics.setState(4);//待取货
-            this.updateById(orderLogistics);
+            Double orderMoney = query.getAmount();
+            query.setState(2);
+            query.setCode(order_id);
+            paymentRecordService.updateById(query);
 
             orderLogisticsSpread.setPayMoney(query.getAmount());
             orderLogisticsSpread.setPayTime(new Date());
-            orderLogisticsSpread.setPayType(3);
+            orderLogisticsSpread.setPayType(query.getPayType());
+            orderLogisticsSpread.setDriverPay(1);
             orderLogisticsSpreadService.updateById(orderLogisticsSpread);
 
             UserInfo userInfo = userInfoService.selectById(orderLogistics.getUserId());
             SysIntegral query1 = sysIntegralMapper.query(orderLogistics.getCompanyId());
-            userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分
+            userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
+
+            //添加交易明细
+            transactionDetailsService.saveData(orderLogistics.getUserId(), "小件物流补差价", orderMoney, 2, 1, 1, 4, id);
             userInfoService.updateById(userInfo);
 
-            query.setState(2);
-            query.setCode(order_id);
-            paymentRecordService.updateById(query);
+            orderLogistics.setState(12);//已支付差价
+            this.updateById(orderLogistics);
 
             //添加已收入明细
             Company company = companyService.selectById(orderLogistics.getCompanyId());
@@ -1031,12 +1067,13 @@
             BigDecimal c = null;
             if(company.getIsSpeFixedOrProportional() == 2){//固定
                 d = new BigDecimal(speMoney);
-                c = new BigDecimal(query.getAmount()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                c = new BigDecimal(orderMoney).subtract(d);
             }
             if(company.getIsSpeFixedOrProportional() == 1){//比例
-                d = new BigDecimal(query.getAmount()).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN)));
-                c = new BigDecimal(query.getAmount()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                d = new BigDecimal(orderMoney).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN)));
+                c = new BigDecimal(orderMoney).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
             }
+
             Income income = incomeService.selectOne(new EntityWrapper<Income>().eq("userType", 1).eq("objectId", orderLogistics.getCompanyId()).eq("type", 2).eq("incomeId", orderLogistics.getId()).eq("orderType", orderLogistics.getType()));
             income.setMoney(income.getMoney() + d.doubleValue());
             incomeService.updateById(income);
@@ -1058,8 +1095,9 @@
                 }
             }).start();
 
-
-            systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : "支付宝") + "成功完成小件物流订单差价支付,谢谢使用!", orderLogistics.getUserId(), 1);
+            systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功完成小件物流订单差价支付,谢谢使用!" : language == 2
+                    ? "You have successfully completed the price difference payment of small parts logistics order, thank you for using!"
+                    : "Vous avez complété avec succès le paiement de la différence de prix de la commande de petites pièces logistiques, merci d’utiliser!", orderLogistics.getUserId(), 1);
         }else{
             System.err.println("预支付数据异常(orderId = "  + id + ")");
         }
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java
index 45940cd..b2dd8d6 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java
@@ -155,7 +155,7 @@
     @TableField("payManner")
     private Integer payManner;
     /**
-     * 支付方式(1=微信,2=支付宝,3=余额)
+     * 支付方式(1=手机支付,2=银行卡支付,3=余额,4=现金支付)
      */
     @TableField("payType")
     private Integer payType;
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java
index 2fdb9ce..08b2ee3 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java
@@ -75,7 +75,7 @@
      * @return
      * @throws Exception
      */
-    ResultUtil cancleOrderPrivateCar(Integer id, Integer payType, String accountNumber, Integer cancleId, Integer type, Integer language) throws Exception;
+    ResultUtil cancleOrderPrivateCar(Integer id, Integer payType, Integer bankCardId, Integer cancleId, Integer type, Integer language) throws Exception;
 
 
     String getOrderNum() throws Exception;
@@ -148,10 +148,9 @@
      * 取消订单支付后的处理
      * @param id            订单=id
      * @param order_id      工行支付单号
-     * @param type          1=微信,2=支付宝
      * @throws Exception
      */
-    void payCancelOrderPrivateCar(Integer id, String order_id, Integer type) throws Exception;
+    void payCancelOrderPrivateCar(Integer id, String order_id, Integer language) throws Exception;
 
 
 
@@ -159,10 +158,9 @@
      * 支付完成后的订单处理
      * @param id            订单=id
      * @param order_id      工行支付单号
-     * @param type          1=微信,2=支付宝
      * @throws Exception
      */
-    void payOrderPrivateCarCallback(Integer id, String order_id, Integer type, Integer language) throws Exception;
+    void payOrderPrivateCarCallback(Integer id, String order_id, Integer language) throws Exception;
 
 
 
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index 5abfdda..ebfbd21 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -598,7 +598,7 @@
      * @throws Exception
      */
     @Override
-    public ResultUtil cancleOrderPrivateCar(Integer id, Integer payType, String accountNumber, Integer cancleId, Integer type, Integer language) throws Exception {
+    public ResultUtil cancleOrderPrivateCar(Integer id, Integer payType, Integer bankCardId, Integer cancleId, Integer type, Integer language) throws Exception {
         OrderPrivateCar orderPrivateCar = this.selectById(id);
         Integer uid = orderPrivateCar.getUserId();
         UserInfo userInfo = userInfoService.selectById(uid);
@@ -619,15 +619,15 @@
 
         CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId());
         if(null != query){
-            if(payType == 1){//线上支付
+            if(payType == 1){//手机支付
                 orderCancel.setPayType(1);
                 orderCancelService.updateById(orderCancel);
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
-                String merchantTransactionId = sdf.format(new Date()) + "1" + id;
+                String merchantTransactionId = sdf.format(new Date()) + "1" + language + id;
                 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(query.getMoney());
@@ -640,6 +640,31 @@
                 resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest);
                 if(resultUtil.getCode()==200){
                     paymentRecordService.saveData(1, null, null, id, 1, 1, query.getMoney(), null, 1);//添加预支付数据
+                }
+
+            }
+            if(payType == 2){//银行卡支付
+                orderCancel.setPayType(2);
+                orderCancelService.updateById(orderCancel);
+                BankCard bankCard = bankCardService.selectById(bankCardId);
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+                String merchantTransactionId = sdf.format(new Date()) + "1" + id;
+                CheckoutRequest checkoutRequest = new CheckoutRequest();
+                checkoutRequest.setMsisdn(Long.valueOf(bankCard.getCode()));
+                checkoutRequest.setCustomerEmail(userInfo.getEmail());
+                checkoutRequest.setAccountNumber(bankCard.getCode());
+                checkoutRequest.setCustomerFirstName(bankCard.getFirstName());
+                checkoutRequest.setCustomerLastName(bankCard.getLastName());
+                checkoutRequest.setRequestAmount(query.getMoney());
+                checkoutRequest.setMerchantTransactionId(merchantTransactionId);
+                checkoutRequest.setRequestDescription("Cancel a trip");
+                checkoutRequest.setCallbackUrl(callbackPath + "/base/wxCancelOrderTaxi");
+                checkoutRequest.setPendingRedirectUrl("");
+                checkoutRequest.setSuccessRedirectUrl("https://10pz685243.zicp.fun");
+                checkoutRequest.setFailRedirectUrl("https://www.baidu.com");
+                resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest);
+                if(resultUtil.getCode()==200){
+                    paymentRecordService.saveData(1, null, null, id, 1, 2, query.getMoney(), null, 1);//添加预支付数据
                 }
 
             }
@@ -684,8 +709,8 @@
 
                 //添加消息
                 systemNoticeService.addSystemNotice(1, language == 1 ? "您已使用余额成功支付取消订单费用,谢谢使用!" : language == 2
-                        ? "You have successfully paid the cancellation fee with the balance, thank you for using!"
-                        : "Vous avez utilisé le solde pour payer avec succès les frais d’annulation de commande. Merci d’utiliser!", orderPrivateCar.getUserId(), 1);
+                        ? "You have successfully paid the cancellation fee, thank you for using!"
+                        : "Vous avez payé avec succès les frais d’annulation de commande, merci d’utiliser!", orderPrivateCar.getUserId(), 1);
             }
         }
         return resultUtil;
@@ -911,7 +936,7 @@
             resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest);
 
             if(resultUtil.getCode()==200){
-                paymentRecordService.saveData(1, null, null, orderId, 1, 1, orderMoney, null, 1);//添加预支付数据
+                paymentRecordService.saveData(1, null, null, orderId, 1, 2, orderMoney, null, 1);//添加预支付数据
             }else{
                 resultUtil = ResultUtil.error("支付失败");
             }
@@ -1087,9 +1112,9 @@
                 }
             }).start();
 
-            systemNoticeService.addSystemNotice(1, language == 1 ? "您已使用余额成功完成出行订单支付,谢谢使用!" : language == 2
-                    ? "You have successfully completed the payment of travel order with the balance, thank you for using!"
-                    : "Vous avez utilisé le solde pour compléter le paiement de la commande de voyage avec succès. Merci d’utiliser!", uid, 1);
+            systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功完成出行订单支付,谢谢使用!" : language == 2
+                    ? "You have successfully completed the travel order payment, thank you for using!"
+                    : "Vous avez complété avec succès le paiement de votre commande de voyage. Merci d’utiliser!", orderPrivateCar.getUserId(), 1);
         }
 
 
@@ -1260,9 +1285,9 @@
                 }
             }).start();
 
-            systemNoticeService.addSystemNotice(1, language == 1 ? "您已使用现金成功完成出行订单支付,谢谢使用!" : language == 2
-                    ? "You have successfully completed the payment of travel order with cash, thank you for using!"
-                    : "Vous avez utilisé de l’argent pour compléter avec succès le paiement de votre commande de voyage. Merci d’utiliser!", uid, 1);
+            systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功完成出行订单支付,谢谢使用!" : language == 2
+                    ? "You have successfully completed the travel order payment, thank you for using!"
+                    : "Vous avez complété avec succès le paiement de votre commande de voyage. Merci d’utiliser!", orderPrivateCar.getUserId(), 1);
         }
 
         this.updateAllColumnById(orderPrivateCar);
@@ -1386,13 +1411,12 @@
      * 取消订单支付后的处理
      * @param id            订单=id
      * @param order_id      工行支付单号
-     * @param type          1=微信,2=支付宝
      * @throws Exception
      */
     @Override
-    public void payCancelOrderPrivateCar(Integer id, String order_id, Integer type) throws Exception {
+    public void payCancelOrderPrivateCar(Integer id, String order_id, Integer language) throws Exception {
         OrderPrivateCar orderPrivateCar = this.selectById(id);
-        PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), 1, type, 1);
+        PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), 1, null, 1);
         if(null != query){
             //添加交易明细
             transactionDetailsService.saveData(orderPrivateCar.getUserId(), "取消订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId());
@@ -1438,21 +1462,23 @@
 //            }).start();
 
             //添加消息
-            systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : "支付宝") + "成功支付取消订单费用,谢谢使用!", orderPrivateCar.getUserId(), 1);
+            systemNoticeService.addSystemNotice(1, language == 1 ? "您已使用余额成功支付取消订单费用,谢谢使用!" : language == 2
+                    ? "You have successfully paid the cancellation fee, thank you for using!"
+                    : "Vous avez payé avec succès les frais d’annulation de commande, merci d’utiliser!", orderPrivateCar.getUserId(), 1);
         }else{
             System.err.println("预支付数据异常(orderId = "  + id + ")");
         }
     }
 
     @Override
-    public void payOrderPrivateCarCallback(Integer id, String order_id, Integer type, Integer language) throws Exception {
+    public void payOrderPrivateCarCallback(Integer id, String order_id, Integer language) throws Exception {
         OrderPrivateCar orderPrivateCar = this.selectById(id);
-        PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), 1, type, 1);
+        PaymentRecord query = paymentRecordService.query(1, null, null, id, 1, null, 1);
         if(null != query){
             //添加交易明细
             transactionDetailsService.saveData(orderPrivateCar.getUserId(), "完成订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId());
             orderPrivateCar.setState(8);
-            orderPrivateCar.setPayType(type);
+            orderPrivateCar.setPayType(query.getPayType());
             orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+orderPrivateCar.getFreeMoney().doubleValue());
             orderPrivateCar.setPayMoney(query.getAmount());
             this.updateById(orderPrivateCar);
@@ -1621,8 +1647,9 @@
                 }
             }).start();
 
-
-            systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : "支付宝") + "成功完成出行订单支付,谢谢使用!", orderPrivateCar.getUserId(), 1);
+            systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功完成出行订单支付,谢谢使用!" : language == 2
+                    ? "You have successfully completed the travel order payment, thank you for using!"
+                    : "Vous avez complété avec succès le paiement de votre commande de voyage. Merci d’utiliser!", orderPrivateCar.getUserId(), 1);
         }else{
             System.err.println("预支付数据异常(orderId = "  + id + ")");
         }
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml
index 69c8513..9775762 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml
@@ -27,6 +27,7 @@
         DATE_FORMAT(insertTime, '%Y.%m.%d') as insertTime,
         money as money,
         ('银行卡提现') as name,
+        code,
         remark as remark,
         state as state
         from t_pub_withdrawal where flag != 3 and userType = #{userType} and userId = #{uid} order by insertTime desc limit #{pageNum}, #{size}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java
index f32cec1..9ad8545 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java
@@ -205,7 +205,7 @@
      * @param uid
      * @throws Exception
      */
-    void updateInfo(String avatar, String nickname, Integer sex, Date birthday, String email, String lastName, String firstName, Integer uid) throws Exception;
+    ResultUtil updateInfo(String avatar, String nickname, Integer sex, Date birthday, String email, String code, String lastName, String firstName, Integer uid, Integer language) throws Exception;
 
     /**
      * 获取实名认证数据
@@ -221,10 +221,9 @@
      * @param id            用户id
      * @param order_id      工行订单id
      * @param paymentRecordId   预支付订单id
-     * @param type          支付类型(1=微信,2=支付宝)
      * @throws Exception
      */
-    void payCancelUserBalance(Integer id, String order_id, Integer paymentRecordId, Integer type, Integer language) throws Exception;
+    void payCancelUserBalance(Integer id, String order_id, Integer paymentRecordId, Integer language) throws Exception;
 
 
     /**
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java
index 510667b..7ab6804 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java
@@ -13,12 +13,10 @@
     /**
      * 提现操作
      * @param money
-     * @param code
-     * @param name
      * @param uid
      * @throws Exception
      */
-    ResultUtil withdrawal(Double money, String code, String name, Integer uid, Integer language) throws Exception;
+    ResultUtil withdrawal(Double money, Integer uid, Integer language) throws Exception;
 
 
     /**
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
index 03c065d..a29af8f 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
@@ -1230,7 +1230,7 @@
      * @throws Exception
      */
     @Override
-    public void updateInfo(String avatar, String nickname, Integer sex, Date birthday, String email, String lastName, String firstName, Integer uid) throws Exception {
+    public ResultUtil updateInfo(String avatar, String nickname, Integer sex, Date birthday, String email, String code, String lastName, String firstName, Integer uid, Integer language) throws Exception {
         UserInfo userInfo = this.selectById(uid);
         if(ToolUtil.isNotEmpty(avatar)){
             userInfo.setAvatar(avatar);
@@ -1245,6 +1245,10 @@
             userInfo.setBirthday(birthday);
         }
         if(null != email){
+            String value = redisUtil.getValue(email);
+            if(ToolUtil.isEmpty(value) || code.equals(value)){
+                return ResultUtil.error(language == 1 ? "验证码无效" : language == 2 ? "Invalid captcha" : "Code de vérification invalide");
+            }
             userInfo.setEmail(email);
         }
         if(null != lastName){
@@ -1254,6 +1258,7 @@
             userInfo.setFirstName(firstName);
         }
         this.updateById(userInfo);
+        return ResultUtil.success();
     }
 
 
@@ -1273,11 +1278,10 @@
      * 完成余额充值后的处理
      * @param id            用户id
      * @param order_id      工行订单id
-     * @param type          支付类型(1=微信,2=支付宝)
      * @throws Exception
      */
     @Override
-    public void payCancelUserBalance(Integer id, String order_id, Integer paymentRecordId, Integer type, Integer language) throws Exception {
+    public void payCancelUserBalance(Integer id, String order_id, Integer paymentRecordId, Integer language) throws Exception {
         PaymentRecord query = paymentRecordService.selectById(paymentRecordId);
         UserInfo userInfo = this.selectById(query.getUserId());
         if(null != query){
@@ -1294,7 +1298,7 @@
             this.addCoupon(userInfo.getId(), query.getAmount(), userInfo.getCompanyId(), query.getId(), language);//添加优惠券
 
         }else{
-            System.err.println("预支付数据异常(userId = "  + id + ")");
+            System.err.println("预支付数据异常(paymentRecordId = "  + paymentRecordId + ")");
         }
 
     }
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 1b6aab8..8a9ee40 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
@@ -44,13 +44,11 @@
     /**
      * 提现操作
      * @param money
-     * @param code
-     * @param name
      * @param uid
      * @throws Exception
      */
     @Override
-    public ResultUtil withdrawal(Double money, String code, String name, Integer uid, Integer language) throws Exception {
+    public ResultUtil withdrawal(Double money, Integer uid, Integer language) throws Exception {
         language = userInfoService.queryLanguage(uid, language);
         if(money.compareTo(0D) <= 0){
             return ResultUtil.error(language == 1 ? "提现金额必须大于0" : language == 2 ? "Withdrawal amount must be greater than 0" : "Le montant du retrait doit être supérieur à 0");
@@ -65,26 +63,14 @@
 
         Withdrawal withdrawal = new Withdrawal();
         withdrawal.setBalance(userInfo.getBalance());
-        withdrawal.setCode(code);
+        withdrawal.setCode(userInfo.getPhone());// TODO: 2023/7/5 第三方支支持手机号提现
         withdrawal.setFlag(1);
         withdrawal.setInsertTime(new Date());
         withdrawal.setMoney(money);
-        withdrawal.setName(name);
+        withdrawal.setName(userInfo.getPhoneOperator());
         withdrawal.setState(1);
         withdrawal.setUserId(uid);
         withdrawal.setUserType(1);
-
-        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();
@@ -105,10 +91,10 @@
     @Override
     public List<Map<String, Object>> queryWithdrawal(Integer uid, Integer pageNum, Integer size, Integer language) throws Exception {
         pageNum = (pageNum - 1) * size;
-        String name = language == 1 ? "银行卡提现" : language == 2 ? "Bank card withdrawal" : "Retrait par carte bancaire";
+        String name = language == 1 ? "手机号:" : language == 2 ? "Phone number:" : "Numéro de portable:";
         List<Map<String, Object>> list = withdrawalMapper.queryWithdrawal(uid, 1, pageNum, size);
         for (Map<String, Object> map : list) {
-            map.put("name", name);
+            map.put("name", name + map.get("code"));
         }
         return list;
     }
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
index 5a72d56..9266451 100644
--- 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
@@ -37,12 +37,12 @@
      * @param narration             备注
      * @return
      */
-    public PayoutResponse sendPayout(String phone, String payerTransactionID, Double amount, String callbackUrl, String narration) {
+    public PayoutResponse sendPayout(String serviceCode, 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.setServiceCode(serviceCode);//手机网络运营商 GH-MTN-B2C、GH-TIGO-B2C、GH-VODAFONE-B2C、GH-AIRTEL-B2C
         packet.setMSISDN(phone);
         packet.setAccountNumber(phone);
         packet.setPayerTransactionID(payerTransactionID);
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/BankCardWarpper.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/BankCardWarpper.java
new file mode 100644
index 0000000..592d129
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/BankCardWarpper.java
@@ -0,0 +1,42 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/5 18:37
+ */
+@ApiModel
+public class BankCardWarpper {
+    @ApiModelProperty("银行卡id")
+    private Integer id;
+    @ApiModelProperty("银行名称")
+    private String bankName;
+    @ApiModelProperty("银行卡号")
+    private String code;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getBankName() {
+        return bankName;
+    }
+
+    public void setBankName(String bankName) {
+        this.bankName = bankName;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+}
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
index c939120..899d88f 100644
--- a/UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java
+++ b/UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java
@@ -21,6 +21,6 @@
 
     @Test
     public void test(){
-        tinggPayoutUtil.sendPayout("+233277211131", "00007", 1D, "https://10pz685243.zicp.fun/base/IGO/tinggPayoutCallback", "Transfer remittance");
+        tinggPayoutUtil.sendPayout("GH-MTN-B2C", "+233277211131", "00007", 1D, "https://10pz685243.zicp.fun/base/IGO/tinggPayoutCallback", "Transfer remittance");
     }
 }

--
Gitblit v1.7.1