From 2ab42edae9d271f5f464b7be475e217752dacb38 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期三, 22 四月 2026 09:24:47 +0800
Subject: [PATCH] 代码生成

---
 server/services/src/main/java/com/doumee/service/business/DriverInfoService.java                |    9 +
 server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java       |  115 ++++++++++++
 server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java                            |   65 +++---
 server/services/src/main/java/com/doumee/dao/vo/OrderItemVO.java                                |    8 
 server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java         |    9 
 server/services/src/main/java/com/doumee/config/wx/WxPayV3Service.java                          |    2 
 server/services/src/main/resources/application-dev.yml                                          |   27 --
 server/web/src/main/java/com/doumee/api/web/AccountApi.java                                     |   26 ++
 server/services/src/main/java/com/doumee/service/business/ShopInfoService.java                  |    6 
 server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java                           |    2 
 server/web/src/main/java/com/doumee/api/web/DriverInfoApi.java                                  |   13 +
 server/services/src/main/java/com/doumee/dao/vo/MyOrderVO.java                                  |   22 ++
 server/services/src/main/java/com/doumee/dao/business/model/WithdrawalOrders.java               |    3 
 server/web/src/main/java/com/doumee/api/web/OrdersApi.java                                      |    4 
 server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java                         |   14 
 server/services/src/main/java/com/doumee/core/constants/Constants.java                          |   45 ++++
 server/services/db/db_change.sql                                                                |    6 
 server/services/src/main/java/com/doumee/service/business/MemberService.java                    |    2 
 server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java           |   10 
 server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java           |  100 +++++++++-
 server/web/src/main/resources/application.yml                                                   |    2 
 server/admin/src/main/resources/application.yml                                                 |    2 
 server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java          |    2 
 server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java |    4 
 24 files changed, 390 insertions(+), 108 deletions(-)

diff --git a/server/admin/src/main/resources/application.yml b/server/admin/src/main/resources/application.yml
index c39e822..a67904a 100644
--- a/server/admin/src/main/resources/application.yml
+++ b/server/admin/src/main/resources/application.yml
@@ -3,7 +3,7 @@
   port: 10010
 # 椤圭洰淇℃伅閰嶇疆
 project:
-  name: 杩戝揩
+  name: 楂橀搧琛屾潕瀵勫瓨
   version: 1.0.0
   # 鐜锛岀敓浜х幆澧僷roduction锛屽紑鍙戠幆澧僤evelopment
   env: production
diff --git a/server/services/db/db_change.sql b/server/services/db/db_change.sql
index b240fc2..96b2a07 100644
--- a/server/services/db/db_change.sql
+++ b/server/services/db/db_change.sql
@@ -5,6 +5,12 @@
 
 
 -- ============================================================
+-- 2026/04/22 鎻愮幇璁板綍琛ㄥ鍔犳敮浠樺疂瀹炲悕濮撳悕瀛楁
+-- ============================================================
+ALTER TABLE `withdrawal_orders` ADD COLUMN `ALI_NAME` VARCHAR(50) DEFAULT NULL COMMENT '鏀粯瀹濆疄鍚嶅鍚�' AFTER `ALI_ACCOUNT`;
+
+
+-- ============================================================
 -- 2026/04/20 鍟嗘埛涓庡徃鏈哄鍔犳敮浠樺疂瀹炲悕濮撳悕瀛楁
 -- ============================================================
 ALTER TABLE `shop_info` ADD COLUMN `ALI_NAME` VARCHAR(50) DEFAULT NULL COMMENT '鏀粯瀹濆疄鍚嶅鍚�' AFTER `ALI_ACCOUNT`;
diff --git a/server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java b/server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java
index be51792..49b9be6 100644
--- a/server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java
+++ b/server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java
@@ -188,7 +188,7 @@
         // 璁剧疆杞处涓氬姟鐨勬爣棰�
         data.setOrderTitle("浣i噾鎶ラ叕");
         // 璁剧疆鍘熸敮浠樺疂涓氬姟鍗曞彿
-        data.setOriginalOrderId("20190620110075000006640000063056");
+        data.setOriginalOrderId(dto.getOutBizNo());
         // 璁剧疆鏀舵鏂逛俊鎭�
         data.setOrderTitle("浣i噾鎶ラ叕");
         Participant payeeInfo = new Participant();
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 1adf556..508a36a 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
@@ -119,7 +119,7 @@
      * @param token 鍘熶护鐗�
      * @return 鏂颁护鐗�
      */
