From b58aa9e68a30029423c57886a0a30896d833cb44 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 10 八月 2023 10:13:47 +0800
Subject: [PATCH] 合并代码

---
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java |   68 ++++++++++++++++++++++------------
 1 files changed, 44 insertions(+), 24 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 0ca4eb3..0e2ab36 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
@@ -363,6 +363,9 @@
             BigDecimal multiply = new BigDecimal(w).divide(new BigDecimal(60), 0, RoundingMode.UP).multiply(new BigDecimal(num4));
             order.setOutWaitTime(w);//等待时长超出分钟
             order.setOutWaitTimePrice(multiply.doubleValue());//等待时长超出费用
+        }else{
+            order.setWaitTime(waitTime);//等待时长
+            order.setWaitTimePrice(num2);//等待费用
         }
 
         //恶劣天气
@@ -461,12 +464,12 @@
              *        合适司:积分 > 评分 > 距离
              *      3.司机没有接单直接将订单置入大厅
              */
-            boolean lock = redisUtil.lock(5);
+            boolean lock = redisUtil.lock(orderId.toString(), 5);
             if(!lock){
                 int num1 = 1;
                 while (num1 <= 10){
                     Thread.sleep(3000);//等待3秒
-                    lock = redisUtil.lock(5);
+                    lock = redisUtil.lock(orderId.toString(),5);
                     if(lock){
                         break;
                     }else{
@@ -478,11 +481,12 @@
                 order.setHallOrder(1);
                 this.updateById(order);
                 ExtraPushOrder(order);
-                redisUtil.unlock();
+                redisUtil.unlock(orderId.toString());
+                return;
             }
             SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1));
             if(null == systemConfig){
-                redisUtil.unlock();
+                redisUtil.unlock(orderId.toString());
                 return;
             }
             JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
@@ -645,10 +649,10 @@
                 this.updateById(order);
                 ExtraPushOrder(order);
             }
-            redisUtil.unlock();
+            redisUtil.unlock(orderId.toString());
         }catch (Exception e){
             e.printStackTrace();
-            redisUtil.unlock();
+            redisUtil.unlock(orderId.toString());
         }
     }
 
@@ -801,12 +805,12 @@
             if(count > 0){
                 return ResultUtil.error("还有未完成的订单");
             }
-            boolean lock = redisUtil.lock(5);
+            boolean lock = redisUtil.lock(orderId.toString(), 5);
             if(!lock){
                 int num1 = 1;
                 while (num1 <= 10){
                     Thread.sleep(3000);//等待3秒
-                    lock = redisUtil.lock(5);
+                    lock = redisUtil.lock(orderId.toString(),5);
                     if(lock){
                         break;
                     }else{
@@ -815,17 +819,18 @@
                 }
             }
             if(!lock){
+                redisUtil.unlock(orderId.toString());
                 return ResultUtil.error("请重试");
             }
             Order order = this.selectById(orderId);
             Integer state = order.getState();
             Integer oldDriverId = order.getDriverId();
             if(state == 301){
-                redisUtil.unlock();
+                redisUtil.unlock(orderId.toString());
                 return ResultUtil.error("订单已被取消");
             }
             if(state != 101 && state != 201){
-                redisUtil.unlock();
+                redisUtil.unlock(orderId.toString());
                 return ResultUtil.error("手速慢了哦");
             }
             order.setDriverId(uid);
@@ -834,7 +839,7 @@
             order.setState(102);
             order.setOrderTakingTime(new Date());
             this.updateById(order);
-            redisUtil.unlock();
+            redisUtil.unlock(orderId.toString());
 
             if(null != order.getUserId()){
                 AppUser appUser = appUserService.selectById(order.getUserId());
@@ -874,9 +879,10 @@
                     orderTransfer.setSuccessTime(new Date());
                     orderTransferService.insert(orderTransfer);
                 }
-
-                pushUtil.pushTransferSuccessful(order.getUserId(), 1, order.getId());
                 pushUtil.pushTransferSuccessful(oldDriverId, 2, order.getId());
+                if(null != order.getUserId()){
+                    pushUtil.pushTransferSuccessful(order.getUserId(), 1, order.getId());
+                }
             }
 
             //推动订单数据
