From c51de64d5ee334d914c90f5e4f82a13f159492ca Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期四, 23 四月 2026 20:08:15 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java       |   41 +++-
 server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java         |   94 +++++++++-
 server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java                   |    2 
 server/services/src/main/java/com/doumee/service/business/impl/OrderLogServiceImpl.java         |    5 
 server/services/src/main/java/com/doumee/dao/business/model/OrderLog.java                       |    5 
 server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java           |    2 
 server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java         |   10 
 server/services/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java            |   11 +
 server/services/src/main/java/com/doumee/dao/vo/MyOrderDetailVO.java                            |   18 +-
 server/services/src/main/java/com/doumee/dao/vo/MyOrderVO.java                                  |   11 +
 server/services/src/main/java/com/doumee/core/constants/Constants.java                          |   48 +++-
 server/services/src/main/java/com/doumee/dao/business/model/Orders.java                         |    8 
 server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java           |  249 ++++++++++++++++-----------
 server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java |    9 +
 14 files changed, 367 insertions(+), 146 deletions(-)

diff --git a/server/services/src/main/java/com/doumee/core/constants/Constants.java b/server/services/src/main/java/com/doumee/core/constants/Constants.java
index f26687a..fab08af 100644
--- a/server/services/src/main/java/com/doumee/core/constants/Constants.java
+++ b/server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -97,14 +97,6 @@
 
     public final static String GOODS_ORDER_CREATE_LOCK = "goods:order:create:lock:";
 
-    // 璁㈠崟鏃ュ織鎿嶄綔绫诲瀷
-    public static final int ORDER_LOG_DISPATCH = 1;         // 娲惧崟
-    public static final int ORDER_LOG_URGENT_FEE = 2;       // 鍔犳�ヨ垂
-    public static final int ORDER_LOG_ASSIGN_DRIVER = 3;    // 鎸囨淳鍙告満
-    public static final int ORDER_LOG_CANCEL = 4;           // 鍙栨秷璁㈠崟
-    public static final int ORDER_LOG_CONFIRM_ARRIVE = 5;   // 纭椤惧鍒板簵
-    public static final int ORDER_LOG_DRIVER_PICKUP = 6;    // 鍙告満瀹屾垚鍙栦欢
-    public static final int ORDER_LOG_DRIVER_DELIVER = 7;  // 鍙告満纭閫佽揪
 
     public static final String SUCCESS = "SUCCESS";
     public static final String FAIL = "FAIL";
