From 996b2f16afaa271ce8aad6abf6858aa5db503eb3 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期六, 25 四月 2026 14:07:34 +0800
Subject: [PATCH] 代码生成

---
 server/services/src/main/java/com/doumee/service/business/DriverInfoService.java          |   25 ++
 server/services/src/main/java/com/doumee/dao/vo/DriverOrderDetailVO.java                  |   18 ++
 server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java |  191 ++++++++++++++++++++++-
 server/services/src/main/java/com/doumee/dao/vo/DriverCancelLimitVO.java                  |   24 +++
 server/services/src/main/java/com/doumee/dao/vo/DriverGrabOrderVO.java                    |   20 ++
 server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java   |   15 +
 server/web/src/main/java/com/doumee/api/web/PaymentCallback.java                          |    2 
 server/services/src/main/java/com/doumee/dao/dto/ShopInfoMaintainDTO.java                 |    3 
 server/services/src/main/java/com/doumee/dao/dto/DriverPickupDTO.java                     |    6 
 server/web/src/main/java/com/doumee/api/web/ShopInfoApi.java                              |   15 +
 server/services/src/main/java/com/doumee/dao/vo/ShopDetailVO.java                         |    3 
 server/web/src/main/java/com/doumee/api/web/DriverInfoApi.java                            |   32 +++
 server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java                     |    5 
 server/services/src/main/java/com/doumee/dao/business/model/Orders.java                   |    8 +
 server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java     |   66 +++-----
 server/services/src/main/java/com/doumee/dao/vo/DriverActiveOrderCountVO.java             |   21 ++
 server/services/src/main/java/com/doumee/dao/dto/DriverOrderPageDTO.java                  |   19 ++
 17 files changed, 409 insertions(+), 64 deletions(-)

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 8fb56d8..289102e 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
@@ -10,6 +10,7 @@
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.ShopInfo;
 import io.jsonwebtoken.JwtException;