@@ -889,7 +895,7 @@
                 pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState());
             }
         }catch (Exception e){
-            redisUtil.unlock();
+            redisUtil.unlock(orderId.toString());
             e.printStackTrace();
             throw e;
         }
@@ -938,6 +944,7 @@
             Map<String, String> distance1 = MapUtil.getDistance(orderInfoWarpper.getStartLng() + "," + orderInfoWarpper.getStartLat(), value, 0);
             orderInfoWarpper.setPickUpTime(Integer.valueOf(distance1.get("duration")) / 60);
         }
+        orderInfoWarpper.setDriverId(order.getDriverId());
         return orderInfoWarpper;
     }
 
@@ -1005,7 +1012,12 @@
                             .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
                     city = null != weatherCity ? weatherCity.getId().toString() : "";
                 }
-                order = getOrderPrice(2, Double.valueOf(order.getActualMileage()) / 1000, order.getWaitTime(), order, city);
+                try {
+                    order = getOrderPrice(2, Double.valueOf(order.getActualMileage()) / 1000, order.getWaitTime(), order, city);
+                }catch (Exception e){
+                    e.printStackTrace();
+                    return ResultUtil.error("计算费用异常");
+                }
                 Coupon coupon = userToCouponService.queryCoupon(order.getUserId(), order.getOrderMoney());
                 if(null != coupon){
                     order.setCouponId(coupon.getId());
@@ -1018,10 +1030,6 @@
                     order.setPayMoney(order.getOrderMoney());
                 }
 
-                //修改司机状态和积分
-                Driver driver = driverService.selectById(order.getDriverId());
-                driver.setServerStatus(1);
-                driverService.updateById(driver);
                 saveIntegral(order);
                 redisUtil.delSetValue("orderService", order.getId().toString());
                 break;
@@ -1282,6 +1290,9 @@
     @Override
     public ResultUtil driverCancelOrder(Integer uid, Long orderId, String cause) throws Exception {
         Order order = this.selectById(orderId);
+        if(null == order){
+            return ResultUtil.error("订单数据异常");
+        }
         if(uid.compareTo(order.getDriverId()) != 0){
             return ResultUtil.error("无法取消订单");
         }
@@ -1335,11 +1346,13 @@
             orderPriceWarpper.setOverDriveDistance(order.getOverDriveDistance());
             orderPriceWarpper.setMileageFee(order.getOverDrivePrice());
         }else{
-            String[] split = order.getLongDistance().split("-");
-            orderPriceWarpper.setStartPrice(order.getLongDistancePrice());
-            orderPriceWarpper.setStartDistance(Double.valueOf(split[1]));
-            orderPriceWarpper.setOverDriveDistance(order.getOverLongDistance());
-            orderPriceWarpper.setMileageFee(order.getOverLongDistancePrice());
+            if(order.getLongDistance().indexOf("-") >= 0){
+                String[] split = order.getLongDistance().split("-");
+                orderPriceWarpper.setStartPrice(order.getLongDistancePrice());
+                orderPriceWarpper.setStartDistance(Double.valueOf(split[1]));
+                orderPriceWarpper.setOverDriveDistance(order.getOverLongDistance());
+                orderPriceWarpper.setMileageFee(order.getOverLongDistancePrice());
+            }
         }
         Integer waitTime = order.getWaitTime() + order.getOutWaitTime();
         Integer s = waitTime % 60;
@@ -1465,6 +1478,13 @@
             }
             this.updateById(order);
 
+            if((payType == 1 && state == 107) || (payType == 2 && state == 108)){
+                //修改司机状态和积分
+                Driver driver = driverService.selectById(order.getDriverId());
+                driver.setServerStatus(1);
+                driverService.updateById(driver);
+            }
+
             if(payType == 2 && state == 108){//计算抽成
                 saveRevenue(order);
             }

--
Gitblit v1.7.1