-    public void logoutForH5(String token) {
+    public void logout(String token) {
         try {
             //鍒犻櫎鑰佺殑token
             redisTemplate.delete(Constants.REDIS_TOKEN_KEY+token);
diff --git a/server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java b/server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java
index d386941..9666dc4 100644
--- a/server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java
+++ b/server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java
@@ -8,19 +8,20 @@
 import com.github.binarywang.wxpay.constant.WxPayConstants;
 import com.github.binarywang.wxpay.service.WxPayService;
 import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
-import com.wechat.pay.java.core.Config;
 import com.wechat.pay.java.core.RSAAutoCertificateConfig;
-import com.wechat.pay.java.core.RSAPublicKeyConfig;
 import com.wechat.pay.java.core.notification.NotificationParser;
-import com.wechat.pay.java.core.notification.RSAPublicKeyNotificationConfig;
 import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension;
 import com.wechat.pay.java.service.refund.RefundService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.util.StreamUtils;
 
 import javax.annotation.PostConstruct;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 
 /**
  * 寰俊灏忕▼搴忕粍浠�
@@ -50,7 +51,7 @@
     @PostConstruct
     void init() {
         this.load_WxMaService();
-        this.load_wxPayService();
+//        this.load_wxPayService();
         this.load_wxPayV3Service();
 //        this.load_wxAppPayService();
     }
@@ -70,48 +71,44 @@
     /**
      * 鍒濆鍖栧井淇″皬绋嬪簭鏀粯 V2
      */
-    public void load_wxPayService() {
-        WxPayConfig payConfig = new WxPayConfig();
-        payConfig.setTradeType(WxPayConstants.TradeType.JSAPI);
-        payConfig.setSignType(WxPayConstants.SignType.MD5);
-        payConfig.setAppId(StringUtils.trimToNull(wxPayProperties.getAppId()));
-        payConfig.setMchId(StringUtils.trimToNull(wxPayProperties.getMchId()));
-        payConfig.setMchKey(StringUtils.trimToNull(wxPayProperties.getMchKey()));
-        payConfig.setKeyPath(StringUtils.trimToNull(wxPayProperties.getKeyPath()));
-        payConfig.setNotifyUrl(StringUtils.trimToNull(wxPayProperties.getNotifyUrl()));
-        WxPayService wxPayService = new WxPayServiceImpl();
-        wxPayService.setConfig(payConfig);
-        this.wxPayService = wxPayService;
-    }
+//    public void load_wxPayService() {
+//        WxPayConfig payConfig = new WxPayConfig();
+//        payConfig.setTradeType(WxPayConstants.TradeType.JSAPI);
+//        payConfig.setSignType(WxPayConstants.SignType.MD5);
+//        payConfig.setAppId(StringUtils.trimToNull(wxPayProperties.getAppId()));
+//        payConfig.setMchId(StringUtils.trimToNull(wxPayProperties.getMchId()));
+//        payConfig.setMchKey(StringUtils.trimToNull(wxPayProperties.getMchKey()));
+//        payConfig.setKeyPath(StringUtils.trimToNull(wxPayProperties.getKeyPath()));
+//        payConfig.setNotifyUrl(StringUtils.trimToNull(wxPayProperties.getNotifyUrl()));
+//        WxPayService wxPayService = new WxPayServiceImpl();
+//        wxPayService.setConfig(payConfig);
+//        this.wxPayService = wxPayService;
+//    }
 
     /**
      * 鍒濆鍖栧井淇℃敮浠� V3锛圝SAPI + 閫�娆� + 鍥炶皟楠岀锛�
+     * 浣跨敤骞冲彴璇佷功妯″紡锛堣嚜鍔ㄤ笅杞藉拰绠$悊寰俊骞冲彴璇佷功锛�
      */
     public void load_wxPayV3Service() {
         try {
-            Config config =
-                    new RSAPublicKeyConfig.Builder()
-                            .merchantId(wxPayProperties.getMchId()) //寰俊鏀粯鐨勫晢鎴峰彿
-                            .privateKeyFromPath(wxPayProperties.getPrivateKeyPath()) // 鍟嗘埛API璇佷功绉侀挜鐨勫瓨鏀捐矾寰�
-                            .merchantSerialNumber(wxPayProperties.getSerialNumer()) //鍟嗘埛API璇佷功搴忓垪鍙�
-                            .publicKeyFromPath(wxPayProperties.getPubKeyPath()) //寰俊鏀粯鍏挜鐨勫瓨鏀捐矾寰�
-                            .publicKeyId(wxPayProperties.getPublicKeyId()) //寰俊鏀粯鍏挜ID
-                            .apiV3Key(wxPayProperties.getApiV3Key()) //APIv3瀵嗛挜
-                            .build();
+            // 浠� classpath 璇诲彇鍟嗘埛绉侀挜
+            ClassPathResource keyResource = new ClassPathResource(StringUtils.trimToNull(wxPayProperties.getPrivateKeyPath()));
+            InputStream keyStream = keyResource.getInputStream();
+            String privateKey = StreamUtils.copyToString(keyStream, StandardCharsets.UTF_8);
+            keyStream.close();
 
-
-            // 鏀粯鍏挜閰嶇疆锛堢敤浜庡洖璋冮獙绛撅級
-            RSAPublicKeyNotificationConfig notifyConfig = new RSAPublicKeyNotificationConfig.Builder()
-                    .publicKeyFromPath(wxPayProperties.getPubKeyPath())
-                    .publicKeyId(wxPayProperties.getPublicKeyId())
-                    .apiV3Key(wxPayProperties.getApiV3Key())
+            RSAAutoCertificateConfig config = new RSAAutoCertificateConfig.Builder()
+                    .merchantId(StringUtils.trimToNull(wxPayProperties.getMchId()))
+                    .privateKey(privateKey)
+                    .merchantSerialNumber(StringUtils.trimToNull(wxPayProperties.getSerialNumer()))
+                    .apiV3Key(StringUtils.trimToNull(wxPayProperties.getApiV3Key()))
                     .build();
 
             v3JsapiService = new JsapiServiceExtension.Builder().config(config).build();
             v3RefundService = new RefundService.Builder().config(config).build();
-            v3NotificationParser = new NotificationParser(notifyConfig);
+            v3NotificationParser = new NotificationParser(config);
 
-            log.info("寰俊鏀粯V3鍒濆鍖栨垚鍔�");
+            log.info("寰俊鏀粯V3鍒濆鍖栨垚鍔燂紙骞冲彴璇佷功妯″紡锛�");
         } catch (Exception e) {
             log.error("寰俊鏀粯V3鍒濆鍖栧け璐�: {}", e.getMessage(), e);
         }
diff --git a/server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java b/server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java
index 69d36b6..350ce71 100644
--- a/server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java
+++ b/server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java
@@ -34,12 +34,12 @@
     /**
      * 鏀粯API瀵嗛挜
      */
-    private String mchKey;
+//    private String mchKey;
 
     /**
      * 鏀粯鍥炶皟鍦板潃
      */
-    private String notifyUrl;
+//    private String notifyUrl;
 
     /**
      * V3鏀粯鍥炶皟鍦板潃
@@ -54,7 +54,7 @@
     /**
      * 鏀粯璇佷功(p12)
      */
-    private String keyPath;
+//    private String keyPath;
 
 
 
@@ -73,18 +73,18 @@
     /**
      * 閫�娆惧洖璋�
      */
-    private String refundNotifyUrl;
+//    private String refundNotifyUrl;
 
     /**
      * 鍟嗘埛鏀粯鍏挜
      */
-    private String pubKeyPath;
+//    private String pubKeyPath;
 
 
     /**
      * 鏀粯绉橀挜
      */
-    private String privateCertPath;
+//    private String privateCertPath;
 
     /**
      * 鏀粯key
@@ -95,6 +95,6 @@
     /**
      * 寰俊鏀粯鍏挜ID
      */
-    private String publicKeyId;
+//    private String publicKeyId;
 
 }
diff --git a/server/services/src/main/java/com/doumee/config/wx/WxPayV3Service.java b/server/services/src/main/java/com/doumee/config/wx/WxPayV3Service.java
index 6a5ace2..ef98b8f 100644
--- a/server/services/src/main/java/com/doumee/config/wx/WxPayV3Service.java
+++ b/server/services/src/main/java/com/doumee/config/wx/WxPayV3Service.java
@@ -121,7 +121,7 @@
             return result;
         } catch (Exception e) {
             log.error("寰俊鏀粯V3閫�娆惧け璐�: {}", e.getMessage(), e);
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "閫�娆惧け璐ワ細" + e.getMessage());
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "閫�娆惧け璐ワ細璇疯仈绯荤鐞嗗憳");
         }
     }
 
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 e9e0622..c0e59b4 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
@@ -102,6 +102,7 @@
     public static final int ORDER_LOG_CANCEL = 4;           // 鍙栨秷璁㈠崟
     public static final int ORDER_LOG_CONFIRM_ARRIVE = 5;   // 纭椤惧鍒板簵
     public static final int ORDER_LOG_DRIVER_PICKUP = 6;    // 鍙告満瀹屾垚鍙栦欢