+import lombok.extern.log4j.Log4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
@@ -26,6 +27,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.Objects;
+import java.util.logging.Logger;
 
 @Configuration
 public class WebMvcConfig implements WebMvcConfigurer {
@@ -115,6 +117,7 @@
 
     public Boolean checkMemberLogin(HttpServletRequest request, HttpServletResponse response){
         String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
+        System.out.println("浼氬憳token:=========>{}"+token);
         try {
             if(!token.startsWith(Constants.ZERO+"")){
                 throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME);
@@ -145,6 +148,7 @@
 
 
     public Boolean checkShopLogin(String token,HttpServletRequest request, HttpServletResponse response){
+        System.out.println("闂ㄥ簵token:=========>{}"+token);
         try {
             if(!token.startsWith(Constants.TWO+"")){
                 throw new BusinessException(ResponseStatus.SHOP_TOKEN_EXCEED_TIME);
@@ -185,6 +189,7 @@
 
     public Boolean checkDriverLogin(HttpServletRequest request, HttpServletResponse response){
         String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
+        System.out.println("鍙告満token:=========>{}"+token);
         try {
             if(!token.startsWith(Constants.ONE+"")){
                 throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME);
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Orders.java b/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
index b03f799..35b0acb 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
@@ -420,6 +420,14 @@
     private String c2OtherField;
 
     @TableField(exist = false)
+    @ApiModelProperty(value = "鐗╁搧绛夌骇鍚嶇О锛堝叧鑱旀煡璇級")
+    private String goodLevelName;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鏄惁瀛樺湪鐗瑰ぇ灏哄锛�0=鍚� 1=鏄紙鍏宠仈鏌ヨ锛�")
+    private Integer hasOversized;
+
+    @TableField(exist = false)
     @ApiModelProperty(value = "鍙告満濮撳悕锛堝叧鑱旀煡璇級")
     private String driverName;
 
diff --git a/server/services/src/main/java/com/doumee/dao/dto/DriverOrderPageDTO.java b/server/services/src/main/java/com/doumee/dao/dto/DriverOrderPageDTO.java
new file mode 100644
index 0000000..099bd9d
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/DriverOrderPageDTO.java
@@ -0,0 +1,19 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍙告満璁㈠崟鍒嗛〉鏌ヨ璇锋眰
+ * @author rk
+ * @date 2026/04/25
+ */
+@Data
+@ApiModel("鍙告満璁㈠崟鍒嗛〉鏌ヨ璇锋眰")
+public class DriverOrderPageDTO {
+
+    @ApiModelProperty(value = "璁㈠崟鐘舵�佺瓫閫夛細null=鍏ㄩ儴锛�3=寰呭彇浠讹紱4=閰嶉�佷腑锛�7=宸插畬鎴�")
+    private Integer status;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/DriverPickupDTO.java b/server/services/src/main/java/com/doumee/dao/dto/DriverPickupDTO.java
index 775b3ff..1c29d09 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/DriverPickupDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/DriverPickupDTO.java
@@ -25,4 +25,10 @@
     @Size(min = 1, max = 3, message = "鍙栦欢鍥剧墖1-3寮�")
     @ApiModelProperty(value = "鍙栦欢鍥剧墖鍒楄〃锛堟渶澶�3寮狅級", required = true)
     private List<String> images;
+
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+
+
 }
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ShopInfoMaintainDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ShopInfoMaintainDTO.java
index f2f72a4..7d677f8 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/ShopInfoMaintainDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/ShopInfoMaintainDTO.java
@@ -20,6 +20,9 @@
     @ApiModelProperty(value = "闂ㄥ簵澶村儚")
     private String coverImg;
 
+    @ApiModelProperty(value = "闂ㄥ簵澶村儚锛堝叏璺緞锛�")
+    private String coverImgUrl;
+
     @ApiModelProperty(value = "闂ㄥ簵浠嬬粛")
     private String content;
 
diff --git a/server/services/src/main/java/com/doumee/dao/vo/DriverActiveOrderCountVO.java b/server/services/src/main/java/com/doumee/dao/vo/DriverActiveOrderCountVO.java
new file mode 100644
index 0000000..c72ae80
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/DriverActiveOrderCountVO.java
@@ -0,0 +1,21 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍙告満杩涜涓鍗曟暟閲�
+ * @author rk
+ * @date 2026/04/25
+ */
+@Data
+@ApiModel("鍙告満杩涜涓鍗曟暟閲�")
+public class DriverActiveOrderCountVO {
+
+    @ApiModelProperty(value = "宸叉姠鍗曟暟閲�", example = "0")
+    private Integer grabbedCount;
+
+    @ApiModelProperty(value = "娲鹃�佷腑鏁伴噺", example = "0")
+    private Integer deliveringCount;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/DriverCancelLimitVO.java b/server/services/src/main/java/com/doumee/dao/vo/DriverCancelLimitVO.java
new file mode 100644
index 0000000..f3cd9d6
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/DriverCancelLimitVO.java
@@ -0,0 +1,24 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍙告満浠婃棩鍙栨秷娆℃暟
+ * @author rk
+ * @date 2026/04/25
+ */
+@Data
+@ApiModel("鍙告満浠婃棩鍙栨秷娆℃暟")
+public class DriverCancelLimitVO {
+
+    @ApiModelProperty(value = "姣忔棩鍙栨秷涓婇檺", example = "3")
+    private Integer limit;
+
+    @ApiModelProperty(value = "浠婃棩宸插彇娑堟鏁�", example = "1")
+    private Integer used;
+
+    @ApiModelProperty(value = "浠婃棩鍓╀綑鍙彇娑堟鏁�", example = "2")
+    private Integer remain;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/DriverGrabOrderVO.java b/server/services/src/main/java/com/doumee/dao/vo/DriverGrabOrderVO.java
index 926cb22..f2f1495 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/DriverGrabOrderVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/DriverGrabOrderVO.java
@@ -37,8 +37,14 @@
     @ApiModelProperty(value = "璺濆瓨浠堕棬搴楄窛绂伙紙濡� 500m銆�1.2km锛�")
     private String depositDistance;
 
-    @ApiModelProperty(value = "鍙栦欢鍚嶇О锛堥棬搴楀悕绉版垨鑷畾涔夊湴鐐癸級")
+    @ApiModelProperty(value = "鍙栦欢闂ㄥ簵鍚嶇О")
     private String takeName;
+
+    @ApiModelProperty(value = "鍙栦欢鍦板潃")
+    private String takeAddress;
+
+    @ApiModelProperty(value = "鍙栦欢闂ㄥ簵涓婚敭锛堟湁鍙栦欢闂ㄥ簵鏃惰繑鍥烇級")
+    private Integer takeShopId;
 
     @ApiModelProperty(value = "鍙栦欢璺濈锛堝 500m銆�1.2km锛�")
     private String takeDistance;
@@ -58,6 +64,15 @@
     @ApiModelProperty(value = "鏄惁璐甸噸鐗╁搧")
     private Boolean isValuable;
 
+    @ApiModelProperty(value = "鐗╁搧绛夌骇鍚嶇О")
+    private String goodLevelName;
+
+    @ApiModelProperty(value = "鏄惁瀛樺湪鐗瑰ぇ灏哄锛�0=鍚� 1=鏄�")
+    private Integer hasOversized;
+
+    @ApiModelProperty(value = "鍙告満鍙栬揣鐮侊紙寰呭彇璐х姸鎬佹椂杩斿洖锛�")
+    private String driverVerifyCode;
+
     @Data
     @ApiModel("鎶㈠崟澶у巺鐗╁搧椤�")
     public static class OrderItem implements Serializable {
@@ -66,6 +81,9 @@
 
         @ApiModelProperty(value = "鏁伴噺")
         private Integer quantity;
+
+        @ApiModelProperty(value = "鏄惁澶т欢鐗╁搧锛�0=鍚� 1=鏄�")
+        private Integer isOversized;
     }
 
 }
diff --git a/server/services/src/main/java/com/doumee/dao/vo/DriverOrderDetailVO.java b/server/services/src/main/java/com/doumee/dao/vo/DriverOrderDetailVO.java
index 0d401f3..65a1d28 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/DriverOrderDetailVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/DriverOrderDetailVO.java
@@ -47,6 +47,12 @@
     @ApiModelProperty(value = "鍙栦欢鍚嶇О锛堥棬搴楀悕绉版垨鑷畾涔夊湴鐐癸級")
     private String takeName;
 
+    @ApiModelProperty(value = "鍙栦欢鍦板潃")
+    private String takeAddress;
+
+    @ApiModelProperty(value = "鍙栦欢闂ㄥ簵涓婚敭锛堟湁鍙栦欢闂ㄥ簵鏃惰繑鍥烇級")
+    private Integer takeShopId;
+
     @ApiModelProperty(value = "鍙栦欢璺濈锛堝 500m銆�1.2km锛�")
     private String takeDistance;
 
@@ -64,6 +70,15 @@
 
     @ApiModelProperty(value = "鏄惁璐甸噸鐗╁搧")
     private Boolean isValuable;
+
+    @ApiModelProperty(value = "鐗╁搧绛夌骇鍚嶇О")
+    private String goodLevelName;
+
+    @ApiModelProperty(value = "鏄惁瀛樺湪鐗瑰ぇ灏哄锛�0=鍚� 1=鏄�")
+    private Integer hasOversized;
+
+    @ApiModelProperty(value = "鍙告満鍙栬揣鐮侊紙寰呭彇璐х姸鎬佹椂杩斿洖锛�")
+    private String driverVerifyCode;
 
     @ApiModelProperty(value = "瀵艰埅绾害锛坰tatus=2瀛樹欢闂ㄥ簵绾害锛宻tatus=3/4鍙栦欢绾害锛�")
     private Double navigateLat;
@@ -123,6 +138,9 @@
 
         @ApiModelProperty(value = "鏁伴噺")
         private Integer quantity;
+
+        @ApiModelProperty(value = "鏄惁澶т欢鐗╁搧锛�0=鍚� 1=鏄�")
+        private Integer isOversized;
     }
 
 }
diff --git a/server/services/src/main/java/com/doumee/dao/vo/ShopDetailVO.java b/server/services/src/main/java/com/doumee/dao/vo/ShopDetailVO.java
index e9288d6..12f7721 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/ShopDetailVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/ShopDetailVO.java
@@ -169,4 +169,7 @@
 
     @ApiModelProperty(value = "缁戝畾寮�鎴蜂細鍛樺ご鍍�")
     private String payMemberCoverImage;
+
+    @ApiModelProperty(value = "闂ㄥ簵澶村儚锛堝叏璺緞锛�")
+    private String shopAvatar;
 }
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 9dc237e..b4cbc4c 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
@@ -4,6 +4,7 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.dto.DriverActiveOrderDTO;
 import com.doumee.dao.dto.DriverGrabOrderDTO;
+import com.doumee.dao.dto.DriverOrderPageDTO;
 import com.doumee.dao.business.model.DriverInfo;
 import com.doumee.dao.dto.DriverLoginRequest;
 import com.doumee.dao.dto.DriverDeliverDTO;
@@ -11,9 +12,10 @@
 import com.doumee.dao.dto.DriverRegisterRequest;
 import com.doumee.dao.dto.DriverVerifyRequest;
 import com.doumee.dao.vo.AccountResponse;
+import com.doumee.dao.vo.DriverActiveOrderCountVO;
+import com.doumee.dao.vo.DriverGrabOrderVO;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 鍙告満娉ㄥ唽淇℃伅Service瀹氫箟
@@ -269,8 +271,25 @@
      * 鑾峰彇鍙告満杩涜涓鍗曟暟閲�
      *
      * @param driverId 鍙告満涓婚敭
-     * @return [宸叉姠鍗曟暟閲�, 娲鹃�佷腑鏁伴噺]
+     * @return 杩涜涓鍗曟暟閲�
      */
-    Map<String, Integer> getActiveOrderCount(Integer driverId);
+    DriverActiveOrderCountVO getActiveOrderCount(Integer driverId);
+
+    /**
+     * 鍙告満璁㈠崟鍒嗛〉鏌ヨ
+     *
+     * @param driverId 鍙告満涓婚敭
+     * @param pageWrap 鍒嗛〉鍙傛暟锛坢odel.status: null=鍏ㄩ儴, 3=寰呭彇浠�, 4=閰嶉�佷腑, 7=宸插畬鎴愶級
+     * @return 鍒嗛〉缁撴灉
+     */
+    PageData<DriverGrabOrderVO> driverOrderPage(Integer driverId, PageWrap<DriverOrderPageDTO> pageWrap);
+
+    /**
+     * 鏌ヨ鍙告満浠婃棩鍙彇娑堟鏁�
+     *
+     * @param driverId 鍙告満涓婚敭
+     * @return DriverCancelLimitVO
+     */
+    com.doumee.dao.vo.DriverCancelLimitVO getTodayCancelLimit(Integer driverId);
 
 }
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 5bd7f52..98f0720 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
@@ -30,6 +30,8 @@
 import com.doumee.dao.business.OrderLogMapper;
 import com.doumee.dao.dto.*;
 import com.doumee.dao.vo.AccountResponse;
+import com.doumee.dao.vo.DriverActiveOrderCountVO;
+import com.doumee.dao.vo.DriverCancelLimitVO;
 import com.doumee.dao.vo.DriverCenterVO;
 import com.doumee.dao.vo.DriverGrabOrderVO;
 import com.doumee.dao.vo.DriverOrderDetailVO;
@@ -48,6 +50,7 @@
 import org.springframework.util.CollectionUtils;
 
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -845,7 +848,7 @@
         Long todayOrderCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
                 .eq(Orders::getAcceptDriver, driver.getId())
                 .eq(Orders::getDeleted, Constants.ZERO)
-                .ge(Orders::getFinishTime, todayStart));
+                .ge(Orders::getAcceptTime, todayStart));
         vo.setTodayOrderCount(todayOrderCount.intValue());
 
         // 寰呭彇璐э紙宸叉帴鍗�=3锛�
@@ -945,10 +948,8 @@
             goodTypeIds = cats.stream().map(Category::getId).collect(Collectors.toList());
         }
 
-        // 3. Haversine SQL鍏紡锛氬徃鏈哄埌瀛樹欢闂ㄥ簵璺濈(km)锛屼娇鐢∣rders鑷甫鍧愭爣
-        String depositDist = "(6371 * acos(cos(radians(" + driverLat + ")) * cos(radians(t.DEPOSIT_LGT)) "
-                + "* cos(radians(t.DEPOSIT_LAT) - radians(" + driverLng + ")) "
-                + "+ sin(radians(" + driverLat + ")) * sin(radians(t.DEPOSIT_LGT))))";
+        // 3. ST_Distance_Sphere璁$畻鍙告満鍒板瓨浠堕棬搴楄窛绂�(km)锛屼娇鐢∣rders鑷甫鍧愭爣
+        String depositDist = "(ST_Distance_Sphere(POINT(" + driverLng + ", " + driverLat + "), POINT(t.DEPOSIT_LGT, t.DEPOSIT_LAT)) / 1000)";
 
         // 4. 鏋勯�燤PJ鏌ヨ
         IPage<Orders> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
@@ -963,6 +964,9 @@
                 .select("s2.link_phone as takeShopLinkPhone")
                 // 鐗╁搧绛夌骇璐甸噸鏍囪瘑
                 .select("c2.other_field as c2OtherField")
+                .select("c2.name as goodLevelName")
+                // 鏄惁瀛樺湪鐗瑰ぇ灏哄
+                .select("IF(EXISTS(SELECT 1 FROM orders_detail od JOIN category c3 ON c3.id = od.LUGGAGE_ID AND c3.TYPE = 4 AND c3.OTHER_FIELD = '1' WHERE od.ORDER_ID = t.ID AND od.DELETED = 0), 1, 0) as hasOversized")
                 // JOIN
                 .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID and s1.DELETED = 0")
                 .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID and s2.DELETED = 0")
@@ -1062,13 +1066,15 @@
                 .select("s2.address", Orders::getTakeShopAddress)
                 .select("s2.link_phone as takeShopLinkPhone")
                 .select("c2.other_field as c2OtherField")
+                .select("c2.name as goodLevelName")
+                .select("IF(EXISTS(SELECT 1 FROM orders_detail od JOIN category c3 ON c3.id = od.LUGGAGE_ID AND c3.TYPE = 4 AND c3.OTHER_FIELD = '1' WHERE od.ORDER_ID = t.ID AND od.DELETED = 0), 1, 0) as hasOversized")
                 .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID and s1.DELETED = 0")
                 .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID and s2.DELETED = 0")
                 .leftJoin("category c1 on c1.id = t.GOOD_TYPE and c1.DELETED = 0")
                 .leftJoin("category c2 on c2.id = c1.RELATION_ID and c2.DELETED = 0 and c2.TYPE = 3")
                 .eq(Orders::getAcceptDriver, driver.getId())
                 .eq(Orders::getType, Constants.ONE)
-                .eq(Orders::getStatus, dto.getStatus())
+                .eq(Objects.nonNull(dto.getStatus()),Orders::getStatus, dto.getStatus())
                 .eq(Orders::getDeleted, Constants.ZERO)
                 .orderByAsc(Orders::getAcceptTime);
 
@@ -1107,6 +1113,7 @@
                 .select("s2.address", Orders::getTakeShopAddress)
                 .select("s2.link_phone as takeShopLinkPhone")
                 .select("c2.other_field as c2OtherField")
+                .select("IF(EXISTS(SELECT 1 FROM orders_detail od JOIN category c3 ON c3.id = od.LUGGAGE_ID AND c3.TYPE = 4 AND c3.OTHER_FIELD = '1' WHERE od.ORDER_ID = t.ID AND od.DELETED = 0), 1, 0) as hasOversized")
                 .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID and s1.DELETED = 0")
                 .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID and s2.DELETED = 0")
                 .leftJoin("category c1 on c1.id = t.GOOD_TYPE and c1.DELETED = 0")
@@ -1164,11 +1171,17 @@
         vo.setDepositShopAddress(base.getDepositShopAddress());
         vo.setDepositDistance(base.getDepositDistance());
         vo.setTakeName(base.getTakeName());
+        vo.setTakeAddress(base.getTakeAddress());
+        vo.setTakeShopId(base.getTakeShopId());
+
         vo.setTakeDistance(base.getTakeDistance());
         vo.setContactPhone(base.getContactPhone());
         vo.setDriverFee(base.getDriverFee());
         vo.setUrgentAmount(base.getUrgentAmount());
         vo.setIsValuable(base.getIsValuable());
+        vo.setGoodLevelName(base.getGoodLevelName());
+        vo.setHasOversized(base.getHasOversized());
+        vo.setDriverVerifyCode(base.getDriverVerifyCode());
 
         // 鐗╁搧鏄庣粏锛堣浆鎹㈢被鍨嬶級
         List<DriverOrderDetailVO.OrderItem> detailItems = new ArrayList<>();
@@ -1177,6 +1190,7 @@
                 DriverOrderDetailVO.OrderItem item = new DriverOrderDetailVO.OrderItem();
                 item.setName(src.getName());
                 item.setQuantity(src.getQuantity());
+                item.setIsOversized(src.getIsOversized());
                 detailItems.add(item);
             }
         }
