From 709a4a10be56952ead6340e4822fce41a66e47cd Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 26 七月 2023 18:39:28 +0800
Subject: [PATCH] Merge branch '1.1' of http://120.76.84.145:10101/gitblit/r/java/SuperSaveDriving into dev

---
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java |  467 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 433 insertions(+), 34 deletions(-)

diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java
index 2c5b893..40fcfa2 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java
@@ -1,22 +1,26 @@
 package com.supersavedriving.driver.modular.system.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.supersavedriving.driver.core.util.ToolUtil;
 import com.supersavedriving.driver.modular.system.dao.CashWithdrawalMapper;
-import com.supersavedriving.driver.modular.system.model.AccountChangeDetail;
-import com.supersavedriving.driver.modular.system.model.CashWithdrawal;
-import com.supersavedriving.driver.modular.system.model.Driver;
-import com.supersavedriving.driver.modular.system.service.IAccountChangeDetailService;
-import com.supersavedriving.driver.modular.system.service.ICashWithdrawalService;
-import com.supersavedriving.driver.modular.system.service.IDriverService;
+import com.supersavedriving.driver.modular.system.model.*;
+import com.supersavedriving.driver.modular.system.service.*;
+import com.supersavedriving.driver.modular.system.util.MallBook.model.*;
+import com.supersavedriving.driver.modular.system.util.MallBook.util.TrhRequest;
 import com.supersavedriving.driver.modular.system.util.PayMoneyUtil;
 import com.supersavedriving.driver.modular.system.util.ResultUtil;
 import com.supersavedriving.driver.modular.system.util.UUIDUtil;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
-import java.util.Date;
+import java.util.*;
 
 /**
  * @author zhibing.pu
@@ -34,6 +38,15 @@
     @Autowired
     private IAccountChangeDetailService accountChangeDetailService;
 
+    @Autowired
+    private IRechargeRecordService rechargeRecordService;
+
+    @Autowired
+    private IDivisionRecordService divisionRecordService;
+
+    @Value("${callbackPath}")
+    private String callbackPath;
+
 
 
 
@@ -42,26 +55,30 @@
     /**
      * 司机提现操作
      * @param driverId
-     * @param type
+     * @param bankId
      * @param money
      * @return
      * @throws Exception
      */
     @Override