@@ -311,12 +303,36 @@
     @Getter
     @AllArgsConstructor
     public enum OrderLogType {
-        urgent(0, "骞冲彴鍔犳��", "骞冲彴鍔犳�ワ紝濂栧姳閲� {param} 鍏冦��"),
-        dispatch(1, "骞冲彴鎸囨淳", "骞冲彴鎸囨淳鍙告満 {param} 鎺ュ崟銆�")
+        urgent(2, "骞冲彴鍔犳��", "骞冲彴鍔犳�ワ紝濂栧姳閲戙�恵param}銆戝厓"),
+        assignDriver(3, "骞冲彴鎸囨淳", "骞冲彴鎸囨淳鍙告満銆恵param}銆戞帴鍗曪紝濂栧姳閲戙�恵param1}銆戝厓"),
+        memberCancel(4, "浼氬憳鍙栨秷璁㈠崟", "{param}"),
+        driverCancel(4, "鍙告満鍙栨秷璁㈠崟", "{param}"),
+        systemCancel(4, "绯荤粺鑷姩鍙栨秷", "{param}"),
+        systemComplete(4, "绯荤粺鑷姩瀹屾垚", "{param}"),
+        memberCancelToConvert(4, "浼氬憳鍙栨秷寮傚湴瀵勫瓨", "{param}"),
+        shopDeposit(8, "闂ㄥ簵纭瀵勫瓨", "闂ㄥ簵銆恵param}銆戠‘璁ゅ瘎瀛�"),
+        shopTake(9, "闂ㄥ簵纭鍙栦欢", "闂ㄥ簵銆恵param}銆戠‘璁ゅ彇浠讹紝璁㈠崟瀹屾垚"),
+        shopOutStock(10, "闂ㄥ簵纭鍑哄簱", "{param}"),
+        shopConfirmArriveOverdue(5, "纭椤惧鍒板簵锛堥�炬湡锛�", "{param}"),
+        shopConfirmArrive(5, "纭椤惧鍒板簵", "{param}"),
+        driverGrab(6, "鍙告満鎶㈠崟", "鍙告満銆恵param}銆戞姠鍗曟垚鍔�"),
+        driverPickup(6, "鍙告満瀹屾垚鍙栦欢", "鍙告満銆恵param}銆戝畬鎴愬彇浠讹紝寮�濮嬫淳閫�"),
+        driverDeliver(7, "鍙告満纭閫佽揪", "{param}"),
         ;
-        private int status;
-        private String title;
-        private String statusInfo;
+        private final int status;
+        private final String title;
+        private final String statusInfo;
+
+        public String format(String... params) {
+            String result = statusInfo;
+            if (params != null && params.length > 0) {
+                result = result.replace("{param}", params[0] != null ? params[0] : "");
+            }
+            for (int i = 1; i < params.length; i++) {
+                result = result.replace("{param" + i + "}", params[i] != null ? params[i] : "");
+            }
+            return result;
+        }
     }
 
     /**
@@ -575,6 +591,12 @@
         MEMBER_ARRIVED("SMS_505875004", "浼氬憳绔�-宸查�佽揪", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸查�佸埌{address}锛岃鍙婃椂鍙栦欢锛屽彇浠剁爜锛歿code}銆�"),
         MEMBER_DELIVERING("SMS_505935002", "浼氬憳绔�-閰嶉�佷腑", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸茬敱鍙告満{name}鍙栦欢锛屾杩愬線鐩殑鍦般��"),
         VERIFY_CODE("SMS_333770877", "楠岃瘉鐮佺煭淇�", "鎮ㄧ殑楠岃瘉鐮佷负锛歿code}锛岃鍕挎硠闇蹭簬浠栦汉锛�"),
+        DRIVER_AUTH_REJECTED("SMS_505790115", "鍙告満绔�-鍙告満璁よ瘉琚嫆缁�", "灏婃暚鐨剓driver}锛屽緢閬楁喚锛屾偍鐨勫徃鏈鸿璇佹湭閫氳繃瀹℃牳銆傚師鍥狅細{reason}銆傛偍鍙慨鏀硅祫鏂欏悗閲嶆柊鎻愪氦銆�"),
+        DRIVER_AUTH_APPROVED("SMS_505885083", "鍙告満绔�-鍙告満璁よ瘉閫氳繃", "灏婃暚鐨剓driver}锛屾伃鍠滄偍宸查�氳繃骞冲彴鍙告満璁よ瘉瀹℃牳銆傛偍鍙櫥褰曞徃鏈虹APP寮�濮嬫帴鍗曪紝閰嶉�佽繃绋嬩腑璇锋敞鎰忓畨鍏紝绁濇偍鎺ュ崟椤哄埄锛�"),
+        DRIVER_URGENT_DISPATCH("SMS_505885082", "鍙告満绔�-鍔犳�ユ淳鍗�", "鎮ㄥソ锛屾偍鏈変竴涓柊鐨勮鏉庤鍗曪紙缂栧彿锛歿orderNo}锛夈�傝捣鐐癸細{address1}锛岀粓鐐癸細{address2}锛岄厤閫佽垂{money1}鍏冿紙鍚姞鎬ヨ垂{money2}鍏冿級銆傝灏藉揩纭璁㈠崟浠诲姟銆�"),
+        SHOP_AUTH_REJECTED("SMS_505925106", "闂ㄥ簵绔�-璧勬枡瀹℃牳琚嫆缁�", "寰堥仐鎲撅紝鎮ㄧ殑闂ㄥ簵\"{storeName}\"鏈�氳繃瀹℃牳锛屽師鍥狅細{reason}锛屾偍鍙慨鏀硅祫鏂欏悗閲嶆柊鎻愪氦銆�"),
+        SHOP_AUTH_APPROVED_DEPOSIT("SMS_505705111", "闂ㄥ簵绔�-瀹℃牳閫氳繃闇�缂寸撼鎶奸噾", "鎭枩鎮紒鎮ㄧ殑闂ㄥ簵\"{storeName}\"宸查�氳繃鍒濇瀹℃牳銆傝鏀粯鎶奸噾{money}鍏冧互瀹屾垚鍏ラ┗锛屾敮浠樺悗鍗冲彲鐧诲綍闂ㄥ簵鍚庡彴姝e紡鎺ュ崟銆�"),
+        SHOP_AUTH_SUCCESS("SMS_505810110", "闂ㄥ簵绔�-鎴愬姛鍏ラ┗閫氱煡", "鎭枩鎮紒鎮ㄧ殑闂ㄥ簵\"{storeName}\"宸查�氳繃骞冲彴瀹℃牳锛屾寮忓叆椹绘垚鍔熴�傛偍鍙櫥褰曞晢瀹跺悗鍙板紑濮嬫帴鍗曪紝璐﹀彿锛歿phone}锛屽垵濮嬪瘑鐮侊細{password}锛堝缓璁娆$櫥褰曞悗淇敼锛夈��"),
         ;
 
         private final String templateCode;
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/OrderLog.java b/server/services/src/main/java/com/doumee/dao/business/model/OrderLog.java
index e066b66..56b25a1 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/OrderLog.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/OrderLog.java
@@ -10,6 +10,7 @@
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * 璁㈠崟鎿嶄綔鏃ュ織
@@ -76,4 +77,8 @@
     @ApiModelProperty(value = "鎿嶄綔浜虹被鍨嬶細0=鐢ㄦ埛锛�1=鍙告満锛�2=闂ㄥ簵锛�3=绯荤粺绠$悊鍛�", example = "0")
     private Integer optUserType;
 
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鎿嶄綔绫诲瀷锛堝閫夋煡璇級")
+    private List<Integer> objTypeList;
+
 }
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Orders.java b/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
index 802fd92..b03f799 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
@@ -419,4 +419,12 @@
     @ApiModelProperty(value = "鐗╁搧绛夌骇璐甸噸鏍囪瘑锛堝叧鑱旀煡璇細0=鍚︼紱1=鏄級")
     private String c2OtherField;
 
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鍙告満濮撳悕锛堝叧鑱旀煡璇級")
+    private String driverName;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鍙告満鐢佃瘽锛堝叧鑱旀煡璇級")
+    private String driverPhone;
+
 }
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java b/server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java
index faeb79f..7b11255 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java
@@ -60,7 +60,7 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date refundTime;
 
-    @ApiModelProperty(value = "闂ㄥ簵澶囨敞")
+    @ApiModelProperty(value = "閫�娆惧娉�")
     private String refundRemark;
 
     @ApiModelProperty(value = "骞冲彴鎿嶄綔浜猴紙type=1浣跨敤锛�", example = "0")
diff --git a/server/services/src/main/java/com/doumee/dao/vo/MyOrderDetailVO.java b/server/services/src/main/java/com/doumee/dao/vo/MyOrderDetailVO.java
index 0ff7adb..344432b 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/MyOrderDetailVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/MyOrderDetailVO.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.vo;
 
+import com.doumee.dao.business.model.OrdersRefund;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -122,6 +123,9 @@
     @ApiModelProperty(value = "淇濅环淇濊垂锛堝垎锛�")
     private Long declaredFee;
 
+    @ApiModelProperty(value = "鏄惁鍔犳�ワ細0=鍚︼紱1=鏄�")
+    private Integer isUrgent;
+
     @ApiModelProperty(value = "鍔犳�ヨ垂鐢紙鍒嗭級")
     private Long urgentAmount;
 
@@ -129,6 +133,9 @@
     private Long actualPayAmount;
 
     // ---- 閫炬湡 ----
+
+    @ApiModelProperty(value = "閫炬湡鐘舵��: 0=鏃犻�炬湡 1=瀛樺湪閫炬湡 2=寰呮敮浠橀�炬湡 3=閫炬湡宸叉敮浠�")
+    private Integer overdueStatus;
 
     @ApiModelProperty(value = "鏄惁閫炬湡")
     private Boolean overdue;
@@ -141,19 +148,12 @@
 
     // ---- 閫�娆撅紙status=96/99 鏃惰繑鍥烇級 ----
 
-    @ApiModelProperty(value = "閫�娆鹃噾棰濓紙鍒嗭級")
-    private Long refundAmount;
-
     @ApiModelProperty(value = "閫�娆剧敵璇锋椂闂�")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date refundApplyTime;
 
-    @ApiModelProperty(value = "閫�娆炬椂闂�")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date refundTime;
-
-    @ApiModelProperty(value = "閫�娆惧娉�")
-    private String refundRemark;
+    @ApiModelProperty(value = "閫�娆捐褰�")
+    private OrdersRefund refundInfo;
 
     // ---- 鏍囪 ----
 
diff --git a/server/services/src/main/java/com/doumee/dao/vo/MyOrderVO.java b/server/services/src/main/java/com/doumee/dao/vo/MyOrderVO.java
index 8d96a90..2a1ef86 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/MyOrderVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/MyOrderVO.java
@@ -69,6 +69,9 @@
     @ApiModelProperty(value = "鍙栦欢闂ㄥ簵鍦板潃锛堟湁鍙栦欢闂ㄥ簵鏃惰繑鍥烇級")
     private String takeShopAddress;
 
+    @ApiModelProperty(value = "鍙栦欢闂ㄥ簵鑱旂郴鐢佃瘽锛堟湁鍙栦欢闂ㄥ簵鏃惰繑鍥烇級")
+    private String takeShopPhone;
+
     @ApiModelProperty(value = "鍙栦欢鍦扮偣锛堟棤鍙栦欢闂ㄥ簵鏃惰繑鍥烇紝鐢ㄦ埛鑷�夛級")
     private String takeLocation;
 
@@ -110,6 +113,14 @@
     @ApiModelProperty(value = "褰撳墠闂ㄥ簵瑙掕壊锛�1=瀛樹欢闂ㄥ簵锛�2=鍙栦欢闂ㄥ簵锛堜粎闂ㄥ簵绔繑鍥烇級")
     private Integer shopRole;
 
+    // ---- 鍙告満淇℃伅 ----
+
+    @ApiModelProperty(value = "鍙告満濮撳悕锛堝紓鍦板瘎瀛樻湁鍙告満鏃惰繑鍥烇級")
+    private String driverName;
+
+    @ApiModelProperty(value = "鍙告満鐢佃瘽锛堝紓鍦板瘎瀛樻湁鍙告満鏃惰繑鍥烇級")
+    private String driverPhone;
+
     // ---- 璇勪环 ----
 
     @ApiModelProperty(value = "璇勪环鐘舵�侊細0=鏈瘎浠凤紱1=宸茶瘎浠�")
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java
index 0ac6b5e..21e6c4c 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java
@@ -14,7 +14,9 @@
 import com.doumee.core.utils.PinYinUtil;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.AreasMapper;
+import com.doumee.dao.business.PricingRuleMapper;
 import com.doumee.dao.business.model.Areas;
+import com.doumee.dao.business.model.PricingRule;
 import com.doumee.service.business.AreasService;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.commons.lang3.StringUtils;
@@ -45,6 +47,9 @@
     private AreasMapper areasMapper;
 
     @Autowired
+    private PricingRuleMapper pricingRuleMapper;
+
+    @Autowired
     RestTemplate restTemplate ;
 
 
@@ -63,6 +68,7 @@
             }
         }*/
         areas.setIsdeleted(Constants.ZERO);
+        areas.setCreateDate(new Date());
         areasMapper.insert(areas);
         areas.setCode(areas.getId().toString());
         areasMapper.updateById(areas);
@@ -74,6 +80,11 @@
     @Override
     public void deleteById(Integer id) {
         areasMapper.deleteById(id);
+        // 鍚屾鍒犻櫎璇ュ煄甯傚叧鑱旂殑璁′环瑙勫垯閰嶇疆
+        PricingRule deleteRule = new PricingRule();
+        deleteRule.setCityId(id);
+        QueryWrapper<PricingRule> deleteWrapper = new QueryWrapper<>(deleteRule);
+        pricingRuleMapper.delete(deleteWrapper);
         //鍒锋柊缂撳瓨鏁版嵁
         cacheData();
     }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java