@@ -1380,11 +1394,13 @@
 
         // 5. 鍘熷瓙鏇存柊锛氬甫 status=2 鏉′欢闃叉骞跺彂閲嶅鎶㈠崟
         Date now = new Date();
+        String driverVerifyCode = generateVerifyCode();
         int rows = ordersMapper.update(new UpdateWrapper<Orders>().lambda()
                 .set(Orders::getAcceptDriver, driverId)
                 .set(Orders::getAcceptTime, now)
                 .set(Orders::getAcceptType, 0) // 0=鎵嬪姩鎶㈠崟
                 .set(Orders::getStatus, Constants.OrderStatus.accepted.getStatus())
+                .set(Orders::getDriverVerifyCode, driverVerifyCode)
                 .set(Orders::getUpdateTime, now)
                 .eq(Orders::getId, orderId)
                 .eq(Orders::getStatus, Constants.TWO));
@@ -1486,6 +1502,7 @@
         log.setOptUserId(driver.getMemberId());
         log.setOptUserType(Constants.ONE);
         log.setOrderStatus(Constants.OrderStatus.delivering.getStatus());
+        log.setRemark(dto.getRemark());
         log.setCreateTime(now);
         log.setDeleted(Constants.ZERO);
         orderLogMapper.insert(log);
@@ -1636,6 +1653,22 @@
         return String.format("%.1fkm", km);
     }
 