+    public static final int ORDER_LOG_DRIVER_DELIVER = 7;  // 鍙告満纭閫佽揪
 
     public static final String SUCCESS = "SUCCESS";
     public static final String FAIL = "FAIL";
@@ -369,9 +370,16 @@
             return null;
         }
 
-        public static String getDescByKey(int index) {
+        public static String getDescByKey(int index,int type) {
             for (OrderStatus c : OrderStatus.values()) {
                 if (c.getKey() == index) {
+                    if (c.getKey() == 5) {
+                        if(Constants.equalsInteger(type,Constants.ZERO)){
+                            return "寰呭彇浠�";
+                        }else{
+                            return Constants.equalsInteger(type,Constants.ONE)?"宸插埌搴�":"宸查�佽揪";
+                        }
+                    }
                     return c.getValue();
                 }
             }
@@ -516,6 +524,41 @@
     }
 
     /**
+     * 鍙告満璁㈠崟绔欏唴淇¢�氱煡鏋氫妇
+     * title: 閫氱煡鏍囬
+     * content: 閫氱煡鏂囨妯℃澘锛屽崰浣嶇鐢� {xxx} 琛ㄧず
+     */
+    @Getter
+    @AllArgsConstructor
+    public enum DriverOrderNotify {
+        WAIT_DELIVER("waitDeliver", "璁㈠崟寰呴厤閫�", "鎮ㄥ凡鎶㈠崟鎴愬姛锛岃鍗曪細{orderNo}璇锋寜鏃跺埌{shopName}鍙栦欢"),
+        DELIVERING("delivering", "閰嶉�佷腑", "琛屾潕璁㈠崟锛歿orderNo}宸插彇浠讹紝姝e湪閰嶉�佷腑锛岃鎸夋椂閫佽揪"),
+        ARRIVED("arrived", "宸查�佽揪", "琛屾潕璁㈠崟锛歿orderNo}宸查�佽揪{destination},璇疯仈绯荤敤鎴风‘璁ょ鏀�"),
+        FINISHED("finished", "璁㈠崟宸插畬鎴�", "琛屾潕璁㈠崟锛歿orderNo}宸插畬鎴愶紝鐩稿叧璁㈠崟缁撶畻浼氬湪{settleDays}涓伐浣滄棩鍐呯粨绠�"),
+        EVALUATED("evaluated", "璁㈠崟宸茶瘎浠�", "琛屾潕璁㈠崟锛歿orderNo}鐢ㄦ埛宸插畬鎴愯瘎浠凤紝鍙墠寰�璁㈠崟鏌ョ湅璇勪环鍐呭"),
+        REFUNDING("refunding", "閫�娆句腑", "琛屾潕璁㈠崟锛歿orderNo}鐢ㄦ埛宸叉彁浜ら��娆剧敵璇凤紝璇ヨ鍗曚换鍔″凡鍙栨秷锛岃鍕垮墠寰�銆�"),
+        SETTLED("settled", "璁㈠崟宸茬粨绠�", "琛屾潕璁㈠崟锛歿orderNo}骞冲彴宸插畬鎴愮粨绠楋紝閲戦涓簕amount}鍏冿紝璇锋敞鎰忔煡鏀躲��"),
+        CANCELLED("cancelled", "璁㈠崟鍙栨秷鎴愬姛", "琛屾潕璁㈠崟锛歿orderNo}宸插府鎮ㄥ彇娑堬紝鎮ㄤ粖鏃ヨ繕鍙富鍔ㄥ彇娑坽cancelLimit}娆¤鍗曪紝璇峰悎鐞嗗畨鎺掓帴鍗曘��")
+        ;
+
+        private final String key;
+        private final String title;
+        private final String content;
+
+        /**
+         * 鏍煎紡鍖栭�氱煡鍐呭
+         * @param params 閿�煎锛屽 "orderNo","123" 浜ゆ浛浼犲叆
+         */
+        public String format(String... params) {
+            String result = this.content;
+            for (int i = 0; i < params.length - 1; i += 2) {
+                result = result.replace("{" + params[i] + "}", params[i + 1]);
+            }
+            return result;
+        }
+    }
+
+    /**
      * 寰楀埌request瀵硅薄
      *
      * @return
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/WithdrawalOrders.java b/server/services/src/main/java/com/doumee/dao/business/model/WithdrawalOrders.java
index 51edffa..b2a58e5 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/WithdrawalOrders.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/WithdrawalOrders.java
@@ -96,6 +96,9 @@
     @ApiModelProperty(value = "鏀粯瀹濇彁鐜拌处鎴�")
     private String aliAccount;
 
+    @ApiModelProperty(value = "鏀粯瀹濆疄鍚嶅鍚�")
+    private String aliName;
+
     @ApiModelProperty(value = "瀹℃壒鎿嶄綔浜猴紙鍏宠仈system_user锛�", example = "1")
     private Integer userId;
 
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 57d180f..8d96a90 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
@@ -26,8 +26,12 @@
     @ApiModelProperty(value = "瀵勫瓨鏂瑰紡:0=灏卞湴瀛樺彇锛�1=寮傚湴瀛樺彇")
     private Integer type;
 
-    @ApiModelProperty(value = "璁㈠崟鐘舵��")
+    @ApiModelProperty(value = "灏卞湴瀵勫瓨鐘舵�侊細0=寰呮敮浠�;1=寰呭瘎瀛�;2=宸插瘎瀛�;5=寰呭彇浠�;6=瀛樺湪閫炬湡;7=宸插畬鎴�;96:璁㈠崟鍏抽棴锛堥��娆撅級;97:鍙栨秷閫炬湡;98=鍙栨秷涓�;99=宸插彇娑�;" +
+            "            寮傚湴瀵勫瓨鐘舵�侊細0=寰呮敮浠�;1=寰呭瘎瀛�;2=宸插瘎瀛�;3=宸叉帴鍗�;4=娲鹃�佷腑;5=宸插埌搴�/宸查�佽揪;6=瀛樺湪閫炬湡;7=宸插畬鎴�;96:璁㈠崟鍏抽棴锛堥��娆撅級;97:鍙栨秷閫炬湡;98=鍙栨秷涓�;99=宸插彇娑�")
     private Integer status;
+
+    @ApiModelProperty(value = "鐘舵�佹枃妗�")
+    private String statusName;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -37,7 +41,13 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date expectedTakeTime;
 
+    @ApiModelProperty(value = "浼氬憳鍙栦欢鐮�")
+    private String memberVerifyCode;
+
     // ---- 瀛樹欢闂ㄥ簵 ----
+
+    @ApiModelProperty(value = "瀛樹欢闂ㄥ簵涓婚敭")
+    private Integer depositShopId;
 
     @ApiModelProperty(value = "瀛樹欢闂ㄥ簵鍚嶇О")
     private String depositShopName;
@@ -49,6 +59,9 @@
     private String depositShopPhone;
 
     // ---- 鍙栦欢淇℃伅 ----
+
+    @ApiModelProperty(value = "鍙栦欢闂ㄥ簵涓婚敭锛堟湁鍙栦欢闂ㄥ簵鏃惰繑鍥烇級")
+    private Integer takeShopId;
 
     @ApiModelProperty(value = "鍙栦欢闂ㄥ簵鍚嶇О锛堟湁鍙栦欢闂ㄥ簵鏃惰繑鍥烇級")
     private String takeShopName;
@@ -70,7 +83,7 @@
 
     // ---- 璐圭敤 ----
 
-    @ApiModelProperty(value = "鎶ヤ环淇濊垂锛堝垎锛�")
+    @ApiModelProperty(value = "淇濅环淇濊垂锛堝垎锛�")
     private Long declaredFee;
 
     @ApiModelProperty(value = "棰勪及璐圭敤锛堝垎锛�")
@@ -96,4 +109,9 @@
 
     @ApiModelProperty(value = "褰撳墠闂ㄥ簵瑙掕壊锛�1=瀛樹欢闂ㄥ簵锛�2=鍙栦欢闂ㄥ簵锛堜粎闂ㄥ簵绔繑鍥烇級")
     private Integer shopRole;
+
+    // ---- 璇勪环 ----
+
+    @ApiModelProperty(value = "璇勪环鐘舵�侊細0=鏈瘎浠凤紱1=宸茶瘎浠�")
+    private Integer commentStatus;
 }
diff --git a/server/services/src/main/java/com/doumee/dao/vo/OrderItemVO.java b/server/services/src/main/java/com/doumee/dao/vo/OrderItemVO.java
index f55f79e..1d4f825 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/OrderItemVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/OrderItemVO.java
@@ -25,9 +25,9 @@
     @ApiModelProperty(value = "鏁伴噺")
     private Integer num;
 
-    @ApiModelProperty(value = "鍗曚环锛堝厓锛�")
-    private Double unitPriceYuan;
+    @ApiModelProperty(value = "鍗曚环锛堝垎锛�")
+    private Long unitPrice;
 
-    @ApiModelProperty(value = "灏忚璐圭敤锛堝厓锛�")
-    private Double subtotal;
+    @ApiModelProperty(value = "灏忚璐圭敤锛堝垎锛�")
+    private Long subtotal;
 }
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 c274cc4..769f3d1 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
@@ -6,6 +6,7 @@
 import com.doumee.dao.dto.DriverGrabOrderDTO;
 import com.doumee.dao.business.model.DriverInfo;
 import com.doumee.dao.dto.DriverLoginRequest;
+import com.doumee.dao.dto.DriverDeliverDTO;
 import com.doumee.dao.dto.DriverPickupDTO;
 import com.doumee.dao.dto.DriverRegisterRequest;
 import com.doumee.dao.dto.DriverVerifyRequest;
@@ -241,4 +242,12 @@
      */
     void confirmPickup(Integer driverId, DriverPickupDTO dto);
 
+    /**
+     * 鍙告満纭閫佽揪锛堝紓鍦板瘎瀛樻棤鍙栦欢闂ㄥ簵锛夛紝璁㈠崟鐘舵�佷粠娲鹃�佷腑(4)鍙樹负宸查�佽揪(5)
+     *
+     * @param driverId 鍙告満涓婚敭
+     * @param dto      閫佽揪璇锋眰鍙傛暟
+     */
+    void confirmDeliver(Integer driverId, DriverDeliverDTO dto);
+
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/MemberService.java b/server/services/src/main/java/com/doumee/service/business/MemberService.java
index 3512e96..5c45c70 100644
--- a/server/services/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/services/src/main/java/com/doumee/service/business/MemberService.java
@@ -149,7 +149,7 @@
 
     PlatformAboutVO getPlatformAboutUs();
 
-    void logOut(String token,Integer memberId);
+    void logOut(String token,Integer memberId,Integer userType);
 
     void logOff(String token,Integer memberId);
 
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 590941b..4fe95a7 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
@@ -193,10 +193,10 @@
     ShopLoginVO shopPasswordLogin(ShopLoginDTO dto);
 
     /**
-     * 闂ㄥ簵闈欓粯鐧诲綍锛堟牴鎹畂penid锛�
-     * @param openid
+     * 闂ㄥ簵闈欓粯鐧诲綍锛堥粯璁ょ敤鎴锋惡甯︾殑openid杩涜鏌ヨ锛�
+     * @param memberId
      * @return 鐧诲綍缁撴灉
      */
-    ShopLoginVO shopSilentLogin(String openid);
+    ShopLoginVO shopSilentLogin(Integer memberId);
 
 }
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 920b9e6..b0b876c 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
@@ -141,6 +141,27 @@
         noticeService.create(notice);
     }
 
