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/OrderServiceImpl.java |  399 +++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 246 insertions(+), 153 deletions(-)

diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
index 5fa46ce..60e3ef1 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
@@ -111,6 +111,9 @@
     @Autowired
     private IAgentService agentService;
 
+    @Autowired
+    private IOrderPositionService orderPositionService;
+
     @Value("${callbackPath}")
     private String callbackPath;//支付回调网关地址
 
@@ -170,6 +173,19 @@
         if(null != appUser){
             order.setUserId(appUser.getId());
         }
+
+
+        String startAddress = addOrderWarpper.getStartAddress();
+        startAddress = startAddress.replaceAll("& #40;", "(");
+        startAddress = startAddress.replaceAll("& #41;", ")");
+        addOrderWarpper.setStartAddress(startAddress);
+        if(ToolUtil.isNotEmpty(addOrderWarpper.getEndAddress())){
+            String endAddress = addOrderWarpper.getEndAddress();
+            endAddress = endAddress.replaceAll("& #40;", "(");
+            endAddress = endAddress.replaceAll("& #41;", ")");
+            addOrderWarpper.setEndAddress(endAddress);
+        }
+
         order.setUserName(addOrderWarpper.getUserName());
         order.setUserPhone(addOrderWarpper.getPhone());
         order.setAgentId(driver.getAgentId());
@@ -372,7 +388,6 @@
                             BigDecimal subtract = new BigDecimal(num9).subtract(new BigDecimal(add));
                             order.setOverBadWeatherPrice(subtract.doubleValue());//恶劣天气超出公里费
                         }
-                    }
                 }
             }
         }
@@ -494,7 +509,8 @@
                         continue;
                     }
                     Driver driver1 = driverService.selectById(youTuiDriver.getDriverId());
-                    if(driver1.getServerStatus() == 2 || driver1.getOpenOrderQRCode() == 1){
+                    int count = this.selectCount(new EntityWrapper<Order>().eq("driverId", youTuiDriver.getDriverId()).eq("status", 1).in("state", Arrays.asList(102, 103, 104, 105, 201, 401)));
+                    if(driver1.getServerStatus() == 2 || driver1.getOpenOrderQRCode() == 1 || count > 0){
                         continue;
                     }
                     DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driver1.getId()).eq("status", 1));
@@ -550,7 +566,10 @@
                             if(null == driverWork){
                                 continue;
                             }
-
+                            int count = this.selectCount(new EntityWrapper<Order>().eq("driverId", driver1.getId()).eq("status", 1).in("state", Arrays.asList(102, 103, 104, 105, 201, 401)));
+                            if(count > 0){
+                                continue;
+                            }
                             if(integral == null || integral.compareTo(driver1.getIntegral()) < 0){//积分大
                                 integral = driver1.getIntegral();
                                 score = driver1.getScore();
@@ -957,10 +976,17 @@
                 Integer w = new BigDecimal(Double.valueOf(System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 1000).intValue();
                 order.setWaitTime(order.getWaitTime() + w);
                 order.setStartWaitTime(null);
+                orderPositionService.initMap(order.getId());
                 break;
             case 106:
                 order.setGetoffTime(new Date());
                 if(ToolUtil.isEmpty(order.getEndAddress())){
+
+                    String endAddress = processOperationsWarpper.getEndAddress();
+                    endAddress = endAddress.replaceAll("& #40;", "(");
+                    endAddress = endAddress.replaceAll("& #41;", ")");
+                    processOperationsWarpper.setEndAddress(endAddress);
+
                     order.setEndAddress(processOperationsWarpper.getEndAddress());
                     order.setEndLng(processOperationsWarpper.getEndLng());
                     order.setEndLat(processOperationsWarpper.getEndLat());
@@ -1122,7 +1148,25 @@
      */
     @Override
     public ResultUtil transferOrder(Integer uid, Long orderId, String cause) throws Exception {
+        // 7.13改动
+        OrderTransfer orderTransfer = new OrderTransfer();
         Order order = this.selectById(orderId);
+        if(phone!=null && !"".equals(phone)) {
+            List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().eq("phone", phone));
+            if (drivers.size() == 0) {
+                return ResultUtil.error("暂无该司机,无法转单");
+            } else {
+                Driver driver = drivers.get(0);
+                if (driver.getServerStatus() != 1) {
+                    return ResultUtil.error("司机正在服务中,无法转单。");
+                }
+                if (driver.getStatus() != 1) {
+                    return ResultUtil.error("该司机已被冻结,无法转单。");
+                }
+                order.setDriverId(driver.getId());
+                orderTransfer.setNewDriverId(driver.getId());
+            }
+        }
         if(order.getDriverId().compareTo(uid) != 0){
             return ResultUtil.error("无权操作");
         }
@@ -1133,22 +1177,24 @@
         order.setState(201);
         this.updateById(order);
 
-        OrderTransfer orderTransfer = new OrderTransfer();
+
         orderTransfer.setOrderId(orderId);
         orderTransfer.setOldDriverId(order.getDriverId());
         orderTransfer.setCause(cause);
         orderTransfer.setStatus(1);
         orderTransfer.setCreateTime(new Date());
         orderTransferService.insert(orderTransfer);
+        if(phone==null ||"".equals(phone)){
+            //开始派单
+            Order finalOrder = order;
+            new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    pushOrder(finalOrder);
+                }
+            }).start();
+        }
 