+    /**
+     * 鐢熸垚6浣嶆暟瀛楁牳閿�鐮侊紙Redis SETNX 淇濊瘉鍞竴锛�
+     */
+    private String generateVerifyCode() {
+        Random random = new Random();
+        String redisKey = Constants.REDIS_VERIFY_CODE_KEY;
+        for (int i = 0; i < 200; i++) {
+            String code = String.format("%06d", random.nextInt(1000000));
+            Boolean success = redisTemplate.opsForValue().setIfAbsent(redisKey + code, "1", 24, TimeUnit.HOURS);
+            if (success != null && success) {
+                return code;
+            }
+        }
+        throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏍搁攢鐮佺敓鎴愬け璐ワ紝璇烽噸璇�");
+    }
+
     private double haversine(double lat1, double lng1, double lat2, double lng2) {
         double R = 6371;
         double dLat = Math.toRadians(lat2 - lat1);
@@ -1697,9 +1730,12 @@
         boolean hasTakeShop = order.getTakeShopId() != null && StringUtils.isNotBlank(order.getTakeShopName());
         if (hasTakeShop) {
             vo.setTakeName(order.getTakeShopName());
+            vo.setTakeAddress(order.getTakeShopAddress());
+            vo.setTakeShopId(order.getTakeShopId());
             vo.setContactPhone(order.getTakeShopLinkPhone());
         } else {
             vo.setTakeName(order.getTakeLocation());
+            vo.setTakeAddress(order.getTakeLocationRemark());
             vo.setContactPhone(order.getTakePhone());
         }
         if (driverLat != null && driverLng != null
@@ -1711,14 +1747,36 @@
 
         // 璐甸噸鐗╁搧
         vo.setIsValuable("1".equals(order.getC2OtherField()));
+        vo.setGoodLevelName(order.getGoodLevelName());
+        vo.setHasOversized(order.getHasOversized());
+
+        // 寰呭彇璐х姸鎬�(status=3)杩斿洖鍙告満鍙栬揣鐮�
+        if (Constants.equalsInteger(order.getStatus(), Constants.THREE)||Constants.equalsInteger(order.getStatus(), Constants.FOUR)) {
+            vo.setDriverVerifyCode(order.getDriverVerifyCode());
+        }
 
         // 鐗╁搧鏄庣粏
         List<OrdersDetail> details = detailMap.getOrDefault(order.getId(), Collections.emptyList());
+        // 鎵归噺鏌ヨ娑夊強鍒扮殑 luggageId 瀵瑰簲鐨� category锛屽垽鏂槸鍚﹀ぇ浠�
+        Set<Integer> luggageIds = details.stream()
+                .map(OrdersDetail::getLuggageId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+        Set<Integer> oversizedIds = new HashSet<>();
+        if (!luggageIds.isEmpty()) {
+            categoryMapper.selectList(new QueryWrapper<Category>().lambda()
+                    .in(Category::getId, luggageIds)
+                    .eq(Category::getType, Constants.FOUR)
+                    .eq(Category::getOtherField, "1")
+                    .eq(Category::getDeleted, Constants.ZERO))
+                    .forEach(c -> oversizedIds.add(c.getId()));
+        }
         List<DriverGrabOrderVO.OrderItem> items = new ArrayList<>();
         for (OrdersDetail detail : details) {
             DriverGrabOrderVO.OrderItem item = new DriverGrabOrderVO.OrderItem();
             item.setName(detail.getLuggageName());
             item.setQuantity(detail.getNum());
+            item.setIsOversized(oversizedIds.contains(detail.getLuggageId()) ? Constants.ONE : Constants.ZERO);
             items.add(item);
         }
         vo.setItems(items);
@@ -1804,7 +1862,7 @@
     }
 
     @Override
-    public Map<String, Integer> getActiveOrderCount(Integer driverId) {
+    public DriverActiveOrderCountVO getActiveOrderCount(Integer driverId) {
         // 宸叉姠鍗�(status=3)鏁伴噺
         Long grabbed = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
                 .eq(Orders::getAcceptDriver, driverId)
@@ -1815,10 +1873,121 @@
                 .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;
+        DriverActiveOrderCountVO vo = new DriverActiveOrderCountVO();
+        vo.setGrabbedCount(grabbed != null ? grabbed.intValue() : 0);
+        vo.setDeliveringCount(delivering != null ? delivering.intValue() : 0);
+        return vo;
+    }
+
+    @Override
+    public PageData<DriverGrabOrderVO> driverOrderPage(Integer driverId, PageWrap<DriverOrderPageDTO> pageWrap) {
+        DriverInfo driver = driverInfoMapper.selectById(driverId);
+        if (driver == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
+        }
+
+        DriverOrderPageDTO model = pageWrap.getModel();
+        Integer status = model != null ? model.getStatus() : null;
+
+        // 鍚堟硶鐘舵�佹牎楠�
+        List<Integer> validStatuses = Arrays.asList(
+                Constants.OrderStatus.accepted.getStatus(),
+                Constants.OrderStatus.delivering.getStatus(),
+                Constants.OrderStatus.finished.getStatus());
+        if (status != null && !validStatuses.contains(status)) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鐘舵�佸彧鑳戒负3(寰呭彇浠�)銆�4(閰嶉�佷腑)銆�7(宸插畬鎴�)");
+        }
+
+        IPage<Orders> p = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        MPJLambdaWrapper<Orders> wrapper = new MPJLambdaWrapper<>();
+        wrapper.selectAll(Orders.class)
+                .select("s1.name", Orders::getDepositShopName)
+                .select("s1.address", Orders::getDepositShopAddress)
+                .select("s2.name", Orders::getTakeShopName)
+                .select("s2.address", Orders::getTakeShopAddress)
+                .select("s2.link_phone as takeShopLinkPhone")
+                .select("c2.other_field as c2OtherField")
+                .select("c2.name as goodLevelName")
+                .select("IF(EXISTS(SELECT 1 FROM orders_detail od JOIN category c3 ON c3.id = od.LUGGAGE_ID AND c3.TYPE = 4 AND c3.OTHER_FIELD = '1' WHERE od.ORDER_ID = t.ID AND od.DELETED = 0), 1, 0) as hasOversized")
+                .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID and s1.DELETED = 0")
+                .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID and s2.DELETED = 0")
+                .leftJoin("category c1 on c1.id = t.GOOD_TYPE and c1.DELETED = 0")
+                .leftJoin("category c2 on c2.id = c1.RELATION_ID and c2.DELETED = 0 and c2.TYPE = 3")
+                .eq(Orders::getAcceptDriver, driverId)
+                .in(status == null, Orders::getStatus, validStatuses)
+                .eq(status != null, Orders::getStatus, status)
+                .eq(Orders::getDeleted, Constants.ZERO)
+                .orderByDesc(Orders::getAcceptTime);
+
+        IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper);
+
+        List<DriverGrabOrderVO> voList = new ArrayList<>();
+        if (orderPage != null && orderPage.getRecords() != null) {
+            // 鎵归噺鏌ョ墿鍝佹槑缁�
+            List<Integer> orderIds = orderPage.getRecords().stream().map(Orders::getId).collect(Collectors.toList());
+            Map<Integer, List<OrdersDetail>> detailMap = new HashMap<>();
+            if (!orderIds.isEmpty()) {
+                List<OrdersDetail> allDetails = ordersDetailMapper.selectList(
+                        new QueryWrapper<OrdersDetail>().lambda()
+                                .in(OrdersDetail::getOrderId, orderIds));
+                for (OrdersDetail d : allDetails) {
+                    detailMap.computeIfAbsent(d.getOrderId(), k -> new ArrayList<>()).add(d);
+                }
+            }
+
+            Double driverLat = driver.getLatitude();
+            Double driverLng = driver.getLongitude();
+            Date now = new Date();
+            for (Orders order : orderPage.getRecords()) {
+                boolean needDepositDist = Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.accepted.getStatus());
+                voList.add(buildDriverOrderVO(order, driverLat, driverLng, needDepositDist, now, detailMap));
+            }
+        }
+
+        IPage<DriverGrabOrderVO> vPage = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        PageData<DriverGrabOrderVO> pageData = PageData.from(vPage);
+        pageData.setRecords(voList);
+        if (orderPage != null) {
+            pageData.setTotal(orderPage.getTotal());
+            pageData.setPage(orderPage.getCurrent());
+            pageData.setCapacity(orderPage.getSize());
+        }
+        return pageData;
+    }
+
+    @Override
+    public DriverCancelLimitVO getTodayCancelLimit(Integer driverId) {
+        DriverInfo driver = driverInfoMapper.selectById(driverId);
+        if (driver == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
+        }
+
+        // 姣忔棩鍙栨秷涓婇檺
+        String limitStr = operationConfigBiz.getConfig().getDriverDailyCancelLimit();
+        int limit = 3;
+        if (StringUtils.isNotBlank(limitStr)) {
+            try { limit = Integer.parseInt(limitStr); } catch (NumberFormatException ignored) {}
+        }
+
+        // 浠婃棩宸插彇娑堟鏁�
+        Calendar cal = Calendar.getInstance();
+        cal.set(Calendar.HOUR_OF_DAY, 0);
+        cal.set(Calendar.MINUTE, 0);
+        cal.set(Calendar.SECOND, 0);
+        cal.set(Calendar.MILLISECOND, 0);
+        Date todayStart = cal.getTime();
+        Long todayCancelCount = orderLogMapper.selectCount(new QueryWrapper<OrderLog>().lambda()
+                .eq(OrderLog::getOptUserId, driver.getMemberId())
+                .eq(OrderLog::getObjType, Constants.OrderLogType.driverCancel.getStatus())
+                .eq(OrderLog::getOptUserType, Constants.ONE)
+                .ge(OrderLog::getCreateTime, todayStart));
+        int used = todayCancelCount != null ? todayCancelCount.intValue() : 0;
+
+        DriverCancelLimitVO vo = new DriverCancelLimitVO();
+        vo.setLimit(limit);
+        vo.setUsed(used);
+        vo.setRemain(Math.max(limit - used, 0));
+        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 888e25a..6198ee9 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
@@ -1526,7 +1526,7 @@
 
         wrapper.eq(status != null, Orders::getStatus, status)
                 .in(statusList != null && !Constants.equalsInteger(combinedStatus, Constants.SEVEN), Orders::getStatus, statusList)
-                .orderByDesc(Orders::getCreateTime);
+                .orderByDesc(Orders::getId);
 
         IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper);
         List<MyOrderVO> voList = new ArrayList<>();