+    /**
+     * 鍙戦�佸徃鏈虹珯鍐呬俊閫氱煡
+     */
+    private void sendDriverNotice(Integer driverId, Constants.DriverOrderNotify notify, Integer orderId, String... params) {
+        DriverInfo driver = driverInfoMapper.selectById(driverId);
+        if (driver == null || driver.getMemberId() == null) {
+            return;
+        }
+        Notice notice = new Notice();
+        notice.setUserType(1); // 1=鍙告満
+        notice.setUserId(driver.getMemberId());
+        notice.setTitle(notify.getTitle());
+        notice.setContent(notify.format(params));
+        notice.setObjId(orderId);
+        notice.setObjType(0); // 0=璁㈠崟
+        notice.setStatus(0);  // 0=鏈
+        notice.setIsdeleted(Constants.ZERO);
+        notice.setCreateDate(new Date());
+        noticeService.create(notice);
+    }
+
     @Override
     public Integer create(DriverInfo driverInfo) {
         driverInfoMapper.insert(driverInfo);
@@ -1169,6 +1190,12 @@
         // 閫氱煡浼氬憳锛氬徃鏈哄彉鏇�
         sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.DRIVER_CHANGED, orderId,
                 "orderNo", order.getCode());
+
+        // 閫氱煡鍙告満锛氬彇娑堟垚鍔�
+        int remainLimit = limit - (todayCancelCount != null ? todayCancelCount.intValue() + 1 : 1);
+        sendDriverNotice(driverId, Constants.DriverOrderNotify.CANCELLED, orderId,
+                "orderNo", order.getCode(),
+                "cancelLimit", String.valueOf(Math.max(remainLimit, 0)));
     }
 
     @Override