-        //开始派单
-        Order finalOrder = order;
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                pushOrder(finalOrder.getId());
-            }
-        }).start();
         return ResultUtil.success();
     }
 
@@ -1163,6 +1209,12 @@
     @Override
     public ResultUtil setOrderEndAddress(Integer uid, OrderEndAddressWarpper orderEndAddressWarpper) throws Exception {
         Order order = this.selectById(orderEndAddressWarpper.getOrderId());
+
+        String endAddress = orderEndAddressWarpper.getEndAddress();
+        endAddress = endAddress.replaceAll("& #40;", "(");
+        endAddress = endAddress.replaceAll("& #41;", ")");
+        orderEndAddressWarpper.setEndAddress(endAddress);
+
         order.setEndLat(orderEndAddressWarpper.getEndLat());
         order.setEndLng(orderEndAddressWarpper.getEndLng());
         order.setEndAddress(orderEndAddressWarpper.getEndAddress());
@@ -1311,96 +1363,123 @@
      */
     @Override
     public ResultUtil setOrderStatus(Integer uid, Long orderId, Integer payType, Integer state) throws Exception {
-        if(108 == state){
-            String value = redisUtil.getValue("repeat_" + orderId.toString());
-            if(ToolUtil.isEmpty(value)){
-                redisUtil.setStrValue("repeat_" + orderId, System.currentTimeMillis() + "", 10 * 60);
-            }else{
-                Long s = System.currentTimeMillis() - Long.valueOf(value);
-                if(s < 60000){//1分钟
-                    return ResultUtil.error("数据处理中");
-                }
-            }
-        }
-
-        List<Integer> s = Arrays.asList(107, 108);
-        if(!s.contains(state)){
-            return ResultUtil.error("操作失败,请刷新订单");
-        }
-        Order order = this.selectById(orderId);
-        order.setState(state);
-
-        if(payType == 2 && state == 107){
-            order.setPayType(3);
-        }
-
-        if(payType == 2 && state == 108){
-            order.setPayTime(new Date());
-            if(null != order.getCouponId()){
-                UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId());
-                Coupon coupon = couponService.selectById(userToCoupon.getCouponId());
-
-                Driver driver = driverService.selectById(order.getDriverId());
-                AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
-                accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
-                accountChangeDetail.setUserType(2);
-                accountChangeDetail.setUserId(order.getDriverId());
-                accountChangeDetail.setCreateTime(new Date());
-                accountChangeDetail.setOldData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
-                accountChangeDetail.setType(1);
-                accountChangeDetail.setChangeType(7);
-                accountChangeDetail.setOrderId(order.getId());
-                accountChangeDetail.setExplain("优惠券收入");
-                driver.setCommission(new BigDecimal(driver.getCommission()).add(new BigDecimal(coupon.getCouponPreferentialAmount())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
-                accountChangeDetail.setNewData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
-                driverService.updateById(driver);
-                accountChangeDetailService.insert(accountChangeDetail);
-
-                //补贴中分账
-                Double discountedPrice = order.getDiscountedPrice();
-                List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
-                for (RechargeRecord rechargeRecord : rechargeRecords) {
-                    Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
-                    if(surplusDividedAmount.compareTo(discountedPrice) >= 0){
-                        ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback");
-                        if(10000 == zhaunzhang.getCode()){
-                            Double remainAmount = zhaunzhang.getData();
-                            rechargeRecord.setSurplusDividedAmount(remainAmount);
-                            rechargeRecordService.updateById(rechargeRecord);
-                        }
+        try {
+            boolean lock = redisUtil.lock(orderId + "",5);
+            if(!lock){
+                int num1 = 1;
+                while (num1 <= 10){
+                    Thread.sleep(3000);//等待3秒
+                    lock = redisUtil.lock(orderId + "",5);
+                    if(lock){
                         break;
                     }else{
-                        ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
-                        if(10000 == zhaunzhang.getCode()){
-                            Double remainAmount = zhaunzhang.getData();
-                            rechargeRecord.setSurplusDividedAmount(remainAmount);
-                            rechargeRecordService.updateById(rechargeRecord);
-                            discountedPrice = new BigDecimal(discountedPrice).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
-                        }else{
+                        num1++;
+                    }
+                }
+            }
+            if(!lock){
+                redisUtil.unlock(orderId + "");
+                return ResultUtil.error("请稍后重试");
+            }
+
+            Order order = this.selectById(orderId);
+            if(state == 107 && order.getState() != 106){
+                redisUtil.unlock(orderId + "");
+                return ResultUtil.error("操作失败,请刷新数据");
+            }
+            if(state == 108 && order.getState() != 107){
+                redisUtil.unlock(orderId + "");
+                return ResultUtil.error("操作失败,请刷新数据");
+            }
+
+            order.setState(state);
+
+            if(payType == 2 && state == 107){
+                order.setPayType(3);
+            }
+
+            if(payType == 2 && state == 108){
+                order.setPayTime(new Date());
+                if(null != order.getCouponId()){
+                    UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId());
+                    Coupon coupon = couponService.selectById(userToCoupon.getCouponId());
+
+                    Driver driver = driverService.selectById(order.getDriverId());
+                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
+                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
+                    accountChangeDetail.setUserType(2);
+                    accountChangeDetail.setUserId(order.getDriverId());
+                    accountChangeDetail.setCreateTime(new Date());
+                    accountChangeDetail.setOldData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
+                    accountChangeDetail.setType(1);
+                    accountChangeDetail.setChangeType(7);
+                    accountChangeDetail.setOrderId(order.getId());
+                    accountChangeDetail.setExplain("优惠券收入");
+                    driver.setCommission(new BigDecimal(driver.getCommission()).add(new BigDecimal(coupon.getCouponPreferentialAmount())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
+                    accountChangeDetail.setNewData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
+                    driverService.updateById(driver);
+                    accountChangeDetailService.insert(accountChangeDetail);
+
+                    //补贴中分账
+                    Double discountedPrice = order.getDiscountedPrice();
+                    List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
+                    for (RechargeRecord rechargeRecord : rechargeRecords) {
+                        Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
+                        if(surplusDividedAmount.compareTo(discountedPrice) >= 0){
+                            ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback");
+                            if(10000 == zhaunzhang.getCode()){
+                                Double remainAmount = zhaunzhang.getData();
+                                rechargeRecord.setSurplusDividedAmount(remainAmount);
+                                rechargeRecordService.updateById(rechargeRecord);
+                            }
                             break;
+                        }else{
+                            ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
+                            if(10000 == zhaunzhang.getCode()){
+                                Double remainAmount = zhaunzhang.getData();
+                                rechargeRecord.setSurplusDividedAmount(remainAmount);
+                                rechargeRecordService.updateById(rechargeRecord);
+                                discountedPrice = new BigDecimal(discountedPrice).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+                            }else{
+                                break;
+                            }
                         }
                     }
                 }
             }
+            this.updateById(order);
 
-        }
-        this.updateById(order);
+            if(payType == 2 && state == 108){//计算抽成
+                saveRevenue(order);
+            }
 
-        if(payType == 2 && state == 108){//计算抽成
-            saveRevenue(order);
-        }
+            PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
+            pushOrderInfoWarpper.setId(order.getId());
+            pushOrderInfoWarpper.setState(order.getState());
+            pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
+            if(null != order.getUserId()){
+                pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState());
+            }
 
-        PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
-        pushOrderInfoWarpper.setId(order.getId());
-        pushOrderInfoWarpper.setState(order.getState());
-        pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
-        if(null != order.getUserId()){
-            pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState());
+            if(payType == 2 && state == 107){
+                new Timer().schedule(new TimerTask() {
+                    @Override
+                    public void run() {
+                        try {
+                            OrderServiceImpl.this.setOrderStatus(uid, orderId, payType, 108);
+                        }catch (Exception e){
+                            e.printStackTrace();
+                        }
+                    }
+                }, 60000);
+            }
+            redisUtil.unlock(orderId + "");
+            return ResultUtil.success();
+        }catch (Exception e){
+            redisUtil.unlock(orderId + "");
+            e.printStackTrace();
+            return ResultUtil.error("系统异常");
         }
-        if(108 == state){
-            redisUtil.remove("repeat_" + orderId.toString());
-        }
-        return ResultUtil.success();
     }
 
 
@@ -2112,10 +2191,6 @@
             if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
                 break;
             }
-            if(i == performanceRankingWarppers.size() - 1){
-                position = 0;
-                d = 0D;
-            }
         }
         MyAchievementWarpper myAchievementWarpper = new MyAchievementWarpper();
         myAchievementWarpper.setType("订单");
@@ -2137,10 +2212,6 @@
             }
             if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
                 break;
-            }
-            if(i == performanceRankingWarppers.size() - 1){
-                position = 0;
-                d = 0D;
             }
         }
         myAchievementWarpper = new MyAchievementWarpper();
@@ -2164,10 +2235,6 @@
             if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
                 break;
             }