@@ -1950,7 +1950,8 @@
                     .set(Orders::getTakeLocation, order.getDepositLocation())
                     .set(Orders::getTakeLocationRemark, order.getDepositLocationRemark())
                     .set(Orders::getTakeLat, order.getDepositLat())
-                    .set(Orders::getTakeLgt, order.getDepositLgt());
+                    .set(Orders::getTakeLgt, order.getDepositLgt())
+                    .set(Orders::getExpectedTakeTime, new Date());
             if (Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) {
                 updateWrapper.lambda()
                         .set(Orders::getAcceptDriver, null)
@@ -2665,7 +2666,7 @@
             if (!shopId.equals(order.getDepositShopId())) {
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曚笉灞炰簬褰撳墠闂ㄥ簵锛屾棤娉曟牳閿�");
             }
-            order.setStatus(Constants.OrderStatus.deposited.getStatus());
+            order.setStatus(Constants.equalsInteger(order.getType(),Constants.ZERO)?Constants.OrderStatus.arrived.getStatus():Constants.OrderStatus.deposited.getStatus());
             order.setDepositTime(now);
             // 閲婃斁褰撳墠鏍搁攢鐮侊紝鐢熸垚鏂扮殑鏍搁攢鐮佷緵鍙栦欢鏃朵娇鐢�
             String verifyCode = order.getMemberVerifyCode();
@@ -3544,26 +3545,20 @@
 
     /**
      * 灏卞湴瀵勫瓨閫炬湡澶╂暟璁$畻
-     * 杩囦簡棰勮鍙栦欢鏃堕棿褰撳ぉ鐨�24:00锛堟鏃�00:00锛夊悗鎵嶇畻绗竴澶�
+     * 杩囦簡棰勮鍙栦欢鏃ユ湡鐨勬鏃ワ紙鍙瘮杈冨勾鏈堟棩锛夊悗寮�濮嬭閫炬湡澶╂暟
      */
     private int calcLocalOverdueDays(Date now, Date expectedTakeTime) {
-        if (expectedTakeTime == null || !now.after(expectedTakeTime)) {
+        if (expectedTakeTime == null) {
             return 0;
         }
-        // 鍩哄噯鏃堕棿 = 棰勮鍙栦欢鏃ユ湡鐨勬鏃� 00:00锛堝嵆褰撳ぉ24:00锛�
+        // 鍙彇骞存湀鏃�
         Calendar baseCal = Calendar.getInstance();
         baseCal.setTime(expectedTakeTime);
         baseCal.set(Calendar.HOUR_OF_DAY, 0);
         baseCal.set(Calendar.MINUTE, 0);
         baseCal.set(Calendar.SECOND, 0);
         baseCal.set(Calendar.MILLISECOND, 0);
-        baseCal.add(Calendar.DAY_OF_MONTH, 1); // 娆℃棩00:00 = 褰撳ぉ24:00
-        Date baseTime = baseCal.getTime();
 
-        if (!now.after(baseTime)) {
-            return 0;
-        }
-        // 閫炬湡澶╂暟 = 褰撳墠鏃ユ湡 - 鍩哄噯鏃ユ湡锛堟寜澶╁彇宸級
         Calendar nowCal = Calendar.getInstance();
         nowCal.setTime(now);
         nowCal.set(Calendar.HOUR_OF_DAY, 0);
@@ -3571,40 +3566,31 @@
         nowCal.set(Calendar.SECOND, 0);
         nowCal.set(Calendar.MILLISECOND, 0);
 
-        Calendar baseDateCal = Calendar.getInstance();
-        baseDateCal.setTime(baseTime);
-        baseDateCal.set(Calendar.HOUR_OF_DAY, 0);
-        baseDateCal.set(Calendar.MINUTE, 0);
-        baseDateCal.set(Calendar.SECOND, 0);
-        baseDateCal.set(Calendar.MILLISECOND, 0);
-
-        long diffMs = nowCal.getTimeInMillis() - baseDateCal.getTimeInMillis();
-        int days = (int) (diffMs / (1000 * 60 * 60 * 24));
-        return Math.max(days, 0);
+        // 鍩哄噯鏃ユ湡 = 棰勮鍙栦欢鏃ユ湡鐨勬鏃ワ紝褰撳ぉ鍙婁箣鍓嶄笉绠楅�炬湡
+        if (nowCal.before(baseCal)) {
+            return 0;
+        }
+        // 閫炬湡澶╂暟 = 褰撳墠鏃ユ湡 - 鍩哄噯鏃ユ湡
+        long diffMs = nowCal.getTimeInMillis() - baseCal.getTimeInMillis();
+        return (int) (diffMs / (1000 * 60 * 60 * 24));
     }
 
     /**
      * 寮傚湴瀵勫瓨閫炬湡澶╂暟璁$畻
-     * 杩囦簡杞Щ鍒板簵鏃堕棿褰撳ぉ鐨勬櫄涓�12鐐癸紙24:00锛夊悗鎵嶇畻绗竴澶�
+     * 杩囦簡杞Щ鍒板簵鏃ユ湡鐨勬鏃ワ紙鍙瘮杈冨勾鏈堟棩锛夊悗寮�濮嬭閫炬湡澶╂暟
      */
     private int calcRemoteOverdueDays(Date now, Date arriveTime) {
-        if (arriveTime == null || !now.after(arriveTime)) {
+        if (arriveTime == null) {
             return 0;
         }
-        // 鍩哄噯鏃堕棿 = 杞Щ鍒板簵鏃ユ湡鐨勬鏃� 00:00锛堝嵆褰撳ぉ24:00锛�
+        // 鍙彇骞存湀鏃�
         Calendar baseCal = Calendar.getInstance();
         baseCal.setTime(arriveTime);
         baseCal.set(Calendar.HOUR_OF_DAY, 0);
         baseCal.set(Calendar.MINUTE, 0);
         baseCal.set(Calendar.SECOND, 0);
         baseCal.set(Calendar.MILLISECOND, 0);
-        baseCal.add(Calendar.DAY_OF_MONTH, 1); // 娆℃棩00:00 = 褰撳ぉ24:00
-        Date baseTime = baseCal.getTime();
 
-        if (!now.after(baseTime)) {
-            return 0;
-        }
-        // 閫炬湡澶╂暟 = 褰撳墠鏃ユ湡 - 鍩哄噯鏃ユ湡
         Calendar nowCal = Calendar.getInstance();
         nowCal.setTime(now);
         nowCal.set(Calendar.HOUR_OF_DAY, 0);
@@ -3612,16 +3598,14 @@
         nowCal.set(Calendar.SECOND, 0);
         nowCal.set(Calendar.MILLISECOND, 0);
 
-        Calendar baseDateCal = Calendar.getInstance();
-        baseDateCal.setTime(baseTime);
-        baseDateCal.set(Calendar.HOUR_OF_DAY, 0);
-        baseDateCal.set(Calendar.MINUTE, 0);
-        baseDateCal.set(Calendar.SECOND, 0);
-        baseDateCal.set(Calendar.MILLISECOND, 0);
-
-        long diffMs = nowCal.getTimeInMillis() - baseDateCal.getTimeInMillis();
-        int days = (int) (diffMs / (1000 * 60 * 60 * 24));
-        return Math.max(days, 0);
+        // 鍩哄噯鏃ユ湡 = 鍒板簵鏃ユ湡鐨勬鏃ワ紝褰撳ぉ鍙婁箣鍓嶄笉绠楅�炬湡
+        baseCal.add(Calendar.DAY_OF_MONTH, 1);
+        if (nowCal.before(baseCal)) {
+            return 0;
+        }
+        // 閫炬湡澶╂暟 = 褰撳墠鏃ユ湡 - 鍩哄噯鏃ユ湡
+        long diffMs = nowCal.getTimeInMillis() - baseCal.getTimeInMillis();
+        return (int) (diffMs / (1000 * 60 * 60 * 24));
     }
 
     @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 9f7a9b3..ff79a7e 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
@@ -757,6 +757,13 @@
             }
         }
 
+        // 闂ㄥ簵澶村儚锛氫紭鍏堜娇鐢� coverImg锛屼负绌哄垯鍙栭棬澶寸収绗竴寮�
+        if (StringUtils.isNotBlank(shopInfo.getCoverImg())) {
+            vo.setShopAvatar(imgPrefix + shopInfo.getCoverImg());
+        } else if (!CollectionUtils.isEmpty(vo.getStoreFrontImgUrls())) {
+            vo.setShopAvatar(vo.getStoreFrontImgUrls().get(0));
+        }
+
         return vo;
     }
 
