From 467fe3b3ec6aa9d449b094bdd9df4611323d88d1 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期五, 24 四月 2026 21:43:50 +0800
Subject: [PATCH] 代码生成

---
 server/services/src/main/java/com/doumee/service/business/DriverInfoService.java          |   23 +
 server/services/src/main/java/com/doumee/core/constants/ResponseStatus.java               |    3 
 server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java |  152 ++++++
 server/web/src/main/java/com/doumee/api/web/RevenueApi.java                               |    9 
 server/services/src/main/java/com/doumee/dao/dto/ShopVerifyDTO.java                       |    8 
 server/services/src/main/java/com/doumee/service/business/ShopInfoService.java            |    9 
 server/web/src/main/java/com/doumee/api/web/ConfigApi.java                                |   31 +
 server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java                     |    4 
 server/web/src/main/java/com/doumee/api/web/WalletApi.java                                |   29 +
 server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java                     |   27 
 server/services/src/main/java/com/doumee/dao/vo/MyOrderDetailVO.java                      |    3 
 server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java               |   30 +
 server/services/src/main/java/com/doumee/core/constants/Constants.java                    |   25 +
 server/services/src/main/java/com/doumee/service/business/OrdersService.java              |   20 
 server/admin/src/main/java/com/doumee/api/business/OrdersController.java                  |    8 
 server/admin/src/main/resources/application.yml                                           |    2 
 server/services/src/main/java/com/doumee/core/utils/jpush/JPushUtil.java                  |  239 +++++++++++
 server/services/src/main/java/com/doumee/dao/vo/DriverCenterVO.java                       |   13 
 server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java   |   27 +
 server/services/src/main/java/com/doumee/api/common/PublicCloudController.java            |    2 
 server/services/src/main/resources/application-dev.yml                                    |    6 
 server/web/src/main/java/com/doumee/api/web/AccountApi.java                               |   17 
 server/web/src/main/java/com/doumee/api/web/ShopInfoApi.java                              |   15 
 server/services/src/main/java/com/doumee/core/utils/HttpsUtil.java                        |   19 
 server/web/src/main/java/com/doumee/api/web/DriverInfoApi.java                            |   37 +
 server/services/src/main/java/com/doumee/dao/dto/MyOrderDTO.java                          |    2 
 server/services/src/main/java/com/doumee/dao/vo/PlatformAboutVO.java                      |   12 
 server/services/src/main/java/com/doumee/dao/vo/MyOrderVO.java                            |    6 
 server/services/src/main/java/com/doumee/dao/dto/DriverVerifyRequest.java                 |    3 
 server/web/src/main/java/com/doumee/api/web/OrdersApi.java                                |   21 
 server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java    |   22 
 server/services/src/main/java/com/doumee/dao/dto/ConfirmArriveDTO.java                    |    3 
 server/services/src/main/resources/application-pro.yml                                    |   58 +-
 server/services/src/main/java/com/doumee/dao/vo/DriverStatsVO.java                        |   29 +
 server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java     |   33 +
 server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java     |  274 ++++++++++--
 36 files changed, 1,032 insertions(+), 189 deletions(-)

diff --git a/server/admin/src/main/java/com/doumee/api/business/OrdersController.java b/server/admin/src/main/java/com/doumee/api/business/OrdersController.java
index fa16c18..634f27a 100644
--- a/server/admin/src/main/java/com/doumee/api/business/OrdersController.java
+++ b/server/admin/src/main/java/com/doumee/api/business/OrdersController.java
@@ -114,14 +114,6 @@
         return ApiResponse.success(null);
     }
 
-    @ApiOperation("纭椤惧鍒板簵")
-    @PostMapping("/confirmArrived")
-    @RequiresPermissions("business:orders:update")
-    public ApiResponse confirmArrived(@RequestBody ConfirmArriveDTO dto) {
-        ordersService.confirmCustomerArrived(dto.getOrderId(), dto.getShopId());
-        return ApiResponse.success(null);
-    }
-
     @ApiOperation("鎵嬪姩瑙﹀彂璁㈠崟缁撶畻")
     @PostMapping("/settle")
     @RequiresPermissions("business:orders:update")
diff --git a/server/admin/src/main/resources/application.yml b/server/admin/src/main/resources/application.yml
index a67904a..2966e7d 100644
--- a/server/admin/src/main/resources/application.yml
+++ b/server/admin/src/main/resources/application.yml
@@ -12,7 +12,7 @@
 
 spring:
   profiles:
-    active: dev
+    active: pro
   # JSON杩斿洖閰嶇疆
   jackson:
     # 榛樿鏃跺尯
diff --git a/server/services/src/main/java/com/doumee/api/common/PublicCloudController.java b/server/services/src/main/java/com/doumee/api/common/PublicCloudController.java
index 06ecde2..65653c6 100644
--- a/server/services/src/main/java/com/doumee/api/common/PublicCloudController.java
+++ b/server/services/src/main/java/com/doumee/api/common/PublicCloudController.java
@@ -84,7 +84,7 @@
 
                     // 缁忕含搴︽按鍗板鐞�
                     InputStream uploadStream = is;
-                    if (latitude != null && longitude != null) {
+                    if (latitude != null && longitude != null && latitude > 0 && longitude > 0) {
                         try {
                             JSONObject geoResult = MapUtil.reverseGeocode(latitude, longitude);
                             String address = geoResult != null ? geoResult.getString("formatted_addresses") : "";
diff --git a/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java b/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
index 508a36a..72097f8 100644
--- a/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
+++ b/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
@@ -27,6 +27,10 @@
 
     public static final String HEADER_KEY = "token";
 
+    public static final String SHOP_HEADER_KEY = "shopToken";
+
+
+
     public static final String MEMBER_ID = "MEMBER_ID";
 
     public static final String SHOP_ID = "SHOP_ID";
diff --git a/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java b/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
index 5792dcd..8fb56d8 100644
--- a/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
+++ b/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
@@ -74,19 +74,19 @@
                     }
                 }else if (beanType.isAnnotationPresent(LoginShopRequired.class)) {
                     //鑾峰彇token
-                    String token = request.getHeader(JwtTokenUtil.HEADER_KEY);  // 浠� http 璇锋眰澶翠腑鍙栧嚭 token
+                    String token = request.getHeader(JwtTokenUtil.SHOP_HEADER_KEY);  // 浠� http 璇锋眰澶翠腑鍙栧嚭 token
                     if (StringUtils.isNotBlank(token)) {
-                        checkShopLogin(request,response);
+                        checkShopLogin(token,request,response);
                     } else {
-                        throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"鏈櫥褰�");
+                        throw new BusinessException(ResponseStatus.SHOP_BE_OVERDUE.getCode(),"鏈櫥褰�");
                     }
                 }else if (handlerMethod.hasMethodAnnotation(LoginShopRequired.class)){
                     //鑾峰彇token
-                    String token = request.getHeader(JwtTokenUtil.HEADER_KEY);  // 浠� http 璇锋眰澶翠腑鍙栧嚭 token
+                    String token = request.getHeader(JwtTokenUtil.SHOP_HEADER_KEY);  // 浠� http 璇锋眰澶翠腑鍙栧嚭 token
                     if (StringUtils.isNotBlank(token)) {
-                        checkShopLogin(request,response);
+                        checkShopLogin(token,request,response);
                     } else {
-                        throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"鏈櫥褰�");
+                        throw new BusinessException(ResponseStatus.SHOP_BE_OVERDUE.getCode(),"鏈櫥褰�");
                     }
                 }else if (beanType.isAnnotationPresent(LoginDriverRequired.class)) {
                     //鑾峰彇token
@@ -144,19 +144,18 @@
     }
 
 
-    public Boolean checkShopLogin(HttpServletRequest request, HttpServletResponse response){
-        String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
+    public Boolean checkShopLogin(String token,HttpServletRequest request, HttpServletResponse response){
         try {
             if(!token.startsWith(Constants.TWO+"")){
-                throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME);
+                throw new BusinessException(ResponseStatus.SHOP_TOKEN_EXCEED_TIME);
             }
             String tokenRedis = (String) redisTemplate.opsForValue().get(Constants.REDIS_TOKEN_KEY+token);
             if(StringUtils.isBlank(tokenRedis)){
-                throw new BusinessException(ResponseStatus.BE_OVERDUE);
+                throw new BusinessException(ResponseStatus.SHOP_BE_OVERDUE);
             }
             ShopInfo shop = JSONObject.parseObject(tokenRedis, ShopInfo.class);
             if(Objects.isNull(shop)){
-                throw new BusinessException(ResponseStatus.BE_OVERDUE);
+                throw new BusinessException(ResponseStatus.SHOP_BE_OVERDUE);
             }
             String openid = shop.getOpenid();
             Integer shopId = getTokenId(token);
@@ -170,17 +169,17 @@
             }
             String dbOpenid = dao.queryForObject(" select ifnull(openid,'')  from shop_info where id  = ?", String.class, shopId);
             if(StringUtils.isBlank(dbOpenid)||!openid.equals(dbOpenid)){
-                throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME);
+                throw new BusinessException(ResponseStatus.SHOP_TOKEN_EXCEED_TIME);
             }
             Integer count = dao.queryForObject("select count(1) from shop_info where id  = ?", Integer.class, shopId);
             if (count != null && count > 0) {
                 request.setAttribute(JwtTokenUtil.SHOP_ID, shop.getId());
                 return true;
             }else{
-                throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"鐢ㄦ埛淇℃伅鍑洪敊");
+                throw new BusinessException(ResponseStatus.SHOP_BE_OVERDUE.getCode(),"鐢ㄦ埛淇℃伅鍑洪敊");
             }
         } catch (IllegalArgumentException | JwtException e) {
-            throw new BusinessException(ResponseStatus.BE_OVERDUE);
+            throw new BusinessException(ResponseStatus.SHOP_BE_OVERDUE);
         }
     }
 
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 fab08af..0f1d037 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
@@ -50,6 +50,22 @@
     public static final String USER_AGREEMENT ="USER_AGREEMENT" ;
     public static final String PRIVACY_AGREEMENT ="PRIVACY_AGREEMENT" ;
 
+    public static final String STORE_RISK_COMMITMENT = "STORE_RISK_COMMITMENT";
+    public static final String STORE_COOPERATION_AGREEMENT = "STORE_COOPERATION_AGREEMENT";
+    public static final String STORE_LUGGAGE_STORAGE_NOTICE = "STORE_LUGGAGE_STORAGE_NOTICE";
+    public static final String STORE_PRIVACY_POLICY = "STORE_PRIVACY_POLICY";
+    public static final String OWNER_LUGGAGE_STORAGE_NOTICE = "OWNER_LUGGAGE_STORAGE_NOTICE";
+    public static final String OWNER_SERVICE_AGREEMENT = "OWNER_SERVICE_AGREEMENT";
+    public static final String OWNER_RISK_COMMITMENT = "OWNER_RISK_COMMITMENT";
+    public static final String ERRAND_RISK_COMMITMENT = "ERRAND_RISK_COMMITMENT";
+    public static final String ERRAND_SERVICE_AGREEMENT = "ERRAND_SERVICE_AGREEMENT";
+    public static final String ERRAND_LUGGAGE_STORAGE_NOTICE = "ERRAND_LUGGAGE_STORAGE_NOTICE";
+    public static final String USER_SERVICE_AGREEMENT = "USER_SERVICE_AGREEMENT";
+    public static final String USER_PRIVACY_POLICY = "USER_PRIVACY_POLICY";
+    public static final String DRIVER_PRIVACY_POLICY = "DRIVER_PRIVACY_POLICY";
+    public static final String PRICE_DESCRIPTION = "PRICE_DESCRIPTION";
+    public static final String PROHIBITED_ITEMS = "PROHIBITED_ITEMS";
+
     public static final String ACCESS_ID="ACCESS_ID";
     public static final String BUCKETNAME = "BUCKETNAME";
 
@@ -64,6 +80,7 @@
     public static final Integer FOUR = 4;
     public static final Integer SIX = 6;
     public static final Integer FIVE = 5;
+    public static final Integer SEVEN = 7;
     public static final String INENTITY_FILES = "INENTITY_FILES";
     public static final String MEMBER_FILES = "MEMBER_FILES";
     public static final String CATEGORY_FILES = "CATEGORY_FILES";
@@ -392,7 +409,7 @@
                         if(Constants.equalsInteger(type,Constants.ZERO)){
                             return "寰呭彇浠�";
                         }else{
-                            return Constants.equalsInteger(type,Constants.ONE)?"宸插埌搴�":"宸查�佽揪";
+                            return "宸查�佽揪";
                         }
                     }
                     return c.getValue();
@@ -413,9 +430,11 @@
         waitDeliver(2, "寰呴厤閫�", new int[]{OrderStatus.accepted.status}),
         waitReceive(3, "寰呮敹璐�", new int[]{ OrderStatus.delivering.status, OrderStatus.arrived.status}),
         finished(4, "宸插畬鎴�", new int[]{OrderStatus.finished.status}),