@@ -1243,6 +1270,12 @@
             sendShopNotice(order.getDepositShopId(), Constants.ShopOrderNotify.WAIT_PICKUP, orderId,
                     "orderNo", order.getCode());
         }
+
+        // 閫氱煡鍙告満锛氭姠鍗曟垚鍔�
+        String shopName = order.getDepositShopName() != null ? order.getDepositShopName() : order.getDepositLocation();
+        sendDriverNotice(driverId, Constants.DriverOrderNotify.WAIT_DELIVER, orderId,
+                "orderNo", order.getCode(),
+                "shopName", shopName != null ? shopName : "");
     }
 
     @Override
@@ -1318,6 +1351,88 @@
                     "orderNo", order.getCode(),
                     "driverName", driver.getName());
         }
+
+        // 閫氱煡鍙告満锛氬凡鍙栦欢閰嶉�佷腑
+        sendDriverNotice(driverId, Constants.DriverOrderNotify.DELIVERING, orderId,
+                "orderNo", order.getCode());
+    }
+
+    @Override
+    @Transactional
+    public void confirmDeliver(Integer driverId, DriverDeliverDTO dto) {
+        Integer orderId = dto.getOrderId();
+
+        // 1. 鏍¢獙鍙告満
+        DriverInfo driver = driverInfoMapper.selectById(driverId);
+        if (driver == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
+        }
+
+        // 2. 鏍¢獙璁㈠崟
+        Orders order = ordersMapper.selectById(orderId);
+        if (order == null || Constants.ONE.equals(order.getDeleted())) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+        }
+        if (!Constants.ONE.equals(order.getType())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "浠呭紓鍦板瘎瀛樿鍗曟敮鎸佹鎿嶄綔");
+        }
+        if (order.getTakeShopId() != null) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏈夊彇浠堕棬搴楃殑璁㈠崟璇烽�佽揪鑷抽棬搴楁牳閿�");
+        }
+        if (!Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.delivering.getStatus())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽纭閫佽揪");
+        }
+        if (!driverId.equals(order.getAcceptDriver())) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鏃犳潈鎿嶄綔璇ヨ鍗�");
+        }
+
+        // 3. 淇濆瓨閫佽揪鍥剧墖
+        Date now = new Date();
+        if (dto.getImages() != null && !dto.getImages().isEmpty()) {
+            int sortNum = 0;
+            for (String url : dto.getImages()) {
+                Multifile multifile = new Multifile();
+                multifile.setObjId(orderId);
+                multifile.setObjType(Constants.FileType.DRIVER_DONE.getKey());
+                multifile.setType(Constants.ZERO);
+                multifile.setFileurl(url);
+                multifile.setIsdeleted(Constants.ZERO);
+                multifile.setCreateDate(now);
+                multifile.setSortnum(sortNum++);
+                multifileMapper.insert(multifile);
+            }
+        }
+
+        // 4. 鏇存柊璁㈠崟鐘舵�佷负宸查�佽揪(5)
+        ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                .set(Orders::getStatus, Constants.OrderStatus.arrived.getStatus())
+                .set(Orders::getArriveTime, now)
+                .set(Orders::getUpdateTime, now)
+                .eq(Orders::getId, orderId));
+
+        // 5. 鍐欏叆鎿嶄綔鏃ュ織
+        OrderLog log = new OrderLog();
+        log.setOrderId(orderId);
+        log.setTitle("鍙告満纭閫佽揪");
+        log.setLogInfo(StringUtils.isNotBlank(dto.getRemark()) ? dto.getRemark() : "鍙告満銆�" + driver.getName() + "銆戝凡閫佽揪");
+        log.setObjType(Constants.ORDER_LOG_DRIVER_DELIVER);
+        log.setOptUserId(driver.getMemberId());
+        log.setOptUserType(Constants.ONE);
+        log.setOrderStatus(Constants.OrderStatus.arrived.getStatus());
+        log.setCreateTime(now);
+        log.setDeleted(Constants.ZERO);
+        orderLogMapper.insert(log);
+
+        // 6. 閫氱煡浼氬憳锛氳鍗曞凡閫佽揪锛堟棤鍙栦欢闂ㄥ簵锛�
+        String destination = StringUtils.isNotBlank(order.getTakeShopAddress()) ? order.getTakeShopAddress() : "鐩殑鍦�";
+        sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.ARRIVED_NO_SHOP, orderId,
+                "orderNo", order.getCode(),
+                "destination", destination);
+
+        // 閫氱煡鍙告満锛氬凡閫佽揪
+        sendDriverNotice(driverId, Constants.DriverOrderNotify.ARRIVED, orderId,
+                "orderNo", order.getCode(),
+                "destination", destination);
     }
 
     private List<String> getFileUrls(Integer orderId, int objType, String prefix) {
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 cbd6691..3ac3d57 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
@@ -447,9 +447,13 @@
     }
 
     @Override
-    public void logOut(String token,Integer memberId){
-        memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" openid = null ").eq(Member::getId,memberId));
-        jwtTokenUtil.logoutForH5(token);
+    public void logOut(String token,Integer userId,Integer userType){
+        if(Constants.equalsInteger(userType,Constants.ZERO)){
+            memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" openid = null ").eq(Member::getId,userId));
+        }else if(Constants.equalsInteger(userType,Constants.TWO)){
+            shopInfoMapper.update(new UpdateWrapper<ShopInfo>().lambda().setSql(" openid = null ").eq(ShopInfo::getId,userId));
+        }
+        jwtTokenUtil.logout(token);
     }
 
 
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 e4f0227..01df4f5 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
@@ -294,7 +294,7 @@
             return BigDecimal.ZERO;
         }
         String rateStr = systemDictDataBiz.queryByCode(Constants.OPERATION_CONFIG, Constants.OP_INSURANCE_RATE).getCode();
-        BigDecimal rate = new BigDecimal(rateStr);
+        BigDecimal rate = new BigDecimal(rateStr).divide(new BigDecimal("100"), 4, BigDecimal.ROUND_HALF_UP);
         return declaredValue.multiply(rate).setScale(2, BigDecimal.ROUND_HALF_UP);
     }
 
@@ -342,9 +342,11 @@
         List<Category> categories = categoryMapper.selectBatchIds(categoryIds);
         Map<Integer, String> categoryNameMap = new HashMap<>();
         Map<Integer, String> categoryDetailMap = new HashMap<>();
+        Map<Integer, String> categoryOtherFieldMap = new HashMap<>();
         for (Category c : categories) {
             categoryNameMap.put(c.getId(), c.getName());
             categoryDetailMap.put(c.getId(), c.getDetail());
+            categoryOtherFieldMap.put(c.getId(),c.getOtherField());
         }
 
         // 璁$畻姣忛」鐗╁搧璐圭敤锛氬皬璁� = 鍗曚环 脳 鏁伴噺 脳 澶╂暟