@@ -906,8 +913,8 @@
     }
 
     @Override
-    public ShopInfoMaintainDTO getShopMaintainInfo(Integer memberId) {
-        ShopInfo shop = shopInfoMapper.selectById(memberId);
+    public ShopInfoMaintainDTO getShopMaintainInfo(Integer shopId) {
+        ShopInfo shop = shopInfoMapper.selectById(shopId);
         if (Objects.isNull(shop) || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) {
             return null;
         }
@@ -919,6 +926,10 @@
         dto.setDeliveryArea(shop.getDeliveryArea());
         dto.setShopHours(shop.getShopHours());
         dto.setBusinessType(shop.getBusinessType());
+        // 澶村儚鍏ㄨ矾寰�
+        if (StringUtils.isNotBlank(shop.getCoverImg())) {
+            dto.setCoverImgUrl(getShopPrefix() + shop.getCoverImg());
+        }
         return dto;
     }
 
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 7fbe5b2..6f03647 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
@@ -12,10 +12,13 @@
 import com.doumee.dao.dto.DriverGrabOrderDTO;
 import com.doumee.dao.dto.DriverLoginRequest;
 import com.doumee.dao.dto.DriverDeliverDTO;
+import com.doumee.dao.dto.DriverOrderPageDTO;
 import com.doumee.dao.dto.DriverPickupDTO;
 import com.doumee.dao.dto.DriverRegisterRequest;
 import com.doumee.dao.dto.DriverVerifyRequest;
 import com.doumee.dao.vo.AccountResponse;
+import com.doumee.dao.vo.DriverActiveOrderCountVO;
+import com.doumee.dao.vo.DriverCancelLimitVO;
 import com.doumee.dao.vo.DriverCenterVO;
 import com.doumee.dao.vo.DriverGrabOrderVO;
 import com.doumee.dao.vo.DriverOrderDetailVO;
@@ -30,14 +33,13 @@
 
 import javax.validation.Valid;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 鍙告満楠岃瘉鐮佺櫥褰曟帴鍙�
  * @author rk
  * @date 2026/04/08
  */
-@Api(tags = "鍙告満楠岃瘉鐮佺櫥褰�")
+@Api(tags = "鍙告満涓氬姟鎺ュ彛")
 @Trace(exclude = true)
 @RestController
 @RequestMapping("/web/driverInfo")
@@ -158,7 +160,7 @@
     @LoginDriverRequired
     @Trace
     @ApiOperation(value = "鍙告満鎶㈠崟", notes = "瀵瑰凡瀵勫瓨(status=2)鐨勫紓鍦板瘎瀛樿鍗曞彂璧锋姠鍗�")
-    @PostMapping("/grabOrder")
+    @GetMapping("/grabOrder")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
             @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "orderId", value = "璁㈠崟涓婚敭", required = true)
