From 7a9e05846c5e37f7278f242857056d0623532379 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 16 六月 2023 20:17:32 +0800
Subject: [PATCH] 修改bug和功能优化

---
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java |  104 ++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 96 insertions(+), 8 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 5500602..618cbaf 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
@@ -61,10 +61,10 @@
     @Override
     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){
+        if(type == 1 && (null == driver.getBalance() || driver.getBalance().compareTo(money) < 0)){
             return ResultUtil.error("余额不足");
         }
-        if(type == 2 && null == driver.getCommission() || driver.getCommission() < money){
+        if(type == 2 && (null == driver.getCommission() || driver.getCommission().compareTo(money) < 0)){
             return ResultUtil.error("收入余额不足");
         }
         if(ToolUtil.isEmpty(driver.getMerchantNumber())){
@@ -104,7 +104,30 @@
 
 
         if(type == 1){//余额提现,调用分账接口 -->确认收货--->提现
-            fenzhang(driver, money, cashWithdrawal, 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{//佣金提现,直接提现到银行卡
             Withdraw withdraw = new Withdraw();
             withdraw.setUserId(driver.getMerchantNumber());
@@ -164,11 +187,14 @@
                 divisionRecord.setUserId(driver.getId());
                 divisionRecord.setOrderId(rechargeRecord.getId().longValue());
                 divisionRecord.setSourceType(payType == 1 ? 3 : 2);
-                divisionRecord.setAmount(surplusDividedAmount);
+                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());
@@ -208,9 +234,9 @@
                         }, 15000);
                     }
                 }else{
-                    System.err.println("司机提现分账异常:" + execute.getMsg());
+                    System.err.println("司机提现分账处理异常 :" + execute.getMsg());
+                    return ResultUtil.error("司机提现分账处理异常 :" + execute.getMsg());
                 }
-                break;
             }else{//不够分账
                 DivisionRecord divisionRecord = new DivisionRecord();
                 divisionRecord.setUserType(1);
@@ -222,6 +248,9 @@
                 divisionRecord.setState(1);
                 divisionRecord.setCreateTime(new Date());
                 divisionRecordService.insert(divisionRecord);
+
+                rechargeRecord.setSurplusDividedAmount(0D);
+                rechargeRecordService.updateById(rechargeRecord);
 
                 Complete complete = new Complete();
                 complete.setOriginalMerOrderId(rechargeRecord.getOrderNumber());
@@ -260,8 +289,8 @@
                         }, 15000);
                     }
                 }else{
-                    System.err.println("司机提现分账异常:" + execute.getMsg());
-                    break;
+                    System.err.println("司机提现分账处理异常 :" + execute.getMsg());
+                    return ResultUtil.error("司机提现分账处理异常 :" + execute.getMsg());
                 }
                 amount -= surplusDividedAmount;
             }
@@ -270,6 +299,65 @@
     }
 
 
+
+    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(String.valueOf(Double.valueOf(amount * 100).intValue()));
+        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);
+                    }
+                }, 15000);
+            }
+        }else{
+            System.err.println("司机提现分账处理异常 :" + execute.getMsg());
+            return ResultUtil.error("司机提现分账处理异常 :" + execute.getMsg());
+        }
+        return ResultUtil.success();
+    }
+
+
+
+
     /**
      * 分账后的确认收货和提现操作
      * @param driver

--
Gitblit v1.7.1