-        refund(5, "閫�娆�", new int[]{OrderStatus.cancelled.status}),
+        refund(5, "鍙栨秷", new int[]{OrderStatus.cancelled.status}),
         home(6, "棣栭〉鏌ヨ", new int[]{OrderStatus.waitPay.status, OrderStatus.waitDeposit.status, OrderStatus.deposited.status
-                , OrderStatus.accepted.status, OrderStatus.delivering.status, OrderStatus.arrived.status})
+                , OrderStatus.accepted.status, OrderStatus.delivering.status, OrderStatus.arrived.status}),
+        shopHome(7, "闂ㄥ簵棣栭〉鏌ヨ", new int[]{OrderStatus.waitDeposit.status, OrderStatus.deposited.status
+                , OrderStatus.delivering.status, OrderStatus.arrived.status})
         ;
         private final int key;
         private final String desc;
diff --git a/server/services/src/main/java/com/doumee/core/constants/ResponseStatus.java b/server/services/src/main/java/com/doumee/core/constants/ResponseStatus.java
index 87f54b5..a9e66e1 100644
--- a/server/services/src/main/java/com/doumee/core/constants/ResponseStatus.java
+++ b/server/services/src/main/java/com/doumee/core/constants/ResponseStatus.java
@@ -30,6 +30,9 @@
     NOT_ALLOWED(5110, "涓嶅厑璁哥殑鎿嶄綔"),
     BE_OVERDUE(5112, "鏈櫥褰�"),
     TOKEN_EXCEED_TIME(5113, "瀵逛笉璧凤紝鐧诲綍宸插け鏁堬紒"),
+
+    SHOP_BE_OVERDUE(51121, "鏈櫥褰�"),
+    SHOP_TOKEN_EXCEED_TIME(51131, "瀵逛笉璧凤紝鐧诲綍宸插け鏁堬紒"),
     ;
 
     private int code;
diff --git a/server/services/src/main/java/com/doumee/core/utils/HttpsUtil.java b/server/services/src/main/java/com/doumee/core/utils/HttpsUtil.java
index e4688de..32aafdb 100644
--- a/server/services/src/main/java/com/doumee/core/utils/HttpsUtil.java
+++ b/server/services/src/main/java/com/doumee/core/utils/HttpsUtil.java
@@ -26,6 +26,13 @@
             return connectionHttp(url, "POST", data, "application/json");
         }
     }
