From 4f8b61980b0db5995c16139d8eb9542b66da8a9f Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 27 六月 2023 11:58:21 +0800
Subject: [PATCH] 修改bug

---
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java |  189 ++++++++++++++---------------------------------
 1 files changed, 56 insertions(+), 133 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 a87c1fc..f76f109 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
@@ -21,6 +21,8 @@
 import com.supersavedriving.driver.modular.system.warpper.AddOrderWarpper;
 import com.supersavedriving.driver.modular.system.warpper.HallOrderList;
 import com.supersavedriving.driver.modular.system.warpper.OrderInfoWarpper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -46,6 +48,8 @@
 */
 @Service
 public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {
+
+    Logger logger = LoggerFactory.getLogger(OrderServiceImpl.class);
 
     @Autowired
     private IDriverWorkService driverWorkService;
@@ -593,19 +597,22 @@
                     @Override
                     public void run() {
                         Order order1 = OrderServiceImpl.this.selectById(order.getId());
-                        if(order1.getState() != 101 && order1.getState() != 201 && order1.getDriverId().compareTo(driver1.getId()) != 0){
+                        if(order1.getState() != 101 && order1.getState() != 201 && order1.getState() != 301 && order1.getDriverId().compareTo(driver1.getId()) != 0){
                             driver1.setServerStatus(1);
                             driverService.updateById(driver1);
                         }
 
-                        if(order1.getState() == 201 || (order1.getState() == 101 && null == order1.getDriverId())){
+                        if(order1.getState() == 201 || order1.getState() == 301 || (order1.getState() == 101 && null == order1.getDriverId())){
                             driver1.setServerStatus(1);
                             driverService.updateById(driver1);
-
+                        }
+                        if(order1.getState() == 201 || (order1.getState() == 101 && null == order1.getDriverId())){
                             order1.setHallOrder(1);
                             OrderServiceImpl.this.updateById(order1);
                             ExtraPushOrder(order);
                         }
+
+
                     }
                 }, num4 * 1000);
             }else{
@@ -650,7 +657,7 @@
         for (Driver driver1 : drivers) {
             String value = redisUtil.getValue("DRIVER" + driver1.getId());
             if (ToolUtil.isEmpty(value)) {
-                return;
+                continue;
             }
             pushUtil.pushGrabOrderExtras(driver1.getId(), 2);
         }
@@ -960,6 +967,17 @@
                     city = null != weatherCity ? weatherCity.getId().toString() : "";
                 }
                 order = getOrderPrice(2, Double.valueOf(order.getActualMileage()) / 1000, order.getWaitTime(), order, city);
+                Coupon coupon = userToCouponService.queryCoupon(order.getUserId(), order.getOrderMoney());
+                if(null != coupon){
+                    order.setCouponId(coupon.getId());
+                    order.setDiscountedPrice(coupon.getCouponPreferentialAmount());
+                    order.setPayMoney(order.getOrderMoney() - coupon.getCouponPreferentialAmount());
+                    UserToCoupon userToCoupon = userToCouponService.selectById(coupon.getId());
+                    userToCoupon.setValidCount(userToCoupon.getValidCount() - 1);
+                    userToCouponService.updateById(userToCoupon);
+                }else{
+                    order.setPayMoney(order.getOrderMoney());
+                }
 
                 //修改司机状态和积分
                 Driver driver = driverService.selectById(order.getDriverId());
@@ -1245,7 +1263,7 @@
         OrderPriceWarpper orderPriceWarpper = new OrderPriceWarpper();
         orderPriceWarpper.setStartTime(order.getArrivalTimeAtTheAppointmentPoint().getTime());
         orderPriceWarpper.setEndTime(order.getGetoffTime().getTime());
