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/OrderServiceImpl.java |   80 ++++++++++++++++++++++++++--------------
 1 files changed, 52 insertions(+), 28 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 6a25374..b6fa8fc 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
@@ -196,10 +196,10 @@
                     .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
             city = null != weatherCity ? weatherCity.getId().toString() : "";
         }
-        order = getOrderPrice(1, d, 0, order, city);
+        order.setCreateTime(new Date());
+        order = getOrderPrice(1, d, 0D, order, city);
         order.setState(null == order.getDriverId() ? 101 : 102);
         order.setStatus(1);
-        order.setCreateTime(new Date());
         this.insert(order);
         driverService.updateById(driver);
         //推送状态
@@ -228,8 +228,9 @@
      * @param city          查询天气的城市
      * @return
      */
-    public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city){
+    public Order getOrderPrice(Integer type, Double distance, Double waitTime, Order order, String city){
         distance = new BigDecimal(distance).setScale(0, BigDecimal.ROUND_UP).doubleValue();
+        waitTime = new BigDecimal(waitTime).setScale(0, BigDecimal.ROUND_UP).doubleValue();
         order = getOrderInitialPrice(order);
         SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 5));
         if(null == systemConfig){
@@ -244,7 +245,7 @@
         JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
         JSONArray chargeStandard = jsonObject.getJSONArray("ChargeStandard");
         JSONObject extraCost = jsonObject.getJSONObject("ExtraCost");
-        Date date = new Date();
+        Date date = order.getCreateTime();
         for (int i = 0; i < chargeStandard.size(); i++) {
             JSONObject jsonObject1 = chargeStandard.getJSONObject(i);
             String num1 = jsonObject1.getString("num1");
@@ -321,9 +322,9 @@
         }
 
         //计算额外费用
-        Integer num1 = extraCost.getInteger("num1");//等待时长
+        Double num1 = extraCost.getDouble("num1");//等待时长
         Double num2 = extraCost.getDouble("num2");//等待费
-        Integer num3 = extraCost.getInteger("num3");//等待超出时长
+        Double num3 = extraCost.getDouble("num3");//等待超出时长
         Double num4 = extraCost.getDouble("num4");//等到超出时长费用单价 X/分钟
         Double num5 = extraCost.getDouble("num5");//恶劣天气公里
         Double num6 = extraCost.getDouble("num6");//恶劣天气费
@@ -336,7 +337,7 @@
             order.setWaitTime(num1);//等待时长
             order.setWaitTimePrice(num2);//等待费用
 
-            Integer w = waitTime - num3;
+            Double w = waitTime - num1 - num3;
             BigDecimal multiply = new BigDecimal(w).multiply(new BigDecimal(num4));
             order.setOutWaitTime(w);//等待时长超出分钟
             order.setOutWaitTimePrice(multiply.doubleValue());//等待时长超出费用
@@ -409,7 +410,7 @@
         order.setOverLongDistancePrice(0d);//超出长途里程费
 //        order.setWaitTime(0);//等待时长
         order.setWaitTimePrice(0D);//等待费
-        order.setOutWaitTime(0);//超出等待时长
+        order.setOutWaitTime(0D);//超出等待时长
         order.setOutWaitTimePrice(0D);//超出等待时长费
         order.setBadWeatherDistance(0D);//恶劣天气里程
         order.setBadWeatherPrice(0D);//恶劣天气里程费
@@ -429,6 +430,13 @@
      */
     public void pushOrder(Order order){
         try {
+            /**
+             * 1.先找最大推单范围内的优推司机 -》 距离最近
+             * 没有1 - 》
+             *      2.按照后台推送配置在范围内查找合适司机
+             *        合适司:积分 > 评分 > 距离
+             *      3.司机没有接单直接将订单置入大厅
+             */
             boolean lock = redisUtil.lock(5);
             if(!lock){
                 int num1 = 1;
@@ -442,13 +450,13 @@
                     }
                 }
             }
-            /**
-             * 1.先找最大推单范围内的优推司机 -》 距离最近
-             * 没有1 - 》
-             *      2.按照后台推送配置在范围内查找合适司机
-             *        合适司:积分 > 评分 > 距离
-             *      3.司机没有接单直接将订单置入大厅
-             */
+            if(!lock){
+                redisUtil.unlock();
+                order.setHallOrder(1);
+                this.updateById(order);
+                ExtraPushOrder(order);
+                return;
+            }
             SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1));
             if(null == systemConfig){
                 redisUtil.unlock();
@@ -577,13 +585,13 @@
                 new Timer().schedule(new TimerTask() {
                     @Override
                     public void run() {
+                        driver1.setServerStatus(1);
+                        driverService.updateById(driver1);
+
                         Order order1 = OrderServiceImpl.this.selectById(order.getId());
                         if(order1.getState() == 101 || order1.getState() == 201){
                             order1.setHallOrder(1);
                             OrderServiceImpl.this.updateById(order1);
-
-                            driver1.setServerStatus(1);
-                            driverService.updateById(driver1);
                             ExtraPushOrder(order);
                         }
                     }
@@ -694,6 +702,9 @@
         orderRefusalService.insert(orderRefusal);
 
         Driver driver = driverService.selectById(uid);
+        driver.setServerStatus(1);
+        driverService.updateById(driver);
+
         //扣除积分
         SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
         if(null != systemConfig) {
@@ -751,6 +762,9 @@
                         num1++;
                     }
                 }
+            }
+            if(!lock){
+                return ResultUtil.error("请重试");
             }
             Order order = this.selectById(orderId);
             Integer state = order.getState();
@@ -904,7 +918,7 @@
                     order.setStartTime(new Date());
                 }
                 //计算等待用户时长