@@ -248,8 +250,30 @@
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
     })
-    public ApiResponse<Map<String, Integer>> activeOrderCount() {
+    public ApiResponse<DriverActiveOrderCountVO> activeOrderCount() {
         return ApiResponse.success("鎿嶄綔鎴愬姛", driverInfoService.getActiveOrderCount(this.getDriverId()));
     }
 
+    @LoginDriverRequired
+    @Trace
+    @ApiOperation(value = "鍙告満璁㈠崟鍒嗛〉", notes = "鏌ヨ鍙告満鐨勫叏閮�/寰呭彇浠�/閰嶉�佷腑/宸插畬鎴愯鍗�")
+    @PostMapping("/orderPage")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+    })
+    public ApiResponse<PageData<DriverGrabOrderVO>> orderPage(@RequestBody PageWrap<DriverOrderPageDTO> pageWrap) {
+        return ApiResponse.success("鎿嶄綔鎴愬姛", driverInfoService.driverOrderPage(this.getDriverId(), pageWrap));
+    }
+
+    @LoginDriverRequired
+    @Trace
+    @ApiOperation(value = "浠婃棩鍙彇娑堟鏁�", notes = "杩斿洖鍙告満浠婃棩鍙栨秷娆℃暟涓婇檺銆佸凡鍙栨秷娆℃暟銆佸墿浣欏彲鍙栨秷娆℃暟")
+    @GetMapping("/cancelLimit")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+    })
+    public ApiResponse<DriverCancelLimitVO> cancelLimit() {
+        return ApiResponse.success("鎿嶄綔鎴愬姛", driverInfoService.getTodayCancelLimit(this.getDriverId()));
+    }
+
 }