+    public static String postJson(String url, String data, String authorization) {
+        if(url.startsWith("https://")){
+            return connection(url, "POST", data, "application/json", true, authorization);
+        }else{
+            return connectionHttp(url, "POST", data, "application/json", authorization);
+        }
+    }
     public static String uploadTempMedia(String urlString ,String fileUrl){
         HttpsURLConnection conn= null;
         try {
@@ -101,6 +108,9 @@
 
     }
     public static String connection(String url,String method,String data,String contentType,boolean ignoreSSL){
+        return connection(url, method, data, contentType, ignoreSSL, null);
+    }
+    public static String connection(String url,String method,String data,String contentType,boolean ignoreSSL, String authorization){
         HttpsURLConnection connection = null;
         try {
             URL _url = new URL(url);
@@ -111,6 +121,9 @@
             connection.setUseCaches(false);
             if(contentType != null){
                 connection.setRequestProperty("Content-Type", contentType);
+            }
+            if(authorization != null){
+                connection.setRequestProperty("Authorization", authorization);
             }
 
             if(ignoreSSL){
@@ -172,6 +185,9 @@
         return null;
     }
     public static String connectionHttp(String url,String method,String data,String contentType ){
+        return connectionHttp(url, method, data, contentType, null);
+    }
+    public static String connectionHttp(String url,String method,String data,String contentType, String authorization ){
         HttpURLConnection connection = null;
         try {
             URL _url = new URL(url);
@@ -183,6 +199,9 @@
             if(contentType != null){
                 connection.setRequestProperty("Content-Type", contentType);
             }
+            if(authorization != null){
+                connection.setRequestProperty("Authorization", authorization);
+            }
 
             connection.connect();
 
diff --git a/server/services/src/main/java/com/doumee/core/utils/jpush/JPushUtil.java b/server/services/src/main/java/com/doumee/core/utils/jpush/JPushUtil.java
new file mode 100644
index 0000000..3e1c0a5
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/utils/jpush/JPushUtil.java
@@ -0,0 +1,239 @@
+package com.doumee.core.utils.jpush;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.core.utils.HttpsUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.Base64;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏋佸厜鎺ㄩ�佸伐鍏风被锛堝熀浜嶫Push REST API锛�
+ *
+ * @author rk
+ * @date 2026/04/24
+ */
+@Component
+@Slf4j
+public class JPushUtil {
+
+    private static final String PUSH_URL = "https://bjapi.push.jiguang.cn/v3/push";
+
+    private static String authHeader;
+    private static boolean apnsProduction;
+
+    @Value("${jpush.appKey:}")
+    private String appKey;
+
+    @Value("${jpush.masterSecret:}")
+    private String masterSecret;
+
+    @Value("${jpush.apnsProduction:false}")
+    private boolean apnsProd;
+
+    @PostConstruct
+    public void init() {
+        if (StringUtils.isNotBlank(appKey) && StringUtils.isNotBlank(masterSecret)) {
+            authHeader = "Basic " + Base64.getEncoder().encodeToString((appKey + ":" + masterSecret).getBytes());
+            apnsProduction = apnsProd;
+            log.info("JPush initialized, appKey={}", appKey);
+        } else {
+            log.warn("JPush not configured, push disabled");
+        }
+    }
+
+    // ==================== 閫氱煡鏍忔帹閫� ====================
+
+    /**
+     * 鎸夊埆鍚嶆帹閫侀�氱煡
+     *
+     * @param alias   鍒悕锛堝浼氬憳ID/鍙告満ID/闂ㄥ簵ID锛�
+     * @param title   閫氱煡鏍囬
+     * @param content 閫氱煡鍐呭
+     * @param extras  闄勫姞瀛楁锛堝彲閫夛級
+     * @return 鏄惁鎺ㄩ�佹垚鍔�
+     */
+    public static boolean sendByAlias(String alias, String title, String content, Map<String, String> extras) {
+        return sendByAliases(Collections.singletonList(alias), title, content, extras);
+    }
+
+    /**
+     * 鎸夊埆鍚嶆壒閲忔帹閫侀�氱煡
+     */
+    public static boolean sendByAliases(List<String> aliases, String title, String content, Map<String, String> extras) {
+        if (!available() || aliases == null || aliases.isEmpty()) {
+            return false;
+        }
+        JSONObject body = buildNotificationBody(aliases, "alias", title, content, extras);
+        return doPush(body, "sendByAliases");
+    }
+
+    /**
+     * 鎸塕egistrationId鎺ㄩ�侀�氱煡
+     */
+    public static boolean sendByRegId(String regId, String title, String content, Map<String, String> extras) {
+        return sendByRegIds(Collections.singletonList(regId), title, content, extras);
+    }
+
+    /**
+     * 鎸塕egistrationId鎵归噺鎺ㄩ�侀�氱煡
+     */
+    public static boolean sendByRegIds(List<String> regIds, String title, String content, Map<String, String> extras) {
+        if (!available() || regIds == null || regIds.isEmpty()) {
+            return false;
+        }
+        JSONObject body = buildNotificationBody(regIds, "registration_id", title, content, extras);
+        return doPush(body, "sendByRegIds");
+    }
+
+    /**
+     * 骞挎挱鎺ㄩ�侀�氱煡锛堟帹閫佺粰鎵�鏈夌敤鎴凤級
+     */
+    public static boolean sendToAll(String title, String content, Map<String, String> extras) {
+        if (!available()) {
+            return false;
+        }
+        JSONObject body = buildNotificationBody(null, "all", title, content, extras);
+        return doPush(body, "sendToAll");
+    }
+
+    // ==================== 鑷畾涔夋秷鎭紙闈欓粯鎺ㄩ�侊紝涓嶆樉绀洪�氱煡鏍忥級 ====================
+
+    /**
+     * 鎸夊埆鍚嶆帹閫佽嚜瀹氫箟娑堟伅
+     */
+    public static boolean sendMessageByAlias(String alias, String content, Map<String, String> extras) {
+        return sendMessagesByAlias(Collections.singletonList(alias), content, extras);
+    }
+
+    /**
+     * 鎸夊埆鍚嶆壒閲忔帹閫佽嚜瀹氫箟娑堟伅
+     */
+    public static boolean sendMessagesByAlias(List<String> aliases, String content, Map<String, String> extras) {
+        if (!available() || aliases == null || aliases.isEmpty()) {
+            return false;
+        }
+        JSONObject body = buildMessageBody(aliases, "alias", content, extras);
+        return doPush(body, "sendMessageByAlias");
+    }
+
+    // ==================== 鍐呴儴鏂规硶 ====================
+
+    private static boolean available() {
+        return StringUtils.isNotBlank(authHeader);
+    }
+
+    /**
+     * 鏋勫缓閫氱煡鏍忔帹閫佽姹備綋
+     */
+    private static JSONObject buildNotificationBody(List<String> targets, String audienceType,
+                                                    String title, String content, Map<String, String> extras) {
+        JSONObject body = new JSONObject();
+        // platform
+        body.put("platform", "all");
+
+        // audience
+        if ("all".equals(audienceType)) {
+            body.put("audience", "all");
+        } else {
+            JSONObject audience = new JSONObject();
+            JSONArray arr = new JSONArray();
+            arr.addAll(targets);
+            audience.put(audienceType, arr);
+            body.put("audience", audience);
+        }
+
+        // notification
+        JSONObject notification = new JSONObject();
+
+        // Android
+        JSONObject android = new JSONObject();
+        android.put("title", title);
+        android.put("alert", content);
+        if (extras != null && !extras.isEmpty()) {
+            android.put("extras", mapToJson(extras));
+        }
+        notification.put("android", android);
+
+        // iOS
+        JSONObject ios = new JSONObject();
+        ios.put("alert", content);
+        ios.put("sound", "default");
+        if (extras != null && !extras.isEmpty()) {
+            ios.put("extras", mapToJson(extras));
+        }
+        notification.put("ios", ios);
+
+        body.put("notification", notification);
+
+        // options
+        JSONObject options = new JSONObject();
+        options.put("apns_production", apnsProduction);
+        body.put("options", options);
+
+        return body;
+    }
+
+    /**
+     * 鏋勫缓鑷畾涔夋秷鎭姹備綋锛堜笉鏄剧ず閫氱煡鏍忥級
+     */
+    private static JSONObject buildMessageBody(List<String> targets, String audienceType,
+                                               String content, Map<String, String> extras) {
+        JSONObject body = new JSONObject();
+        body.put("platform", "all");
+
+        JSONObject audience = new JSONObject();
+        JSONArray arr = new JSONArray();
+        arr.addAll(targets);
+        audience.put(audienceType, arr);
+        body.put("audience", audience);
+
+        // message
+        JSONObject message = new JSONObject();
+        message.put("msg_content", content);
+        if (extras != null && !extras.isEmpty()) {
+            message.put("extras", mapToJson(extras));
+        }
+        body.put("message", message);
+
+        JSONObject options = new JSONObject();
+        options.put("apns_production", apnsProduction);
+        body.put("options", options);
+
+        return body;
+    }
+
+    /**
+     * Map<String, String> 鈫� JSONObject
+     */
+    private static JSONObject mapToJson(Map<String, String> map) {
+        JSONObject json = new JSONObject();
+        json.putAll(map);
+        return json;
+    }
+
+    /**
+     * 鎵ц鎺ㄩ�佽姹�
+     */
+    private static boolean doPush(JSONObject body, String action) {
+        try {
+            String response = HttpsUtil.postJson(PUSH_URL, body.toJSONString(), authHeader);
+            log.info("JPush {}, response={}", action, response);
+            if (StringUtils.isNotBlank(response)) {
+                JSONObject resp = JSONObject.parseObject(response);
+                return resp.containsKey("msg_id") || (resp.containsKey("statusCode") && resp.getIntValue("statusCode") == 0);
+            }
+            return false;
+        } catch (Exception e) {
+            log.error("JPush {} error", action, e);
+            return false;
+        }
+    }
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java b/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java
index 606dd65..8a0f9c1 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java
@@ -100,8 +100,8 @@
     @ExcelColumn(name = "鐘舵��", index = 8, width = 8, valueMapping = "0=鍚敤锛�1=绂佺敤锛�")
     private Integer status;
 
-    @ApiModelProperty(value = "瀹℃壒鐘舵�侊細0=寰呭鎵癸紱1=瀹℃壒閫氳繃锛�2=瀹℃壒椹冲洖", example = "0")
-    @ExcelColumn(name = "瀹℃壒鐘舵��", index = 9, width = 10, valueMapping = "0=寰呭鎵癸紱1=瀹℃壒閫氳繃锛�2=瀹℃壒椹冲洖")
+    @ApiModelProperty(value = "瀹℃壒鐘舵�侊細0=寰呭鎵癸紱1=瀹℃壒閫氳繃锛�2=瀹℃壒椹冲洖锛�3=宸叉敮浠樻娂閲戯紱99=鏈璇侊紱", example = "0")
+    @ExcelColumn(name = "瀹℃壒鐘舵��", index = 9, width = 10, valueMapping = "瀹℃壒鐘舵�侊細0=寰呭鎵癸紱1=瀹℃壒閫氳繃锛�2=瀹℃壒椹冲洖锛�3=宸叉敮浠樻娂閲戯紱99=鏈璇侊紱")
     private Integer auditStatus;
 
     @ApiModelProperty(value = "OPENID(APP)")
@@ -203,4 +203,30 @@
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createTimeEnd;
 
+    // ---- 鐪佸競鍖轰俊鎭紙闈炴暟鎹簱瀛楁锛� ----
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鐪佷唤涓婚敭")
+    private Integer provinceId;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鐪佷唤鍚嶇О")
+    private String provinceName;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鍩庡競涓婚敭")
+    private Integer cityId;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鍩庡競鍚嶇О")
+    private String cityName;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鍖哄幙涓婚敭")
+    private Integer districtId;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鍖哄幙鍚嶇О")
+    private String districtName;
+
 }
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ConfirmArriveDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ConfirmArriveDTO.java
index 396b2c4..dc198d1 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/ConfirmArriveDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/ConfirmArriveDTO.java
@@ -19,7 +19,4 @@
     @ApiModelProperty(value = "璁㈠崟涓婚敭", required = true)
     private Integer orderId;
 
-    @NotNull(message = "闂ㄥ簵涓婚敭涓嶈兘涓虹┖")
-    @ApiModelProperty(value = "褰撳墠鎿嶄綔闂ㄥ簵涓婚敭", required = true)
-    private Integer shopId;
 }
diff --git a/server/services/src/main/java/com/doumee/dao/dto/DriverVerifyRequest.java b/server/services/src/main/java/com/doumee/dao/dto/DriverVerifyRequest.java
index e414d00..26e4eb1 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/DriverVerifyRequest.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/DriverVerifyRequest.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.dto;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -50,9 +51,11 @@
     private String carColor;
 
     @ApiModelProperty(value = "椹鹃┒璇佹湁鏁堟湡寮�濮嬫椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date cardStartDate;
 
     @ApiModelProperty(value = "椹鹃┒璇佹湁鏁堟湡缁撴潫鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date cardEndDate;
 
     @NotEmpty(message = "韬唤璇佹闈㈢収涓嶈兘涓虹┖")
diff --git a/server/services/src/main/java/com/doumee/dao/dto/MyOrderDTO.java b/server/services/src/main/java/com/doumee/dao/dto/MyOrderDTO.java
index ecca5c8..fafc9ad 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/MyOrderDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/MyOrderDTO.java
@@ -18,7 +18,7 @@
     @ApiModelProperty(value = "璁㈠崟鐘舵�侊紙鍙�夛紝涓嶄紶鏌ュ叏閮級", example = "0")
     private Integer status;
 
-    @ApiModelProperty(value = "鍚堝苟鐘舵�侊紙鍙�夛紝涓嶄紶鏌ュ叏閮級: 0=寰呮敮浠� 1=寰呮牳楠� 2=寰呴厤閫� 3=寰呮敹璐� 4=宸插畬鎴� 5=閫�娆�", example = "0")
+    @ApiModelProperty(value = "鍚堝苟鐘舵�侊紙鍙�夛紝涓嶄紶鏌ュ叏閮級: 0=寰呮敮浠� 1=寰呮牳楠� 2=寰呴厤閫� 3=寰呮敹璐� 4=宸插畬鎴� 5=閫�娆� 6浼氬憳棣栭〉 7闂ㄥ簵寰呭鐞嗚鍗�", example = "0")
     private Integer combinedStatus;
 
 }
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ShopVerifyDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ShopVerifyDTO.java
index a082b09..6794a57 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/ShopVerifyDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/ShopVerifyDTO.java
@@ -4,7 +4,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 import java.util.List;
 
@@ -18,9 +18,9 @@
 @ApiModel("闂ㄥ簵鏍搁攢璇锋眰")
 public class ShopVerifyDTO {
 
-    @NotBlank(message = "鏍搁攢鐮佷笉鑳戒负绌�")
-    @ApiModelProperty(value = "浼氬憳鏍搁攢鐮�", required = true)
-    private String verifyCode;
+    @NotNull(message = "璁㈠崟涓婚敭涓嶈兘涓虹┖")
+    @ApiModelProperty(value = "璁㈠崟涓婚敭", required = true)
+    private Integer orderId;
 
     @Size(max = 3, message = "鏈�澶氫笂浼�3寮犲浘鐗�")
     @ApiModelProperty(value = "鍥剧墖鍦板潃鍒楄〃锛屾渶澶�3寮�")
diff --git a/server/services/src/main/java/com/doumee/dao/vo/DriverCenterVO.java b/server/services/src/main/java/com/doumee/dao/vo/DriverCenterVO.java
index b637fc2..422938d 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/DriverCenterVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/DriverCenterVO.java
@@ -28,6 +28,15 @@
     @ApiModelProperty(value = "鏈嶅姟璇勫垎")
     private String score;
 
+    @ApiModelProperty(value = "鍙告満瀹氱骇锛�5=S 4=A 3=B 2=C 1=D")
+    private Integer driverLevel;
+
+    @ApiModelProperty(value = "瀹℃牳鐘舵�侊細0=寰呭鎵� 1=瀹℃壒閫氳繃 2=瀹℃壒椹冲洖")
+    private Integer auditStatus;
+
+    @ApiModelProperty(value = "瀹℃牳澶囨敞锛堥┏鍥炲師鍥狅級")
+    private String auditRemark;
+
     @ApiModelProperty(value = "浠婃棩棰勮浣i噾(鍒�)")
     private Long todayCommission;
 
@@ -43,4 +52,8 @@
     @ApiModelProperty(value = "寰呴厤閫佽鍗曟暟閲�")
     private Integer waitDeliverCount;
 
+    @ApiModelProperty(value = "鏄惁鎺ュ崟涓細0=宸蹭笅绾匡紱1=鎺ュ崟涓�", example = "0")
+    private Integer acceptingStatus;
+
+
 }
diff --git a/server/services/src/main/java/com/doumee/dao/vo/DriverStatsVO.java b/server/services/src/main/java/com/doumee/dao/vo/DriverStatsVO.java
new file mode 100644
index 0000000..43d2012
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/DriverStatsVO.java
@@ -0,0 +1,29 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍙告満绱缁熻
+ *
+ * @author rk
+ * @date 2026/04/24
+ */
+@Data
+@ApiModel("鍙告満绱缁熻")
+public class DriverStatsVO {
+
+    @ApiModelProperty(value = "绱浣i噾(鍒�)")
+    private Long totalCommission;
+
+    @ApiModelProperty(value = "寰呯粨绠椾剑閲�(鍒�)")
+    private Long pendingCommission;
+
+    @ApiModelProperty(value = "璁㈠崟鎬绘暟")
+    private Integer totalOrderCount;
+
+    @ApiModelProperty(value = "閽卞寘浣欓(鍒�)")
+    private Long balance;
+
+}
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 344432b..631a36b 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
@@ -134,7 +134,8 @@
 
     // ---- 閫炬湡 ----
 
-    @ApiModelProperty(value = "閫炬湡鐘舵��: 0=鏃犻�炬湡 1=瀛樺湪閫炬湡 2=寰呮敮浠橀�炬湡 3=閫炬湡宸叉敮浠�")
+    //閫炬湡鐘舵��: 0=鏈埌搴楁湭閫炬湡 1=鏈埌搴楀瓨鍦ㄩ�炬湡 2=宸插埌搴楁湭瀛樺湪閫炬湡 3=宸插埌搴楀緟鏀粯閫炬湡 4=閫炬湡宸叉敮浠�
+    @ApiModelProperty(value = "閫炬湡鐘舵��: 0=鏈埌搴楁湭閫炬湡 1=鏈埌搴楀瓨鍦ㄩ�炬湡 2=宸插埌搴楁湭閫炬湡 3=宸插埌搴楀緟鏀粯閫炬湡 4=閫炬湡宸叉敮浠�")
     private Integer overdueStatus;
 
     @ApiModelProperty(value = "鏄惁閫炬湡")
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 2a1ef86..39f45a2 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
@@ -37,6 +37,9 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
+    @ApiModelProperty(value = "璁㈠崟澶囨敞")
+    private String remark;
+
     @ApiModelProperty(value = "棰勮鍙栦欢鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date expectedTakeTime;
@@ -94,6 +97,9 @@
 
     // ---- 閫炬湡 ----
 
+    @ApiModelProperty(value = "閫炬湡鐘舵�侊細0=鏈埌搴楁湭閫炬湡锛�1=鏈埌搴楀瓨鍦ㄩ�炬湡锛�2=宸插埌搴楁湭閫炬湡锛�3=宸插埌搴楀緟鏀粯閫炬湡锛�4=閫炬湡宸叉敮浠�")
+    private Integer overdueStatus;
+
     @ApiModelProperty(value = "鏄惁閫炬湡")
     private Boolean overdue;
 
diff --git a/server/services/src/main/java/com/doumee/dao/vo/PlatformAboutVO.java b/server/services/src/main/java/com/doumee/dao/vo/PlatformAboutVO.java
index 51bcf87..2423901 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/PlatformAboutVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/PlatformAboutVO.java
@@ -4,6 +4,8 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Map;
+
 /**
  * 骞冲彴淇℃伅锛堝叧浜庢垜浠�佸崗璁瓑锛�
  *
@@ -17,12 +19,6 @@
     @ApiModelProperty(value = "鍏充簬鎴戜滑")
     private String aboutUs;
 
-    @ApiModelProperty(value = "鐢ㄦ埛鍗忚")
-    private String userAgreement;
-
-    @ApiModelProperty(value = "闅愮鍗忚")
-    private String privacyAgreement;
-
-    @ApiModelProperty(value = "瑙勮寖椤荤煡")
-    private String serverIntroduce;
+    @ApiModelProperty(value = "鍗忚椤荤煡鍒楄〃锛宬ey=鏋氫妇缂栫爜锛寁alue=瀵屾枃鏈唴瀹�")
+    private Map<String, String> agreements;
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/DriverInfoService.java b/server/services/src/main/java/com/doumee/service/business/DriverInfoService.java
index 769f3d1..9dc237e 100644
--- a/server/services/src/main/java/com/doumee/service/business/DriverInfoService.java
+++ b/server/services/src/main/java/com/doumee/service/business/DriverInfoService.java
@@ -13,6 +13,7 @@
 import com.doumee.dao.vo.AccountResponse;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 鍙告満娉ㄥ唽淇℃伅Service瀹氫箟
@@ -191,6 +192,11 @@
     com.doumee.dao.vo.DriverCenterVO getDriverCenterInfo(Integer memberId);
 
     /**
+     * 鍙告満绱缁熻锛堢疮璁′剑閲戙�佸緟缁撶畻浣i噾銆佽鍗曟�绘暟銆侀挶鍖呬綑棰濓級
+     */
+    com.doumee.dao.vo.DriverStatsVO getDriverStats(Integer memberId);
+
+    /**
      * 鍙告満鎶㈠崟澶у巺 - 鍒嗛〉鏌ヨ鍙姠璁㈠崟
      *
      * @param memberId  褰撳墠鐧诲綍浼氬憳涓婚敭
@@ -250,4 +256,21 @@
      */
     void confirmDeliver(Integer driverId, DriverDeliverDTO dto);
 
+    /**
+     * 鍙告満淇敼瀵嗙爜
+     *
+     * @param driverId    鍙告満涓婚敭
+     * @param newPassword 鏂板瘑鐮�
+     * @param token       褰撳墠token锛堜慨鏀规垚鍔熷悗娓呴櫎锛�
+     */
+    void changePassword(Integer driverId, String newPassword, String token);
+
+    /**
+     * 鑾峰彇鍙告満杩涜涓鍗曟暟閲�
+     *
+     * @param driverId 鍙告満涓婚敭
+     * @return [宸叉姠鍗曟暟閲�, 娲鹃�佷腑鏁伴噺]
+     */
+    Map<String, Integer> getActiveOrderCount(Integer driverId);
+
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/OrdersService.java b/server/services/src/main/java/com/doumee/service/business/OrdersService.java
index 935b2a5..1695868 100644
--- a/server/services/src/main/java/com/doumee/service/business/OrdersService.java
+++ b/server/services/src/main/java/com/doumee/service/business/OrdersService.java
@@ -149,6 +149,26 @@
     void shopVerifyOrder(String verifyCode, Integer shopId, List<String> images, String remark);
 
     /**
+     * 闂ㄥ簵鏍搁攢锛堣嚜鍔ㄨ瘑鍒細鍛樻牳閿�鐮�/鍙告満鏍搁攢鐮侊級
+     *
+     * @param verifyCode 鏍搁攢鐮�
+     * @param shopId     闂ㄥ簵涓婚敭
+     * @param images     鍥剧墖
+     * @param remark     澶囨敞
+     */
+    void verifyOrder(String verifyCode, Integer shopId, List<String> images, String remark);
+
+    /**
+     * 闂ㄥ簵閫氳繃璁㈠崟涓婚敭鏍搁攢
+     *
+     * @param orderId 璁㈠崟涓婚敭
+     * @param shopId  闂ㄥ簵涓婚敭
+     * @param images  鍥剧墖
+     * @param remark  澶囨敞
+     */
+    void verifyOrderByShopId(Integer orderId, Integer shopId, List<String> images, String remark);
+
+    /**
      * 闂ㄥ簵绔煡璇㈣鍗曡鎯�
      * 鏀寔鎸夎鍗曚富閿垨鏍搁攢鐮佹煡璇紝澶嶇敤浼氬憳绔鎯呴�昏緫
      *
diff --git a/server/services/src/main/java/com/doumee/service/business/ShopInfoService.java b/server/services/src/main/java/com/doumee/service/business/ShopInfoService.java
index 7f1f255..c4d64e7 100644
--- a/server/services/src/main/java/com/doumee/service/business/ShopInfoService.java
+++ b/server/services/src/main/java/com/doumee/service/business/ShopInfoService.java
@@ -209,4 +209,13 @@
      */
     ShopSalesStatsVO getShopSalesStats(Integer shopId, Integer period);
 
+    /**
+     * 闂ㄥ簵淇敼瀵嗙爜
+     *
+     * @param shopId      闂ㄥ簵涓婚敭
+     * @param newPassword 鏂板瘑鐮�
+     * @param token       褰撳墠token锛堜慨鏀规垚鍔熷悗娓呴櫎锛�
+     */
+    void changePassword(Integer shopId, String newPassword, String token);
+
 }
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 c885730..5bd7f52 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
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.biz.system.impl.AreasBizImpl;
 import com.doumee.core.constants.Constants;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
@@ -22,27 +23,17 @@
 import com.doumee.dao.business.ShopInfoMapper;
 import com.doumee.dao.business.OrdersDetailMapper;
 import com.doumee.dao.business.RevenueMapper;
+import com.doumee.dao.business.model.*;
+import com.doumee.service.business.AreasService;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.biz.system.OperationConfigBiz;
 import com.doumee.dao.business.OrderLogMapper;
-import com.doumee.dao.business.model.Category;
-import com.doumee.dao.business.model.DriverInfo;
-import com.doumee.dao.business.model.OrderLog;
-import com.doumee.dao.business.model.OrderComment;
-import com.doumee.dao.business.model.ShopInfo;
-import com.doumee.dao.business.model.Member;
-import com.doumee.dao.business.model.Multifile;
-import com.doumee.dao.business.model.Smsrecord;
-import com.doumee.dao.business.model.Orders;
-import com.doumee.dao.business.model.OrdersDetail;
-import com.doumee.dao.business.model.Revenue;
 import com.doumee.dao.dto.*;
 import com.doumee.dao.vo.AccountResponse;
 import com.doumee.dao.vo.DriverCenterVO;
 import com.doumee.dao.vo.DriverGrabOrderVO;
 import com.doumee.dao.vo.DriverOrderDetailVO;
 import com.doumee.core.utils.aliyun.AliSmsService;
-import com.doumee.dao.business.model.Notice;
 import com.doumee.service.business.DriverInfoService;
 import com.doumee.service.business.NoticeService;
 import com.alibaba.fastjson.JSONObject;
@@ -118,6 +109,9 @@
 
     @Autowired
     private NoticeService noticeService;
+
+    @Autowired
+    private AreasBizImpl areasBiz;
 
     /**
      * 鍙戦�佽鍗曠珯鍐呬俊閫氱煡
@@ -383,7 +377,7 @@
             member.setUpdateTime(now);
             member.setTelephone(telephone);
             member.setNickName(telephone.substring(0, 3) + "****" + telephone.substring(7));
-            member.setName(telephone);
+            member.setName(member.getNickName());
             member.setUserType(Constants.ONE);
             member.setBusinessStatus(Constants.ZERO);
             member.setPassword(secure.encryptPassword(defaultPassword, salt));
@@ -401,13 +395,15 @@
 
             // 鍒涘缓鍙告満鍩虹淇℃伅
             DriverInfo driverInfo = new DriverInfo();
+            driverInfo.setId(member.getId());
             driverInfo.setDeleted(Constants.ZERO);
             driverInfo.setCreateTime(now);
             driverInfo.setUpdateTime(now);
             driverInfo.setTelephone(telephone);
+            driverInfo.setName(member.getNickName());
             driverInfo.setMemberId(member.getId());
             driverInfo.setStatus(Constants.ZERO);
-            driverInfo.setAuditStatus(null);
+            driverInfo.setAuditStatus(99);
             driverInfoMapper.insert(driverInfo);
         }
 
@@ -531,6 +527,7 @@
                 .set(DriverInfo::getAliAccount, request.getAliAccount())
                 .set(DriverInfo::getAliName, request.getAliName())
                 .set(DriverInfo::getUpdateTime, now)
+                .set(DriverInfo::getAuditStatus, Constants.ZERO)
                 .set(DriverInfo::getAuditRemark, null)
                 .set(DriverInfo::getAuditTime, null)
                 .eq(DriverInfo::getId, driverInfo.getId()));
@@ -561,18 +558,39 @@
     @Override
     public DriverInfo getVerifyDetail(Integer memberId) {
         DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
-                .eq(DriverInfo::getMemberId, memberId)
+                .eq(DriverInfo::getId, memberId)
                 .eq(DriverInfo::getDeleted, Constants.ZERO)
                 .last("limit 1"));
         if (Objects.isNull(driverInfo)) {
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
+        // 鎷兼帴鍥剧墖鍓嶇紑
+        String imgPrefix = "";
+        try {
+            imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+                    + systemDictDataBiz.queryByCode(Constants.OSS, Constants.DRIVER_FILES).getCode();
+        } catch (Exception e) {
+            // 鏈厤缃椂蹇界暐
+        }
+        driverInfo.setImgPrefix(imgPrefix);
         // 鏌ヨ杞﹁締绫诲瀷鍚嶇О鍜屾槸鍚﹂渶瑕侀┚椹惰瘉
         if (driverInfo.getCarType() != null) {
             Category category = categoryMapper.selectById(driverInfo.getCarType());
             if (Objects.nonNull(category)) {
                 driverInfo.setCarTypeName(category.getName());
                 driverInfo.setNeedLicense(Constants.equalsInteger(Integer.valueOf(category.getOtherField()), Constants.ONE) ? Constants.ONE : Constants.ZERO);
+            }
+        }
+        // 鏌ヨ鐪佸競鍖轰俊鎭�
+        if (driverInfo.getAreaId() != null) {
+            Areas district = areasBiz.resolveArea(driverInfo.getAreaId());
+            if (district != null) {
+                driverInfo.setDistrictId(district.getId());
+                driverInfo.setDistrictName(district.getName());
+                driverInfo.setCityId(district.getCityId());
+                driverInfo.setCityName(district.getCityName());
+                driverInfo.setProvinceId(district.getProvinceId());
+                driverInfo.setProvinceName(district.getProvinceName());
             }
         }
         // 鏌ヨ鐓х墖鍒楄〃
@@ -790,8 +808,11 @@
         vo.setImgUrl(driver.getImgurl());
         vo.setCarCode(driver.getCarCode());
         vo.setScore(driver.getScore() != null ? driver.getScore().toPlainString() : "0");
+        vo.setDriverLevel(driver.getDriverLevel());
+        vo.setAuditStatus(driver.getAuditStatus());
+        vo.setAuditRemark(driver.getAuditRemark());
         vo.setBalance(driver.getBalance() != null ? driver.getBalance() : 0L);
-
+        vo.setAcceptingStatus(driver.getAcceptingStatus());
         // 澶村儚鍏ㄨ矾寰�
         if (StringUtils.isNotBlank(driver.getImgurl())) {
             String imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
@@ -840,6 +861,54 @@
                 .eq(Orders::getDeleted, Constants.ZERO)
                 .eq(Orders::getStatus, Constants.OrderStatus.delivering.getStatus()));
         vo.setWaitDeliverCount(waitDeliverCount.intValue());
+
+        return vo;
+    }
+
+    @Override
+    public com.doumee.dao.vo.DriverStatsVO getDriverStats(Integer memberId) {
+        DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+                .eq(DriverInfo::getId, memberId)
+                .eq(DriverInfo::getDeleted, Constants.ZERO)
+                .last("limit 1"));
+        if (driver == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
+        }
+
+        com.doumee.dao.vo.DriverStatsVO vo = new com.doumee.dao.vo.DriverStatsVO();
+
+        // 绱浣i噾锛歵ype=0(瀹屾垚璁㈠崟) + vaildStatus=1(宸插叆璐�)
+        QueryWrapper<Revenue> totalWrapper = new QueryWrapper<>();
+        totalWrapper.lambda()
+                .eq(Revenue::getMemberId, memberId)
+                .eq(Revenue::getMemberType, Constants.ONE)
+                .eq(Revenue::getType, Constants.ZERO)
+                .eq(Revenue::getVaildStatus, Constants.ONE)
+                .eq(Revenue::getDeleted, Constants.ZERO);
+        totalWrapper.select("IFNULL(SUM(AMOUNT),0) as amount");
+        Revenue totalResult = revenueMapper.selectOne(totalWrapper);
+        vo.setTotalCommission(totalResult != null && totalResult.getAmount() != null ? totalResult.getAmount() : 0L);
+
+        // 寰呯粨绠椾剑閲戯細type=0(瀹屾垚璁㈠崟) + vaildStatus=0(鍏ヨ处涓�)
+        QueryWrapper<Revenue> pendingWrapper = new QueryWrapper<>();
+        pendingWrapper.lambda()
+                .eq(Revenue::getMemberId, memberId)
+                .eq(Revenue::getMemberType, Constants.ONE)
+                .eq(Revenue::getType, Constants.ZERO)
+                .eq(Revenue::getVaildStatus, Constants.ZERO)
+                .eq(Revenue::getDeleted, Constants.ZERO);
+        pendingWrapper.select("IFNULL(SUM(AMOUNT),0) as amount");
+        Revenue pendingResult = revenueMapper.selectOne(pendingWrapper);
+        vo.setPendingCommission(pendingResult != null && pendingResult.getAmount() != null ? pendingResult.getAmount() : 0L);
+
+        // 璁㈠崟鎬绘暟
+        Long totalOrderCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+                .eq(Orders::getAcceptDriver, driver.getId())
+                .eq(Orders::getDeleted, Constants.ZERO));
+        vo.setTotalOrderCount(totalOrderCount.intValue());
+
+        // 閽卞寘浣欓
+        vo.setBalance(driver.getBalance() != null ? driver.getBalance() : 0L);
 
         return vo;
     }
@@ -1701,4 +1770,55 @@
         }
     }
 
+    @Override
+    public void changePassword(Integer driverId, String newPassword, String token) {
+        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) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵嗙爜蹇呴』鍚屾椂鍖呭惈瀛楁瘝鍜屾暟瀛�");
+        }
+        // 鏌ヨ鍙告満瀵瑰簲鐨勪細鍛�
+        DriverInfo driverInfo = driverInfoMapper.selectById(driverId);
+        if (driverInfo == null || driverInfo.getMemberId() == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        Member member = memberMapper.selectById(driverInfo.getMemberId());
+        if (member == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        // 鍔犲瘑鏂板瘑鐮佸苟鏇存柊
+        String salt = RandomStringUtils.randomAlphanumeric(6);
+        String encryptPwd = secure.encryptPassword(newPassword, salt);
+        memberMapper.update(new UpdateWrapper<Member>().lambda()
+                .set(Member::getPassword, encryptPwd)
+                .set(Member::getSalt, salt)
+                .eq(Member::getId, member.getId()));
+        // 娓呴櫎token锛屽己鍒堕噸鏂扮櫥褰�
+        if (StringUtils.isNotBlank(token)) {
+            redisTemplate.delete(token);
+        }
+    }
+
+    @Override
+    public Map<String, Integer> getActiveOrderCount(Integer driverId) {
+        // 宸叉姠鍗�(status=3)鏁伴噺
+        Long grabbed = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+                .eq(Orders::getAcceptDriver, driverId)
+                .eq(Orders::getStatus, Constants.OrderStatus.accepted.getStatus())
+                .eq(Orders::getDeleted, Constants.ZERO));
+        // 娲鹃�佷腑(status=4)鏁伴噺
+        Long delivering = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+                .eq(Orders::getAcceptDriver, driverId)
+                .eq(Orders::getStatus, Constants.OrderStatus.delivering.getStatus())
+                .eq(Orders::getDeleted, Constants.ZERO));
+        Map<String, Integer> result = new HashMap<>();
+        result.put("grabbedCount", grabbed != null ? grabbed.intValue() : 0);
+        result.put("deliveringCount", delivering != null ? delivering.intValue() : 0);
+        return result;
+    }
+
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 3ac3d57..87d3de3 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -48,7 +48,9 @@
 import javax.annotation.Resource;
 import java.util.Arrays;
 import java.util.Date;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Random;
 import java.util.concurrent.TimeUnit;
@@ -440,9 +442,34 @@
     public PlatformAboutVO getPlatformAboutUs(){
         PlatformAboutVO vo = new PlatformAboutVO();
         vo.setAboutUs(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ABOUT_US).getCode()));
-        vo.setUserAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.USER_AGREEMENT).getCode()));
-        vo.setPrivacyAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PRIVACY_AGREEMENT).getCode()));
-        vo.setServerIntroduce(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_INTRODUCE).getCode()));
+
+        Map<String, String> agreements = new LinkedHashMap<>();
+        String[] agreementKeys = {
+                Constants.STORE_RISK_COMMITMENT,
+                Constants.STORE_COOPERATION_AGREEMENT,
+                Constants.STORE_LUGGAGE_STORAGE_NOTICE,
+                Constants.STORE_PRIVACY_POLICY,
+                Constants.OWNER_LUGGAGE_STORAGE_NOTICE,
+                Constants.OWNER_SERVICE_AGREEMENT,
+                Constants.OWNER_RISK_COMMITMENT,
+                Constants.ERRAND_RISK_COMMITMENT,
+                Constants.ERRAND_SERVICE_AGREEMENT,
+                Constants.ERRAND_LUGGAGE_STORAGE_NOTICE,
+                Constants.USER_SERVICE_AGREEMENT,
+                Constants.USER_PRIVACY_POLICY,
+                Constants.DRIVER_PRIVACY_POLICY,
+                Constants.PRICE_DESCRIPTION,
+                Constants.PROHIBITED_ITEMS
+        };
+        for (String key : agreementKeys) {
+            try {
+                String value = StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM, key).getCode());
+                agreements.put(key, value);
+            } catch (Exception e) {
+                agreements.put(key, null);
+            }
+        }
+        vo.setAgreements(agreements);
         return vo;
     }
 
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 f8d29be..888e25a 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
@@ -1461,13 +1461,8 @@
                 // 鐗╁搧鏄庣粏
                 vo.setDetailList(buildDetailList(details));
 
-                // 閫炬湡淇℃伅锛堜粎寰呭彇浠剁姸鎬佽绠楋級
-                if (Integer.valueOf(Constants.OrderStatus.arrived.getStatus()).equals(o.getStatus())) {
-                    OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(o, details);
-                    vo.setOverdue(overdueInfo.getOverdue());
-                    vo.setOverdueDays(overdueInfo.getOverdueDays());
-                    vo.setOverdueFee(overdueInfo.getOverdueFee());
-                }
+                // 閫炬湡鐘舵��
+                fillOverdueStatus(vo, o, details);
                 voList.add(vo);
             }
         }
@@ -1513,10 +1508,24 @@
                 .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)
-                .in(statusList != null, Orders::getStatus, statusList)
+                .eq(Orders::getPayStatus, Constants.ONE);
+
+        // 闂ㄥ簵寰呭鐞嗚鍗曪細鎸変笟鍔$幆鑺傚尯鍒嗛棬搴楄鑹�
+        if (combinedStatus != null && Constants.equalsInteger(combinedStatus, Constants.SEVEN)) {
+            wrapper.and(w -> w
+                    .and(w1 -> w1.eq(Orders::getDepositShopId, shopId)
+                            .in(Orders::getStatus, Constants.OrderStatus.waitDeposit.getStatus(),
+                                    Constants.OrderStatus.deposited.getStatus()))
+                    .or(w2 -> w2.eq(Orders::getTakeShopId, shopId)
+                            .in(Orders::getStatus, Constants.OrderStatus.delivering.getStatus(),
+                                    Constants.OrderStatus.arrived.getStatus()))
+            );
+        } else {
+            wrapper.and(w -> w.eq(Orders::getDepositShopId, shopId).or().eq(Orders::getTakeShopId, shopId));
+        }
+
+        wrapper.eq(status != null, Orders::getStatus, status)
+                .in(statusList != null && !Constants.equalsInteger(combinedStatus, Constants.SEVEN), Orders::getStatus, statusList)
                 .orderByDesc(Orders::getCreateTime);
 
         IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper);
@@ -1532,6 +1541,7 @@
                         Constants.equalsInteger(o.getType(), Constants.ZERO)?o.getType():Objects.nonNull(o.getTakeShopId())?Constants.ONE:Constants.TWO)
                 );
                 vo.setCreateTime(o.getCreateTime());
+                vo.setRemark(o.getRemark());
                 vo.setExpectedTakeTime(o.getExpectedTakeTime());
 
                 vo.setDepositShopName(o.getDepositShopName());
@@ -1570,12 +1580,16 @@
 
                 vo.setDetailList(buildDetailList(details));
 
-                if (Integer.valueOf(Constants.OrderStatus.arrived.getStatus()).equals(o.getStatus())) {
-                    OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(o, details);
-                    vo.setOverdue(overdueInfo.getOverdue());
-                    vo.setOverdueDays(overdueInfo.getOverdueDays());
-                    vo.setOverdueFee(overdueInfo.getOverdueFee());
-                }
+
+                // 閫炬湡鐘舵��
+                fillOverdueStatus(vo, o, details);
+
+//                if (Integer.valueOf(Constants.OrderStatus.arrived.getStatus()).equals(o.getStatus())) {
+//                    OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(o, details);
+//                    vo.setOverdue(overdueInfo.getOverdue());
+//                    vo.setOverdueDays(overdueInfo.getOverdueDays());
+//                    vo.setOverdueFee(overdueInfo.getOverdueFee());
+//                }
                 voList.add(vo);
             }
         }
@@ -1621,7 +1635,7 @@
             }
         }
         if (order == null) {
-            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鏍搁攢鐮佹棤鏁�");
         }
         return buildOrderDetailVO(order, false);
     }
@@ -1724,41 +1738,8 @@
                         .eq(OrdersDetail::getDeleted, Constants.ZERO));
         vo.setDetailList(buildDetailList(details));
 
-        // 閫炬湡鐘舵�侊細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);
-            }
-        }
+        // 閫炬湡鐘舵�侊細0=鏈埌搴楁湭閫炬湡 1=鏈埌搴楀瓨鍦ㄩ�炬湡 2=宸插埌搴楁湭閫炬湡 3=宸插埌搴楀緟鏀粯閫炬湡 4=閫炬湡宸叉敮浠�
+        fillOverdueStatus(vo, order, details);
 
         // 閫�娆句俊鎭紙status=99鍙栨秷鏃惰繑鍥烇級
         if (order.getStatus() != null &&
@@ -2638,6 +2619,129 @@
 
     @Override
     @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+    public void verifyOrder(String verifyCode, Integer shopId, List<String> images, String remark) {
+        if (StringUtils.isBlank(verifyCode)) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏍搁攢鐮佷笉鑳戒负绌�");
+        }
+        // 鍏堟煡浼氬憳鏍搁攢鐮�
+        Orders query = new Orders();
+        query.setMemberVerifyCode(verifyCode);
+        query.setDeleted(Constants.ZERO);
+        Orders byMemberCode = findOne(query);
+        if (byMemberCode != null) {
+            shopVerifyOrder(verifyCode, shopId, images, remark);
+        } else {
+            driverVerifyOrder(verifyCode, images, remark, shopId);
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+    public void verifyOrderByShopId(Integer orderId, Integer shopId, List<String> images, String remark) {
+        if (orderId == null) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璁㈠崟涓婚敭涓嶈兘涓虹┖");
+        }
+        // 鏍规嵁璁㈠崟涓婚敭鏌ユ壘璁㈠崟
+        Orders order = ordersMapper.selectOne(new QueryWrapper<Orders>().lambda()
+                .eq(Orders::getId, orderId)
+                .eq(Orders::getDeleted, Constants.ZERO)
+                .last("limit 1"));
+        if (order == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+        }
+
+        // 鏌ヨ闂ㄥ簵鍚嶇О鐢ㄤ簬鏃ュ織
+        String shopName = "";
+        ShopInfo shopInfo = shopInfoMapper.selectById(shopId);
+        if (shopInfo != null) {
+            shopName = shopInfo.getName() != null ? shopInfo.getName() : "";
+        }
+
+        Integer status = order.getStatus();
+        Date now = new Date();
+        if (Constants.equalsInteger(status, Constants.OrderStatus.waitDeposit.getStatus())) {
+            // 寰呭瘎瀛�(1) 鈫� 宸插瘎瀛�(2)锛屼袱绉嶇被鍨嬮�氱敤
+            // 鏍¢獙褰撳墠闂ㄥ簵鏄惁涓鸿鍗曠殑瀛樹欢闂ㄥ簵
+            if (!shopId.equals(order.getDepositShopId())) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曚笉灞炰簬褰撳墠闂ㄥ簵锛屾棤娉曟牳閿�");
+            }
+            order.setStatus(Constants.OrderStatus.deposited.getStatus());
+            order.setDepositTime(now);
+            // 閲婃斁褰撳墠鏍搁攢鐮侊紝鐢熸垚鏂扮殑鏍搁攢鐮佷緵鍙栦欢鏃朵娇鐢�
+            String verifyCode = order.getMemberVerifyCode();
+            if (StringUtils.isNotBlank(verifyCode)) {
+                releaseVerifyCode(verifyCode);
+            }
+            order.setMemberVerifyCode(generateVerifyCode());
+            ordersMapper.updateById(order);
+            // 淇濆瓨瀵勫瓨鍥剧墖锛坥bj_type=2 璁㈠崟瀵勫瓨鍥剧墖锛屾渶澶�3寮狅級
+            saveVerifyImages(order.getId(), images, Constants.FileType.ORDER_DEPOSIT.getKey(), shopId);
+            // 璁板綍璁㈠崟鏃ュ織
+            saveShopVerifyLog(order, Constants.OrderLogType.shopDeposit, Constants.OrderLogType.shopDeposit.format(shopName), remark, shopId);
+            // 閫氱煡浼氬憳锛氶棬搴楁牳閿�鎴愬姛
+            if (Constants.equalsInteger(order.getType(), Constants.ONE)) {
+                // 寮傚湴瀵勫瓨 鈫� 寰呮姠鍗�
+                sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.WAIT_GRAB, order.getId(),
+                        "orderNo", order.getCode());
+            } else {
+                // 灏卞湴瀵勫瓨 鈫� 寰呭彇浠舵彁閱�
+                sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.WAIT_PICKUP_REMIND, order.getId(),
+                        "orderNo", order.getCode(), "shopName", shopName);
+            }
+        } else if (Constants.equalsInteger(status, Constants.OrderStatus.arrived.getStatus())) {
+            // 寮傚湴瀵勫瓨 + 鏃犲彇浠堕棬搴� 鈫� 鏃犳硶鏍搁攢锛堝鎴疯嚜鍙栵紝鏃犻棬搴楁搷浣滐級
+            if (Constants.equalsInteger(order.getType(), Constants.ONE) && order.getTakeShopId() == null) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曟棤鍙栦欢闂ㄥ簵锛屾棤娉曟牳閿�");
+            }
+            // 鏍¢獙鍙栦欢闂ㄥ簵涓庡綋鍓嶇櫥褰曢棬搴椾竴鑷�
+            if (!shopId.equals(order.getTakeShopId())) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曚笉灞炰簬褰撳墠闂ㄥ簵锛屾棤娉曟牳閿�");
+            }
+            // 鏍¢獙鏄惁宸茬‘璁ら【瀹㈠埌搴�
+            if (order.getConfirmArriveTime() == null) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇峰厛纭椤惧鍒板簵");
+            }
+            // 鏍¢獙鏄惁瀛樺湪寰呭鐞嗙殑閫炬湡璐圭敤
+            if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀛樺湪閫炬湡璐圭敤寰呭鐞嗭紝璇峰厛瀹屾垚閫炬湡璐圭敤鏀粯");
+            }
+            // 寰呭彇浠�(5) 鈫� 宸插畬鎴�(7)
+            order.setStatus(Constants.OrderStatus.finished.getStatus());
+            order.setConfirmArriveTime(now);
+            ordersMapper.updateById(order);
+            // 璁㈠崟瀹屾垚锛岄噴鏀炬牳閿�鐮�
+            String verifyCode = order.getMemberVerifyCode();
+            if (StringUtils.isNotBlank(verifyCode)) {
+                releaseVerifyCode(verifyCode);
+            }
+            // 淇濆瓨鍑哄簱鍥剧墖锛坥bj_type=13 闂ㄥ簵鍑哄簱鍥剧墖锛屾渶澶�3寮狅級
+            saveVerifyImages(order.getId(), images, Constants.FileType.STORE_OUT.getKey(), shopId);
+            // 鐢熸垚鏀剁泭璁板綍
+            calculateAndSaveOrderFees(order.getId());
+            generateRevenueRecords(order.getId());
+            // 璁板綍璁㈠崟鏃ュ織
+            saveShopVerifyLog(order, Constants.OrderLogType.shopTake, Constants.OrderLogType.shopTake.format(shopName), remark, shopId);
+            // 閫氱煡浼氬憳锛氳鍗曞凡瀹屾垚
+            sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.FINISHED, order.getId(),
+                    "orderNo", order.getCode());
+            // 閫氱煡瀛樹欢闂ㄥ簵鍜屽彇浠堕棬搴楋細璁㈠崟宸插畬鎴�
+            String settleDays = operationConfigBiz.getConfig().getSettlementDate();
+            notifyBothShops(order, Constants.ShopOrderNotify.FINISHED,
+                    "orderNo", order.getCode(),
+                    "settleDays", settleDays != null ? settleDays : "7");
+            // 閫氱煡鍙告満锛氳鍗曞凡瀹屾垚
+            if (order.getAcceptDriver() != null) {
+                sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.FINISHED, order.getId(),
+                        "orderNo", order.getCode(),
+                        "settleDays", settleDays != null ? settleDays : "7");
+            }
+        } else {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽鏍搁攢");
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
     public void shopVerifyOrder(String verifyCode, Integer shopId, List<String> images, String remark) {
         if (StringUtils.isBlank(verifyCode)) {
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏍搁攢鐮佷笉鑳戒负绌�");
@@ -2694,6 +2798,14 @@
             // 鏍¢獙鍙栦欢闂ㄥ簵涓庡綋鍓嶇櫥褰曢棬搴椾竴鑷�
             if (!shopId.equals(order.getTakeShopId())) {
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曚笉灞炰簬褰撳墠闂ㄥ簵锛屾棤娉曟牳閿�");
+            }
+            // 鏍¢獙鏄惁宸茬‘璁ら【瀹㈠埌搴�
+            if (order.getConfirmArriveTime() == null) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇峰厛纭椤惧鍒板簵");
+            }
+            // 鏍¢獙鏄惁瀛樺湪寰呭鐞嗙殑閫炬湡璐圭敤
+            if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀛樺湪閫炬湡璐圭敤寰呭鐞嗭紝璇峰厛瀹屾垚閫炬湡璐圭敤鏀粯");
             }
             // 寰呭彇浠�(5) 鈫� 宸插畬鎴�(7)
             order.setStatus(Constants.OrderStatus.finished.getStatus());
@@ -3275,6 +3387,62 @@
     }
 
     /**
+    /**
+     * 濉厖閫炬湡鐘舵�佸埌 VO锛圡yOrderVO锛�
+     * overdueStatus: 0=鏈埌搴楁湭閫炬湡 1=鏈埌搴楀瓨鍦ㄩ�炬湡 2=宸插埌搴楁湭閫炬湡 3=宸插埌搴楀緟鏀粯閫炬湡 4=閫炬湡宸叉敮浠�
+     */
+    private void fillOverdueStatus(MyOrderVO vo, Orders order, List<OrdersDetail> details) {
+        Integer[] result = calcOverdueStatus(order, details);
+        vo.setOverdueStatus(result[0]);
+        vo.setOverdue(result[1] == 1);
+        vo.setOverdueDays(result[2]);
+        vo.setOverdueFee(result[3].longValue());
+    }
+
+    /**
+     * 濉厖閫炬湡鐘舵�佸埌 VO锛圡yOrderDetailVO锛�
+     */
+    private void fillOverdueStatus(MyOrderDetailVO vo, Orders order, List<OrdersDetail> details) {
+        Integer[] result = calcOverdueStatus(order, details);
+        vo.setOverdueStatus(result[0]);
+        vo.setOverdue(result[1] == 1);
+        vo.setOverdueDays(result[2]);
+        vo.setOverdueFee(result[3].longValue());
+    }
+
+    /**
+     * 璁$畻閫炬湡鐘舵��
+     * @return [overdueStatus, isOverdue(0/1), overdueDays, overdueFee]
+     */
+    private Integer[] calcOverdueStatus(Orders order, List<OrdersDetail> details) {
+        // 4=閫炬湡宸叉敮浠橈紙璁㈠崟 overdueStatus=2锛�
+        if (Constants.equalsInteger(order.getOverdueStatus(), Constants.TWO)) {
+            return new Integer[]{4, 1, order.getOverdueDays(), order.getOverdueAmount() != null ? order.getOverdueAmount().intValue() : 0};
+        }
+        // 3=宸插埌搴楀緟鏀粯閫炬湡锛堣鍗� overdueStatus=1锛�
+        if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) {
+            return new Integer[]{3, 1, order.getOverdueDays(), order.getOverdueAmount() != null ? order.getOverdueAmount().intValue() : 0};
+        }
+        // 璁$畻瀹炴椂閫炬湡
+        OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(order, details);
+        boolean hasOverdue = overdueInfo.getOverdue() != null && overdueInfo.getOverdue()
+                && overdueInfo.getOverdueFee() != null && overdueInfo.getOverdueFee() > 0;
+        if (order.getConfirmArriveTime() != null) {
+            // 宸插埌搴�
+            int days = hasOverdue ? overdueInfo.getOverdueDays() : 0;
+            long fee = hasOverdue ? overdueInfo.getOverdueFee() : 0L;
+            return new Integer[]{2, hasOverdue ? 1 : 0, days, (int) fee};
+        } else {
+            // 鏈埌搴�
+            if (hasOverdue) {
+                return new Integer[]{1, 1, overdueInfo.getOverdueDays(), overdueInfo.getOverdueFee().intValue()};
+            } else {
+                return new Integer[]{0, 0, 0, 0};
+            }
+        }
+    }
+
+    /**
      * 閫炬湡璐圭敤鍐呴儴璁$畻锛堜笉鏌ュ簱锛屾帴鍙楅鏌ヨ鐨勬暟鎹級
      * 渚涘垎椤电瓑宸叉煡璇㈡槑缁嗙殑涓氬姟鍦烘櫙澶嶇敤锛岄伩鍏嶉噸澶嶆煡璇�
      */
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java
index 1fb1f71..1872a60 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java
@@ -10,14 +10,8 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.RevenueMapper;
-import com.doumee.dao.business.WithdrawalOrdersMapper;
-import com.doumee.dao.business.MemberMapper;
-import com.doumee.dao.business.ShopInfoMapper;
-import com.doumee.dao.business.model.Revenue;
-import com.doumee.dao.business.model.ShopInfo;
-import com.doumee.dao.business.model.Member;
-import com.doumee.dao.business.model.WithdrawalOrders;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.model.*;
 import com.doumee.dao.dto.RevenueQueryDTO;
 import com.doumee.dao.vo.RevenueStatisticsVO;
 import com.doumee.dao.vo.RevenueSummaryVO;
@@ -26,6 +20,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.sql.Driver;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -49,6 +44,9 @@
 
     @Autowired
     private MemberMapper memberMapper;
+
+    @Autowired
+    private DriverInfoMapper driverInfoMapper;
 
     @Override
     public Integer create(Revenue revenue) {
@@ -178,11 +176,11 @@
 
     @Override
     public RevenueStatisticsVO getDriverRevenueStatistics(Integer memberId) {
-        Member member = memberMapper.selectById(memberId);
-        if (member == null) {
-            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鐢ㄦ埛涓嶅瓨鍦�");
+        DriverInfo driverInfo = driverInfoMapper.selectById(memberId);
+        if (driverInfo == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
         }
-        return buildRevenueStatistics(memberId, Constants.ONE, member.getAmount());
+        return buildRevenueStatistics(memberId, Constants.ONE, driverInfo.getBalance());
     }
 
     /**
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 14b7636..9f7a9b3 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
@@ -1351,4 +1351,31 @@
         }
     }
 
+    @Override
+    public void changePassword(Integer shopId, String newPassword, String token) {
+        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) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵嗙爜蹇呴』鍚屾椂鍖呭惈瀛楁瘝鍜屾暟瀛�");
+        }
+        // 鏌ヨ闂ㄥ簵
+        ShopInfo shopInfo = shopInfoMapper.selectById(shopId);
+        if (shopInfo == null || Constants.equalsInteger(shopInfo.getDeleted(), Constants.ONE)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        // 閲嶆柊鐢熸垚salt锛屽姞瀵嗘柊瀵嗙爜骞舵洿鏂�
+        String salt = RandomStringUtils.randomAlphabetic(6);
+        shopInfo.setPassword(Utils.Secure.encryptPassword(newPassword, salt));
+        shopInfo.setSalt(salt);
+        shopInfoMapper.updateById(shopInfo);
+        // 娓呴櫎token锛屽己鍒堕噸鏂扮櫥褰�
+        if (StringUtils.isNotBlank(token)) {
+            redisTemplate.delete(token);
+        }
+    }
+
 }
diff --git a/server/services/src/main/resources/application-dev.yml b/server/services/src/main/resources/application-dev.yml
index 2f1df3b..800be90 100644
--- a/server/services/src/main/resources/application-dev.yml
+++ b/server/services/src/main/resources/application-dev.yml
@@ -62,6 +62,12 @@
 
 
 des_pwd: 123456SDFKDJF
+
+jpush:
+  appKey:
+  masterSecret:
+  apnsProduction: false
+
 knife4j:
   enable: true
   basic:
diff --git a/server/services/src/main/resources/application-pro.yml b/server/services/src/main/resources/application-pro.yml
index ba0b29d..6ffb896 100644
--- a/server/services/src/main/resources/application-pro.yml
+++ b/server/services/src/main/resources/application-pro.yml
@@ -1,9 +1,9 @@
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://192.168.0.211:3306/gtzxinglijicun?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
-    username: root
-    password: Doumee@168
+    url: jdbc:mysql://rm-bp1qxtf4wy100fur3yo.mysql.rds.aliyuncs.com:3306/gtzxinglijicun?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    username: gtzxinglijicun
+    password: gtzxljc@2026
     driver-class-name: com.mysql.cj.jdbc.Driver
     type: com.alibaba.druid.pool.DruidDataSource
   redis:
@@ -54,39 +54,39 @@
   pay:
     appId: wxb1b59320e803dc6c
     appSecret: eb93785c7bca3f0ff0364b0e26bfeb59
-    mchId: 1229817002    #鍟嗘埛鍙�
-    mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM #鍟嗘埛绉橀挜
-    apiV3Key: 7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB #apiV3Key
-    serialNumer: 3FE90C2F3D40A56E1C51926F31B8A8D22426CCE0 #鍟嗘埛璇佷功搴忓垪鍙�
-    notifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxPayNotify
-    refundNotifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxRefundNotify
-    v3NotifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxPayV3Notify
-    v3RefundNotifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxRefundV3Notify
-    keyPath: D:\DouMee\1229817002_20220310_cert\apiclient_cert.p12
-    privateCertPath: D:\DouMee\1229817002_20220310_cert\apiclient_cert.pem
-    privateKeyPath: D:\DouMee\1229817002_20220310_cert\apiclient_key.pem
-    pubKeyPath: D:\DouMee\1229817002_20220310_cert\pub_key.pem #鍟嗘埛鏀粯鍏挜
+    mchId: 1629568742    #鍟嗘埛鍙�
+    apiV3Key: NJTLJSTZYXZRGScaiwubuzichanbu666 #apiV3Key
+    serialNumer: 25D19D18217F4588841E5CD1AA0D1533DE8AF84A #鍟嗘埛璇佷功搴忓垪鍙�
+    privateKeyPath: pay/pro/wx/apiclient_key.pem
+    v3NotifyUrl: https://llfc.lmpro.cn/nyx_web/web/api/wxPayV3Notify
+    v3RefundNotifyUrl: https://llfc.lmpro.cn/nyx_web/web/api/wxRefundV3Notify
 
-    typeId: jinkuai
 
 alipay:
   pay:
-    appId: 2021006146626440
-    privateKey: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC0zIy4Ej8yG34uQ8zECWu12INdTWYuvSudhrf1qtUrPx4FO9vDGc8NdPz63M3y+akWh9o8gsl7qQqOoB7o8gYebLTzF2ZP3ByxgkNRGUwZBIi0iL/28eq/2uDCWnqNBDEeFQpfWeRcErC28LCB6JSI7F6owH78LiU8pNO0pVvqwvcLovlVee4UDtLThBegUxkkHXq4EM9yutkfps1ruDiTGFYyTjS8g9BmNJ7rJoRSKTE85Gl8OYp1SuFbyurPEaFLBW9yGHbsqMqegys2PwV6PxZq3WBbFMiuWI5fane+VL2jyVoV36CYPS2GFjq0stuUHZvPL1uYk+bwAAei7a2JAgMBAAECggEBAJMnTX1gNJl28Qt82YPRWx6F292r6nguNfqftMi6Q4hQdgGyh5rTPcfpKSKRZvrVIz+YURMhLBZ/Ln2Ja78ThdFrjxewOvDS6XO830d5vIs8OnweNYgrvHJtFrR5afeuqr+eRnP3OTuLZtNvMWp6v7J2GFFnY7OjZ2Flkn4cfKSkqnLQnZ/oDKA/a40OclHRmaQZcS5YkGZqeR+NssanUDad89IVz7NU0kXTbaXjbGHyJscLr6hM3otdfrYsboJ5XHLOnnpSLptv3I0HSUeHBSdhAbP5Hlot+xOo6EbeougefmT2FZWaDA+kPHgajCOdZHW3v+13Xp+PioRW0IPcsLUCgYEA+11Fqm+tpP351tdkJyW+weTy0/OnvUuSVQP/0/kvzQ84kjfkxdoyTKe6kT8+K5b5dkCQhGRfWgb7/amKEe1loCQsujf7/6aebUgTevrOs96LErMT1fCqId1t/MWgXVFpzo8n2OTks2r0nleHY7C9VZiPIbGBQDbkJChIFRAiRXsCgYEAuCIg2p4RrlOG/i4/r1xKmOIwba9snTBnAB8/bri913xMy055OVF6P46hC6d/J25QNqYGODBBF4kmiBuco+vtuz6C94Uo3h/oYD3jetmwlAnRWjEl9Z3Pkf5cbE+o5KBZmUa+M7BTrBDutzdRDqX2SANvnoDWVF03teY9lcVNL8sCgYEAoFdeEhtNC/tKfKZG58XnCe4Oi+9YJ6LmRD7Z2RCSUl8MOhFXaHIINeekVfSeptWWab1DsoAIZvgflC6quUbS1bVdpqgBopFZa+JXMtJ8OjaSRipfU9BB5npGJ8C0y/Ib6TxeMbfIvz5RrhOtdIUQMWKwotCE3z5khz/+wxjYk7MCgYBrMesgeo9ehl/7T99hboA7GssIv+yiYhBEoOxjwAc9EK8AWNH3zXg20gjtaPh8cxsdhW/vfCAY3I5jBHgfcfU3YcAK6ymMjtTQWpc46MyEkmafdCdeIx45JvSVVZbEaplewzFtlARSEpV2ciytM276I43yn5ynBpGtQrmtnGxAGwKBgQCy8imu84IhC+BivLRYdsQ+hMsqs0nih4wfVPKWr6K64QO6CZ4riL76lppH8UBG5EXtRd6cjBbORgvQtr22OJxFcj8WuZjBvYvvCOsTE0jGMdiyBqx9k0PsLrtlVZPFP4kj9vDSFNIyAgIOiAmYY4kBtGfhQqRcDgZK+mgHY0zMbg==
-    appCertPath: foo/pro/appCertPublicKey_2021006146626440.crt
-    alipayPublicCertPath: pro/dev/alipayCertPublicKey_RSA2.crt
-    rootCertPath: foo/pro/alipayRootCert.crt
+    appId: 2021006147660139
+    privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEeqqkZztBHfK+vpyBi6ejgDTHZuZ3yiuXds+lRBbMo/g24F5trH+oLHW0gMhSxihFfQBBIpVBXDsPQK4ZkhDWTaOBktnU1UMRoOEiaaZU6EiWy10ePFUmpdXpkCQEp7rc88OwI90p58S3+L+Ckak60WqNwJBdB5YGBaUunryBA78U4zW1KNY7JvoRnZDcFMQiczikwUzhO7EAi0yVrVpsVsc9s87mcS4uOJKx4qb2E83r9RJ1z30db+cIIZRiLP2oNZBLYzgKpOouE+uIgxhQzlh6cOASNZQulXuUjoT/+Y9w4njfl4TmKIXWcJFKIMc6kMiux9tTncpp0TqRwk1tAgMBAAECggEALkSYtJheusnbpRFr95G0i2sggqh3s1PXihZ/dXKgT9Z5GCsj8X3Cng7CNRxykBN73kk+axhCv56Bhej8Vqcv8ddcnqG/TEBgR+Fzws/QTIRau6/uILWic7RvuE2qPbJl7aw1s9/uL/UVPSGFr7CvgltYVUM4e7/Sk1529JCK4XJfoXP5tKJ3OaXssvaFnCKEU8IGQkjRG+lUZJhAHVtClGHtgrhevgRhy2zre5wp2qSa8d/MqrPruSYS02hn9b5Nl6i2PlUS6dGlJ4lrxYTG22ukYYoxAPNPS7gnvmveXonWP7b5tPhKRpZjnoySojz3WECUlhz/v8wM1cDrpq+GQQKBgQDsc7y2rlx4f77a7ORfb5/qWHCOJs1cIzggj0kJ7TgFGe71kbCQ5nywD/Fe5V9OwbW+DCxOME+SrrHeiK4axWiu5si/1JlurJoxNy+4k4ywk3ZA3Nv2aBhlPqfkwDhJ0z7Mgsq2c/YgnVddmSvKZoC39wA77ovks4GDxaBOt8N7PQKBgQDUuPGgzkwcgb60UdaxfMbacrPsW26vDxaE4ceuXo2m8KDiCIqkF2y9r6AdWMTgGGSJwOsk7+FP+21VdRivCg9HcOLWngveUc6xDIuqKHVpemMo3SdCF4Wqf96rRc3VOBr5cfIdWxeorZf5umMyKnIAjAFETOOrK7eLTTmjyLD98QKBgB82S+Plcklpu3zUpnS+nGJn2Du7fYI7F+6cW2zXBn0N5lA+Mgt+kVkAUcFQD9uqkF4M51BO6kIXk10nt6vLAT2NM1S3MKW+XQBAI6l+uKSaYpK/VL3bEdVThwAYK5X7L5/5Z97bwdKeUmkFjhVCoJ0oGrzOiWLgGymUzct2UHSVAoGBAMb+7Cs+Ub0pMrmFBY6r52pbey1Uq0pglvRgMmhQU7sjx50r2GaA81zPer15WVM5/nNPYaoALYqg7jrPe/PjOT/fvpR+7SNg7DZ8QftANfYiY7jKifst/gDt9ePLPS6FedZ4XcJQgOVu34jicAFx64vPbS/zrddm4iEScSVijRBBAoGAXCheERsx8+n16Us/DttXFUa1nc7+D8WR6buM1QMZgQCVF2qp3XtM+FusCKL4+q1+dtag8svLjJFp9QbaAXqX8Zk7rn8wUHbDloPTPy9XWgrPowyL9MPU+e/Rq8Hr6TWPDBd4TU64YzIEfBQYpJXfZbXhVYmK3o7xHXKB1x4vvEM=
+    appCertPath: pay/pro/appCertPublicKey.crt
+    alipayPublicCertPath: pay/pro/alipayCertPublicKey_RSA2.crt
+    rootCertPath: pay/pro/alipayRootCert.crt
 
 upload:
-  type: blob
-
-qiwei:
-  serviceurl: https://wecom-qyapi.unilever-china.com/
-
-
+  type: ftp
 
 # 鑵捐鍦板浘apikey
-tencent_key: WE3BZ-HN6WS-ONDOH-62QCV-MNL6F-5NFNE
+tencent_key:
 
 # 楂樺痉鍦板浘apikey
-geocode_map_key:
\ No newline at end of file
+geocode_map_key: 9a6c1f0eff2e5aa91989ca9d4c21e262
+
+qiwei:
+  serviceurl: https://qyapi.weixin.qq.com
+
+
+aes:
+  encrypt:
+    open: true # 鏄惁寮�鍚姞瀵� true  or  false
+    showLog: true # 鏄惁鎵撳嵃鍔犺В瀵唋og true  or  false
+    publicKey: mN4Yn8Or8r7SH1w3 # AES瀵嗛挜
+    privateKey:  # RSA绉侀挜
+    time: 600000
\ No newline at end of file
diff --git a/server/web/src/main/java/com/doumee/api/web/AccountApi.java b/server/web/src/main/java/com/doumee/api/web/AccountApi.java
index 4860a59..993e5ad 100644
--- a/server/web/src/main/java/com/doumee/api/web/AccountApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/AccountApi.java
@@ -1,7 +1,9 @@
 package com.doumee.api.web;
 
 import com.doumee.config.jwt.JwtTokenUtil;
+import com.doumee.core.annotation.LoginDriverRequired;
 import com.doumee.core.annotation.LoginRequired;
+import com.doumee.core.annotation.LoginShopRequired;
 import com.doumee.core.annotation.trace.Trace;
 import com.doumee.core.constants.Constants;
 import com.doumee.core.model.ApiResponse;
@@ -92,19 +94,30 @@
     }
 
 
-    @LoginRequired
+    @LoginShopRequired
     @ApiOperation(value = "闂ㄥ簵閫�鍑虹櫥褰�", notes = "灏忕▼搴忕")
     @GetMapping("/logOutShop")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
     })
     public ApiResponse logOutShop() {
-        String token = this.getRequest().getHeader(JwtTokenUtil.HEADER_KEY);
+        String token = this.getRequest().getHeader(JwtTokenUtil.SHOP_HEADER_KEY);
         memberService.logOut(token,getShopId(), Constants.TWO);
         return  ApiResponse.success("鎿嶄綔鎴愬姛");
     }
 
 
+    @LoginDriverRequired
+    @ApiOperation(value = "鍙告満閫�鍑虹櫥褰�", notes = "灏忕▼搴忕")
+    @GetMapping("/logOutDriver")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse logOutDriver() {
+        String token = this.getRequest().getHeader(JwtTokenUtil.HEADER_KEY);
+        memberService.logOut(token,getDriverId(), Constants.ONE);
+        return  ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
     @LoginRequired
     @ApiOperation(value = "鐢ㄦ埛娉ㄩ攢", notes = "灏忕▼搴忕")
     @GetMapping("/logOff")
diff --git a/server/web/src/main/java/com/doumee/api/web/ConfigApi.java b/server/web/src/main/java/com/doumee/api/web/ConfigApi.java
index 7113803..3315b90 100644
--- a/server/web/src/main/java/com/doumee/api/web/ConfigApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/ConfigApi.java
@@ -1,5 +1,6 @@
 package com.doumee.api.web;
 
+import com.doumee.core.annotation.LoginDriverRequired;
 import com.doumee.core.annotation.LoginRequired;
 import com.doumee.core.annotation.LoginShopRequired;
 import com.doumee.core.annotation.trace.Trace;
@@ -184,7 +185,7 @@
         return ApiResponse.success("鏌ヨ鎴愬姛", noticeService.findPage(pageWrap));
     }
 
-    @LoginRequired
+    @LoginShopRequired
     @ApiOperation(value = "闂ㄥ簵鏍囪鍏ㄩ儴宸茶", notes = "鏍囪褰撳墠鐢ㄦ埛鎵�鏈夋湭璇婚�氱煡涓哄凡璇�")
     @PostMapping("/shopReadAllNotice")
     @ApiImplicitParams({
@@ -219,4 +220,32 @@
     }
 
 
+
+    @LoginDriverRequired
+    @ApiOperation(value = "鍙告満閫氱煡娑堟伅鍒嗛〉", notes = "鏈浼樺厛锛屾椂闂村�掑簭")
+    @PostMapping("/driverNoticePage")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+    })
+    public ApiResponse<PageData<Notice>> driverNoticePage(@RequestBody PageWrap<Notice> pageWrap) {
+        if (pageWrap.getModel() == null) {
+            pageWrap.setModel(new Notice());
+        }
+        pageWrap.getModel().setUserId(this.getDriverId());
+        pageWrap.getModel().setUserType(Constants.ONE);
+        return ApiResponse.success("鏌ヨ鎴愬姛", noticeService.findPage(pageWrap));
+    }
+
+    @LoginDriverRequired
+    @ApiOperation(value = "鍙告満鏍囪鍏ㄩ儴宸茶", notes = "鏍囪褰撳墠鐢ㄦ埛鎵�鏈夋湭璇婚�氱煡涓哄凡璇�")
+    @PostMapping("/driverReadAllNotice")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+    })
+    public ApiResponse driverReadAllNotice() {
+        noticeService.readAllNotice(Constants.ONE, this.getDriverId());
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
 }
diff --git a/server/web/src/main/java/com/doumee/api/web/DriverInfoApi.java b/server/web/src/main/java/com/doumee/api/web/DriverInfoApi.java
index 966cb84..7fbe5b2 100644
--- a/server/web/src/main/java/com/doumee/api/web/DriverInfoApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/DriverInfoApi.java
@@ -3,6 +3,7 @@
 import com.doumee.core.annotation.LoginDriverRequired;
 import com.doumee.core.annotation.LoginRequired;
 import com.doumee.core.annotation.trace.Trace;
+import com.doumee.config.jwt.JwtTokenUtil;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
@@ -29,6 +30,7 @@
 
 import javax.validation.Valid;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 鍙告満楠岃瘉鐮佺櫥褰曟帴鍙�
@@ -133,6 +135,17 @@
 
     @LoginDriverRequired
     @Trace
+    @ApiOperation(value = "鍙告満绱缁熻", notes = "绱浣i噾銆佸緟缁撶畻浣i噾銆佽鍗曟�绘暟銆侀挶鍖呬綑棰�")
+    @GetMapping("/stats")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+    })
+    public ApiResponse<com.doumee.dao.vo.DriverStatsVO> stats() {
+        return ApiResponse.success("鎿嶄綔鎴愬姛", driverInfoService.getDriverStats(this.getDriverId()));
+    }
+
+    @LoginDriverRequired
+    @Trace
     @ApiOperation(value = "鍙告満鎶㈠崟澶у巺", notes = "鍒嗛〉鏌ヨ鍙姠鐨勫紓鍦板瘎瀛樿鍗�")
     @PostMapping("/grabOrderHall")
     @ApiImplicitParams({
@@ -215,4 +228,28 @@
         return ApiResponse.success("鎿嶄綔鎴愬姛");
     }
 
+    @LoginDriverRequired
+    @Trace
+    @ApiOperation(value = "鍙告満淇敼瀵嗙爜", notes = "鏂板瘑鐮佸繀椤诲悓鏃跺寘鍚瓧姣嶅拰鏁板瓧锛屼慨鏀规垚鍔熷悗闇�閲嶆柊鐧诲綍")
+    @GetMapping("/changePassword")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse changePassword(@RequestParam String newPassword) {
+        String token = this.getRequest().getHeader(JwtTokenUtil.HEADER_KEY);
+        driverInfoService.changePassword(this.getDriverId(), newPassword, token);
+        return ApiResponse.success("瀵嗙爜淇敼鎴愬姛锛岃閲嶆柊鐧诲綍");
+    }
+
+    @LoginDriverRequired
+    @Trace
+    @ApiOperation(value = "杩涜涓鍗曟暟閲�", notes = "杩斿洖宸叉姠鍗曞拰娲鹃�佷腑鐨勮鍗曟暟閲�")
+    @GetMapping("/activeOrderCount")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+    })
+    public ApiResponse<Map<String, Integer>> activeOrderCount() {
+        return ApiResponse.success("鎿嶄綔鎴愬姛", driverInfoService.getActiveOrderCount(this.getDriverId()));
+    }
+
 }
diff --git a/server/web/src/main/java/com/doumee/api/web/OrdersApi.java b/server/web/src/main/java/com/doumee/api/web/OrdersApi.java
index 991f892..48ad2ea 100644
--- a/server/web/src/main/java/com/doumee/api/web/OrdersApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/OrdersApi.java
@@ -3,6 +3,7 @@
 import com.doumee.core.annotation.LoginRequired;
 import com.doumee.core.annotation.LoginShopRequired;
 import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.constants.Constants;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
@@ -10,7 +11,6 @@
 import com.doumee.dao.dto.CommentOrderDTO;
 import com.doumee.dao.dto.ConfirmArriveDTO;
 import com.doumee.dao.dto.CreateOrderDTO;
-import com.doumee.dao.dto.DriverVerifyDTO;
 import com.doumee.dao.dto.ShopVerifyDTO;
 import com.doumee.dao.dto.StoreOutDTO;
 import com.doumee.dao.dto.MyOrderDTO;
@@ -147,24 +147,13 @@
     }
 
     @LoginShopRequired
-    @ApiOperation(value = "闂ㄥ簵鏍搁攢鏀朵欢", notes = "闂ㄥ簵閫氳繃鏍搁攢鐮佺‘璁ゆ敹浠�/鍙栦欢")
+    @ApiOperation(value = "闂ㄥ簵鏍搁攢", notes = "闂ㄥ簵閫氳繃璁㈠崟涓婚敭纭瀵勫瓨/鍙栦欢")
     @PostMapping("/shopVerify")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true)
     })
     public ApiResponse shopVerify(@RequestBody @Validated ShopVerifyDTO dto) {
-        ordersService.shopVerifyOrder(dto.getVerifyCode(), getShopId(), dto.getImages(), dto.getRemark());
-        return ApiResponse.success("鏍搁攢鎴愬姛");
-    }
-
-    @LoginShopRequired
-    @ApiOperation(value = "鏍搁攢鍙告満鐮�", notes = "寮傚湴瀵勫瓨涓旀湁鍙栦欢闂ㄥ簵鐨勮鍗曪紝閫氳繃鍙告満鏍搁攢鐮佺‘璁ゅ埌搴�")
-    @PostMapping("/driverVerify")
-    @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
-    })
-    public ApiResponse driverVerify(@RequestBody @Validated DriverVerifyDTO dto) {
-        ordersService.driverVerifyOrder(dto.getVerifyCode(), dto.getImages(), dto.getRemark(), getShopId());
+        ordersService.verifyOrderByShopId(dto.getOrderId(), getShopId(), dto.getImages(), dto.getRemark());
         return ApiResponse.success("鏍搁攢鎴愬姛");
     }
 
@@ -178,7 +167,9 @@
     })
     public ApiResponse<MyOrderDetailVO> shopDetail(@RequestParam(required = false) Integer orderId,
                                                     @RequestParam(required = false) String verifyCode) {
-        return ApiResponse.success("鏌ヨ鎴愬姛", ordersService.findShopOrderDetail(orderId, verifyCode));
+        MyOrderDetailVO myOrderDetailVO = ordersService.findShopOrderDetail(orderId, verifyCode);
+        myOrderDetailVO.setMemberVerifyCode(null);
+        return ApiResponse.success("鏌ヨ鎴愬姛", myOrderDetailVO);
     }
 
     @LoginShopRequired
diff --git a/server/web/src/main/java/com/doumee/api/web/RevenueApi.java b/server/web/src/main/java/com/doumee/api/web/RevenueApi.java
index 0357de5..bd718f4 100644
--- a/server/web/src/main/java/com/doumee/api/web/RevenueApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/RevenueApi.java
@@ -1,5 +1,6 @@
 package com.doumee.api.web;
 
+import com.doumee.core.annotation.LoginDriverRequired;
 import com.doumee.core.annotation.LoginRequired;
 import com.doumee.core.annotation.LoginShopRequired;
 import com.doumee.core.annotation.trace.Trace;
@@ -29,24 +30,24 @@
     @Autowired
     private RevenueService revenueService;
 
-    @LoginRequired
+    @LoginDriverRequired
     @ApiOperation(value = "鍙告満娴佹按鍒嗛〉", notes = "灏忕▼搴忕")
     @PostMapping("/driverPage")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
     })
     public ApiResponse<PageData<Revenue>> driverPage(@RequestBody @Validated PageWrap<RevenueQueryDTO> pageWrap) {
-        return ApiResponse.success("鏌ヨ鎴愬姛", revenueService.findDriverRevenuePage(pageWrap, getMemberId()));
+        return ApiResponse.success("鏌ヨ鎴愬姛", revenueService.findDriverRevenuePage(pageWrap, getDriverId()));
     }
 
-    @LoginRequired
+    @LoginDriverRequired
     @ApiOperation(value = "鍙告満娴佹按鏀舵敮缁熻", notes = "鏍规嵁鏌ヨ鏉′欢缁熻鏀跺叆涓庢敮鍑�")
     @PostMapping("/driverSummary")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
     })
     public ApiResponse<RevenueSummaryVO> driverSummary(@RequestBody RevenueQueryDTO queryDTO) {
-        return ApiResponse.success("鏌ヨ鎴愬姛", revenueService.getDriverRevenueSummary(queryDTO, getMemberId()));
+        return ApiResponse.success("鏌ヨ鎴愬姛", revenueService.getDriverRevenueSummary(queryDTO, getDriverId()));
     }
 
     @LoginShopRequired
diff --git a/server/web/src/main/java/com/doumee/api/web/ShopInfoApi.java b/server/web/src/main/java/com/doumee/api/web/ShopInfoApi.java
index 9897cb0..3fd37ab 100644
--- a/server/web/src/main/java/com/doumee/api/web/ShopInfoApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/ShopInfoApi.java
@@ -2,6 +2,8 @@
 
 import com.doumee.core.annotation.LoginRequired;
 import com.doumee.core.annotation.LoginShopRequired;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.config.jwt.JwtTokenUtil;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
@@ -116,4 +118,17 @@
         return ApiResponse.success("鎿嶄綔鎴愬姛", ordersService.payShopDeposit(getMemberId()));
     }
 
+    @LoginShopRequired
+    @Trace
+    @ApiOperation(value = "闂ㄥ簵淇敼瀵嗙爜", notes = "鏂板瘑鐮佸繀椤诲悓鏃跺寘鍚瓧姣嶅拰鏁板瓧锛屼慨鏀规垚鍔熷悗闇�閲嶆柊鐧诲綍")
+    @PostMapping("/changePassword")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true),
+    })
+    public ApiResponse changePassword(@RequestParam String newPassword) {
+        String token = this.getRequest().getHeader(JwtTokenUtil.HEADER_KEY);
+        shopInfoService.changePassword(this.getShopId(), newPassword, token);
+        return ApiResponse.success("瀵嗙爜淇敼鎴愬姛锛岃閲嶆柊鐧诲綍");
+    }
+
 }
diff --git a/server/web/src/main/java/com/doumee/api/web/WalletApi.java b/server/web/src/main/java/com/doumee/api/web/WalletApi.java
index b94319c..57012c0 100644
--- a/server/web/src/main/java/com/doumee/api/web/WalletApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/WalletApi.java
@@ -1,5 +1,6 @@
 package com.doumee.api.web;
 
+import com.doumee.core.annotation.LoginDriverRequired;
 import com.doumee.core.annotation.LoginRequired;
 import com.doumee.core.annotation.LoginShopRequired;
 import com.doumee.core.model.ApiResponse;
@@ -40,14 +41,14 @@
     @Autowired
     private RevenueService revenueService;
 
-    @LoginRequired
+    @LoginDriverRequired
     @ApiOperation(value = "鍙告満鎻愮幇鐢宠", notes = "灏忕▼搴忕")
     @PostMapping("/driverApply")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
     })
     public ApiResponse driverApply(@RequestBody @Validated WithdrawalDTO dto) {
-        withdrawalOrdersService.applyDriverWithdrawal(dto, getMemberId());
+        withdrawalOrdersService.applyDriverWithdrawal(dto, getDriverId());
         return ApiResponse.success("鎻愮幇鐢宠宸叉彁浜�");
     }
 
@@ -72,24 +73,36 @@
         return ApiResponse.success("鏌ヨ鎴愬姛", revenueService.getShopRevenueStatistics(getShopId()));
     }
 
-    @LoginRequired
+    @LoginDriverRequired
     @ApiOperation(value = "鍙告満鏀剁泭缁熻", notes = "褰撳墠鐧诲綍鍙告満鐨勬敹鐩�/鎻愮幇缁熻")
     @GetMapping("/driverStatistics")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
     })
     public ApiResponse<RevenueStatisticsVO> driverStatistics() {
-        return ApiResponse.success("鏌ヨ鎴愬姛", revenueService.getDriverRevenueStatistics(getMemberId()));
+        return ApiResponse.success("鏌ヨ鎴愬姛", revenueService.getDriverRevenueStatistics(getDriverId()));
     }
 
-    @LoginRequired
-    @ApiOperation(value = "鎻愮幇璇︽儏", notes = "鏍规嵁鎻愮幇涓婚敭鏌ヨ璇︽儏锛堝惈瀹℃壒浜轰俊鎭級")
-    @GetMapping("/detail/{id}")
+    @LoginShopRequired
+    @ApiOperation(value = "闂ㄥ簵鎻愮幇璇︽儏", notes = "鏍规嵁鎻愮幇涓婚敭鏌ヨ璇︽儏锛堝惈瀹℃壒浜轰俊鎭級")
+    @GetMapping("/shopDetail/{id}")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
             @ApiImplicitParam(paramType = "path", dataType = "Integer", name = "id", value = "鎻愮幇璁板綍涓婚敭", required = true)
     })
-    public ApiResponse<WithdrawalOrders> detail(@PathVariable Integer id) {
+    public ApiResponse<WithdrawalOrders> shopDetail(@PathVariable Integer id) {
+        return ApiResponse.success("鏌ヨ鎴愬姛", withdrawalOrdersService.findById(id));
+    }
+
+
+    @LoginDriverRequired
+    @ApiOperation(value = "鍙告満鎻愮幇璇︽儏", notes = "鏍规嵁鎻愮幇涓婚敭鏌ヨ璇︽儏锛堝惈瀹℃壒浜轰俊鎭級")
+    @GetMapping("/driverDetail/{id}")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+            @ApiImplicitParam(paramType = "path", dataType = "Integer", name = "id", value = "鎻愮幇璁板綍涓婚敭", required = true)
+    })
+    public ApiResponse<WithdrawalOrders> driverDetail(@PathVariable Integer id) {
         return ApiResponse.success("鏌ヨ鎴愬姛", withdrawalOrdersService.findById(id));
     }
 

--
Gitblit v1.9.3