index e989ed7..698b04b 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java
@@ -161,6 +161,8 @@
                 queryWrapper.orderByAsc(sortData.getProperty());
             }
         }
+        // 榛樿鎺掑簭锛氭帓搴忕爜鍊掑簭銆佷富閿『搴�
+        queryWrapper.lambda().orderByDesc(Banner::getSortnum).orderByAsc(Banner::getId);
         PageData<Banner> result = PageData.from(bannerMapper.selectPage(page, queryWrapper));
         if (result != null && result.getRecords() != null) {
             String path = getBannerPath();
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
index 63d34d1..cd72498 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
@@ -57,8 +57,11 @@
         if(Objects.isNull(category)
         || Objects.isNull(category.getType())
         || Objects.isNull(category.getName())
-        || StringUtils.isBlank(category.getDetail())
         ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        // type=2锛堝瘎瀛樿鏄庯級detail涓嶅繀濉紝鍏朵粬绫诲瀷蹇呭~
+        if (!Constants.equalsInteger(category.getType(), Constants.TWO) && StringUtils.isBlank(category.getDetail())) {
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
         validateByType(category);
@@ -100,10 +103,13 @@
                 || Objects.isNull(category.getId())
                 || Objects.isNull(category.getType())
                 || Objects.isNull(category.getName())
-                || StringUtils.isBlank(category.getDetail())
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
+        // type=2锛堝瘎瀛樿鏄庯級detail涓嶅繀濉紝鍏朵粬绫诲瀷蹇呭~
+        if (!Constants.equalsInteger(category.getType(), Constants.TWO) && StringUtils.isBlank(category.getDetail())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
         validateByType(category);
         LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         category.setUpdateTime(new Date());
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 548fc41..c885730 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
@@ -638,6 +638,20 @@
                 .set(Member::getBusinessStatus, driverStatus)
                 .set(Member::getUpdateTime, now)
                 .eq(Member::getId, driverInfo.getMemberId()));
+
+        // 鐭俊閫氱煡
+        if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) {
+            // 瀹℃壒閫氳繃
+            sendSmsNotify(driverInfo.getTelephone(),
+                    Constants.SmsNotify.DRIVER_AUTH_APPROVED,
+                    "driver", driverInfo.getName());
+        } else if (Constants.equalsInteger(newAuditStatus, Constants.TWO)) {
+            // 瀹℃壒椹冲洖
+            sendSmsNotify(driverInfo.getTelephone(),
+                    Constants.SmsNotify.DRIVER_AUTH_REJECTED,
+                    "driver", driverInfo.getName(),
+                    "reason", auditDTO.getAuditRemark() != null ? auditDTO.getAuditRemark() : "");
+        }
     }
 
     @Override
@@ -1221,7 +1235,7 @@
         Date todayStart = cal.getTime();
         Long todayCancelCount = orderLogMapper.selectCount(new QueryWrapper<OrderLog>().lambda()
                 .eq(OrderLog::getOptUserId, driver.getMemberId())
-                .eq(OrderLog::getObjType, Constants.ORDER_LOG_CANCEL)
+                .eq(OrderLog::getObjType, Constants.OrderLogType.driverCancel.getStatus())
                 .eq(OrderLog::getOptUserType, Constants.ONE)
                 .ge(OrderLog::getCreateTime, todayStart));
         if (todayCancelCount != null && todayCancelCount >= limit) {
@@ -1238,9 +1252,9 @@
         // 5. 鍐欏叆鍙栨秷鏃ュ織
         OrderLog log = new OrderLog();
         log.setOrderId(orderId);
-        log.setTitle("鍙告満鍙栨秷璁㈠崟");
-        log.setLogInfo(StringUtils.isNotBlank(reason) ? reason : "鍙告満鍙栨秷鎺ュ崟");
-        log.setObjType(Constants.ORDER_LOG_CANCEL);
+        log.setTitle(Constants.OrderLogType.driverCancel.getTitle());
+        log.setLogInfo(Constants.OrderLogType.driverCancel.format(StringUtils.isNotBlank(reason) ? reason : "鍙告満鍙栨秷鎺ュ崟"));
+        log.setObjType(Constants.OrderLogType.driverCancel.getStatus());
         log.setOptUserId(driver.getMemberId());
         log.setOptUserType(Constants.ONE);
         log.setOrderStatus(order.getStatus());
@@ -1312,9 +1326,9 @@
         // 6. 鍐欏叆鎿嶄綔鏃ュ織
         OrderLog log = new OrderLog();
         log.setOrderId(orderId);
-        log.setTitle("鍙告満鎶㈠崟");
-        log.setLogInfo("鍙告満銆�" + driver.getName() + "銆戞姠鍗曟垚鍔�");
-        log.setObjType(Constants.ORDER_LOG_DRIVER_PICKUP);
+        log.setTitle(Constants.OrderLogType.driverGrab.getTitle());
+        log.setLogInfo(Constants.OrderLogType.driverGrab.format(driver.getName()));
+        log.setObjType(Constants.OrderLogType.driverGrab.getStatus());
         log.setOptUserId(driver.getMemberId());
         log.setOptUserType(Constants.ONE);
         log.setOrderStatus(Constants.OrderStatus.accepted.getStatus());
@@ -1397,9 +1411,9 @@
         // 5. 鍐欏叆鎿嶄綔鏃ュ織
         OrderLog log = new OrderLog();
         log.setOrderId(orderId);
-        log.setTitle("鍙告満瀹屾垚鍙栦欢");
-        log.setLogInfo("鍙告満銆�" + driver.getName() + "銆戝畬鎴愬彇浠讹紝寮�濮嬫淳閫�");
-        log.setObjType(Constants.ORDER_LOG_DRIVER_PICKUP);
+        log.setTitle(Constants.OrderLogType.driverPickup.getTitle());
+        log.setLogInfo(Constants.OrderLogType.driverPickup.format(driver.getName()));
+        log.setObjType(Constants.OrderLogType.driverPickup.getStatus());
         log.setOptUserId(driver.getMemberId());
         log.setOptUserType(Constants.ONE);
         log.setOrderStatus(Constants.OrderStatus.delivering.getStatus());
@@ -1488,9 +1502,10 @@
         // 5. 鍐欏叆鎿嶄綔鏃ュ織
         OrderLog log = new OrderLog();
         log.setOrderId(orderId);
-        log.setTitle("鍙告満纭閫佽揪");
-        log.setLogInfo(StringUtils.isNotBlank(dto.getRemark()) ? dto.getRemark() : "鍙告満銆�" + driver.getName() + "銆戝凡閫佽揪");
-        log.setObjType(Constants.ORDER_LOG_DRIVER_DELIVER);
+        log.setTitle(Constants.OrderLogType.driverDeliver.getTitle());
+        log.setLogInfo(Constants.OrderLogType.driverDeliver.format(
+                StringUtils.isNotBlank(dto.getRemark()) ? dto.getRemark() : "鍙告満銆�" + driver.getName() + "銆戝凡閫佽揪"));
+        log.setObjType(Constants.OrderLogType.driverDeliver.getStatus());
         log.setOptUserId(driver.getMemberId());
         log.setOptUserType(Constants.ONE);
         log.setOrderStatus(Constants.OrderStatus.arrived.getStatus());
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OrderLogServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OrderLogServiceImpl.java
index 6d8492a..ad213ef 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/OrderLogServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/OrderLogServiceImpl.java
@@ -121,6 +121,9 @@
         if (pageWrap.getModel().getOptUserId() != null) {
             queryWrapper.lambda().eq(OrderLog::getOptUserId, pageWrap.getModel().getOptUserId());
         }
+        if (pageWrap.getModel().getObjTypeList() != null && !pageWrap.getModel().getObjTypeList().isEmpty()) {
+            queryWrapper.lambda().in(OrderLog::getObjType, pageWrap.getModel().getObjTypeList());
+        }
         for (PageWrap.SortData sortData : pageWrap.getSorts()) {
             if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                 queryWrapper.orderByDesc(sortData.getProperty());
@@ -128,6 +131,8 @@
                 queryWrapper.orderByAsc(sortData.getProperty());
             }
         }
+        // 榛樿鎸夋椂闂村�掑簭
+        queryWrapper.lambda().orderByDesc(OrderLog::getCreateTime);
         return PageData.from(orderLogMapper.selectPage(page, queryWrapper));
     }
 
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
index 800731b..f8d29be 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
@@ -229,6 +229,7 @@
         queryWrapper.eq(pageWrap.getModel().getTakeShopId() != null, Orders::getTakeShopId, pageWrap.getModel().getTakeShopId());
         queryWrapper.and(pageWrap.getModel().getDriverKeyword() != null, i->i.like(DriverInfo::getName, pageWrap.getModel().getDriverKeyword())
                 .or().like(DriverInfo::getTelephone, pageWrap.getModel().getDriverKeyword()));