-    public ResultUtil withdrawCash(Integer driverId, Integer type, Double money) throws Exception {
+    public ResultUtil withdrawCash(Integer driverId, Integer type, Integer bankId, Double money) throws Exception {
         Driver driver = driverService.selectById(driverId);
-        if(type == 1 && (null == driver.getBalance() || driver.getBalance() < money)){
-            return ResultUtil.error("账户余额不足");
+        if(type == 1 && (null == driver.getBalance() || driver.getBalance().compareTo(money) < 0)){
+            return ResultUtil.error("余额不足");
         }
-        if(type == 2 && (null == driver.getCommission() || driver.getCommission() < money)){
-            return ResultUtil.error("佣金余额不足");
+        if(type == 2 && (null == driver.getCommission() || driver.getCommission().compareTo(money) < 0)){
+            return ResultUtil.error("收入余额不足");
+        }
+        if(ToolUtil.isEmpty(driver.getMerchantNumber())){
+            return ResultUtil.error("请先注册商户号");
         }
 
         CashWithdrawal cashWithdrawal = new CashWithdrawal();
         cashWithdrawal.setType(2);
         cashWithdrawal.setUserDriverId(driverId);
-        cashWithdrawal.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
-        cashWithdrawal.setBusinessType(type == 1 ? 12 : 11);
+        cashWithdrawal.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
+        cashWithdrawal.setBusinessType(type == 2 ? 11 : 12);
+        cashWithdrawal.setBankId(bankId);
         cashWithdrawal.setAmount(money);
         cashWithdrawal.setState(1);
         cashWithdrawal.setCreateTime(new Date());
@@ -69,37 +86,419 @@
 
         //增加记录
         AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
-        accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
+        accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
         accountChangeDetail.setUserType(2);
         accountChangeDetail.setUserId(driver.getId());
         accountChangeDetail.setType(1);
         accountChangeDetail.setChangeType(type == 1 ? 4 : 6);
         if(type == 1){
-            accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
-            driver.setBalance(driver.getBalance() - money);
-            accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
-            accountChangeDetail.setExplain("账户余额提现");
+            accountChangeDetail.setOldData(new BigDecimal(driver.getBalance()).add(new BigDecimal(driver.getBackgroundBalance())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
+            driver.setBalance(new BigDecimal(driver.getBalance()).subtract(new BigDecimal(money)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
+            accountChangeDetail.setNewData(new BigDecimal(driver.getBalance()).add(new BigDecimal(driver.getBackgroundBalance())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
+        }else{
+            accountChangeDetail.setOldData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
+            driver.setCommission(new BigDecimal(driver.getCommission()).subtract(new BigDecimal(money)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
+            accountChangeDetail.setNewData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
         }
-        if(type == 2){
-            accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
-            driver.setCommission(driver.getCommission() - money);
-            accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
-            accountChangeDetail.setExplain("佣金余额提现");
-        }
+        accountChangeDetail.setExplain(type == 1 ? "账户余额提现" : "佣金余额提现");
         driverService.updateById(driver);
         accountChangeDetailService.saveData(accountChangeDetail);
 
 
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
-        String outDetailNo = sdf.format(new Date()) + cashWithdrawal.getId();
-        String s = payMoneyUtil.weixinTransferMoney(outDetailNo, money, driver.getOpenid(), driver.getName(), "【超省新代驾】提现付款!");
-        if(ToolUtil.isEmpty(s)){
-            return ResultUtil.error("提现异常,请联系管理员");
+        if(type == 1){//余额提现,调用分账接口 -->确认收货--->提现
+            List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2)
+                    .eq("userId", driver.getId()).eq("payType", 1).eq("payStatus", 2).gt("surplusDividedAmount", 0));
+            for (RechargeRecord rechargeRecord : rechargeRecords) {
+                Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
+                if(surplusDividedAmount.compareTo(money) >= 0){//够分账
+                    ResultUtil fenzhang = fenzhang(driver, rechargeRecord, cashWithdrawal, 3, money);
+                    if(fenzhang.getCode() == 10000){
+                        rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - money);
+                        rechargeRecordService.updateById(rechargeRecord);
+                        break;
+                    }else{
+                        return fenzhang;
+                    }
+                }else{
+                    ResultUtil fenzhang = fenzhang(driver, rechargeRecord, cashWithdrawal, 3, surplusDividedAmount);
+                    if(fenzhang.getCode() == 10000){
+                        rechargeRecord.setSurplusDividedAmount(0D);
+                        rechargeRecordService.updateById(rechargeRecord);
+                        money -= surplusDividedAmount;
+                    }else{
+                        return fenzhang;
+                    }
+                }
+            }
+        }else{//佣金提现,直接提现到银行卡
+            Double finalMoney = money;
+            new Timer().schedule(new TimerTask() {
+                @Override
+                public void run() {
+                    Withdraw withdraw = new Withdraw();
+                    withdraw.setUserId(driver.getMerchantNumber());
+                    withdraw.setAmount(new BigDecimal(finalMoney).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
+                    withdraw.setOrderName("账户余额提现");
+                    withdraw.setRemark("账户余额提现");
+                    withdraw.setNotifyUrl(callbackPath + "/base/driver/withdrawCashCallback");
+                    withdraw.setParameter1(cashWithdrawal.getId().toString());
+                    TrhRequest<Withdraw> request1 = new TrhRequest();
+                    InterfaceResponse execute = request1.execute(withdraw, Withdraw.SERVICE_CODE);//结算(提现)
+                    if("0000".equals(execute.getCode())){
+                        JSONObject jsonObject1 = JSON.parseObject(execute.getResult());
+                        String merOrderId1 = jsonObject1.getString("merOrderId");
+                        Integer status = jsonObject1.getInteger("status");//0:待处理;1:成功;2:失败
+                        if(1 == status){
+                            cashWithdrawal.setOrderNumber(merOrderId1);
+                            cashWithdrawal.setState(2);
+                            CashWithdrawalServiceImpl.this.updateById(cashWithdrawal);
+                        }
+                        if(2 == status){
+                            System.err.println("结算接口异常【提现】:" + jsonObject1.getString("statusMsg"));
+                        }
+                    }else{
+                        System.err.println("结算接口异常【提现】:" + execute.getMsg());
+                    }
+                }
+            }, 60000);
         }
-        cashWithdrawal.setState(2);
-        cashWithdrawal.setOrderNumber(s);
-        this.updateById(cashWithdrawal);
         return ResultUtil.success();
     }
 
+
+
+
+
+
+    /**
+     * 司机提现,现将支付的订单进行分账
+     * @param driver
+     * @param amount
+     * @param cashWithdrawal
+     * @return
+     */
+    public ResultUtil fenzhang(Driver driver, Double amount, CashWithdrawal cashWithdrawal, Integer payType){
+        List<RechargeRecord> rechargeRecords = new ArrayList<>();
+        if(payType == 1){//司机充值
+            rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2)
+                    .eq("userId", driver.getId()).eq("payType", 1).eq("payStatus", 2).gt("surplusDividedAmount", 0));
+        }
+        if(payType == 2){//平台充值(补贴金额)
+            rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>()
+                   .eq("payType", 2).eq("payStatus", 2).gt("surplusDividedAmount", 0));
+        }
+        for (RechargeRecord rechargeRecord : rechargeRecords) {
+            Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
+            if(surplusDividedAmount.compareTo(amount) >= 0){//够分账
+                DivisionRecord divisionRecord = new DivisionRecord();
+                divisionRecord.setUserType(1);
+                divisionRecord.setUserId(driver.getId());
+                divisionRecord.setOrderId(rechargeRecord.getId().longValue());
+                divisionRecord.setSourceType(payType == 1 ? 3 : 2);
+                divisionRecord.setAmount(amount);
+                divisionRecord.setMerchantNumber(driver.getMerchantNumber());
+                divisionRecord.setState(1);
+                divisionRecord.setCreateTime(new Date());
+                divisionRecordService.insert(divisionRecord);
+
+                rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - amount);
+                rechargeRecordService.updateById(rechargeRecord);
+
+                Complete complete = new Complete();
+                complete.setOriginalMerOrderId(rechargeRecord.getOrderNumber());
+                complete.setNotifyUrl(callbackPath + "/base/driver/withdrawCashFZCallback");
+                complete.setParameter1(divisionRecord.getId().toString());
+                complete.setParameter2(rechargeRecord.getId() + "_" + cashWithdrawal.getId());
+                //分账方列表
+                List<PamentOrderUser> splitList = new ArrayList<>();
+                PamentOrderUser pamentOrderUser = new PamentOrderUser();
+                pamentOrderUser.setSplitUserId(driver.getMerchantNumber());
+                pamentOrderUser.setSplitAmount(new BigDecimal(amount).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
+                pamentOrderUser.setSplitType("1");
+                splitList.add(pamentOrderUser);
+                complete.setSplitList(splitList);
+                TrhRequest<Complete> request = new TrhRequest();
+                InterfaceResponse execute = request.execute(complete, Complete.SERVICE_CODE);//分账操作
+                if("0000".equals(execute.getCode())){
+                    JSONObject jsonObject = JSON.parseObject(execute.getResult());
+                    Integer status = jsonObject.getInteger("status");//0:待处理 1:成功 2:失败
+                    String merOrderId = jsonObject.getString("merOrderId");
+                    if(2 == status){
+                        System.err.println("司机提现分账失败:" + execute.getMsg());
+                        break;
+                    }
+                    if(1 == status){
+                        divisionRecord.setMerOrderId(merOrderId);
+                        divisionRecord.setPayTime(new Date());
+                        divisionRecord.setState(2);
+                        divisionRecordService.updateById(divisionRecord);
+                        //间隔10秒开始调用确认收货后开始提现
+
+                        new Timer().schedule(new TimerTask() {//确认收货和提现
+                            @Override
+                            public void run() {
+                                confirmReceipt(driver, rechargeRecord, divisionRecord, cashWithdrawal);
+                            }
+                        }, 60000);
+                    }
+                }else{
+                    System.err.println("司机提现分账处理异常 :" + execute.getMsg());
+                    return ResultUtil.error("司机提现分账处理异常 :" + execute.getMsg());
+                }
+            }else{//不够分账
+                DivisionRecord divisionRecord = new DivisionRecord();
+                divisionRecord.setUserType(1);
+                divisionRecord.setUserId(driver.getId());
+                divisionRecord.setOrderId(rechargeRecord.getId().longValue());
+                divisionRecord.setSourceType(payType == 1 ? 3 : 2);
+                divisionRecord.setAmount(surplusDividedAmount);
+                divisionRecord.setMerchantNumber(driver.getMerchantNumber());
+                divisionRecord.setState(1);
+                divisionRecord.setCreateTime(new Date());
+                divisionRecordService.insert(divisionRecord);
+
+                rechargeRecord.setSurplusDividedAmount(0D);
+                rechargeRecordService.updateById(rechargeRecord);
+
+                Complete complete = new Complete();
+                complete.setOriginalMerOrderId(rechargeRecord.getOrderNumber());
+                complete.setNotifyUrl(callbackPath + "/base/driver/withdrawCashFZCallback");
+                complete.setParameter1(divisionRecord.getId().toString());
+                //分账方列表
+                List<PamentOrderUser> splitList = new ArrayList<>();
+                PamentOrderUser pamentOrderUser = new PamentOrderUser();
+                pamentOrderUser.setSplitUserId(driver.getMerchantNumber());
+                pamentOrderUser.setSplitAmount(new BigDecimal(surplusDividedAmount).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
+                pamentOrderUser.setSplitType("1");
+                splitList.add(pamentOrderUser);
+                complete.setSplitList(splitList);
+                TrhRequest<Complete> request = new TrhRequest();
+                InterfaceResponse execute = request.execute(complete, Complete.SERVICE_CODE);//分账操作
+                if("0000".equals(execute.getCode())){
+                    JSONObject jsonObject = JSON.parseObject(execute.getResult());
+                    Integer status = jsonObject.getInteger("status");//0:待处理 1:成功 2:失败
+                    String merOrderId = jsonObject.getString("merOrderId");
+                    if(2 == status){
+                        System.err.println("司机提现分账失败:" + execute.getMsg());
+                        break;
+                    }
+                    if(1 == status){
+                        divisionRecord.setMerOrderId(merOrderId);
+                        divisionRecord.setPayTime(new Date());
+                        divisionRecord.setState(2);
+                        divisionRecordService.updateById(divisionRecord);
+
+                        //间隔10秒开始调用确认收货后开始提现
+                        new Timer().schedule(new TimerTask() {//确认收货和提现
+                            @Override
+                            public void run() {
+                                confirmReceipt(driver, rechargeRecord, divisionRecord, cashWithdrawal);
+                            }
+                        }, 60000);
+                    }
+                }else{
+                    System.err.println("司机提现分账处理异常 :" + execute.getMsg());
+                    return ResultUtil.error("司机提现分账处理异常 :" + execute.getMsg());
+                }
+                amount -= surplusDividedAmount;
+            }
+        }
+        return ResultUtil.success();
+    }
+
+
+
+    public ResultUtil fenzhang(Driver driver, RechargeRecord rechargeRecord, CashWithdrawal cashWithdrawal, Integer sourceType, Double amount){
+        DivisionRecord divisionRecord = new DivisionRecord();
+        divisionRecord.setUserType(1);
+        divisionRecord.setUserId(driver.getId());
+        divisionRecord.setOrderId(rechargeRecord.getId().longValue());
+        divisionRecord.setSourceType(sourceType);
+        divisionRecord.setAmount(amount);
+        divisionRecord.setMerchantNumber(driver.getMerchantNumber());
+        divisionRecord.setState(1);
+        divisionRecord.setCreateTime(new Date());
+        divisionRecordService.insert(divisionRecord);
+
+        Complete complete = new Complete();
+        complete.setOriginalMerOrderId(rechargeRecord.getOrderNumber());
+        complete.setNotifyUrl(callbackPath + "/base/driver/withdrawCashFZCallback");
+        complete.setParameter1(divisionRecord.getId().toString());
+        //分账方列表
+        List<PamentOrderUser> splitList = new ArrayList<>();
+        PamentOrderUser pamentOrderUser = new PamentOrderUser();
+        pamentOrderUser.setSplitUserId(driver.getMerchantNumber());
+        pamentOrderUser.setSplitAmount(new BigDecimal(amount).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
+        pamentOrderUser.setSplitType("1");
+        splitList.add(pamentOrderUser);
+        complete.setSplitList(splitList);
+        TrhRequest<Complete> request = new TrhRequest();
+        InterfaceResponse execute = request.execute(complete, Complete.SERVICE_CODE);//分账操作
+        if("0000".equals(execute.getCode())){
+            JSONObject jsonObject = JSON.parseObject(execute.getResult());
+            Integer status = jsonObject.getInteger("status");//0:待处理 1:成功 2:失败
+            String merOrderId = jsonObject.getString("merOrderId");
+            if(2 == status){
+                System.err.println("司机提现分账失败:" + execute.getMsg());
+                return ResultUtil.error("司机提现分账失败 :" + execute.getMsg());
+            }
+            if(1 == status){
+                divisionRecord.setMerOrderId(merOrderId);
+                divisionRecord.setPayTime(new Date());
+                divisionRecord.setState(2);
+                divisionRecordService.updateById(divisionRecord);
+
+                //间隔10秒开始调用确认收货后开始提现
+                new Timer().schedule(new TimerTask() {//确认收货和提现
+                    @Override
+                    public void run() {
+                        confirmReceipt(driver, rechargeRecord, divisionRecord, cashWithdrawal);
+                    }
+                }, 60000);
+            }
+        }else{
+            System.err.println("司机提现分账处理异常 :" + execute.getMsg());
+            return ResultUtil.error("司机提现分账处理异常 :" + execute.getMsg());
+        }
+        return ResultUtil.success();
+    }
+
+
+
+
+    /**
+     * 分账后的确认收货和提现操作
+     * @param driver
+     * @param rechargeRecord
+     * @param divisionRecord
+     * @param cashWithdrawal
+     */
+    public void confirmReceipt(Driver driver, RechargeRecord rechargeRecord, DivisionRecord divisionRecord, CashWithdrawal cashWithdrawal){
+        Receive receive = new Receive();
+        receive.setOriginalMerOrderId(rechargeRecord.getOrderNumber());
+        receive.setAsynMerOrderId(divisionRecord.getMerOrderId());
+        receive.setRcvAmount(new BigDecimal(divisionRecord.getAmount()).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
+        List<ReceiveUser> splitList = new ArrayList<>();
+        ReceiveUser receiveUser = new ReceiveUser();
+        receiveUser.setSplitUserId(driver.getMerchantNumber());
+        receiveUser.setRcvSplitAmount(new BigDecimal(divisionRecord.getAmount()).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
+        splitList.add(receiveUser);
+        receive.setSplitList(splitList);
+        TrhRequest<Receive> request = new TrhRequest();
+        InterfaceResponse execute1 = request.execute(receive, Receive.SERVICE_CODE);//确认收货
+        if("0000".equals(execute1.getCode())){
+            JSONObject jsonObject = JSON.parseObject(execute1.getResult());
+            String merOrderId = jsonObject.getString("merOrderId");
+            if(ToolUtil.isNotEmpty(merOrderId)){
+                new Timer().schedule(new TimerTask() {
+                    @Override
+                    public void run() {
+                        Withdraw withdraw = new Withdraw();
+                        withdraw.setUserId(driver.getMerchantNumber());
+                        withdraw.setAmount(new BigDecimal(divisionRecord.getAmount()).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
+                        withdraw.setOrderName("账户余额提现");
+                        withdraw.setRemark("账户余额提现");
+                        withdraw.setNotifyUrl(callbackPath + "/base/driver/withdrawCashCallback");
+                        withdraw.setParameter1(cashWithdrawal.getId().toString());
+                        TrhRequest<Withdraw> request1 = new TrhRequest();
+                        InterfaceResponse execute = request1.execute(withdraw, Withdraw.SERVICE_CODE);//结算(提现)
+                        if("0000".equals(execute.getCode())){
+                            JSONObject jsonObject1 = JSON.parseObject(execute.getResult());
+                            String merOrderId1 = jsonObject1.getString("merOrderId");
+                            Integer status = jsonObject1.getInteger("status");//0:待处理;1:成功;2:失败
+                            if(1 == status){
+                                cashWithdrawal.setOrderNumber(merOrderId1);
+                                cashWithdrawal.setState(2);
+                                CashWithdrawalServiceImpl.this.updateById(cashWithdrawal);
+                            }
+                            if(2 == status){
+                                System.err.println("结算接口异常【提现】:" + jsonObject1.getString("statusMsg"));
+                            }
+                        }else{
+                            System.err.println("结算接口异常【提现】:" + execute.getMsg());
+                        }
+                    }
+                }, 60000);
+            }
+        }else{
+            System.err.println("分账确认收货异常【提现】:" + execute1.getMsg());
+        }
+    }
+
+
+
+
+
+    /**
+     * 提现分账的异步回调
+     * @param interfaceResponse
+     */
+    @Override
+    public void withdrawCashFZCallback(InterfaceResponse interfaceResponse) {
+        if("0000".equals(interfaceResponse.getCode())){
+            JSONObject jsonObject = JSON.parseObject(interfaceResponse.getResult());
+            Integer status = jsonObject.getInteger("status");//0:待处理 1:成功 2:失败
+            String merOrderId = jsonObject.getString("merOrderId");
+            if(2 == status){
+                System.err.println("司机提现分账失败:" + interfaceResponse.getMsg());
+                return;
+            }
+            if(1 == status){
+                String parameter1 = jsonObject.getString("parameter1");
+                String parameter2 = jsonObject.getString("parameter2");
+                DivisionRecord divisionRecord = divisionRecordService.selectById(parameter1);
+                if(divisionRecord.getState() == 2){
+                    return;
+                }
+                divisionRecord.setMerOrderId(merOrderId);
+                divisionRecord.setPayTime(new Date());
+                divisionRecord.setState(2);
+                divisionRecordService.updateById(divisionRecord);
+                Driver driver = driverService.selectById(divisionRecord.getUserId());
+                String[] s = parameter2.split("_");
+                RechargeRecord rechargeRecord = rechargeRecordService.selectById(s[0]);
+                CashWithdrawal cashWithdrawal = this.selectById(s[1]);
+
+                //间隔10秒开始调用确认收货后开始提现
+                new Timer().schedule(new TimerTask() {//确认收货和提现
+                    @Override
+                    public void run() {
+                        confirmReceipt(driver, rechargeRecord, divisionRecord, cashWithdrawal);
+                    }
+                }, 60000);
+            }
+        }else{
+            System.err.println("司机提现分账异常:" + interfaceResponse.getMsg());
+        }
+    }
+
+
+    /**
+     * 提现确认收货后的结算回调
+     * @param interfaceResponse
+     */
+    @Override
+    public void withdrawCashCallback(InterfaceResponse interfaceResponse) {
+        if("0000".equals(interfaceResponse.getCode())){
+            JSONObject jsonObject1 = JSON.parseObject(interfaceResponse.getResult());
+            String merOrderId1 = jsonObject1.getString("merOrderId");
+            Integer status = jsonObject1.getInteger("status");//0:待处理;1:成功;2:失败
+            if(1 == status){
+                String parameter1 = jsonObject1.getString("parameter1");
+                CashWithdrawal cashWithdrawal = this.selectById(parameter1);
+                cashWithdrawal.setOrderNumber(merOrderId1);
+                cashWithdrawal.setState(2);
+                this.updateById(cashWithdrawal);
+            }
+            if(2 == status){
+                System.err.println("结算接口异常【提现】:" + jsonObject1.getString("statusMsg"));
+            }
+        }else{
+            System.err.println("结算接口异常【提现】:" + interfaceResponse.getMsg());
+        }
+    }
+
+
+
+
 }

--
Gitblit v1.7.1