From 84620b593b9034bb28ba23c730392991cdf37a8b Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期一, 03 七月 2023 18:05:38 +0800
Subject: [PATCH] 修改bug

---
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java |  142 ++++++++++++++++++++++++++---------------------
 1 files changed, 79 insertions(+), 63 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 618cbaf..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
@@ -17,6 +17,8 @@
 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.*;
 
@@ -74,7 +76,7 @@
         CashWithdrawal cashWithdrawal = new CashWithdrawal();
         cashWithdrawal.setType(2);
         cashWithdrawal.setUserDriverId(driverId);
-        cashWithdrawal.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
+        cashWithdrawal.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
         cashWithdrawal.setBusinessType(type == 2 ? 11 : 12);
         cashWithdrawal.setBankId(bankId);
         cashWithdrawal.setAmount(money);
@@ -84,19 +86,19 @@
 
         //增加记录
         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.setBalance(driver.getBalance() - money);
-            accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance());
+            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(driver.getCommission() + driver.getCouponBalance());
-            driver.setCommission(driver.getCommission() - money);
-            accountChangeDetail.setNewData(driver.getCouponBalance() + driver.getCommission());
+            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());
         }
         accountChangeDetail.setExplain(type == 1 ? "账户余额提现" : "佣金余额提现");
         driverService.updateById(driver);
@@ -129,30 +131,36 @@
                 }
             }
         }else{//佣金提现,直接提现到银行卡
-            Withdraw withdraw = new Withdraw();
-            withdraw.setUserId(driver.getMerchantNumber());
-            withdraw.setAmount(String.valueOf(Double.valueOf(money * 100).intValue()));
-            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);
-                    this.updateById(cashWithdrawal);
+            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());
+                    }
                 }
-                if(2 == status){
-                    System.err.println("结算接口异常【提现】:" + jsonObject1.getString("statusMsg"));
-                }
-            }else{
-                System.err.println("结算接口异常【提现】:" + execute.getMsg());
-            }
+            }, 60000);
         }
         return ResultUtil.success();
     }
@@ -205,7 +213,7 @@
                 List<PamentOrderUser> splitList = new ArrayList<>();
                 PamentOrderUser pamentOrderUser = new PamentOrderUser();
                 pamentOrderUser.setSplitUserId(driver.getMerchantNumber());
-                pamentOrderUser.setSplitAmount(String.valueOf(Double.valueOf(amount * 100).intValue()));
+                pamentOrderUser.setSplitAmount(new BigDecimal(amount).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
                 pamentOrderUser.setSplitType("1");
                 splitList.add(pamentOrderUser);
                 complete.setSplitList(splitList);
@@ -231,7 +239,7 @@
                             public void run() {
                                 confirmReceipt(driver, rechargeRecord, divisionRecord, cashWithdrawal);
                             }
-                        }, 15000);
+                        }, 60000);
                     }
                 }else{
                     System.err.println("司机提现分账处理异常 :" + execute.getMsg());
@@ -260,7 +268,7 @@
                 List<PamentOrderUser> splitList = new ArrayList<>();
                 PamentOrderUser pamentOrderUser = new PamentOrderUser();
                 pamentOrderUser.setSplitUserId(driver.getMerchantNumber());
-                pamentOrderUser.setSplitAmount(String.valueOf(Double.valueOf(surplusDividedAmount * 100).intValue()));
+                pamentOrderUser.setSplitAmount(new BigDecimal(surplusDividedAmount).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
                 pamentOrderUser.setSplitType("1");
                 splitList.add(pamentOrderUser);
                 complete.setSplitList(splitList);
@@ -286,7 +294,7 @@
                             public void run() {
                                 confirmReceipt(driver, rechargeRecord, divisionRecord, cashWithdrawal);
                             }
-                        }, 15000);
+                        }, 60000);
                     }
                 }else{
                     System.err.println("司机提现分账处理异常 :" + execute.getMsg());
@@ -320,7 +328,7 @@
         List<PamentOrderUser> splitList = new ArrayList<>();
         PamentOrderUser pamentOrderUser = new PamentOrderUser();
         pamentOrderUser.setSplitUserId(driver.getMerchantNumber());
-        pamentOrderUser.setSplitAmount(String.valueOf(Double.valueOf(amount * 100).intValue()));
+        pamentOrderUser.setSplitAmount(new BigDecimal(amount).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
         pamentOrderUser.setSplitType("1");
         splitList.add(pamentOrderUser);
         complete.setSplitList(splitList);
@@ -346,7 +354,7 @@
                     public void run() {
                         confirmReceipt(driver, rechargeRecord, divisionRecord, cashWithdrawal);
                     }
-                }, 15000);
+                }, 60000);
             }
         }else{
             System.err.println("司机提现分账处理异常 :" + execute.getMsg());
@@ -369,11 +377,11 @@
         Receive receive = new Receive();
         receive.setOriginalMerOrderId(rechargeRecord.getOrderNumber());
         receive.setAsynMerOrderId(divisionRecord.getMerOrderId());
-        receive.setRcvAmount(String.valueOf(Double.valueOf(divisionRecord.getAmount() * 100).intValue()));
+        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(String.valueOf(Double.valueOf(divisionRecord.getAmount() * 100).intValue()));
+        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();
@@ -382,30 +390,35 @@
             JSONObject jsonObject = JSON.parseObject(execute1.getResult());
             String merOrderId = jsonObject.getString("merOrderId");
             if(ToolUtil.isNotEmpty(merOrderId)){
-                Withdraw withdraw = new Withdraw();
-                withdraw.setUserId(driver.getMerchantNumber());
-                withdraw.setAmount(String.valueOf(Double.valueOf(divisionRecord.getAmount() * 100).intValue()));
-                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);
-                        this.updateById(cashWithdrawal);
+                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());
+                        }
                     }
-                    if(2 == status){
-                        System.err.println("结算接口异常【提现】:" + jsonObject1.getString("statusMsg"));
-                    }
-                }else{
-                    System.err.println("结算接口异常【提现】:" + execute.getMsg());
-                }
+                }, 60000);
             }
         }else{
             System.err.println("分账确认收货异常【提现】:" + execute1.getMsg());
@@ -434,6 +447,9 @@
                 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);
@@ -449,7 +465,7 @@
                     public void run() {
                         confirmReceipt(driver, rechargeRecord, divisionRecord, cashWithdrawal);
                     }
-                }, 15000);
+                }, 60000);
             }
         }else{
             System.err.println("司机提现分账异常:" + interfaceResponse.getMsg());

--
Gitblit v1.7.1