From 4ab710d8d70017f090dd9601099ded1a50a58a10 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期一, 27 四月 2026 22:34:52 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java |  134 ++++++++++++++++++++++++++++----------------
 1 files changed, 86 insertions(+), 48 deletions(-)

diff --git a/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
index 98f0720..6617be5 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
@@ -480,7 +480,7 @@
         }
         // 鐘舵�佹牎楠岋細auditStatus=null(鏈彁浜�)鎴朼uditStatus=2(瀹℃壒椹冲洖)鍙彁浜よ璇�
         if (driverInfo.getAuditStatus() != null
-                && !Constants.equalsInteger(driverInfo.getAuditStatus(), Constants.TWO)) {
+                && !(Constants.equalsInteger(driverInfo.getAuditStatus(), Constants.TWO)||Constants.equalsInteger(driverInfo.getAuditStatus(), 99))) {
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "褰撳墠鐘舵�佷笉鍏佽鎻愪氦璁よ瘉");
         }
         // 鏍规嵁杞﹁締绫诲瀷鍒ゆ柇鏄惁闇�瑕侀┚椹惰瘉
@@ -634,7 +634,7 @@
         // 瀹℃壒缁撴灉锛歛uditDTO.auditStatus 0=閫氳繃鈫抋uditStatus=1锛�1=鎷掔粷鈫抋uditStatus=2
         Integer newAuditStatus;
         if (Constants.equalsInteger(auditDTO.getAuditStatus(), Constants.ZERO)) {
-            newAuditStatus = Constants.ONE;  // 瀹℃壒閫氳繃
+            newAuditStatus = Constants.THREE;  // 瀹℃壒閫氳繃
             // 瀹℃壒閫氳繃鏃跺徃鏈哄畾绾т负蹇呭~
             if (auditDTO.getDriverLevel() == null || auditDTO.getDriverLevel() < 1 || auditDTO.getDriverLevel() > 5) {
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀹℃壒閫氳繃鏃跺繀椤诲~鍐欏徃鏈哄畾绾�");
@@ -1109,10 +1109,12 @@
         wrapper.selectAll(Orders.class)
                 .select("s1.name", Orders::getDepositShopName)
                 .select("s1.address", Orders::getDepositShopAddress)
+                .select("s1.telephone", Orders::getDepositShopLinkPhone)
                 .select("s2.name", Orders::getTakeShopName)
                 .select("s2.address", Orders::getTakeShopAddress)
-                .select("s2.link_phone as takeShopLinkPhone")
+                .select("s2.telephone", Orders::getTakeShopLinkPhone)
                 .select("c2.other_field as c2OtherField")
+                .select("c1.name as goodTypeName")
                 .select("IF(EXISTS(SELECT 1 FROM orders_detail od JOIN category c3 ON c3.id = od.LUGGAGE_ID AND c3.TYPE = 4 AND c3.OTHER_FIELD = '1' WHERE od.ORDER_ID = t.ID AND od.DELETED = 0), 1, 0) as hasOversized")
                 .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID and s1.DELETED = 0")
                 .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID and s2.DELETED = 0")
@@ -1175,11 +1177,23 @@
         vo.setTakeShopId(base.getTakeShopId());
 
         vo.setTakeDistance(base.getTakeDistance());
-        vo.setContactPhone(base.getContactPhone());
+
+        // 鑱旂郴鐢佃瘽锛氭寜璁㈠崟鐘舵�佽繑鍥�
+        vo.setDepositShopPhone(order.getDepositShopLinkPhone());
+        if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.delivering.getStatus())
+                || Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.arrived.getStatus())) {
+            if (order.getTakeShopId() != null && StringUtils.isNotBlank(order.getTakeShopLinkPhone())) {
+                vo.setTakeContactPhone(order.getTakeShopLinkPhone());
+            } else {
+                vo.setTakeContactPhone(order.getTakePhone());
+            }
+        }
         vo.setDriverFee(base.getDriverFee());
         vo.setUrgentAmount(base.getUrgentAmount());
