From d3c3b84382677bf0c8b703912c19d02b9aa2381a Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 08 八月 2023 11:57:41 +0800
Subject: [PATCH] 修改功能和bug

---
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java         |   70 +++++++++++++++--------
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/DriverRegisterWarpper.java         |    4 +
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java                          |    5 +
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/RedisUtil.java                        |    1 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java              |    2 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java                 |    2 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/DriverServiceImpl.java        |   32 ++++++++++
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderPositionServiceImpl.java |    8 ++
 8 files changed, 92 insertions(+), 32 deletions(-)

diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java
index 63b141a..2f51c83 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java
@@ -257,4 +257,9 @@
      */
     @TableField("merchantIDCode")
     private String merchantIDCode;
+    /**
+     * 司机推荐二维码
+     */
+    @TableField("referralCode")
+    private String referralCode;
 }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java
index 99067f6..64a94d7 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java
@@ -38,7 +38,7 @@
      */
     ResultUtil driverAddOrder(Integer uid, AddOrderWarpper addOrderWarpper) throws Exception;
 
-    Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city);
+    Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city) throws Exception;
     /**
      * 获取大厅订单列表
      * @param uid
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/DriverServiceImpl.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/DriverServiceImpl.java
index e91a032..d8e0521 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/DriverServiceImpl.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/DriverServiceImpl.java
@@ -15,6 +15,7 @@
 import com.supersavedriving.driver.modular.system.util.*;
 import com.supersavedriving.driver.modular.system.util.MallBook.model.*;
 import com.supersavedriving.driver.modular.system.util.MallBook.util.TrhRequest;
+import com.supersavedriving.driver.modular.system.util.huawei.OBSUtil;
 import com.supersavedriving.driver.modular.system.util.mongodb.model.Location;
 import com.supersavedriving.driver.modular.system.util.rongyun.RongYunUtil;
 import com.supersavedriving.driver.modular.system.util.weChat.WeChatUtil;
@@ -41,6 +42,7 @@
 import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.servlet.http.HttpServletRequest;
+import java.io.InputStream;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.net.InetAddress;
@@ -159,6 +161,10 @@
             }
             driver.setCreateTime(new Date());
             this.insert(driver);
+            String s = wechatMiniProgramORCode(driver.getId());
+            driver.setReferralCode(s);
+            this.updateById(driver);
+
 
             //司机邀请注册奖励
             if(null != driver.getInviterId()){
@@ -187,6 +193,16 @@
     }
 
 
+
+    //生成小程序二维码
+    public String wechatMiniProgramORCode(Integer driverId) throws Exception{
+        InputStream release = weChatUtil.getwxacodeunlimit("pages/index/index", "driverId=" + driverId, "release");
+        String s = OBSUtil.putObjectToBucket(release, "driver_" + driverId + ".jpg");
+        return s;
+    }
+
+
+
     /**
      * 组装个人信息
      * @param driver
@@ -195,6 +211,7 @@
      */
     public Driver setDriverParamete(Driver driver, DriverRegisterWarpper driverRegisterWarpper) throws Exception{
         driver.setAvatar(driverRegisterWarpper.getAvatar());
+        driver.setName(driverRegisterWarpper.getName());
         driver.setPhone(driverRegisterWarpper.getPhone());
         driver.setEmergencyContact(driverRegisterWarpper.getEmergencyContact());
         driver.setEmergencyPhone(driverRegisterWarpper.getEmergencyPhone());
@@ -287,6 +304,11 @@
             }
         }
 
+        if(ToolUtil.isEmpty(driver.getReferralCode())){
+            String s = wechatMiniProgramORCode(driver.getId());
+            driver.setReferralCode(s);
+            this.updateById(driver);
+        }
         return ResultUtil.success(tokenWarpper);
     }
 
@@ -537,13 +559,19 @@
     @Override
     public PromotionWarpper queryPromotionQRCode(Integer uid) throws Exception {
         PromotionWarpper promotionWarpper = new PromotionWarpper();
-        promotionWarpper.setUrl("https://chaoshengdaijia.com/share/driverShare/index.html?inviterId=" + uid);
+        Driver driver1 = this.selectById(uid);
+        if(ToolUtil.isEmpty(driver1.getReferralCode())){
+            String s = wechatMiniProgramORCode(driver1.getId());
+            driver1.setReferralCode(s);
+            this.updateById(driver1);
+        }
+//        promotionWarpper.setUrl("https://chaoshengdaijia.com/share/driverShare/index.html?inviterId=" + uid);
+        promotionWarpper.setUrl(driver1.getReferralCode());
         int user = appUserService.selectCount(new EntityWrapper<AppUser>().eq("inviterType", 2).eq("inviterId", uid).eq("status", 1));
         int driver = this.selectCount(new EntityWrapper<Driver>().eq("inviterType", 2).eq("inviterId", uid).eq("approvalStatus", 2).eq("status", 1));
         promotionWarpper.setTotal(user + driver);
         promotionWarpper.setUser(user);
         promotionWarpper.setDriver(driver);
-        Driver driver1 = this.selectById(uid);
         promotionWarpper.setAvatar(driver1.getAvatar());
         promotionWarpper.setName(driver1.getName());
         return promotionWarpper;
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderPositionServiceImpl.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderPositionServiceImpl.java
index 8c6a2bd..00b1cd2 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderPositionServiceImpl.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderPositionServiceImpl.java
@@ -48,7 +48,11 @@
     @Override
     public void saveOrderPosition(DriverPositionWarpper driverPositionWarpper) throws Exception {
         Integer orderId = driverPositionWarpper.getOrderId();
+        Integer driverId = driverPositionWarpper.getDriverId();
         Order order = orderService.selectById(orderId);
+        if(null == order.getDriverId() || order.getDriverId().compareTo(driverId) != 0){
+            return;
+        }
         if(order.getState() != 105 && order.getState() != 401){
             return;
         }
@@ -136,7 +140,7 @@
             }
         }
 