@@ -364,7 +366,7 @@
             ItemPriceVO vo = new ItemPriceVO();
             vo.setCategoryId(item.getCategoryId());
             vo.setCategoryName(categoryNameMap.getOrDefault(item.getCategoryId(), ""));
-            vo.setDetail(categoryDetailMap.get(item.getCategoryId()));
+            vo.setDetail(categoryOtherFieldMap.get(item.getCategoryId()));
             vo.setQuantity(item.getQuantity());
             vo.setUnitPrice(unitPrice);
             vo.setLocallyPrice(unitPrice);
@@ -462,9 +464,11 @@
         List<Category> categories = categoryMapper.selectBatchIds(categoryIds);
         Map<Integer, String> categoryNameMap = new HashMap<>();
         Map<Integer, String> categoryDetailMap = new HashMap<>();
+        Map<Integer, String> categoryOtherFieldMap = new HashMap<>();
         for (Category c : categories) {
             categoryNameMap.put(c.getId(), c.getName());
             categoryDetailMap.put(c.getId(), c.getDetail());
+            categoryOtherFieldMap.put(c.getId(),c.getOtherField());
         }
 
         // 3. 閫愰」璁$畻杩愯垂锛氳捣姝ヤ环 + 瓒呭嚭閮ㄥ垎闃舵浠�
@@ -503,7 +507,7 @@
             ItemPriceVO vo = new ItemPriceVO();
             vo.setCategoryId(item.getCategoryId());
             vo.setCategoryName(categoryNameMap.getOrDefault(item.getCategoryId(), ""));
-            vo.setDetail(categoryDetailMap.get(item.getCategoryId()));
+            vo.setDetail(categoryOtherFieldMap.get(item.getCategoryId()));
             vo.setQuantity(item.getQuantity());
             vo.setUnitPrice(unitPrice);
             vo.setLocallyPrice(locallyPrice);
@@ -1189,9 +1193,9 @@
                 item.setLuggageName(d.getLuggageName());
                 item.setLuggageDetail(d.getLuggageDetail());
                 item.setNum(d.getNum());
-                double unitPriceYuan = d.getUnitPrice() != null ? Constants.getFormatMoney(d.getUnitPrice()) : 0;
-                item.setUnitPriceYuan(unitPriceYuan);
-                item.setSubtotal(unitPriceYuan * (d.getNum() != null ? d.getNum() : 0));
+                long unitPriceFen = d.getUnitPrice() != null ? d.getUnitPrice() : 0L;
+                item.setUnitPrice(unitPriceFen);
+                item.setSubtotal(unitPriceFen * (d.getNum() != null ? d.getNum() : 0));
                 items.add(item);
             }
         }
@@ -1375,16 +1379,22 @@
                 vo.setCode(o.getCode());
                 vo.setType(o.getType());
                 vo.setStatus(o.getStatus());
+                vo.setStatusName(Constants.OrderStatus.getDescByKey(o.getStatus(),
+                        Constants.equalsInteger(o.getType(), Constants.ZERO)?o.getType():Objects.nonNull(o.getTakeShopId())?Constants.ONE:Constants.TWO)
+                );
                 vo.setCreateTime(o.getCreateTime());
                 vo.setExpectedTakeTime(o.getExpectedTakeTime());
+                vo.setMemberVerifyCode(o.getMemberVerifyCode());
 
                 // 瀛樹欢闂ㄥ簵锛堝叧鑱旀煡璇㈢洿鎺ュ彇鍊硷級
+                vo.setDepositShopId(o.getDepositShopId());
                 vo.setDepositShopName(o.getDepositShopName());
                 vo.setDepositShopLinkName(o.getDepositShopLinkName());
                 vo.setDepositShopPhone(o.getDepositShopLinkPhone());
 
                 // 鍙栦欢淇℃伅锛氭湁鍙栦欢闂ㄥ簵鍙栭棬搴楋紝鏃犲垯鍙栫敤鎴疯嚜閫夊彇浠剁偣
                 if (o.getTakeShopId() != null) {
+                    vo.setTakeShopId(o.getTakeShopId());
                     vo.setTakeShopName(o.getTakeShopName());
                     vo.setTakeShopAddress(o.getTakeShopAddress());
                 } else {
@@ -1399,6 +1409,9 @@
                 // 璐圭敤锛堝垎锛�
                 vo.setDeclaredFee(o.getDeclaredFee());
                 vo.setEstimatedAmount(o.getEstimatedAmount());
+
+                // 璇勪环鐘舵��
+                vo.setCommentStatus(o.getCommentStatus());
 
                 // 鏌ヨ鐗╁搧鏄庣粏锛堜竴娆℃煡璇紝鍚屾椂鐢ㄤ簬鐗╁搧鍒楄〃鍜岄�炬湡璁$畻锛�
                 List<OrdersDetail> details = ordersDetailMapper.selectList(
@@ -1472,6 +1485,9 @@
                 vo.setCode(o.getCode());
                 vo.setType(o.getType());
                 vo.setStatus(o.getStatus());
+                vo.setStatusName(Constants.OrderStatus.getDescByKey(o.getStatus(),
+                        Constants.equalsInteger(o.getType(), Constants.ZERO)?o.getType():Objects.nonNull(o.getTakeShopId())?Constants.ONE:Constants.TWO)
+                );
                 vo.setCreateTime(o.getCreateTime());
                 vo.setExpectedTakeTime(o.getExpectedTakeTime());
 
@@ -1687,11 +1703,6 @@
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
 
-        // 浠呭紓鍦板瘎瀛樺彲鍙栨秷
-        if (!Constants.equalsInteger(order.getType(), Constants.ONE)) {
-            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "浠呭紓鍦板瘎瀛樿鍗曞彲鍙栨秷");
-        }
-
         Integer status = order.getStatus();
         if (status == null) {
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璁㈠崟鐘舵�佸紓甯�");
@@ -1699,7 +1710,7 @@
 
         Date now = new Date();
 
-        // 寰呮敮浠橈細鐩存帴鍙栨秷
+        // 寰呮敮浠橈細鐩存帴鍙栨秷锛堜笉闄愯鍗曠被鍨嬶級
         if (Constants.equalsInteger(status, Constants.OrderStatus.waitPay.getStatus())) {
             order.setStatus(Constants.OrderStatus.cancelled.getStatus());
             order.setCancelTime(now);
@@ -1708,7 +1719,7 @@
             return;
         }
 
-        // 寰呭瘎瀛橈細鐩存帴鍙栨秷锛屽叏棰濋��娆�
+        // 寰呭瘎瀛橈細鐩存帴鍙栨秷锛屽叏棰濋��娆撅紙涓嶉檺璁㈠崟绫诲瀷锛�
         if (Constants.equalsInteger(status, Constants.OrderStatus.waitDeposit.getStatus())) {
             // 璁板綍閫�娆句俊鎭�
             OrdersRefund refund = new OrdersRefund();
@@ -1737,6 +1748,11 @@
             return;
         }
 
+        // 宸插瘎瀛�/宸叉帴鍗曪細浠呭紓鍦板瘎瀛樺彲鍙栨秷
+        if (!Constants.equalsInteger(order.getType(), Constants.ONE)) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "浠呭紓鍦板瘎瀛樿鍗曞彲鍙栨秷");
+        }
+
         // 宸插瘎瀛�/宸叉帴鍗曪細杩涘叆鍙栨秷涓姸鎬�
         if (Constants.equalsInteger(status, Constants.OrderStatus.deposited.getStatus())
                 || Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) {
@@ -1747,6 +1763,11 @@
             // 閫氱煡瀛樹欢闂ㄥ簵锛氶��娆剧敵璇�
             if (order.getDepositShopId() != null) {
                 sendShopNotice(order.getDepositShopId(), Constants.ShopOrderNotify.REFUNDING, orderId,
+                        "orderNo", order.getCode());
+            }
+            // 閫氱煡鍙告満锛氳鍗曢��娆句腑锛堝凡鎺ュ崟鎯呭喌涓嬪徃鏈洪渶鍋滄鏈嶅姟锛�
+            if (order.getAcceptDriver() != null && Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.accepted.getStatus())) {
+                sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.REFUNDING, orderId,
                         "orderNo", order.getCode());
             }
             return;