-        orderPriceWarpper.setActualMileage(Double.valueOf(order.getActualMileage() / 1000));
+        orderPriceWarpper.setActualMileage(Double.valueOf(order.getActualMileage()) / 1000);
         if(null != order.getStartPrice() && 0 != order.getStartPrice()){
             orderPriceWarpper.setStartPrice(order.getStartPrice());
             orderPriceWarpper.setStartDistance(order.getStartDistance());
@@ -1267,7 +1285,7 @@
         orderPriceWarpper.setDiscountedPrice(order.getDiscountedPrice());
         orderPriceWarpper.setBadWeatherPrice(order.getBadWeatherPrice());
         orderPriceWarpper.setPayMoney(order.getPayMoney());
-        if(order.getState() < 107){
+        if(order.getState() < 106){
             orderPriceWarpper.setPayMoney(order.getOrderMoney());
         }
         orderPriceWarpper.setWxCollectionCode(driver.getWxCollectionCode());
@@ -1295,70 +1313,14 @@
 
         if(payType == 2 && state == 107){
             order.setPayType(3);
-            Coupon coupon = userToCouponService.queryCoupon(order.getUserId(), order.getOrderMoney());
-            if(null != coupon){
-                order.setCouponId(coupon.getId());
-                order.setDiscountedPrice(coupon.getCouponPreferentialAmount());
-                order.setPayMoney(order.getOrderMoney() - coupon.getCouponPreferentialAmount());
-            }else{
-                order.setPayMoney(order.getOrderMoney());
-            }
         }
 
         if(payType == 2 && state == 108){
             order.setPayTime(new Date());
             if(null != order.getCouponId()){
                 UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId());
-                if(userToCoupon.getValidCount() > 0){
-                    userToCoupon.setValidCount(userToCoupon.getValidCount() - 1);
-                    userToCouponService.updateById(userToCoupon);
-                    Coupon coupon = couponService.selectById(userToCoupon.getCouponId());
+                Coupon coupon = couponService.selectById(userToCoupon.getCouponId());
 
-                    Driver driver = driverService.selectById(order.getDriverId());
-                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
-                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
-                    accountChangeDetail.setUserType(2);
-                    accountChangeDetail.setUserId(order.getDriverId());
-                    accountChangeDetail.setCreateTime(new Date());
-                    accountChangeDetail.setOldData(driver.getCouponBalance() + driver.getCommission());
-                    accountChangeDetail.setType(1);
-                    accountChangeDetail.setChangeType(7);
-                    accountChangeDetail.setOrderId(order.getId());
-                    accountChangeDetail.setExplain("优惠券收入");
-                    driver.setCommission(driver.getCommission() + coupon.getCouponPreferentialAmount());
-                    accountChangeDetail.setNewData(driver.getCouponBalance() + driver.getCommission());
-                    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 zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback");
-                            if(10000 == zhaunzhang.getCode()){
-                                rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - discountedPrice);
-                                rechargeRecordService.updateById(rechargeRecord);
-                            }
-                            break;
-                        }else{
-                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
-                            if(10000 == zhaunzhang.getCode()){
-                                rechargeRecord.setSurplusDividedAmount(0D);
-                                rechargeRecordService.updateById(rechargeRecord);
-                                discountedPrice -= surplusDividedAmount;
-                            }else{
-                                break;
-                            }
-                        }
-                    }
-
-
-                }
-            }
-
-            if(order.getDiscountAmount() > 0){
                 Driver driver = driverService.selectById(order.getDriverId());
                 AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                 accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
@@ -1369,28 +1331,30 @@
                 accountChangeDetail.setType(1);
                 accountChangeDetail.setChangeType(7);
                 accountChangeDetail.setOrderId(order.getId());
-                accountChangeDetail.setExplain("折扣优惠收入");
-                driver.setCommission(driver.getCommission() + order.getDiscountAmount());
+                accountChangeDetail.setExplain("优惠券收入");
+                driver.setCommission(driver.getCommission() + coupon.getCouponPreferentialAmount());
                 accountChangeDetail.setNewData(driver.getCouponBalance() + driver.getCommission());
                 driverService.updateById(driver);
                 accountChangeDetailService.insert(accountChangeDetail);
 
                 //补贴中分账
-                Double discountedPrice = order.getDiscountAmount();
+                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 zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback");
+                        ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback");
                         if(10000 == zhaunzhang.getCode()){
-                            rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - discountedPrice);
+                            Double remainAmount = zhaunzhang.getData();
+                            rechargeRecord.setSurplusDividedAmount(remainAmount);
                             rechargeRecordService.updateById(rechargeRecord);
                         }
                         break;
                     }else{
-                        ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
+                        ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                         if(10000 == zhaunzhang.getCode()){
-                            rechargeRecord.setSurplusDividedAmount(0D);
+                            Double remainAmount = zhaunzhang.getData();
+                            rechargeRecord.setSurplusDividedAmount(remainAmount);
                             rechargeRecordService.updateById(rechargeRecord);
                             discountedPrice -= surplusDividedAmount;
                         }else{
@@ -1399,6 +1363,7 @@
                     }
                 }
             }