+        vo.setPlatformRewardAmount(order.getPlatformRewardAmount());
         vo.setIsValuable(base.getIsValuable());
         vo.setGoodLevelName(base.getGoodLevelName());
+        vo.setGoodTypeName(order.getGoodTypeName());
         vo.setHasOversized(base.getHasOversized());
         vo.setDriverVerifyCode(base.getDriverVerifyCode());
 
@@ -1199,6 +1213,11 @@
         // 璇︽儏鐗规湁瀛楁
         vo.setStatus(order.getStatus());
         vo.setStatusDesc(getStatusDesc(order.getStatus()));
+        vo.setCreateTime(order.getCreateTime());
+        vo.setAcceptTime(order.getAcceptTime());
+        vo.setDriverTakeTime(order.getDriverTakeTime());
+        vo.setFinishTime(order.getFinishTime());
+        vo.setRemark(order.getRemark());
 
         // 瀹㈡埛淇℃伅
         String customerInfo = "";
@@ -1211,52 +1230,27 @@
         vo.setCustomerInfo(customerInfo);
 
         // 瀵艰埅缁忕含搴︼紙浣跨敤Orders鑷甫鍧愭爣锛�
-        if (Constants.equalsInteger(order.getStatus(), Constants.TWO)) {
+        if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.accepted.getStatus())) {
             if (order.getDepositLgt() != null && order.getDepositLat() != null) {
                 vo.setNavigateLat(order.getDepositLgt().doubleValue());
                 vo.setNavigateLng(order.getDepositLat().doubleValue());
             }
-        } else {
+        } else if(Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.delivering.getStatus())){
             if (order.getTakeLgt() != null && order.getTakeLat() != null) {
                 vo.setNavigateLat(order.getTakeLgt().doubleValue());
                 vo.setNavigateLng(order.getTakeLat().doubleValue());
             }
         }
 
-        // 寮傚湴瀵勫瓨瀹炴椂缁忕含搴︼紙鎸夌姸鎬佽繑鍥烇級
-        if (Constants.ONE.equals(order.getType())) {
-            // 鍙告満鑷韩缁忕含搴�
-            vo.setDriverLng(driverLng);
-            vo.setDriverLat(driverLat);
-
-            // status=3(宸叉帴鍗�)锛氳繑鍥炲瓨浠堕棬搴楃粡绾害
-            if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.accepted.getStatus())) {
-                if (order.getDepositShopId() != null) {
-                    ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId());
-                    if (depositShop != null) {
-                        vo.setDepositShopLng(depositShop.getLongitude());
-                        vo.setDepositShopLat(depositShop.getLatitude());
-                    }
-                }
-            }
-            // status=4(閰嶉�佷腑)锛氳繑鍥炲彇浠剁偣缁忕含搴�
-            if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.delivering.getStatus())) {
-                if (order.getTakeShopId() != null) {
-                    ShopInfo takeShop = shopInfoMapper.selectById(order.getTakeShopId());
-                    if (takeShop != null) {
-                        vo.setTakeLng(takeShop.getLongitude());
-                        vo.setTakeLat(takeShop.getLatitude());
-                    }
-                } else if (order.getTakeLgt() != null && order.getTakeLat() != null) {
-                    vo.setTakeLng(order.getTakeLgt().doubleValue());
-                    vo.setTakeLat(order.getTakeLat().doubleValue());
-                }
-            }
-        }
-
+        vo.setDepositShopLng(order.getDepositLgt().doubleValue());
+        vo.setDepositShopLat(order.getDepositLat().doubleValue());
+        vo.setTakeLng(order.getTakeLgt().doubleValue());
+        vo.setTakeLat(order.getTakeLat().doubleValue());
+        vo.setDriverLng(driverLng);
+        vo.setDriverLat(driverLat);
         // 涓嬪崟闄勪欢鍥剧墖
         String imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