@@ -1833,6 +1854,27 @@
         if (order.getTakeShopId() != null) {
             sendShopNotice(order.getTakeShopId(), notify, order.getId(), params);
         }
+    }
+
+    /**
+     * 鍙戦�佸徃鏈虹珯鍐呬俊閫氱煡
+     */
+    private void sendDriverNotice(Integer driverId, Constants.DriverOrderNotify notify, Integer orderId, String... params) {
+        DriverInfo driver = driverInfoMapper.selectById(driverId);
+        if (driver == null || driver.getMemberId() == null) {
+            return;
+        }
+        Notice notice = new Notice();
+        notice.setUserType(1); // 1=鍙告満
+        notice.setUserId(driver.getMemberId());
+        notice.setTitle(notify.getTitle());
+        notice.setContent(notify.format(params));
+        notice.setObjId(orderId);
+        notice.setObjType(0); // 0=璁㈠崟
+        notice.setStatus(0);  // 0=鏈
+        notice.setIsdeleted(Constants.ZERO);
+        notice.setCreateDate(new Date());
+        noticeService.create(notice);
     }
 
     @Override
@@ -2178,6 +2220,14 @@
                     "orderNo", order.getCode(),
                     "amount", String.valueOf(Constants.getFormatMoney(
                             order.getTotalAmount() != null ? order.getTotalAmount() : 0L)));
+
+            // 閫氱煡鍙告満锛氳鍗曞凡缁撶畻
+            if (order.getAcceptDriver() != null) {
+                sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.SETTLED, order.getId(),
+                        "orderNo", order.getCode(),
+                        "amount", String.valueOf(Constants.getFormatMoney(
+                                order.getDriverFee() != null ? order.getDriverFee() : 0L)));
+            }
         }
     }
 
@@ -2282,6 +2332,12 @@
         // 閫氱煡瀛樹欢闂ㄥ簵鍜屽彇浠堕棬搴楋細璁㈠崟宸茶瘎浠�
         notifyBothShops(order, Constants.ShopOrderNotify.EVALUATED,
                 "orderNo", order.getCode());