diff --git a/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java b/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
index 43989ac..54eb454 100644
--- a/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
+++ b/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
@@ -22,6 +22,7 @@
 import com.wechat.pay.java.service.payments.model.Transaction;
 import com.wechat.pay.java.service.refund.model.RefundNotification;
 import com.wechat.pay.java.service.refund.model.Status;
+import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +37,7 @@
  * @Author : Rk
  * @create 2023/3/24 16:57
  */
+@Api(tags = "鏀粯鍥炶皟涓氬姟鎺ュ彛")
 @Slf4j
 @RestController
 @CrossOrigin
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 3fd37ab..a9fe8f5 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
@@ -33,7 +33,7 @@
  * @author rk
  * @date 2026/04/10
  */
-@Api(tags = "闂ㄥ簵鍏ラ┗")
+@Api(tags = "闂ㄥ簵涓氬姟鎺ュ彛")
 @RestController
 @RequestMapping("/web/shopInfo")
 public class ShopInfoApi extends ApiController {
@@ -60,6 +60,7 @@
         return ApiResponse.success(shopInfoService.getMyShop(this.getMemberId()));
     }
 
+
     @ApiOperation("闄勮繎闂ㄥ簵鍒嗛〉鍒楄〃")
     @PostMapping("/nearby")
     public ApiResponse<PageData<ShopNearbyVO>> nearby(@RequestBody @Validated PageWrap<ShopNearbyDTO> pageWrap) {
@@ -80,6 +81,16 @@
     })
     public ApiResponse<ShopCenterVO> getShopInfo() {
         return ApiResponse.success("鏌ヨ鎴愬姛", shopInfoService.getShopCenterInfo(getShopId()));
+    }
+
+    @LoginShopRequired
+    @ApiOperation("闂ㄥ簵绔煡璇㈤棬搴楄鎯�")
+    @GetMapping("/shopDetail")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true)
+    })
+    public ApiResponse<ShopDetailVO> shopDetail() {
+        return ApiResponse.success("鏌ヨ鎴愬姛", shopInfoService.getShopDetail(getShopId()));
     }
 
     @LoginShopRequired
@@ -105,7 +116,7 @@
     @ApiOperation("鏌ヨ闂ㄥ簵缁存姢淇℃伅")
     @PostMapping("/maintainInfo")
     public ApiResponse<ShopInfoMaintainDTO> maintainInfo() {
-        return ApiResponse.success(shopInfoService.getShopMaintainInfo(this.getMemberId()));
+        return ApiResponse.success(shopInfoService.getShopMaintainInfo(this.getShopId()));
     }
 
     @LoginRequired

--
Gitblit v1.9.3