-                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILES).getCode();
+                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.ORDERS_FILES).getCode();
         vo.setOrderImages(getFileUrls(orderId, Constants.FileType.ORDER_FILE.getKey(), imgPrefix));
 
         // 璇勪环淇℃伅
@@ -1297,7 +1291,7 @@
         if (!Constants.ONE.equals(order.getType())) {
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "浠呭紓鍦板瘎瀛樿鍗曞彲鍙栨秷");
         }
-        if (!Constants.TWO.equals(order.getStatus())) {
+        if (!Constants.equalsInteger(Constants.OrderStatus.accepted.getStatus(), order.getStatus())) {
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽鍙栨秷");
         }
         if (!driverId.equals(order.getAcceptDriver())) {
@@ -1330,6 +1324,7 @@
                 .set(Orders::getAcceptDriver, null)
                 .set(Orders::getAcceptTime, null)
                 .set(Orders::getAcceptType, null)
+                .set(Orders::getStatus, Constants.OrderStatus.deposited.getStatus())
                 .eq(Orders::getId, orderId));
 
         // 5. 鍐欏叆鍙栨秷鏃ュ織
@@ -1428,7 +1423,8 @@
         // 閫氱煡瀛樹欢闂ㄥ簵锛氳鍗曞凡鎶㈠崟寰呭彇浠�
         if (order.getDepositShopId() != null) {
             sendShopNotice(order.getDepositShopId(), Constants.ShopOrderNotify.WAIT_PICKUP, orderId,
-                    "orderNo", order.getCode());
+                    "orderNo", order.getCode(),
+                    "name", driver.getName());
         }
 
         // 閫氱煡鍙告満锛氭姠鍗曟垚鍔�
@@ -1490,6 +1486,7 @@
         // 4. 鏇存柊璁㈠崟鐘舵�佷负娲鹃�佷腑(4)
         ordersMapper.update(new UpdateWrapper<Orders>().lambda()
                 .set(Orders::getStatus, Constants.OrderStatus.delivering.getStatus())
+                .set(Orders::getTakeTime, now)
                 .set(Orders::getUpdateTime, now)
                 .eq(Orders::getId, orderId));
 
@@ -1715,14 +1712,17 @@
         vo.setIsUrgent(order.getIsUrgent());
         vo.setDriverFee(order.getDriverFee());
         vo.setUrgentAmount(order.getUrgentAmount());
+        vo.setPlatformRewardAmount(order.getPlatformRewardAmount());
 
         // 瀛樹欢闂ㄥ簵锛堜娇鐢∣rders鑷甫鍧愭爣锛�
         vo.setDepositShopName(order.getDepositShopName());
         vo.setDepositShopAddress(order.getDepositShopAddress());
+        vo.setDepositLng(order.getDepositLgt() != null ? order.getDepositLgt().doubleValue() : null);
+        vo.setDepositLat(order.getDepositLat() != null ? order.getDepositLat().doubleValue() : null);
         if (needDepositDist && driverLat != null && driverLng != null
                 && order.getDepositLgt() != null && order.getDepositLat() != null) {
-            double distKm = haversine(driverLat, driverLng,
-                    order.getDepositLgt().doubleValue(), order.getDepositLat().doubleValue());
+            double distKm = haversine(driverLat, driverLng, order.getDepositLat().doubleValue(),
+                    order.getDepositLgt().doubleValue());
             vo.setDepositDistance(formatDistance(distKm));
         }
 
@@ -1738,10 +1738,12 @@
             vo.setTakeAddress(order.getTakeLocationRemark());
             vo.setContactPhone(order.getTakePhone());
         }
+        vo.setTakeLng(order.getTakeLgt() != null ? order.getTakeLgt().doubleValue() : null);
+        vo.setTakeLat(order.getTakeLat() != null ? order.getTakeLat().doubleValue() : null);
         if (driverLat != null && driverLng != null
                 && order.getTakeLgt() != null && order.getTakeLat() != null) {
-            double takeDist = haversine(driverLat, driverLng,
-                    order.getTakeLgt().doubleValue(), order.getTakeLat().doubleValue());
+            double takeDist = haversine(driverLat, driverLng, order.getTakeLat().doubleValue(),
+                    order.getTakeLgt().doubleValue());
             vo.setTakeDistance(formatDistance(takeDist));
         }
 