+
         }
         this.updateById(order);
 
@@ -1427,7 +1392,7 @@
      * @param notifyUrl
      * @return
      */
-    public ResultUtil zhaunzhang(Integer id, String merOrderId, String toUserId, Double amount, String notifyUrl){
+    public ResultUtil<Double> zhaunzhang(Integer id, String merOrderId, String toUserId, Double amount, String notifyUrl){
         Transfer transfer = new Transfer();
         transfer.setDepositMerOrderId(merOrderId);
         transfer.setToUserId(toUserId);
@@ -1439,12 +1404,13 @@
         InterfaceResponse execute = request.execute(transfer, Transfer.SERVICE_CODE);
         if("0000".equals(execute.getCode())){
             JSONObject jsonObject = JSON.parseObject(execute.getResult());
-            Integer status = jsonObject.getInteger("status");//0:待处理;1:成功;2:失败
-            if(2 == status){
+            String status = jsonObject.getString("status");//0:待处理;1:成功;2:失败
+            if("2" == status){
                 System.err.println("转账失败");
                 return ResultUtil.error("转账失败");
             }
-            return ResultUtil.success();
+            Double remainAmount = Double.valueOf(jsonObject.getInteger("remainAmount")) / 100;
+            return ResultUtil.success(remainAmount);
         }else{
             System.err.println("转账失败:" + execute.getMsg());
             return ResultUtil.error(execute.getMsg());
@@ -1505,7 +1471,7 @@
                 accountChangeDetail1.setChangeType(9);
                 accountChangeDetail1.setOrderId(order.getId());
                 accountChangeDetail1.setOldData(driver.getBalance() + driver.getBackgroundBalance());
-                accountChangeDetail1.setExplain("线下收款服务费支出");
+                accountChangeDetail1.setExplain("订单信息费");
                 accountChangeDetail1.setCreateTime(new Date());
                 driver.setBalance(driver.getBalance() - num3);
                 accountChangeDetail1.setNewData(driver.getBalance() + driver.getBackgroundBalance());
@@ -1970,7 +1936,7 @@
             Integer status = jsonObject.getInteger("status");//0:待处理 1:成功 2:失败
             String merOrderId1 = jsonObject.getString("merOrderId");
             if(2 == status){
-                System.err.println("订单支付成功后的分账处理异常失败");
+                logger.warn("订单支付成功后的分账处理异常失败");
                 return ResultUtil.error("订单支付成功后的分账处理异常失败");
             }
             if(1 == status){
@@ -1989,9 +1955,10 @@
                 return ResultUtil.success();
             }
         }else{
-            System.err.println("订单支付成功后的分账处理异常 :" + execute.getMsg());
+            logger.warn("订单支付成功后的分账处理异常 :" + execute.getMsg());
             return ResultUtil.error("订单支付成功后的分账处理异常 :" + execute.getMsg());
         }
+        logger.warn("未知异常");
         return ResultUtil.error("未知异常");
     }
 
@@ -2018,9 +1985,9 @@
         if("0000".equals(execute1.getCode())){
             JSONObject jsonObject = JSON.parseObject(execute1.getResult());
             String merOrderId = jsonObject.getString("merOrderId");
-            System.err.println("分账确认收货成功");
+            logger.warn("分账确认收货成功");
         }else{
-            System.err.println("分账确认收货异常" + execute1.getMsg());
+            logger.warn("分账确认收货异常" + execute1.getMsg());
         }
     }
 
@@ -2200,54 +2167,8 @@
             order.setPayTime(new Date());
             if(null != order.getCouponId()){
                 UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId());
-                if(userToCoupon.getValidCount() > 0){
-                    userToCoupon.setValidCount(userToCoupon.getValidCount() - 1);
-                    userToCouponService.updateById(userToCoupon);
-                    Coupon coupon = couponService.selectById(userToCoupon.getCouponId());
+                Coupon coupon = couponService.selectById(userToCoupon.getCouponId());
 
-                    Driver driver = driverService.selectById(order.getDriverId());
-                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
-                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
-                    accountChangeDetail.setUserType(2);
-                    accountChangeDetail.setUserId(order.getDriverId());
-                    accountChangeDetail.setCreateTime(new Date());
-                    accountChangeDetail.setOldData(driver.getCouponBalance() + driver.getCommission());
-                    accountChangeDetail.setType(1);
-                    accountChangeDetail.setChangeType(7);
-                    accountChangeDetail.setOrderId(order.getId());
-                    accountChangeDetail.setExplain("优惠券收入");
-                    driver.setCommission(driver.getCommission() + coupon.getCouponPreferentialAmount());
-                    accountChangeDetail.setNewData(driver.getCouponBalance() + driver.getCommission());
-                    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 zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback");
-                            if(10000 == zhaunzhang.getCode()){
-                                rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - discountedPrice);
-                                rechargeRecordService.updateById(rechargeRecord);
-                            }
-                            break;
-                        }else{
-                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
-                            if(10000 == zhaunzhang.getCode()){
-                                rechargeRecord.setSurplusDividedAmount(0D);
-                                rechargeRecordService.updateById(rechargeRecord);
-                                discountedPrice -= surplusDividedAmount;
-                            }else{
-                                break;
-                            }
-                        }
-                    }
-                }
-            }
-
-            if(order.getDiscountAmount() > 0){
                 Driver driver = driverService.selectById(order.getDriverId());
                 AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                 accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
@@ -2258,28 +2179,30 @@
                 accountChangeDetail.setType(1);
                 accountChangeDetail.setChangeType(7);
                 accountChangeDetail.setOrderId(order.getId());
-                accountChangeDetail.setExplain("折扣优惠收入");
-                driver.setCommission(driver.getCommission() + order.getDiscountAmount());
+                accountChangeDetail.setExplain("优惠券收入");
+                driver.setCommission(driver.getCommission() + coupon.getCouponPreferentialAmount());
                 accountChangeDetail.setNewData(driver.getCouponBalance() + driver.getCommission());
                 driverService.updateById(driver);
                 accountChangeDetailService.insert(accountChangeDetail);
 
                 //补贴中分账
-                Double discountedPrice = order.getDiscountAmount();
+                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 zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback");
+                        ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback");
                         if(10000 == zhaunzhang.getCode()){
-                            rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - discountedPrice);
+                            Double remainAmount = zhaunzhang.getData();
+                            rechargeRecord.setSurplusDividedAmount(remainAmount);
                             rechargeRecordService.updateById(rechargeRecord);
                         }
                         break;
                     }else{
-                        ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
+                        ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                         if(10000 == zhaunzhang.getCode()){
-                            rechargeRecord.setSurplusDividedAmount(0D);
+                            Double remainAmount = zhaunzhang.getData();
+                            rechargeRecord.setSurplusDividedAmount(remainAmount);
                             rechargeRecordService.updateById(rechargeRecord);
                             discountedPrice -= surplusDividedAmount;
                         }else{

--
Gitblit v1.7.1