-            if(i == performanceRankingWarppers.size() - 1){
-                position = 0;
-                d = 0D;
-            }
         }
         myAchievementWarpper = new MyAchievementWarpper();
         myAchievementWarpper.setType("佣金");
@@ -2187,62 +2254,88 @@
         List<Order> orders = this.selectList(new EntityWrapper<Order>().eq("state", 107).eq("status", 1)
                 .eq("payType", 3).last(" and UNIX_TIMESTAMP(getoffTime) + 600 <= UNIX_TIMESTAMP(now())"));
         for (Order order : orders) {
-            order.setState(108);
-            order.setPayTime(new Date());
-            if(null != order.getCouponId()){
-                UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId());
-                Coupon coupon = couponService.selectById(userToCoupon.getCouponId());
-
-                Driver driver = driverService.selectById(order.getDriverId());
-                AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
-                accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
-                accountChangeDetail.setUserType(2);
-                accountChangeDetail.setUserId(order.getDriverId());
-                accountChangeDetail.setCreateTime(new Date());
-                accountChangeDetail.setOldData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
-                accountChangeDetail.setType(1);
-                accountChangeDetail.setChangeType(7);
-                accountChangeDetail.setOrderId(order.getId());
-                accountChangeDetail.setExplain("优惠券收入");
-                driver.setCommission(new BigDecimal(driver.getCommission()).add(new BigDecimal(coupon.getCouponPreferentialAmount())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
-                accountChangeDetail.setNewData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
-                driverService.updateById(driver);
-                accountChangeDetailService.insert(accountChangeDetail);
-
-                //补贴中分账
-                Double discountedPrice = order.getDiscountedPrice();
-                List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
-                for (RechargeRecord rechargeRecord : rechargeRecords) {
-                    Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
-                    if(surplusDividedAmount.compareTo(discountedPrice) >= 0){
-                        ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback");
-                        if(10000 == zhaunzhang.getCode()){
-                            Double remainAmount = zhaunzhang.getData();
-                            rechargeRecord.setSurplusDividedAmount(remainAmount);
-                            rechargeRecordService.updateById(rechargeRecord);
-                        }
-                        break;
-                    }else{
-                        ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
-                        if(10000 == zhaunzhang.getCode()){
-                            Double remainAmount = zhaunzhang.getData();
-                            rechargeRecord.setSurplusDividedAmount(remainAmount);
-                            rechargeRecordService.updateById(rechargeRecord);
-                            discountedPrice = new BigDecimal(discountedPrice).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
-                        }else{
+            Long orderId = order.getId();
+            try {
+                boolean lock = redisUtil.lock(orderId + "",5);
+                if(!lock){
+                    int num1 = 1;
+                    while (num1 <= 10){
+                        Thread.sleep(3000);//等待3秒
+                        lock = redisUtil.lock(orderId + "",5);
+                        if(lock){
                             break;
+                        }else{
+                            num1++;
                         }
                     }
                 }
-            }
-
-            this.updateById(order);
-
-            try {
-                saveRevenue(order);
-            } catch (Exception e) {
+                if(!lock){
+                    redisUtil.unlock(orderId + "");
+                    continue;
+                }
+                completeCollection_(order);
+            }catch (Exception e){
+                redisUtil.unlock(orderId + "");
                 e.printStackTrace();
             }
         }
     }
+
+
+
+
+
+    public void completeCollection_(Order order) throws Exception{
+        order.setState(108);
+        order.setPayTime(new Date());
+        if(null != order.getCouponId()){
+            UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId());
+            Coupon coupon = couponService.selectById(userToCoupon.getCouponId());
+
+            Driver driver = driverService.selectById(order.getDriverId());
+            AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
+            accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
+            accountChangeDetail.setUserType(2);
+            accountChangeDetail.setUserId(order.getDriverId());
+            accountChangeDetail.setCreateTime(new Date());
+            accountChangeDetail.setOldData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
+            accountChangeDetail.setType(1);
+            accountChangeDetail.setChangeType(7);
+            accountChangeDetail.setOrderId(order.getId());
+            accountChangeDetail.setExplain("优惠券收入");
+            driver.setCommission(new BigDecimal(driver.getCommission()).add(new BigDecimal(coupon.getCouponPreferentialAmount())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
+            accountChangeDetail.setNewData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
+            driverService.updateById(driver);
+            accountChangeDetailService.insert(accountChangeDetail);
+
+            //补贴中分账
+            Double discountedPrice = order.getDiscountedPrice();
+            List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
+            for (RechargeRecord rechargeRecord : rechargeRecords) {
+                Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
+                if(surplusDividedAmount.compareTo(discountedPrice) >= 0){
+                    ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback");
+                    if(10000 == zhaunzhang.getCode()){
+                        Double remainAmount = zhaunzhang.getData();
+                        rechargeRecord.setSurplusDividedAmount(remainAmount);
+                        rechargeRecordService.updateById(rechargeRecord);
+                    }
+                    break;
+                }else{
+                    ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
+                    if(10000 == zhaunzhang.getCode()){
+                        Double remainAmount = zhaunzhang.getData();
+                        rechargeRecord.setSurplusDividedAmount(remainAmount);
+                        rechargeRecordService.updateById(rechargeRecord);
+                        discountedPrice = new BigDecimal(discountedPrice).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+                    }else{
+                        break;
+                    }
+                }
+            }
+        }
+
+        this.updateById(order);
+        saveRevenue(order);
+    }
 }

--
Gitblit v1.7.1