@@ -1754,6 +1756,11 @@
         if (Constants.equalsInteger(order.getStatus(), Constants.THREE)||Constants.equalsInteger(order.getStatus(), Constants.FOUR)) {
             vo.setDriverVerifyCode(order.getDriverVerifyCode());
         }
+
+        // 璁㈠崟鐘舵��
+        vo.setStatus(order.getStatus());
+        vo.setStatusDesc(getStatusDesc(order.getStatus()));
+        vo.setCreateTime(order.getCreateTime());
 
         // 鐗╁搧鏄庣粏
         List<OrdersDetail> details = detailMap.getOrDefault(order.getId(), Collections.emptyList());
@@ -1829,11 +1836,14 @@
     }
 
     @Override
-    public void changePassword(Integer driverId, String newPassword, String token) {
-        if (StringUtils.isBlank(newPassword)) {
-            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵嗙爜涓嶈兘涓虹┖");
+    public void changePassword(Integer driverId, String oldPassword, String newPassword, String token) {
+        if (StringUtils.isBlank(oldPassword)) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃у瘑鐮佷笉鑳戒负绌�");
         }
-        // 鏍¢獙瀵嗙爜蹇呴』鍚屾椂鍖呭惈瀛楁瘝鍜屾暟瀛�
+        if (StringUtils.isBlank(newPassword)) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏂板瘑鐮佷笉鑳戒负绌�");
+        }
+        // 鏍¢獙鏂板瘑鐮佸繀椤诲悓鏃跺寘鍚瓧姣嶅拰鏁板瓧
         boolean hasLetter = newPassword.chars().anyMatch(Character::isLetter);
         boolean hasDigit = newPassword.chars().anyMatch(Character::isDigit);
         if (!hasLetter || !hasDigit) {
@@ -1847,6 +1857,11 @@
         Member member = memberMapper.selectById(driverInfo.getMemberId());
         if (member == null) {
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        // 鏍¢獙鏃у瘑鐮�
+        String oldEncryptPwd = secure.encryptPassword(oldPassword, member.getSalt());
+        if (!oldEncryptPwd.equals(member.getPassword())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃у瘑鐮侀敊璇�");
         }
         // 鍔犲瘑鏂板瘑鐮佸苟鏇存柊
         String salt = RandomStringUtils.randomAlphanumeric(6);
@@ -1893,6 +1908,7 @@
         List<Integer> validStatuses = Arrays.asList(
                 Constants.OrderStatus.accepted.getStatus(),
                 Constants.OrderStatus.delivering.getStatus(),
+                Constants.OrderStatus.arrived.getStatus(),
                 Constants.OrderStatus.finished.getStatus());
         if (status != null && !validStatuses.contains(status)) {
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鐘舵�佸彧鑳戒负3(寰呭彇浠�)銆�4(閰嶉�佷腑)銆�7(宸插畬鎴�)");
@@ -1990,4 +2006,26 @@
         return vo;
     }
 
+    @Override
+    public boolean checkDriverToken(String token) {
+        if (StringUtils.isBlank(token) || !token.startsWith(Constants.ONE + "")) {
+            return false;
+        }
+        String tokenRedis = (String) redisTemplate.opsForValue().get(Constants.REDIS_TOKEN_KEY + token);
+        if (StringUtils.isBlank(tokenRedis)) {
+            return false;
+        }
+        try {
+            int lastIndex = token.lastIndexOf("_") + 1;
+            Integer memberId = Integer.valueOf(token.substring(lastIndex));
+            Member member = memberMapper.selectById(memberId);
+            return member != null
+                    && !Constants.ONE.equals(member.getDeleted())
+                    && !Constants.ONE.equals(member.getStatus())
+                    && Constants.ONE.equals(member.getUserType());
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
 }

--
Gitblit v1.9.3