+        queryWrapper.eq(pageWrap.getModel().getSettlementStatus() != null, Orders::getSettlementStatus, pageWrap.getModel().getSettlementStatus());
         for (PageWrap.SortData sortData : pageWrap.getSorts()) {
             if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                 queryWrapper.orderByDesc(sortData.getProperty());
@@ -262,6 +263,7 @@
         queryWrapper.eq(pageWrap.getModel().getTakeShopId() != null, Orders::getTakeShopId, pageWrap.getModel().getTakeShopId());
         queryWrapper.and(pageWrap.getModel().getDriverKeyword() != null, i->i.like(DriverInfo::getName, pageWrap.getModel().getDriverKeyword())
                 .or().like(DriverInfo::getTelephone, pageWrap.getModel().getDriverKeyword()));
+        queryWrapper.eq(pageWrap.getModel().getSettlementStatus() != null, Orders::getSettlementStatus, pageWrap.getModel().getSettlementStatus());
 
         queryWrapper.select(
                 "IFNULL(SUM(t.total_amount), 0) as total_amount_sum",
@@ -1109,13 +1111,12 @@
 
         String optUserName = getCurrentUserName();
 
-        // 鍔犳�ヨ垂鏃ュ織锛堟瘡娆″崟鐙褰曟湰娆″姞鎬ヨ垂锛�
-        Constants.OrderLogType urgentLogType = Constants.OrderLogType.urgent;
+        // 鍔犳�ヨ垂鏃ュ織
         OrderLog feeLog = new OrderLog();
         feeLog.setOrderId(order.getId());
-        feeLog.setTitle(urgentLogType.getTitle());
-        feeLog.setLogInfo(urgentLogType.getStatusInfo().replace("{param}", dto.getUrgentFee().toPlainString()));
-        feeLog.setObjType(urgentLogType.getStatus());
+        feeLog.setTitle(Constants.OrderLogType.urgent.getTitle());
+        feeLog.setLogInfo(Constants.OrderLogType.urgent.format(dto.getUrgentFee().toPlainString()));
+        feeLog.setObjType(Constants.OrderLogType.urgent.getStatus());
         feeLog.setOrderStatus(order.getStatus());
         feeLog.setOptUserType(3);
         feeLog.setOptUserName(optUserName);
@@ -1154,18 +1155,37 @@
             Member driver = memberMapper.selectById(dto.getDriverId());
             String driverName = driver != null ? driver.getName() : String.valueOf(dto.getDriverId());
 
-            Constants.OrderLogType dispatchLogType = Constants.OrderLogType.dispatch;
             OrderLog driverLog = new OrderLog();
             driverLog.setOrderId(order.getId());
-            driverLog.setTitle(dispatchLogType.getTitle());
-            driverLog.setLogInfo(dispatchLogType.getStatusInfo().replace("{param}", driverName));
-            driverLog.setObjType(dispatchLogType.getStatus());
+            driverLog.setTitle(Constants.OrderLogType.assignDriver.getTitle());
+            driverLog.setLogInfo(Constants.OrderLogType.assignDriver.format(driverName, dto.getUrgentFee().toPlainString()));
+            driverLog.setObjType(Constants.OrderLogType.assignDriver.getStatus());
             driverLog.setOrderStatus(order.getStatus());
             driverLog.setOptUserType(3);
             driverLog.setOptUserName(optUserName);
             driverLog.setCreateTime(new Date());
             driverLog.setDeleted(Constants.ZERO);
             orderLogService.create(driverLog);
+
+            // 鐭俊閫氱煡鎸囨淳鍙告満锛堝姞鎬ユ淳鍗曪級
+            DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+                    .eq(DriverInfo::getMemberId, dto.getDriverId())
+                    .eq(DriverInfo::getDeleted, Constants.ZERO)
+                    .last("limit 1"));
+            if (driverInfo != null) {
+                String address1 = order.getDepositShopAddress() != null ? order.getDepositShopAddress() : order.getDepositShopName();
+                String address2 = order.getTakeShopAddress() != null ? order.getTakeShopAddress() :
+                        (order.getTakeLocation() != null ? order.getTakeLocation() : "");
+                // 閰嶉�佽垂 = 鍙告満閰嶉�佽垂 + 鍔犳�ヨ垂
+                long totalDriverFee = (order.getDriverFee() != null ? order.getDriverFee() : 0L) + urgentFeeFen;
+                sendSmsNotify(driverInfo.getTelephone(),
+                        Constants.SmsNotify.DRIVER_URGENT_DISPATCH,
+                        "orderNo", order.getCode(),
+                        "address1", address1,
+                        "address2", address2,
+                        "money1", String.valueOf(totalDriverFee / 100.0),
+                        "money2", String.valueOf(urgentFeeFen / 100.0));
+            }
         }
 
         ordersMapper.update(updateWrapper);
@@ -1371,8 +1391,12 @@
                 .select("s1.link_phone", Orders::getDepositShopLinkPhone)
                 .select("s2.name", Orders::getTakeShopName)
                 .select("s2.address", Orders::getTakeShopAddress)
+                .select("s2.link_phone", Orders::getTakeShopLinkPhone)
+                .select("d.name", Orders::getDriverName)
+                .select("d.telephone", Orders::getDriverPhone)
                 .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID")
                 .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID")
+                .leftJoin("driver_info d on d.id = t.ACCEPT_DRIVER")
                 .eq(Orders::getDeleted, Constants.ZERO)
                 .eq(Orders::getMemberId, memberId)
                 .eq(status != null, Orders::getStatus, status)
@@ -1407,10 +1431,15 @@
                     vo.setTakeShopId(o.getTakeShopId());
                     vo.setTakeShopName(o.getTakeShopName());
                     vo.setTakeShopAddress(o.getTakeShopAddress());
+                    vo.setTakeShopPhone(o.getTakeShopLinkPhone());
                 } else {
                     vo.setTakeLocation(o.getTakeLocation());
                     vo.setTakeLocationRemark(o.getTakeLocationRemark());
                 }
+
+                // 鍙告満淇℃伅
+                vo.setDriverName(o.getDriverName());
+                vo.setDriverPhone(o.getDriverPhone());
 
                 // 鍙栦欢鑱旂郴浜�
                 vo.setTakeUser(o.getTakeUser());
@@ -1478,8 +1507,12 @@
                 .select("s1.link_phone", Orders::getDepositShopLinkPhone)
                 .select("s2.name", Orders::getTakeShopName)
                 .select("s2.address", Orders::getTakeShopAddress)
+                .select("s2.link_phone", Orders::getTakeShopLinkPhone)
+                .select("d.name", Orders::getDriverName)
+                .select("d.telephone", Orders::getDriverPhone)
                 .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID")
                 .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID")
+                .leftJoin("driver_info d on d.id = t.ACCEPT_DRIVER")
                 .eq(Orders::getPayStatus, Constants.ONE)
                 .and(w -> w.eq(Orders::getDepositShopId, shopId).or().eq(Orders::getTakeShopId, shopId))
                 .eq(status != null, Orders::getStatus, status)
@@ -1515,10 +1548,15 @@
                 if (o.getTakeShopId() != null) {
                     vo.setTakeShopName(o.getTakeShopName());
                     vo.setTakeShopAddress(o.getTakeShopAddress());
+                    vo.setTakeShopPhone(o.getTakeShopLinkPhone());
                 } else {
                     vo.setTakeLocation(o.getTakeLocation());
                     vo.setTakeLocationRemark(o.getTakeLocationRemark());
                 }