-        if(50 >= wgs84 && 3 <= (null == num ? 0 : num)){//20秒(5秒上传一次数据)
+        if(50 >= wgs84 && 6 <= (null == num ? 0 : num)){//30秒(5秒上传一次数据)
             Integer integer = map.get(order.getId().toString());
             map.put(order.getId().toString(), null == integer ? 0 : integer + 1);
             //进入等待状态
@@ -152,7 +156,7 @@
                 e.printStackTrace();
             }
         }
-        if(50 >= wgs84 && 3 > (null == num ? 0 : num)){
+        if(50 >= wgs84 && 6 > (null == num ? 0 : num)){
             Integer integer = map.get(order.getId().toString());
             map.put(order.getId().toString(), null == integer ? 0 : integer + 1);
         }
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 6443d6d..b40f831 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
@@ -247,7 +247,7 @@
      * @param city          查询天气的城市
      * @return
      */
-    public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city){
+    public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city) throws Exception{
         order = getOrderInitialPrice(order);
         SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 5));
         if(null == systemConfig){
@@ -360,6 +360,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);//等待费用
         }
 
         //恶劣天气
@@ -456,12 +459,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{
@@ -473,11 +476,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());
@@ -640,10 +644,10 @@
                 this.updateById(order);
                 ExtraPushOrder(order);
             }
-            redisUtil.unlock();
+            redisUtil.unlock(orderId.toString());
         }catch (Exception e){
             e.printStackTrace();
-            redisUtil.unlock();
+            redisUtil.unlock(orderId.toString());
         }
     }
 
@@ -796,12 +800,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{
@@ -810,17 +814,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);
@@ -829,7 +834,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());
@@ -869,9 +874,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());
+                }
             }
 
             //推动订单数据
@@ -884,7 +890,7 @@
                 pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState());
             }
         }catch (Exception e){
-            redisUtil.unlock();
+            redisUtil.unlock(orderId.toString());
             e.printStackTrace();
             throw e;
         }
@@ -933,6 +939,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;
     }
 
@@ -1000,7 +1007,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());
@@ -1013,10 +1025,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;
@@ -1257,6 +1265,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("无法取消订单");
         }
@@ -1310,11 +1321,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;
@@ -1430,6 +1443,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);
             }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/RedisUtil.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/RedisUtil.java
index f8d1e38..fd3d1f1 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/RedisUtil.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/RedisUtil.java
@@ -188,7 +188,6 @@
                 timer.schedule(new TimerTask() {
                     @Override
                     public void run() {
-                        System.err.println("定时任务启动");
                         Jedis resource = jedisPool.getResource();
                         resource.setex(finalKey, time, value);
                         resource.close();
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/DriverRegisterWarpper.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/DriverRegisterWarpper.java
index 649f11c..a3f9dbc 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/DriverRegisterWarpper.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/DriverRegisterWarpper.java
@@ -14,8 +14,10 @@
 public class DriverRegisterWarpper {
     @ApiModelProperty(value = "注册区域code", required = true, dataType = "string")
     private String code;
-    @ApiModelProperty(value = "头像", required = true, dataType = "string")
+    @ApiModelProperty(value = "头像", required = false, dataType = "string")
     private String avatar;
+    @ApiModelProperty(value = "姓名", required = false, dataType = "string")
+    private String name;
     @ApiModelProperty(value = "手机号码", required = true, dataType = "string")
     private String phone;
     @ApiModelProperty(value = "紧急联系人", required = true, dataType = "string")
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java
index d59cc34..13c7880 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java
@@ -17,6 +17,8 @@
     private String userName;
     @ApiModelProperty("用户电话")
     private String userPhone;
+    @ApiModelProperty("司机id")
+    private Integer driverId;
     @ApiModelProperty("用户余额")
     private Double balance;
     @ApiModelProperty("下单次数")

--
Gitblit v1.7.1