+
+        // 閫氱煡鍙告満锛氳鍗曞凡璇勪环
+        if (order.getAcceptDriver() != null) {
+            sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.EVALUATED, order.getId(),
+                    "orderNo", order.getCode());
+        }
     }
 
     /**
@@ -2424,6 +2480,12 @@
             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(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽鏍搁攢");
         }
@@ -2529,6 +2591,12 @@
         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");
+        }
     }
 
     @Override
@@ -2575,6 +2643,12 @@
         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");
+        }
     }
 
     @Override
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 cd636c8..cfc176a 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
@@ -1059,12 +1059,13 @@
     }
 
     @Override
-    public ShopLoginVO shopSilentLogin(String openid) {
-        if (StringUtils.isBlank(openid)) {
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "openid涓嶈兘涓虹┖");
+    public ShopLoginVO shopSilentLogin(Integer memberId) {
+        Member member = memberMapper.selectById(memberId);
+        if(Objects.isNull(member)||StringUtils.isBlank(member.getOpenid())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "褰撳墠鐧诲綍浼氬憳韬唤寮傚父,璇疯仈绯荤鐞嗗憳!");
         }
         ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
-                .eq(ShopInfo::getOpenid, openid)
+                .eq(ShopInfo::getOpenid, member.getOpenid())
                 .eq(ShopInfo::getDeleted, Constants.ZERO)
                 .last("limit 1"));
         if (shop == null) {
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
index 0d0b4c4..3fec8ed 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
@@ -258,7 +258,7 @@
         String doneInfo = null;
         if (Constants.ONE.equals(dto.getStatus())) {
             String aliAccount = order.getAliAccount();
-            String aliName = null;
+            String aliName = order.getAliName();
 
             // 浠庡徃鏈烘垨闂ㄥ簵鑾峰彇鏀粯瀹濊处鎴峰拰瀹炲悕濮撳悕
             if (StringUtils.isBlank(aliAccount)) {
@@ -478,6 +478,7 @@
         order.setType(Constants.ZERO);
         order.setOutBillNo(billNo);
         order.setAliAccount(dto.getAliAccount());
+        order.setAliName(driver.getAliName());
         order.setDeleted(Constants.ZERO);
         order.setCreateTime(now);
         order.setUpdateTime(now);
@@ -529,6 +530,7 @@
         order.setType(Constants.ZERO);
         order.setOutBillNo(billNo);
         order.setAliAccount(dto.getAliAccount());
+        order.setAliName(shop.getAliName());
         order.setDeleted(Constants.ZERO);
         order.setCreateTime(now);
         order.setUpdateTime(now);
diff --git a/server/services/src/main/resources/application-dev.yml b/server/services/src/main/resources/application-dev.yml
index 6292a33..04d8331 100644
--- a/server/services/src/main/resources/application-dev.yml
+++ b/server/services/src/main/resources/application-dev.yml
@@ -83,34 +83,15 @@
 ########################寰俊鏀粯鐩稿叧閰嶇疆########################
 wx:
   pay:
-#    appId: wxcd2b89fd2ff065f8
-#    appSecret: 3462fa186da7cb06c544df8d8664b63a
-#    mchId: 1229817002
-#    mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
-#    notifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxPayNotify
-#    keyPath: D:\DouMee\dmkjWxcert\apiclient_cert.p12
     appId: wxb1b59320e803dc6c
     appSecret: eb93785c7bca3f0ff0364b0e26bfeb59
-    mchId: 1229817002    #鍟嗘埛鍙�
-    mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM #鍟嗘埛绉橀挜
-    apiV3Key: 7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB #apiV3Key
-    serialNumer: 3FE90C2F3D40A56E1C51926F31B8A8D22426CCE0 #鍟嗘埛璇佷功搴忓垪鍙�
-    publicKeyId: PUB_KEY_ID_0112298170022025071700291836000600
-    pubKeyPath: D:\DouMee\1229817002_20220310_cert\pub_key.pem #鍟嗘埛鏀粯鍏挜
-    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
-    notifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxPayNotify
-    refundNotifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxRefundNotify
+    mchId: 1629568742    #鍟嗘埛鍙�
+    apiV3Key: NJTLJSTZYXZRGScaiwubuzichanbu666 #apiV3Key
+    serialNumer: 25D19D18217F4588841E5CD1AA0D1533DE8AF84A #鍟嗘埛璇佷功搴忓垪鍙�
+    privateKeyPath: pay/pro/wx/apiclient_key.pem
     v3NotifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxPayV3Notify
     v3RefundNotifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxRefundV3Notify
 
-#    appId: wx6264b4f3a697cbe8
-#    appSecret: 23734577e8978138c946b727f0394027
-#    mchId: 1629568742
-#    mchKey: NJTLJSTZYXZRGScaiwubuzichanbu666
-#    notifyUrl: https://test.doumee.cn/dmmall_web_api/web/api/wxPayNotify
-#    keyPath: D:\DouMee\gtxljcWxcert\apiclient_cert.p12
 
 alipay:
   pay:
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 fcaf0aa..4860a59 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
@@ -3,6 +3,7 @@
 import com.doumee.config.jwt.JwtTokenUtil;
 import com.doumee.core.annotation.LoginRequired;
 import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.constants.Constants;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.dto.ShopLoginDTO;
@@ -68,27 +69,42 @@
         return ApiResponse.success("鎿嶄綔鎴愬姛", shopInfoService.shopPasswordLogin(dto));
     }
 
+    @LoginRequired
     @ApiOperation(value = "闂ㄥ簵闈欓粯鐧诲綍", notes = "鏍规嵁openid鑷姩鐧诲綍闂ㄥ簵锛屾湭缁戝畾鍒欒繑鍥炵┖")
     @GetMapping("/shopSilentLogin")
     @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "query", dataType = "String", name = "openid", value = "寰俊openid", required = true)
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
     })
-    public ApiResponse<ShopLoginVO> shopSilentLogin(@RequestParam String openid) {
-        return ApiResponse.success("鎿嶄綔鎴愬姛", shopInfoService.shopSilentLogin(openid));
+    public ApiResponse<ShopLoginVO> shopSilentLogin() {
+        return ApiResponse.success("鎿嶄綔鎴愬姛", shopInfoService.shopSilentLogin(getMemberId()));
     }
 
     @LoginRequired
-    @ApiOperation(value = "閫�鍑虹櫥褰�", notes = "灏忕▼搴忕")
+    @ApiOperation(value = "浼氬憳閫�鍑虹櫥褰�", notes = "灏忕▼搴忕")
     @GetMapping("/logOut")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
     })
     public ApiResponse logOut() {
         String token = this.getRequest().getHeader(JwtTokenUtil.HEADER_KEY);
-        memberService.logOut(token,getMemberId());
+        memberService.logOut(token,getMemberId(), Constants.ZERO);
         return  ApiResponse.success("鎿嶄綔鎴愬姛");
     }
 
+
+    @LoginRequired
+    @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);
+        memberService.logOut(token,getShopId(), Constants.TWO);
+        return  ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
     @LoginRequired
     @ApiOperation(value = "鐢ㄦ埛娉ㄩ攢", notes = "灏忕▼搴忕")
     @GetMapping("/logOff")
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 45b6b08..966cb84 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
@@ -10,6 +10,7 @@
 import com.doumee.dao.dto.DriverActiveOrderDTO;
 import com.doumee.dao.dto.DriverGrabOrderDTO;
 import com.doumee.dao.dto.DriverLoginRequest;
+import com.doumee.dao.dto.DriverDeliverDTO;
 import com.doumee.dao.dto.DriverPickupDTO;
 import com.doumee.dao.dto.DriverRegisterRequest;
 import com.doumee.dao.dto.DriverVerifyRequest;
@@ -202,4 +203,16 @@
         return ApiResponse.success("鎿嶄綔鎴愬姛");
     }
 
+    @LoginDriverRequired
+    @Trace
+    @ApiOperation(value = "鍙告満纭閫佽揪", notes = "寮傚湴瀵勫瓨鏃犲彇浠堕棬搴楄鍗曪紝娲鹃�佷腑(status=4)鏃剁‘璁ら�佽揪锛岃鍗曡繘鍏ュ凡閫佽揪(status=5)")
+    @PostMapping("/confirmDeliver")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+    })
+    public ApiResponse confirmDeliver(@RequestBody @Valid DriverDeliverDTO dto) {
+        driverInfoService.confirmDeliver(this.getDriverId(), dto);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
 }
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 d966ade..991f892 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
@@ -216,11 +216,11 @@
 
     @LoginRequired
     @ApiOperation(value = "浼氬憳纭鏀惰揣", notes = "寮傚湴瀵勫瓨涓旀棤鍙栦欢闂ㄥ簵鐨勮鍗曪紝閫佽揪鍚庣‘璁ゆ敹璐ф爣璁拌鍗曞畬鎴�")
-    @PostMapping("/confirmReceipt")
+    @PostMapping("/confirmReceipt/{orderId}")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
     })
-    public ApiResponse confirmReceipt(@RequestParam Integer orderId) {
+    public ApiResponse confirmReceipt(@PathVariable Integer orderId) {
         ordersService.memberConfirmReceipt(orderId, getMemberId());
         return ApiResponse.success("纭鏀惰揣鎴愬姛");
     }
diff --git a/server/web/src/main/resources/application.yml b/server/web/src/main/resources/application.yml
index 17dde0d..c4b6cec 100644
--- a/server/web/src/main/resources/application.yml
+++ b/server/web/src/main/resources/application.yml
@@ -3,7 +3,7 @@
   port: 10011
 # 椤圭洰淇℃伅閰嶇疆
 project:
-  name: 杩戝揩
+  name: 楂橀搧琛屾潕瀵勫瓨
   version: 1.0.0
   # 鐜锛岀敓浜х幆澧僷roduction锛屽紑鍙戠幆澧僤evelopment
   env: development

--
Gitblit v1.9.3