+
+                // 鍙告満淇℃伅
+                vo.setDriverName(o.getDriverName());
+                vo.setDriverPhone(o.getDriverPhone());
 
                 vo.setTakeUser(o.getTakeUser());
                 vo.setTakePhone(o.getTakePhone());
@@ -1614,6 +1652,7 @@
         vo.setDeclaredAmount(order.getDeclaredAmount());
         vo.setDeclaredFee(order.getDeclaredFee());
         vo.setUrgentAmount(order.getUrgentAmount());
+        vo.setIsUrgent(order.getIsUrgent());
         vo.setActualPayAmount(Constants.equalsInteger(order.getPayStatus(), Constants.ONE)?order.getPayAmount():order.getEstimatedAmount());
 
         // 鏍囪
@@ -1685,66 +1724,53 @@
                         .eq(OrdersDetail::getDeleted, Constants.ZERO));
         vo.setDetailList(buildDetailList(details));
 
-        Integer orderStatus = order.getStatus();
-        if(Constants.equalsInteger(orderStatus, Constants.FIVE)){
-            // 閫炬湡淇℃伅
-            OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(order, details);
-            if (Constants.ONE.equals(order.getType())
-                    && order.getTakeShopId() != null) {
-                // 寮傚湴瀵勫瓨 + 鏈夊彇浠堕棬搴楋細
-                // 鏍规嵁琛屾潕杞Щ鍒板簵鏃堕棿(arriveTime)褰撳ぉ鏅氫笂12鐐瑰垽鏂槸鍚﹂�炬湡
-                if (order.getArriveTime() != null) {
-                    Calendar arriveCal = Calendar.getInstance();
-                    arriveCal.setTime(order.getArriveTime());
-                    arriveCal.set(Calendar.HOUR_OF_DAY, 23);
-                    arriveCal.set(Calendar.MINUTE, 59);
-                    arriveCal.set(Calendar.SECOND, 59);
-                    Date arriveEndOfDay = arriveCal.getTime();
-                    boolean isOverdue = new Date().after(arriveEndOfDay);
-                    vo.setOverdue(isOverdue);
-                    if (isOverdue) {
-                        vo.setOverdueDays(overdueInfo.getOverdueDays() > 0 ? overdueInfo.getOverdueDays() : 1);
-                        vo.setOverdueFee(overdueInfo.getOverdueFee());
-                    } else {
-                        vo.setOverdueDays(0);
-                        vo.setOverdueFee(0L);
-                    }
-                } else {
-                    vo.setOverdue(false);
-                    vo.setOverdueDays(0);
-                    vo.setOverdueFee(0L);
-                }
-            } else if (Constants.ZERO.equals(order.getType())) {
-                // 灏卞湴瀵勫瓨锛氫繚鎸佸師閫昏緫
-                vo.setOverdue(overdueInfo.getOverdue());
-                vo.setOverdueDays(overdueInfo.getOverdueDays());
-                vo.setOverdueFee(overdueInfo.getOverdueFee());
-            }
-        } else {
+        // 閫炬湡鐘舵�侊細0=鏃犻�炬湡 1=瀛樺湪閫炬湡 2=寰呮敮浠橀�炬湡 3=閫炬湡宸叉敮浠�
+        if (Constants.equalsInteger(order.getOverdueStatus(), Constants.TWO)) {
+            // 璁㈠崟鏍囪宸叉敮浠橀�炬湡
+            vo.setOverdueStatus(Constants.THREE);
+            vo.setOverdue(true);
+            vo.setOverdueDays(order.getOverdueDays());
+            vo.setOverdueFee(order.getOverdueAmount());
+        } else if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) {
+            // 璁㈠崟鏍囪寰呮敮浠橀�炬湡
+            vo.setOverdueStatus(Constants.TWO);
+            vo.setOverdue(true);
+            vo.setOverdueDays(order.getOverdueDays());
+            vo.setOverdueFee(order.getOverdueAmount());
+        } else if (order.getConfirmArriveTime() != null) {
+            // 宸茬‘璁ゅ埌搴楋紝鏃犻�炬湡
+            vo.setOverdueStatus(Constants.ZERO);
             vo.setOverdue(false);
             vo.setOverdueDays(0);
             vo.setOverdueFee(0L);
+        } else {
+            // 鏈‘璁ゅ埌搴楋紝璁$畻瀹為檯閫炬湡
+            OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(order, details);
+            if (overdueInfo.getOverdue() != null && overdueInfo.getOverdue()
+                    && overdueInfo.getOverdueFee() != null && overdueInfo.getOverdueFee() > 0) {
+                vo.setOverdueStatus(Constants.ONE);
+                vo.setOverdue(true);
+                vo.setOverdueDays(overdueInfo.getOverdueDays());
+                vo.setOverdueFee(overdueInfo.getOverdueFee());
+            } else {
+                vo.setOverdueStatus(Constants.ZERO);
+                vo.setOverdue(false);
+                vo.setOverdueDays(0);
+                vo.setOverdueFee(0L);
+            }
         }
 
-        // 閫�娆句俊鎭紙status=96鍏抽棴/99鍙栨秷鏃惰繑鍥烇級
-        if (orderStatus != null &&
-                (Constants.equalsInteger(orderStatus, Constants.OrderStatus.cancelled.getStatus()))) {
+        // 閫�娆句俊鎭紙status=99鍙栨秷鏃惰繑鍥烇級
+        if (order.getStatus() != null &&
+                Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.cancelled.getStatus())) {
             vo.setRefundApplyTime(order.getCancelTime());
-            // 鏌ヨ閫�娆捐褰曡幏鍙栭��娆鹃噾棰濆拰澶囨敞
             OrdersRefund ordersRefund = ordersRefundMapper.selectOne(
                     new QueryWrapper<OrdersRefund>().lambda()
                             .eq(OrdersRefund::getOrderId, order.getId())
                             .eq(OrdersRefund::getDeleted, Constants.ZERO)
                             .orderByDesc(OrdersRefund::getCreateTime)
                             .last("limit 1"));
-            if (ordersRefund != null) {
-                vo.setRefundAmount(ordersRefund.getRefundAmount() != null
-                        ? ordersRefund.getRefundAmount() : order.getRefundAmount());
-                vo.setRefundRemark(ordersRefund.getRemark());
-                vo.setRefundTime(ordersRefund.getRefundTime());
-            } else {
-                vo.setRefundAmount(order.getRefundAmount());
-            }
+            vo.setRefundInfo(ordersRefund);
         }
 
         // 鏍搁攢鐮�
@@ -1855,7 +1881,7 @@
             order.setStatus(Constants.OrderStatus.cancelled.getStatus());
             order.setCancelTime(now);
             ordersMapper.updateById(order);