-                Integer w = new BigDecimal((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 60000).setScale(0, BigDecimal.ROUND_UP).intValue();
+                Double w = new BigDecimal(Double.valueOf(System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 60000).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
                 order.setWaitTime(order.getWaitTime() + w);
                 order.setStartWaitTime(null);
                 break;
@@ -944,6 +958,9 @@
         }
         return ResultUtil.success();
     }
+
+
+
 
 
     /**
@@ -1029,9 +1046,9 @@
                     pushOrderInfoWarpper.setDriverLat(split[1]);
                     pushOrderInfoWarpper.setDriverLng(split[0]);
                 }
-                int w = 0;
+                Double w = 0D;
                 if(null != order.getStartWaitTime()){
-                    w = Double.valueOf((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 60000).intValue();
+                    w = Double.valueOf((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 60000);
                 }
                 pushOrderInfoWarpper.setWaitTime(order.getWaitTime() + w);
                 pushOrderInfoWarpper.setState(order.getState());
@@ -1125,7 +1142,7 @@
                     .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
             city = null != weatherCity ? weatherCity.getId().toString() : "";
         }
-        order = getOrderPrice(1, d, 0, order, city);
+        order = getOrderPrice(1, d, 0D, order, city);
         this.updateById(order);
         return ResultUtil.success();
     }
@@ -1249,6 +1266,12 @@
             return ResultUtil.error("操作失败");
         }
         Order order = this.selectById(orderId);
+        if(state == 107 && order.getState() != 106){
+            return ResultUtil.error("操作失败");
+        }
+        if(state == 108 && order.getState() != 107){
+            return ResultUtil.error("操作失败");
+        }
         order.setState(state);
 
         if(payType == 2 && state == 107){
@@ -1256,7 +1279,7 @@
             Coupon coupon = userToCouponService.queryCoupon(order.getUserId(), order.getOrderMoney());
             if(null != coupon){
                 order.setCouponId(coupon.getId());
-                order.setDiscountAmount(coupon.getCouponPreferentialAmount());
+                order.setDiscountedPrice(coupon.getCouponPreferentialAmount());
                 order.setPayMoney(order.getOrderMoney() - coupon.getCouponPreferentialAmount());
             }else{
                 order.setPayMoney(order.getOrderMoney());
@@ -1459,8 +1482,8 @@
                 SystemConfig systemConfig1 = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 2));
                 if(null != systemConfig1){
                     JSONObject jsonObject1 = JSON.parseObject(systemConfig1.getContent());
-                    //司机推荐首单收入
-                    if(null != appUser.getInviterType() && appUser.getInviterType() == 2 && count == 1){
+                    //司机推荐用户收入
+                    if(null != appUser.getInviterType() && appUser.getInviterType() == 2){
                         Double num1 = jsonObject1.getDouble("num1");
                         num1 = (num3 >= num1 ? num1 : num3);
 
@@ -1474,7 +1497,7 @@
                             accountChangeDetail.setType(1);
                             accountChangeDetail.setChangeType(5);
                             accountChangeDetail.setOldData(driver1.getCouponBalance() + driver1.getCommission());
-                            accountChangeDetail.setExplain("邀请用户首单奖励");
+                            accountChangeDetail.setExplain("邀请用户奖励");
                             accountChangeDetail.setCreateTime(new Date());
                             driver1.setCommission(driver1.getCommission() + num1);
                             accountChangeDetail.setNewData(driver1.getCouponBalance() + driver1.getCommission());
@@ -1872,7 +1895,7 @@
             }
         }
         //司机余额扣减抽佣金额,将金额先分账给平台
-        if(order.getPayMoney() > payMoney){
+        if(order.getPayMoney().compareTo(payMoney) > 0){
             driver = driverService.selectById(order.getDriverId());
             Double m = order.getPayMoney() - payMoney;
             AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
@@ -2176,8 +2199,9 @@
     @Override
     public void completeCollection() {
         List<Order> orders = this.selectList(new EntityWrapper<Order>().eq("state", 107).eq("status", 1)
-                .eq("payType", 3).last(" and UNIX_TIMESTAMP(getoffTime) + 120 <= UNIX_TIMESTAMP(now())"));
+                .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());

--
Gitblit v1.7.1