-            saveCancelLog(order, "浼氬憳鍙栨秷璁㈠崟锛堝緟鏀粯锛�", reason, memberId);
+            saveCancelLog(order, Constants.OrderLogType.memberCancel, "浼氬憳鍙栨秷璁㈠崟锛堝緟鏀粯锛�", memberId);
             // 鐭俊閫氱煡浼氬憳锛氳鍗曞凡鍙栨秷
             Member cancelMember1 = memberMapper.selectById(memberId);
             sendSmsNotify(cancelMember1 != null ? cancelMember1.getTelephone() : null,
@@ -1871,7 +1897,7 @@
             order.setRefundAmount(order.getPayAmount());
             ordersMapper.updateById(order);
 
-            saveCancelLog(order, "浼氬憳鍙栨秷璁㈠崟锛堝緟瀵勫瓨锛屽叏棰濋��娆撅級", reason, memberId);
+            saveCancelLog(order, Constants.OrderLogType.memberCancel, "浼氬憳鍙栨秷璁㈠崟锛堝緟瀵勫瓨锛屽叏棰濋��娆撅級", memberId);
             // 閫氱煡浼氬憳锛氬凡鍙栨秷
             sendOrderNotice(memberId, Constants.MemberOrderNotify.CANCELLED, orderId,
                     "orderNo", order.getCode());
@@ -1926,23 +1952,37 @@
         // 宸插瘎瀛�/宸叉帴鍗曪細鐩存帴灏嗚鍗曠被鍨嬫敼涓哄氨鍦板瘎瀛�
         if (Constants.equalsInteger(status, Constants.OrderStatus.deposited.getStatus())
                 || Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) {
-            order.setType(Constants.ZERO); // 灏卞湴瀵勫瓨
-            ordersMapper.updateById(order);
-            saveCancelLog(order, "浼氬憳鍙栨秷寮傚湴瀵勫瓨璁㈠崟锛岃浆涓哄氨鍦板瘎瀛�", reason, memberId);
-            // 閫氱煡瀛樹欢闂ㄥ簵
-            if (order.getDepositShopId() != null) {
-                sendShopNotice(order.getDepositShopId(), Constants.ShopOrderNotify.REFUNDING, orderId,
-                        "orderNo", order.getCode());
-                ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId());
-                sendSmsNotify(depositShop != null ? depositShop.getLinkPhone() : null,
-                        Constants.SmsNotify.SHOP_REFUNDING, "orderNo", order.getCode());
+            // 鍏堜繚瀛樺師鍙告満淇℃伅锛岀敤浜庡悗缁�氱煡
+            Integer originalDriverId = order.getAcceptDriver();
+            DriverInfo originalDriver = originalDriverId != null ? driverInfoMapper.selectById(originalDriverId) : null;
+
+            ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId());
+            // 鍙栦欢鐐逛俊鎭洿鏂颁负瀛樹欢闂ㄥ簵锛屼娇鐢� UpdateWrapper 纭繚 null 瀛楁涔熻兘鐢熸晥
+            UpdateWrapper<Orders> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.lambda()
+                    .eq(Orders::getId, order.getId())
+                    .set(Orders::getType, Constants.ZERO)
+                    .set(Orders::getTakeShopId, order.getDepositShopId())
+                    .set(Orders::getTakeShopName, order.getDepositShopName())
+                    .set(Orders::getTakeShopAddress, order.getDepositShopAddress())
+                    .set(Orders::getTakeShopLinkPhone, order.getDepositShopLinkPhone())
+                    .set(Orders::getTakeLocation, order.getDepositLocation())
+                    .set(Orders::getTakeLocationRemark, order.getDepositLocationRemark())
+                    .set(Orders::getTakeLat, order.getDepositLat())
+                    .set(Orders::getTakeLgt, order.getDepositLgt());
+            if (Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) {
+                updateWrapper.lambda()
+                        .set(Orders::getAcceptDriver, null)
+                        .set(Orders::getAcceptType, null)
+                        .set(Orders::getAcceptTime, null);
             }
+            ordersMapper.update(null, updateWrapper);
+            saveCancelLog(order, Constants.OrderLogType.memberCancelToConvert, "浼氬憳鍙栨秷寮傚湴瀵勫瓨璁㈠崟锛岃浆涓哄氨鍦板瘎瀛�", memberId);
             // 閫氱煡鍙告満锛氳鍗曞凡鍙栨秷锛堝凡鎺ュ崟鎯呭喌涓嬪徃鏈洪渶鍋滄鏈嶅姟锛�
-            if (order.getAcceptDriver() != null && Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) {
-                sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.REFUNDING, orderId,
+            if (originalDriverId != null && Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) {
+                sendDriverNotice(originalDriverId, Constants.DriverOrderNotify.REFUNDING, orderId,
                         "orderNo", order.getCode());
-                DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver());
-                sendSmsNotify(driver != null ? driver.getTelephone() : null,
+                sendSmsNotify(originalDriver != null ? originalDriver.getTelephone() : null,
                         Constants.SmsNotify.DRIVER_REFUNDING, "orderNo", order.getCode());
             }
             return;
@@ -1954,12 +1994,12 @@
     /**
      * 淇濆瓨鍙栨秷璁㈠崟鎿嶄綔鏃ュ織
      */
-    private void saveCancelLog(Orders order, String title, String reason, Integer memberId) {
+    private void saveCancelLog(Orders order, Constants.OrderLogType logType, String reason, Integer memberId) {
         OrderLog log = new OrderLog();
         log.setOrderId(order.getId());
-        log.setTitle(title);
-        log.setLogInfo(reason);
-        log.setObjType(Constants.ORDER_LOG_CANCEL);
+        log.setTitle(logType.getTitle());
+        log.setLogInfo(logType.format(reason));
+        log.setObjType(logType.getStatus());
         log.setOrderStatus(order.getStatus());
         log.setOptUserId(memberId);
         log.setOptUserType(0); // 0=鐢ㄦ埛
@@ -1971,12 +2011,13 @@
     /**
      * 淇濆瓨闂ㄥ簵鏍搁攢鏃ュ織
      */
-    private void saveShopVerifyLog(Orders order, String title, String logInfo, String remark, Integer shopId) {
+    private void saveShopVerifyLog(Orders order, Constants.OrderLogType logType, String logInfo, String remark, Integer shopId) {
         OrderLog log = new OrderLog();
         log.setOrderId(order.getId());
-        log.setTitle(title);
-        log.setLogInfo(logInfo);
+        log.setTitle(logType.getTitle());
+        log.setLogInfo(logInfo != null ? logInfo : logType.getStatusInfo());
         log.setRemark(remark);
+        log.setObjType(logType.getStatus());
         log.setOrderStatus(order.getStatus());
         log.setOptUserId(shopId);
         log.setOptUserType(2); // 2=闂ㄥ簵
@@ -2307,6 +2348,15 @@
         shopInfo.setUpdateTime(now);
         shopInfoMapper.updateById(shopInfo);
 
+        // 鐭俊閫氱煡闂ㄥ簵锛氭垚鍔熷叆椹�
+        String rawPassword = shopInfo.getTelephone() != null && shopInfo.getTelephone().length() >= 6
+                ? shopInfo.getTelephone().substring(shopInfo.getTelephone().length() - 6) + "@123456" : "";
+        sendSmsNotify(shopInfo.getTelephone(),
+                Constants.SmsNotify.SHOP_AUTH_SUCCESS,
+                "storeName", shopInfo.getName(),
+                "phone", shopInfo.getTelephone() != null ? shopInfo.getTelephone() : "",
+                "password", rawPassword);
+
         // 6. 鎶奸噾鏀粯瀹屾垚鍚庯紝鑻ュ煄甯傛湭寮�閫氬垯鑷姩寮�閫�
         if (shopInfo.getAreaId() != null) {
             Areas shopArea = areasBiz.resolveArea(shopInfo.getAreaId());
@@ -2625,7 +2675,7 @@
             // 淇濆瓨瀵勫瓨鍥剧墖锛坥bj_type=2 璁㈠崟瀵勫瓨鍥剧墖锛屾渶澶�3寮狅級
             saveVerifyImages(order.getId(), images, Constants.FileType.ORDER_DEPOSIT.getKey(), shopId);
             // 璁板綍璁㈠崟鏃ュ織
-            saveShopVerifyLog(order, "闂ㄥ簵纭瀵勫瓨", "闂ㄥ簵銆�" + shopName + "銆戠‘璁ゅ瘎瀛�", remark, shopId);
+            saveShopVerifyLog(order, Constants.OrderLogType.shopDeposit, Constants.OrderLogType.shopDeposit.format(shopName), remark, shopId);
             // 閫氱煡浼氬憳锛氶棬搴楁牳閿�鎴愬姛
             if (Constants.equalsInteger(order.getType(), Constants.ONE)) {
                 // 寮傚湴瀵勫瓨 鈫� 寰呮姠鍗�
@@ -2634,7 +2684,7 @@
             } else {
                 // 灏卞湴瀵勫瓨 鈫� 寰呭彇浠舵彁閱�
                 sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.WAIT_PICKUP_REMIND, order.getId(),
-                        "orderNo", order.getCode());
+                        "orderNo", order.getCode(), "shopName", shopName);
             }
         } else if (Constants.equalsInteger(status, Constants.OrderStatus.arrived.getStatus())) {
             // 寮傚湴瀵勫瓨 + 鏃犲彇浠堕棬搴� 鈫� 鏃犳硶鏍搁攢锛堝鎴疯嚜鍙栵紝鏃犻棬搴楁搷浣滐級
@@ -2657,7 +2707,7 @@
             calculateAndSaveOrderFees(order.getId());
             generateRevenueRecords(order.getId());
             // 璁板綍璁㈠崟鏃ュ織
-            saveShopVerifyLog(order, "闂ㄥ簵纭鍙栦欢", "闂ㄥ簵銆�" + shopName + "銆戠‘璁ゅ彇浠讹紝璁㈠崟瀹屾垚", remark, shopId);
+            saveShopVerifyLog(order, Constants.OrderLogType.shopTake, Constants.OrderLogType.shopTake.format(shopName), remark, shopId);
             // 閫氱煡浼氬憳锛氳鍗曞凡瀹屾垚
             sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.FINISHED, order.getId(),
                     "orderNo", order.getCode());
@@ -2770,7 +2820,7 @@
         if (order.getRefundAmount() != null && order.getRefundAmount() > 0) {
             logInfo += "锛岄��娆�" + Constants.getFormatMoney(order.getRefundAmount()) + "鍏�";
         }
-        saveShopVerifyLog(order, "闂ㄥ簵纭鍑哄簱", logInfo, remark, shopId);
+        saveShopVerifyLog(order, Constants.OrderLogType.shopOutStock, logInfo, remark, shopId);
         // 閫氱煡浼氬憳锛氳鍗曞凡瀹屾垚
         sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.FINISHED, order.getId(),
                 "orderNo", order.getCode());
@@ -3102,9 +3152,9 @@
             ordersMapper.updateById(order);
 
             // 璁板綍璁㈠崟鏃ュ織
-            saveShopVerifyLog(order, "纭椤惧鍒板簵锛堥�炬湡锛�",
-                    "闂ㄥ簵銆�" + shopName + "銆戠‘璁ら【瀹㈠埌搴楋紝閫炬湡" + overdueInfo.getOverdueDays()
-                            + "澶╋紝閫炬湡璐圭敤" + Constants.getFormatMoney(overdueInfo.getOverdueFee()) + "鍏�",
+            String overdueLogInfo = "闂ㄥ簵銆�" + shopName + "銆戠‘璁ら【瀹㈠埌搴楋紝閫炬湡" + overdueInfo.getOverdueDays()
+                            + "澶╋紝閫炬湡璐圭敤" + Constants.getFormatMoney(overdueInfo.getOverdueFee()) + "鍏�";
+            saveShopVerifyLog(order, Constants.OrderLogType.shopConfirmArriveOverdue, overdueLogInfo,
                     null, shopId);
         } else {
             // 鏈�炬湡锛氭爣璁伴�炬湡鐘舵�佷负0锛岃鍗曚繚鎸佸綋鍓嶇姸鎬�
@@ -3148,7 +3198,7 @@
             if (order.getRefundAmount() != null && order.getRefundAmount() > 0) {
                 logInfo += "锛岄渶閫�娆�" + Constants.getFormatMoney(order.getRefundAmount()) + "鍏�";
             }
-            saveShopVerifyLog(order, "纭椤惧鍒板簵", logInfo, null, shopId);
+            saveShopVerifyLog(order, Constants.OrderLogType.shopConfirmArrive, logInfo, null, shopId);
         }
     }
 
@@ -3241,8 +3291,8 @@
         // 鐗╁搧鍩虹鏃ヨ垂鐢� = 危(鍗曚环 脳 鏁伴噺)
         long dailyBaseFee = 0L;
         for (OrdersDetail d : details) {
-            dailyBaseFee += (d.getUnitPrice() != null ? d.getUnitPrice() : 0L)
-                    * (d.getNum() != null ? d.getNum() : 0);
+            dailyBaseFee += (d.getLocallyPrice() != null ? d.getLocallyPrice() : 0L)
+                    * (d.getNum() != null ? d.getNum() : 1);
         }
 
         Date now = new Date();
@@ -3326,19 +3376,20 @@
 
     /**
      * 灏卞湴瀵勫瓨閫炬湡澶╂暟璁$畻
-     * 杩囦簡棰勮鍙栦欢鏃堕棿褰撳ぉ鐨�12鐐瑰悗鎵嶇畻涓�澶�
+     * 杩囦簡棰勮鍙栦欢鏃堕棿褰撳ぉ鐨�24:00锛堟鏃�00:00锛夊悗鎵嶇畻绗竴澶�
      */
     private int calcLocalOverdueDays(Date now, Date expectedTakeTime) {
         if (expectedTakeTime == null || !now.after(expectedTakeTime)) {
             return 0;
         }
-        // 鍩哄噯鏃堕棿 = 棰勮鍙栦欢鏃ユ湡鐨�12:00
+        // 鍩哄噯鏃堕棿 = 棰勮鍙栦欢鏃ユ湡鐨勬鏃� 00:00锛堝嵆褰撳ぉ24:00锛�
         Calendar baseCal = Calendar.getInstance();
         baseCal.setTime(expectedTakeTime);
-        baseCal.set(Calendar.HOUR_OF_DAY, 12);
+        baseCal.set(Calendar.HOUR_OF_DAY, 0);
         baseCal.set(Calendar.MINUTE, 0);
         baseCal.set(Calendar.SECOND, 0);
         baseCal.set(Calendar.MILLISECOND, 0);
+        baseCal.add(Calendar.DAY_OF_MONTH, 1); // 娆℃棩00:00 = 褰撳ぉ24:00
         Date baseTime = baseCal.getTime();
 
         if (!now.after(baseTime)) {
@@ -3527,9 +3578,9 @@
                 // 鍐欏叆鎿嶄綔鏃ュ織
                 OrderLog orderLog = new OrderLog();
                 orderLog.setOrderId(order.getId());
-                orderLog.setTitle("绯荤粺鑷姩鍙栨秷锛堣秴鏃舵湭鏀粯锛�");
-                orderLog.setLogInfo("璁㈠崟瓒呮椂" + autoCancelMinutes + "鍒嗛挓鏈敮浠橈紝绯荤粺鑷姩鍙栨秷");
-                orderLog.setObjType(Constants.ORDER_LOG_CANCEL);
+                orderLog.setTitle(Constants.OrderLogType.systemCancel.getTitle());
+                orderLog.setLogInfo(Constants.OrderLogType.systemCancel.format("璁㈠崟瓒呮椂" + autoCancelMinutes + "鍒嗛挓鏈敮浠橈紝绯荤粺鑷姩鍙栨秷"));
+                orderLog.setObjType(Constants.OrderLogType.systemCancel.getStatus());
                 orderLog.setOrderStatus(Constants.OrderStatus.cancelled.getStatus());
                 orderLog.setOptUserType(3); // 3=绯荤粺
                 orderLog.setCreateTime(now);
@@ -3693,9 +3744,9 @@
                 // 璁板綍鎿嶄綔鏃ュ織
                 OrderLog orderLog = new OrderLog();
                 orderLog.setOrderId(order.getId());
-                orderLog.setTitle("绯荤粺鑷姩瀹屾垚");
-                orderLog.setLogInfo("璁㈠崟宸查�佽揪瓒呰繃" + autoConfirmDays + "澶╂湭纭锛岀郴缁熻嚜鍔ㄥ畬鎴�");
-                orderLog.setObjType(Constants.ORDER_LOG_CANCEL);
+                orderLog.setTitle(Constants.OrderLogType.systemComplete.getTitle());
+                orderLog.setLogInfo(Constants.OrderLogType.systemComplete.format("璁㈠崟宸查�佽揪瓒呰繃" + autoConfirmDays + "澶╂湭纭锛岀郴缁熻嚜鍔ㄥ畬鎴�"));
+                orderLog.setObjType(Constants.OrderLogType.systemComplete.getStatus());
                 orderLog.setOrderStatus(Constants.OrderStatus.finished.getStatus());
                 orderLog.setOptUserType(3); // 3=绯荤粺
                 orderLog.setCreateTime(now);
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java
index efd4e45..14b7636 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java
@@ -14,6 +14,7 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.biz.system.AreasBiz;
 import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.utils.aliyun.AliSmsService;
 import com.doumee.dao.business.MemberMapper;
 import com.doumee.dao.business.MultifileMapper;
 import com.doumee.dao.business.OrdersMapper;
@@ -36,6 +37,9 @@
 import com.doumee.dao.vo.ShopWebDetailVO;
 import com.doumee.service.business.AreasService;
 import com.doumee.service.business.ShopInfoService;
+import com.doumee.dao.business.SmsrecordMapper;
+import com.doumee.dao.business.model.Smsrecord;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.RandomStringUtils;
@@ -52,6 +56,7 @@
  * @author rk
  * @date 2026/04/08
  */
+@Slf4j
 @Service
 public class ShopInfoServiceImpl implements ShopInfoService {
 
@@ -84,6 +89,9 @@
 
     @Autowired
     private AreasService areasService;
+
+    @Autowired
+    private SmsrecordMapper smsrecordMapper;
     @Override
     public Integer create(ShopInfo shopInfo) {
         shopInfoMapper.insert(shopInfo);
@@ -197,6 +205,9 @@
         }
         if (pageWrap.getModel().getAreaId() != null) {
             queryWrapper.lambda().eq(ShopInfo::getAreaId, pageWrap.getModel().getAreaId());
+        }
+        if (pageWrap.getModel().getAddress() != null) {
+            queryWrapper.lambda().like(ShopInfo::getAddress, pageWrap.getModel().getAddress());
         }
         if (pageWrap.getModel().getAuditStatus() != null) {
             queryWrapper.lambda().eq(ShopInfo::getAuditStatus, pageWrap.getModel().getAuditStatus());
@@ -320,6 +331,8 @@
             existing.setAuditTime(null);
             existing.setAuditUserId(null);
             existing.setAuditStatus(Constants.ZERO);
+            // 璇诲彇鎶奸噾閲戦
+            setDepositAmountFromPricingRule(existing);
             shopInfoMapper.updateById(existing);
             shopId = existing.getId();
         } else {
@@ -352,6 +365,8 @@
             shopInfo.setCreateTime(now);
             shopInfo.setUpdateTime(now);
             shopInfo.setRegionMemberId(member.getId());
+            // 璇诲彇鎶奸噾閲戦
+            setDepositAmountFromPricingRule(shopInfo);
             shopInfoMapper.insert(shopInfo);
             shopId = shopInfo.getId();
         }
@@ -445,17 +460,27 @@
                 }
             }
 
-            // 3. 浠嶱ricingRule璇诲彇鎶奸噾閲戦
-            PricingRule pricingRule = pricingRuleMapper.selectOne(new QueryWrapper<PricingRule>().lambda()
-                    .eq(PricingRule::getDeleted, Constants.ZERO)
-                    .eq(PricingRule::getType, Constants.THREE)
-                    .eq(PricingRule::getFieldA, String.valueOf(shopInfo.getCompanyType()))
-                    .last("limit 1"));
-            if (pricingRule != null && StringUtils.isNotBlank(pricingRule.getFieldB())) {
-                shopInfo.setDepositAmount(Long.parseLong(pricingRule.getFieldB()));
-            }
+            // 3. 浠嶱ricingRule璇诲彇鎶奸噾閲戦锛堝鎵规椂鏇存柊锛�
+            setDepositAmountFromPricingRule(shopInfo);
         }
         shopInfoMapper.updateById(shopInfo);
+
+        // 鐭俊閫氱煡
+        if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) {
+            // 瀹℃牳閫氳繃 鈫� 閫氱煡缂寸撼鎶奸噾
+            String depositMoney = shopInfo.getDepositAmount() != null
+                    ? String.valueOf(shopInfo.getDepositAmount() / 100.0) : "0";
+            sendSmsNotify(shopInfo.getTelephone(),
+                    Constants.SmsNotify.SHOP_AUTH_APPROVED_DEPOSIT,
+                    "storeName", shopInfo.getName(),
+                    "money", depositMoney);
+        } else if (Constants.equalsInteger(newAuditStatus, Constants.TWO)) {
+            // 瀹℃牳椹冲洖
+            sendSmsNotify(shopInfo.getTelephone(),
+                    Constants.SmsNotify.SHOP_AUTH_REJECTED,
+                    "storeName", shopInfo.getName(),
+                    "reason", auditDTO.getAuditRemark() != null ? auditDTO.getAuditRemark() : "");
+        }
     }
 
     @Override
@@ -1275,4 +1300,55 @@
         return errors;
     }
 
+    /**
+     * 浠嶱ricingRule璇诲彇鎶奸噾閲戦骞惰祴鍊煎埌闂ㄥ簵璁板綍
+     */
+    private void setDepositAmountFromPricingRule(ShopInfo shopInfo) {
+        if (shopInfo.getCompanyType() == null) {
+            return;
+        }
+        PricingRule pricingRule = pricingRuleMapper.selectOne(new QueryWrapper<PricingRule>().lambda()
+                .eq(PricingRule::getDeleted, Constants.ZERO)
+                .eq(PricingRule::getType, Constants.THREE)
+                .eq(PricingRule::getFieldA, String.valueOf(shopInfo.getCompanyType()))
+                .last("limit 1"));
+        if (pricingRule != null && StringUtils.isNotBlank(pricingRule.getFieldB())) {
+            shopInfo.setDepositAmount(Long.parseLong(pricingRule.getFieldB()));
+        }
+    }
+
+    /**
+     * 鍙戦�佺煭淇¢�氱煡锛堝け璐ヤ笉褰卞搷涓讳笟鍔★級
+     */
+    private void sendSmsNotify(String phone, Constants.SmsNotify smsNotify, String... paramPairs) {
+        if (StringUtils.isBlank(phone)) {
+            return;
+        }
+        String content = smsNotify.format(paramPairs);
+        try {
+            JSONObject templateParam = new JSONObject();
+            for (int i = 0; i < paramPairs.length - 1; i += 2) {
+                templateParam.put(paramPairs[i], paramPairs[i + 1]);
+            }
+            boolean result = AliSmsService.sendSms(phone, smsNotify.getTemplateCode(),
+                    templateParam.toJSONString());
+            if (result) {
+                log.info("鐭俊鍙戦�佹垚鍔�: phone={}, template={}", phone, smsNotify.name());
+            } else {
+                log.warn("鐭俊鍙戦�佸け璐�: phone={}, template={}", phone, smsNotify.name());
+            }
+            // 瀛樺偍鐭俊璁板綍
+            Smsrecord smsRecord = new Smsrecord();
+            smsRecord.setPhone(phone);
+            smsRecord.setContent(content);
+            smsRecord.setType(Constants.ONE);
+            smsRecord.setStatus(result ? Constants.ONE : Constants.ZERO);
+            smsRecord.setCreateTime(new Date());
+            smsRecord.setDeleted(Constants.ZERO);
+            smsrecordMapper.insert(smsRecord);
+        } catch (Exception e) {
+            log.error("鐭俊鍙戦�佸紓甯�: phone={}, template={}, error={}", phone, smsNotify.name(), e.getMessage());
+        }
+    }
+
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
index 3fec8ed..227dc93 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
@@ -182,6 +182,15 @@
         if (pageWrap.getModel().getCreateEndTime() != null) {
             queryWrapper.le(WithdrawalOrders::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateEndTime()));
         }
+        // 闂ㄥ簵绔細鎸夐棬搴楀悕绉版垨鑱旂郴浜烘ā绯婃悳绱�
+        if (StringUtils.isNotBlank(pageWrap.getModel().getShopName())) {
+            queryWrapper.and(i -> i.like(ShopInfo::getName, pageWrap.getModel().getShopName())
+                    .or().like(ShopInfo::getLinkName, pageWrap.getModel().getShopName()));
+        }
+        // 鍙告満绔細鎸夊徃鏈哄鍚嶆ā绯婃悳绱�
+        if (StringUtils.isNotBlank(pageWrap.getModel().getMemberName())) {
+            queryWrapper.like(DriverInfo::getName, pageWrap.getModel().getMemberName());
+        }
         for (PageWrap.SortData sortData : pageWrap.getSorts()) {
             if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                 queryWrapper.orderByDesc(sortData.getProperty());

--
Gitblit v1.9.3