From 7eebfc8a64d2cbbd73453a2b653d5a5bfd66a32f Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期四, 16 四月 2026 20:10:44 +0800
Subject: [PATCH] 代码生成

---
 server/services/src/main/java/com/doumee/dao/business/MemberMapper.java                         |   11 
 server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java                       |    6 
 server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java       |    2 
 server/web/src/main/java/com/doumee/api/web/PaymentCallback.java                                |    4 
 server/services/src/main/java/com/doumee/service/business/ShopInfoService.java                  |    8 
 server/web/src/main/java/com/doumee/api/web/ConfigApi.java                                      |    7 
 server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java                     |   10 
 server/services/src/main/java/com/doumee/core/constants/Constants.java                          |   18 
 server/web/src/main/java/com/doumee/api/web/MemberApi.java                                      |    2 
 server/services/src/main/java/com/doumee/service/business/WithdrawalOrdersService.java          |   17 
 server/services/src/main/java/com/doumee/service/business/MemberService.java                    |    5 
 server/services/src/main/java/com/doumee/service/business/OrdersService.java                    |  107 ++
 server/admin/src/main/java/com/doumee/api/business/OrdersController.java                        |    8 
 server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java |  167 ++++
 server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java         |  174 ++++
 server/services/src/main/java/com/doumee/api/common/PublicCloudController.java                  |   20 
 server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java                   |    2 
 server/web/src/main/java/com/doumee/api/web/AccountApi.java                                     |    1 
 server/web/src/main/java/com/doumee/api/web/ShopInfoApi.java                                    |   28 
 server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java                           |   34 
 server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java           |    2 
 server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java         |    6 
 /dev/null                                                                                       |  470 -----------
 server/services/src/main/java/com/doumee/dao/vo/MyOrderVO.java                                  |    5 
 server/web/src/main/java/com/doumee/api/web/OrdersApi.java                                      |   69 +
 server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java          |   87 ++
 server/services/src/main/java/com/doumee/service/business/RevenueService.java                   |   17 
 server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java                             |   16 
 server/services/db/db_change.sql                                                                |   60 +
 server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java                               |   44 
 server/services/src/main/java/com/doumee/dao/business/model/Orders.java                         |    6 
 server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java           |  113 +-
 server/services/src/main/java/com/doumee/dao/dto/ShopApplyDTO.java                              |    4 
 server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java           |  827 ++++++++++++++++++++
 34 files changed, 1,678 insertions(+), 679 deletions(-)

diff --git a/server/admin/src/main/java/com/doumee/api/business/IdentityInfoController.java b/server/admin/src/main/java/com/doumee/api/business/IdentityInfoController.java
deleted file mode 100644
index 283fc47..0000000
--- a/server/admin/src/main/java/com/doumee/api/business/IdentityInfoController.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.doumee.api.business;
-
-import com.doumee.api.BaseController;
-import com.doumee.core.annotation.excel.ExcelExporter;
-import com.doumee.core.annotation.pr.PreventRepeat;
-import com.doumee.core.model.ApiResponse;
-import com.doumee.core.model.PageData;
-import com.doumee.core.model.PageWrap;
-import com.doumee.dao.business.model.IdentityInfo;
-import com.doumee.dao.dto.AuditDTO;
-import com.doumee.service.business.IdentityInfoService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author 姹熻箘韫�
- * @date 2025/07/09 12:00
- */
-@Api(tags = "浼氬憳韬唤璁よ瘉淇℃伅琛�")
-@RestController
-@RequestMapping("/business/identityInfo")
-public class IdentityInfoController extends BaseController {
-
-    @Autowired
-    private IdentityInfoService identityInfoService;
-
-    @PreventRepeat
-    @ApiOperation("鏂板缓")
-    @PostMapping("/create")
-    @RequiresPermissions("business:identityinfo:create")
-    public ApiResponse create(@RequestBody IdentityInfo identityInfo) {
-        return ApiResponse.success(identityInfoService.create(identityInfo));
-    }
-
-    @ApiOperation("鏍规嵁ID鍒犻櫎")
-    @GetMapping("/delete/{id}")
-    @RequiresPermissions("business:identityinfo:delete")
-    public ApiResponse deleteById(@PathVariable Integer id) {
-        identityInfoService.deleteById(id);
-        return ApiResponse.success(null);
-    }
-
-    @ApiOperation("鎵归噺鍒犻櫎")
-    @GetMapping("/delete/batch")
-    @RequiresPermissions("business:identityinfo:delete")
-    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
-        String [] idArray = ids.split(",");
-        List<Integer> idList = new ArrayList<>();
-        for (String id : idArray) {
-            idList.add(Integer.valueOf(id));
-        }
-        identityInfoService.deleteByIdInBatch(idList);
-        return ApiResponse.success(null);
-    }
-
-    @ApiOperation("鏍规嵁ID淇敼")
-    @PostMapping("/updateById")
-    @RequiresPermissions("business:identityinfo:update")
-    public ApiResponse updateById(@RequestBody IdentityInfo identityInfo) {
-        identityInfoService.updateById(identityInfo);
-        return ApiResponse.success(null);
-    }
-
-    @ApiOperation("鍒嗛〉鏌ヨ")
-    @PostMapping("/page")
-    @RequiresPermissions("business:identityinfo:query")
-    public ApiResponse<PageData<IdentityInfo>> findPage (@RequestBody PageWrap<IdentityInfo> pageWrap) {
-        return ApiResponse.success(identityInfoService.findPage(pageWrap));
-    }
-    @ApiOperation("鏌ヨ鐢ㄦ埛璁よ瘉闆嗗悎")
-    @PostMapping("/memberList")
-    @RequiresPermissions("business:identityinfo:query")
-    public ApiResponse<List<IdentityInfo>> findMemberList (@RequestBody IdentityInfo pageWrap) {
-        return ApiResponse.success(identityInfoService.findMemberList(pageWrap));
-    }
-
-    @ApiOperation("瀵煎嚭Excel")
-    @PostMapping("/exportExcel")
-    @RequiresPermissions("business:identityinfo:exportExcel")
-    public void exportExcel (@RequestBody PageWrap<IdentityInfo> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(IdentityInfo.class).export(identityInfoService.findPage(pageWrap).getRecords(), "浼氬憳韬唤璁よ瘉淇℃伅琛�", response);
-    }
-
-    @ApiOperation("鏍规嵁ID鏌ヨ")
-    @GetMapping("/{id}")
-    @RequiresPermissions("business:identityinfo:query")
-    public ApiResponse findById(@PathVariable Integer id) {
-        return ApiResponse.success(identityInfoService.findById(id));
-    }
-
-    @ApiOperation("瀹℃壒")
-    @PostMapping("/audit")
-    @RequiresPermissions("business:identityinfo:audit")
-    public ApiResponse audit(@RequestBody AuditDTO auditDTO) {
-        identityInfoService.audit(auditDTO);
-        return ApiResponse.success("鎿嶄綔鎴愬姛");
-    }
-
-
-}
diff --git a/server/admin/src/main/java/com/doumee/api/business/OrdersController.java b/server/admin/src/main/java/com/doumee/api/business/OrdersController.java
index 5a7f66b..fa16c18 100644
--- a/server/admin/src/main/java/com/doumee/api/business/OrdersController.java
+++ b/server/admin/src/main/java/com/doumee/api/business/OrdersController.java
@@ -122,4 +122,12 @@
         return ApiResponse.success(null);
     }
 
+    @ApiOperation("鎵嬪姩瑙﹀彂璁㈠崟缁撶畻")
+    @PostMapping("/settle")
+    @RequiresPermissions("business:orders:update")
+    public ApiResponse settleOrders() {
+        ordersService.settleOrders();
+        return ApiResponse.success("缁撶畻瀹屾垚");
+    }
+
 }
diff --git a/server/services/db/db_change.sql b/server/services/db/db_change.sql
index dacb433..eab5b91 100644
--- a/server/services/db/db_change.sql
+++ b/server/services/db/db_change.sql
@@ -5,6 +5,66 @@
 
 
 -- ============================================================
+-- 2026/04/16 璁㈠崟缁撶畻鍔熻兘锛氱粨绠楁椂闂村瓧娈� + 闂ㄥ簵/鍙告満浣欓瀛楁
+-- ============================================================
+ALTER TABLE `orders` ADD COLUMN `SETTLEMENT_TIME` DATETIME DEFAULT NULL COMMENT '缁撶畻鏃堕棿' AFTER `SETTLEMENT_STATUS`;
+
+ALTER TABLE `shop_info` ADD COLUMN `BALANCE` BIGINT DEFAULT 0 COMMENT '褰撳墠浣欓(鍒�)' AFTER `DELIVERY_AREA`;
+ALTER TABLE `shop_info` ADD COLUMN `TOTAL_BALANCE` BIGINT DEFAULT 0 COMMENT '鍘嗗彶鎬婚噾棰�(鍒�)' AFTER `BALANCE`;
+
+ALTER TABLE `driver_info` ADD COLUMN `BALANCE` BIGINT DEFAULT 0 COMMENT '褰撳墠浣欓(鍒�)' AFTER `SCORE`;
+ALTER TABLE `driver_info` ADD COLUMN `TOTAL_BALANCE` BIGINT DEFAULT 0 COMMENT '鍘嗗彶鎬婚噾棰�(鍒�)' AFTER `BALANCE`;
+
+
+-- ============================================================
+-- 2026/04/16 鍙告満璇勫垎瀛楁 + 璁㈠崟璇勪环璁板綍琛�
+-- ============================================================
+ALTER TABLE `driver_info` ADD COLUMN `SCORE` DECIMAL(2,1) DEFAULT NULL COMMENT '鍙告満璇勫垎' AFTER `DRIVER_LEVEL`;
+
+CREATE TABLE `order_comment` (
+  `ID` INT NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
+  `DELETED` INT DEFAULT 0 COMMENT '鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�',
+  `CREATE_USER` INT DEFAULT NULL COMMENT '鍒涘缓浜虹紪鐮�',
+  `CREATE_TIME` DATETIME DEFAULT NULL COMMENT '鍒涘缓鏃堕棿',
+  `UPDATE_USER` INT DEFAULT NULL COMMENT '鏇存柊浜虹紪鐮�',
+  `UPDATE_TIME` DATETIME DEFAULT NULL COMMENT '鏇存柊鏃堕棿',
+  `REMARK` VARCHAR(500) DEFAULT NULL COMMENT '澶囨敞',
+  `ORDER_ID` INT NOT NULL COMMENT '鍏宠仈璁㈠崟涓婚敭',
+  `ORDER_CODE` VARCHAR(50) DEFAULT NULL COMMENT '璁㈠崟缂栧彿',
+  `MEMBER_ID` INT NOT NULL COMMENT '璇勪环浜�(浼氬憳)涓婚敭',
+  `TARGET_TYPE` INT NOT NULL COMMENT '璇勪环瀵硅薄绫诲瀷锛�1=瀛樹欢闂ㄥ簵锛�2=鍙栦欢闂ㄥ簵锛�3=鍙告満',
+  `TARGET_ID` INT NOT NULL COMMENT '璇勪环瀵硅薄涓婚敭(shop_info.id鎴杁river_info.id)',
+  `SCORE` INT NOT NULL COMMENT '璇勫垎1-5',
+  `CONTENT` VARCHAR(500) DEFAULT NULL COMMENT '璇勪环鍐呭',
+  PRIMARY KEY (`ID`)
+) COMMENT='璁㈠崟璇勪环璁板綍';
+
+
+-- ============================================================
+-- 2026/04/16 鏂板鍏朵粬璁㈠崟璁板綍琛�
+-- ============================================================
+CREATE TABLE `other_orders` (
+  `ID` int NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
+  `DELETED` tinyint DEFAULT NULL COMMENT '鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�',
+  `CREATE_USER` int DEFAULT NULL COMMENT '鍒涘缓浜虹紪鐮�',
+  `CREATE_TIME` datetime DEFAULT NULL COMMENT '鍒涘缓鏃堕棿',
+  `UPDATE_USER` int DEFAULT NULL COMMENT '鏇存柊浜虹紪鐮�',
+  `UPDATE_TIME` datetime DEFAULT NULL COMMENT '鏇存柊鏃堕棿',
+  `REMARK` varchar(2000) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '澶囨敞',
+  `TYPE` int DEFAULT NULL COMMENT '璁㈠崟绫诲瀷锛�0=搴楅摵鎶奸噾璁㈠崟;1=鍙告満鎶奸噾璁㈠崟;2=閫炬湡璐圭敤璁㈠崟;',
+  `OBJ_ID` int DEFAULT NULL COMMENT '鍏宠仈浼氬憳涓婚敭 搴楅摵銆佷細鍛�',
+  `PAY_ACCOUNT` bigint DEFAULT NULL COMMENT '瀹為檯鏀粯璐圭敤',
+  `PAY_STATUS` int DEFAULT NULL COMMENT '鏀粯鐘舵�侊細0=鏈敮浠�;1=宸叉敮浠�;',
+  `PAY_TIME` datetime DEFAULT NULL COMMENT '鏀粯鏃堕棿',
+  `CODE` varchar(20) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '璁㈠崟缂栧彿',
+  `WX_EXTERNAL_NO` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '寰俊骞冲彴浜ゆ槗璁㈠崟鍙�',
+  `ORDER_ID` int DEFAULT NULL COMMENT '鍏宠仈瀵勫瓨璁㈠崟涓婚敭',
+  `OUT_TRADE_NO` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '涓夋柟璁㈠崟鍙�',
+  PRIMARY KEY (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='鍏朵粬璁㈠崟璁板綍';
+
+
+-- ============================================================
 -- 2026/04/15 璁㈠崟琛ㄦ坊鍔犳牳閿�鐮佸瓧娈�
 -- ============================================================
 
diff --git a/server/services/src/main/java/com/doumee/api/common/PublicCloudController.java b/server/services/src/main/java/com/doumee/api/common/PublicCloudController.java
index f4addb1..c5608f0 100644
--- a/server/services/src/main/java/com/doumee/api/common/PublicCloudController.java
+++ b/server/services/src/main/java/com/doumee/api/common/PublicCloudController.java
@@ -4,8 +4,6 @@
 import com.alibaba.fastjson.JSONObject;
 import com.doumee.api.BaseController;
 import com.doumee.biz.system.SystemDictDataBiz;
-import com.doumee.config.annotation.EncryptionReq;
-import com.doumee.config.annotation.EncryptionResp;
 import com.doumee.core.annotation.trace.Trace;
 import com.doumee.core.constants.Constants;
 import com.doumee.core.constants.ResponseStatus;
@@ -13,12 +11,7 @@
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.FtpUtil;
-import com.doumee.core.utils.azure.AzureBlobUtil;
-import com.doumee.core.utils.huaweiOBS.ObsUtil;
-import com.doumee.core.utils.qiyeweixin.QywxUtil;
-import com.doumee.core.utils.qiyeweixin.model.response.QywxUploadMediaResponse;
-import com.doumee.dao.system.model.SystemDictData;
-import com.doumee.service.common.EmailService;
+import com.doumee.core.utils.aliyun.ALiYunUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -67,7 +60,7 @@
         if(Objects.isNull(folder)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐩爣鏂囦欢澶归敊璇�");
         }
-        String prefixPath = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode();
+        String prefixPath = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode();
         InputStream is = null;
         response.setCharacterEncoding("UTF-8");
         response.setContentType("text/html;charset=UTF-8");
@@ -90,10 +83,11 @@
                     String fName =  date+"/"+ UUID.randomUUID()+endType;
                     String fileName = folder+"/"+fName;
                     boolean r =false;
-                    ObsUtil obsUtil = new ObsUtil( systemDictDataBiz.queryByCode(Constants.HWY_OBS,Constants.HWY_OBS_ACCESSID).getCode(),
-                            systemDictDataBiz.queryByCode(Constants.HWY_OBS,Constants.HWY_OBS_ACCESSKEY).getCode(),
-                            systemDictDataBiz.queryByCode(Constants.HWY_OBS,Constants.HWY_OBS_ENDPOINT).getCode());
-                    r = obsUtil.uploadFile( systemDictDataBiz.queryByCode(Constants.HWY_OBS,Constants.HWY_OBS_BUCKET).getCode(),is,fileName);//涓婁紶
+
+                    ALiYunUtil obs = new ALiYunUtil(systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode(),systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_ID).getCode(),
+                            systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_KEY).getCode());
+
+                    r = obs.uploadOnlineObject(file.getInputStream(),systemDictDataBiz.queryByCode(Constants.OSS,Constants.BUCKETNAME).getCode(), fileName,null);
                     if(r){
                         context.put("success", true);
                         context.put("code", 200);
diff --git a/server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java b/server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java
index 7ade5c2..1200713 100644
--- a/server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java
+++ b/server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java
@@ -5,7 +5,6 @@
 import com.doumee.core.constants.Constants;
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.HttpsUtil;
-import com.doumee.dao.business.model.IdentityInfo;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.error.WxErrorException;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -29,38 +28,5 @@
 
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
-
-    /**
-     * 淇℃伅璁よ瘉
-     * @param openid
-     * @param identityInfo
-     * @throws WxErrorException
-     */
-    public  void  identityInfoMessage(String openid, IdentityInfo identityInfo){
-        try{
-
-            String accessToken = WxMiniConfig.wxMaService.getAccessToken();
-            log.info("寰俊灏忕▼搴�->寰俊娑堟伅閫氱煡 - 璁よ瘉淇℃伅  -> accessToken锛歿}",accessToken);
-            //杩欓噷绠�鍗曡捣瑙佹垜浠瘡娆¢兘鑾峰彇鏈�鏂扮殑access_token锛堟椂闂村紑鍙戜腑锛屽簲璇ュ湪access_token蹇繃鏈熸椂鍐嶉噸鏂拌幏鍙栵級
-            String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken;
-            //鎷兼帴鎺ㄩ�佺殑妯$増
-            WxMsgVO wxMsgVO = new WxMsgVO();
-            //鐢ㄦ埛鐨刼penid锛堣鍙戦�佺粰閭d釜鐢ㄦ埛锛�
-            wxMsgVO.setTouser(openid);
-            //璁㈤槄娑堟伅妯℃澘id
-            wxMsgVO.setTemplate_id("VJho7-lf-4_WZFfOzenDnX6sOhYBJWwkLExVjBB563U");
-            Map<String, TemplateData> m = new HashMap<>(4);
-            m.put("thing2", new TemplateData(Constants.equalsInteger(identityInfo.getType(),Constants.ZERO)?"鐢ㄥ伐璁よ瘉":Constants.equalsInteger(identityInfo.getType(),Constants.ONE)?"杩愯揣璁よ瘉":"渚涢璁よ瘉"));
-            m.put("phrase6", new TemplateData(Constants.equalsInteger(identityInfo.getAuditStatus(),Constants.TWO)?"閫氳繃":"鏈�氳繃"));
-            m.put("time12", new TemplateData(DateUtil.formatDate(identityInfo.getAuditTime(),"yyyy-MM-dd HH:mm")));
-            wxMsgVO.setPage(mineUrl);
-            wxMsgVO.setData(m);
-            log.error("寰俊灏忕▼搴�->寰俊娑堟伅閫氱煡 璁よ瘉淇℃伅锛歿}", JSONObject.toJSONString(wxMsgVO));
-            String responseEntity  = HttpsUtil.postJson(url,JSONObject.toJSONString(wxMsgVO));
-            log.error("寰俊灏忕▼搴�->寰俊娑堟伅閫氱煡 璁よ瘉淇℃伅锛歿}", JSONObject.toJSONString(responseEntity));
-        }catch (WxErrorException wxErrorException){
-
-        }
-    }
 
 }
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 d49123b..0409d47 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
@@ -18,11 +18,8 @@
  */
 public class Constants {
 
-    public static final String HWY_OBS ="HWY_OBS" ;
-    public static final String HWY_OBS_ACCESSID ="HWY_OBS_ACCESSID" ;
-    public static final String HWY_OBS_ACCESSKEY ="HWY_OBS_ACCESSKEY" ;
-    public static final String HWY_OBS_ENDPOINT ="HWY_OBS_ENDPOINT" ;
-    public static final String HWY_OBS_BUCKET ="HWY_OBS_BUCKET" ;
+    public static final String OSS ="OSS" ;
+
     public static final String RESOURCE_PATH ="RESOURCE_PATH" ;
     public static final String QYWX_CORPID = "QYWX_CORPID";
     public static final String QYWX_SECRET = "QYWX_SECRET";
@@ -53,6 +50,11 @@
     public static final String USER_AGREEMENT ="USER_AGREEMENT" ;
     public static final String PRIVACY_AGREEMENT ="PRIVACY_AGREEMENT" ;
 
+    public static final String ACCESS_ID="ACCESS_ID";
+    public static final String BUCKETNAME = "BUCKETNAME";
+
+    public static final String ACCESS_KEY = "ACCESS_KEY";
+    public static final String ENDPOINT = "ENDPOINT";
 
     public static final String QYWX = "QYWX";
     public static final  Integer ONE = 1;
@@ -413,7 +415,7 @@
         STORAGE_ORDER("storageOrder", "瀵勫瓨璁㈠崟"),
         SHOP_DEPOSIT("shopDeposit", "搴楅摵鎶奸噾璁㈠崟"),
         DRIVER_DEPOSIT("driverDeposit", "鍙告満鎶奸噾璁㈠崟"),
-        OVERDUE_FEE("overdueFee", "閫炬湡璐圭敤璁㈠崟")
+        OVERDUE_FEE("overdueFee", "璁㈠崟閫炬湡璐圭敤")
         ;
 
         private final String key;
@@ -475,8 +477,8 @@
     public enum OrderCombinedStatus {
         waitPay(0, "寰呮敮浠�", new int[]{OrderStatus.waitPay.status}),
         waitDeposit(1, "寰呮牳楠�", new int[]{OrderStatus.waitDeposit.status}),
-        waitDeliver(2, "寰呴厤閫�", new int[]{OrderStatus.deposited.status}),
-        waitReceive(3, "寰呮敹璐�", new int[]{OrderStatus.accepted.status, OrderStatus.delivering.status, OrderStatus.arrived.status}),
+        waitDeliver(2, "寰呴厤閫�", new int[]{OrderStatus.accepted.status}),
+        waitReceive(3, "寰呮敹璐�", new int[]{ OrderStatus.delivering.status, OrderStatus.arrived.status}),
         finished(4, "宸插畬鎴�", new int[]{OrderStatus.finished.status}),
         refund(5, "閫�娆�", new int[]{OrderStatus.closed.status, OrderStatus.cancelling.status})
         ;
diff --git a/server/services/src/main/java/com/doumee/dao/business/IdentityInfoMapper.java b/server/services/src/main/java/com/doumee/dao/business/IdentityInfoMapper.java
deleted file mode 100644
index b8b3251..0000000
--- a/server/services/src/main/java/com/doumee/dao/business/IdentityInfoMapper.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.doumee.dao.business;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.doumee.dao.business.model.IdentityInfo;
-import com.github.yulichang.base.MPJBaseMapper;
-
-/**
- * @author 姹熻箘韫�
- * @date 2025/07/09 12:00
- */
-public interface IdentityInfoMapper extends MPJBaseMapper<IdentityInfo> {
-
-}
diff --git a/server/services/src/main/java/com/doumee/dao/business/MemberMapper.java b/server/services/src/main/java/com/doumee/dao/business/MemberMapper.java
index afb2f5b..b04ffaa 100644
--- a/server/services/src/main/java/com/doumee/dao/business/MemberMapper.java
+++ b/server/services/src/main/java/com/doumee/dao/business/MemberMapper.java
@@ -15,15 +15,4 @@
  */
 public interface MemberMapper extends MPJBaseMapper<Member> {
 
-    @Select(" select * , " +
-            " ifnull((select r.level from receive_weight r where r.RECEIVE_MAX > RECEIVE_NUM and RECEIVE_NUM > r.RECEIVE_MIN limit 1  ),0) as level ," +
-            "  ifnull( (select CONVERT( ST_Distance_Sphere ( POINT ( ii.lgt, ii.lat ), POINT ( #{lgt}, #{lat}  )) /1000,DECIMAL(15,2)) from identity_info ii where ii.AUDIT_STATUS = 2 and type = 0 and ii.member_id = ID limit  1 ),0) as distance " +
-            " from member  " +
-            " where  id in (   " +
-            "  select ii.member_id from identity_info ii where ii.AUDIT_STATUS = 2 and type = #{orderType}  " +
-            "  and ( CONVERT( ST_Distance_Sphere ( POINT ( ii.lgt, ii.lat ), POINT ( #{lgt}, #{lat} )) /1000,DECIMAL(15,2))) < 100 " +
-            "  ) and RELEASE_MEMBER_ID != #{releaseMemberId} " +
-            " order by level , score desc , distance asc  ")
-    List<Member> getList(@Param("lgt") BigDecimal lgt, @Param("lat") BigDecimal lat, @Param("orderType") Integer orderType,  @Param("releaseMemberId") Integer releaseMemberId);
-
 }
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java b/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java
index b7494ce..c38dd92 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java
@@ -10,6 +10,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -131,6 +132,15 @@
     @ApiModelProperty(value = "鍙告満瀹氱骇锛�( 5 - 1 S A B C D )", example = "1")
     private Integer driverLevel;
 
+    @ApiModelProperty(value = "鍙告満璇勫垎")
+    private BigDecimal score;
+
+    @ApiModelProperty(value = "褰撳墠浣欓(鍒�)")
+    private Long balance;
+
+    @ApiModelProperty(value = "鍘嗗彶鎬婚噾棰�(鍒�)")
+    private Long totalBalance;
+
     @ApiModelProperty(value = "杞﹁締鐓х墖鍒楄〃")
     @TableField(exist = false)
     private List<Multifile> carImgList = new ArrayList<>();
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java b/server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java
deleted file mode 100644
index 5725919..0000000
--- a/server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package com.doumee.dao.business.model;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.doumee.core.annotation.excel.ExcelColumn;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import java.util.Date;
-import java.math.BigDecimal;
-import java.util.List;
-
-/**
- * 浼氬憳韬唤璁よ瘉淇℃伅琛�
- * @author 姹熻箘韫�
- * @date 2025/07/09 12:00
- */
-@Data
-@ApiModel("浼氬憳韬唤璁よ瘉淇℃伅琛�")
-@TableName("`identity_info`")
-public class IdentityInfo {
-
-    @TableId(type = IdType.AUTO)
-    @ApiModelProperty(value = "涓婚敭", example = "1")
-    private Integer id;
-
-    @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "1")
-    private Integer deleted;
-
-    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    private Integer createUser;
-
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鐢宠鏃堕棿",index = 10,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 16)
-    private Date createTime;
-
-    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    private Integer updateUser;
-
-    @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    private Date updateTime;
-
-    @ApiModelProperty(value = "澶囨敞")
-    private String remark;
-
-    @ApiModelProperty(value = "绫诲瀷:0=鐢ㄥ伐韬唤锛�1=璐ц繍韬唤锛�2=渚涢韬唤锛�", example = "1")
-    @ExcelColumn(name="绫诲瀷",valueMapping = "0=鐢ㄥ伐韬唤;1=璐ц繍韬唤;2=渚涢韬唤;",index = 4,width = 10)
-    private Integer type;
-
-    @ApiModelProperty(value = "浼氬憳涓婚敭", example = "1")
-    private Integer memberId;
-
-    @ApiModelProperty(value = "璁よ瘉绫诲瀷:0=涓汉锛�1=浼佷笟", example = "1")
-    @ExcelColumn(name="璁よ瘉绫诲瀷",valueMapping = "0=涓汉;1=浼佷笟;",index = 5,width = 10)
-    private Integer authType;
-
-    @ApiModelProperty(value = "鑱旂郴浜�")
-    @ExcelColumn(name="鑱旂郴浜�",index = 6,width = 10)
-    private String linkName;
-
-    @ApiModelProperty(value = "鑱旂郴鏂瑰紡")
-    @ExcelColumn(name="鑱旂郴鏂瑰紡",index = 7,width = 10)
-    private String telephone;
-
-    @ApiModelProperty(value = "鎺ュ崟浣嶇疆")
-    @ExcelColumn(name="鎺ュ崟浣嶇疆",index = 8,width = 20)
-    private String location;
-
-    @ApiModelProperty(value = "鍗曚綅鍚嶇О")
-    @ExcelColumn(name="鍗曚綅鍚嶇О",index = 9,width = 10)
-    private String companyName;
-
-    @ApiModelProperty(value = "绾害", example = "1")
-    private BigDecimal lat;
-
-    @ApiModelProperty(value = "缁忓害", example = "1")
-    private BigDecimal lgt;
-
-    @ApiModelProperty(value = "韬唤璇佷汉鍍忛潰/钀ヤ笟鎵х収")
-    private String img1;
-
-    @ApiModelProperty(value = "韬唤璇佸浗寰介潰/閬撹矾浜ら�氳惀杩愯鍙瘉/椋熷搧缁忚惀璁稿彲璇�")
-    private String img2;
-
-    @ApiModelProperty(value = "浠庝笟浜哄憳鍋ュ悍璇�")
-    private String img3;
-
-    @ApiModelProperty(value = "鍏朵粬璁よ瘉璧勬枡")
-    private String img4;
-
-    @ApiModelProperty(value = "璁よ瘉瀹℃壒鐘舵��:1=鐢宠涓紱2=宸查�氳繃锛�3=鏈�氳繃锛�", example = "1")
-    @ExcelColumn(name="瀹℃牳鐘舵��",valueMapping = "1=鐢宠涓�;2=宸查�氳繃;3=鏈�氳繃;",index = 1,width = 10)
-    private Integer auditStatus;
-
-    @ApiModelProperty(value = "璁よ瘉瀹℃壒鏃堕棿")
-    @ExcelColumn(name="璁よ瘉瀹℃壒鏃堕棿",index = 12,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 16)
-    private Date auditTime;
-
-    @ApiModelProperty(value = "璁よ瘉瀹℃壒澶囨敞")
-    @ExcelColumn(name="璁よ瘉瀹℃壒澶囨敞",index = 13,width = 16)
-    private String auditRemark;
-
-
-    @ApiModelProperty(value = "瀹℃牳浜哄鍚�")
-    @TableField(exist = false)
-    @ExcelColumn(name="瀹℃牳浜哄鍚�",index = 11,width = 10)
-    private String editorName;
-    @ApiModelProperty(value = "鐢ㄦ埛openid")
-    @ExcelColumn(name="openid",index = 2,width = 20)
-    @TableField(exist = false)
-    private String openid;
-    @ApiModelProperty(value = "鐢ㄦ埛鏄电О")
-    @ExcelColumn(name="浼氬憳鏄电О",index = 3,width = 10)
-    @TableField(exist = false)
-    private String memberName;
-    @ApiModelProperty(value = "鍥剧墖闆嗗悎")
-    @TableField(exist = false)
-    private List<String> imgList;
-}
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 773a95e..d8b5f77 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
@@ -337,7 +337,7 @@
     @ExcelColumn(name = "寮傚父璐圭敤")
     private Long exceptionAmount;
 
-    @ApiModelProperty(value = "寮傚父琛ュ伩/琛ュ伩鍙告満锛堝垎锛�")
+    @ApiModelProperty(value = "寮傚父琛ュ伩鍙告満锛堝垎锛�")
     @ExcelColumn(name = "寮傚父琛ュ伩")
     private Long exceptionFee;
 
@@ -348,6 +348,10 @@
     @ApiModelProperty(value = "缁撶畻鐘舵�侊細0=寰呯粨绠楋紱1=宸茬粨绠楋紱")
     private Integer settlementStatus;
 
+    @ApiModelProperty(value = "缁撶畻鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date settlementTime;
+
     @ApiModelProperty(value = "涓夋柟璁㈠崟鍙�")
     private String outTradeNo;
 
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java b/server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java
index 8928774..9698da9 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java
@@ -47,7 +47,7 @@
     @ApiModelProperty(value = "璁㈠崟涓婚敭", example = "1")
     private Integer orderId;
 
-    @ApiModelProperty(value = "閫�娆炬柟寮忥細0=鏈瓨浠剁洿鎺ュ彇娑堬紱1=骞冲彴鐩存帴鍙栨秷锛�2=宸插瓨浠剁敵璇峰彇娑�", example = "0")
+    @ApiModelProperty(value = "閫�娆炬柟寮忥細0=鏈瓨浠剁洿鎺ュ彇娑堬紱1=骞冲彴鐩存帴鍙栨秷锛�2=宸插瓨浠剁敵璇峰彇娑堬紱3=璁㈠崟瀹屾垚閫�娆�", example = "0")
     private Integer type;
 
     @ApiModelProperty(value = "鍙栨秷鍘熷洜")
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java b/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java
index 4147f2a..7b14ba3 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java
@@ -156,6 +156,12 @@
     @ApiModelProperty(value = "閰嶉�佽寖鍥�(km)")
     private BigDecimal deliveryArea;
 
+    @ApiModelProperty(value = "褰撳墠浣欓(鍒�)")
+    private Long balance;
+
+    @ApiModelProperty(value = "鍘嗗彶鎬婚噾棰�(鍒�)")
+    private Long totalBalance;
+
     @ApiModelProperty(value = "鏀粯瀹濇彁鐜拌处鎴�")
     private String aliAccount;
 
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ShopApplyDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ShopApplyDTO.java
index 28722ff..634ff08 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/ShopApplyDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/ShopApplyDTO.java
@@ -100,4 +100,8 @@
     @ApiModelProperty(value = "绀句繚缂寸撼璇佹槑锛堜釜浜虹被鍨嬪繀濉紝鏈�澶�3寮狅級")
     @Size(max = 3, message = "绀句繚缂寸撼璇佹槑鏈�澶�3寮�")
     private List<String> socialSecurityImgs;
+
+    @ApiModelProperty(value = "鏀粯瀹濇彁鐜拌处鎴�", required = true)
+    @NotBlank(message = "鏀粯瀹濇彁鐜拌处鎴蜂笉鑳戒负绌�")
+    private String aliAccount;
 }
diff --git a/server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java b/server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java
index b265c23..10b9d97 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java
@@ -1,10 +1,12 @@
 package com.doumee.dao.dto;
 
-import com.doumee.dao.business.model.Member;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.DecimalMin;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 
 /**
@@ -17,13 +19,13 @@
 @ApiModel("鎻愮幇鐢宠")
 public class WithdrawalDTO {
 
-    @ApiModelProperty(value = "鎻愮幇閲戦 (鍗曚綅锛氬厓)")
+    @ApiModelProperty(value = "鎻愮幇閲戦 (鍗曚綅锛氬厓)", required = true)
+    @NotNull(message = "鎻愮幇閲戦涓嶈兘涓虹┖")
+    @DecimalMin(value = "0.01", message = "鎻愮幇閲戦涓嶈兘灏忎簬0.01鍏�")
     private BigDecimal amount;
 
-    @ApiModelProperty(value = "鐪熷疄濮撳悕")
-    private String name;
+    @ApiModelProperty(value = "鏀粯瀹濇彁鐜拌处鎴�", required = true)
+    @NotBlank(message = "鏀粯瀹濇彁鐜拌处鎴蜂笉鑳戒负绌�")
+    private String aliAccount;
 
-
-    @ApiModelProperty(value = "鐢ㄦ埛淇℃伅",hidden = true)
-    private Member member;
 }
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 90d05ca..57d180f 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
@@ -91,4 +91,9 @@
 
     @ApiModelProperty(value = "鐗╁搧鏄庣粏鍒楄〃")
     private List<OrderItemVO> detailList;
+
+    // ---- 闂ㄥ簵绔� ----
+
+    @ApiModelProperty(value = "褰撳墠闂ㄥ簵瑙掕壊锛�1=瀛樹欢闂ㄥ簵锛�2=鍙栦欢闂ㄥ簵锛堜粎闂ㄥ簵绔繑鍥烇級")
+    private Integer shopRole;
 }
diff --git a/server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java b/server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java
index 31296a0..8927049 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java
@@ -1,6 +1,5 @@
 package com.doumee.dao.vo;
 
-import com.doumee.core.annotation.excel.ExcelColumn;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -13,39 +12,28 @@
 @Data
 public class UserCenterVO {
 
-    @ApiModelProperty(value = "鍙戝竷浠诲姟鎬绘暟 - 鍙戝崟鏂逛娇鐢�")
-    private Integer releaseTaskTotal;
+    @ApiModelProperty(value = "浼氬憳澶村儚鍏ㄨ矾寰�")
+    private String fullCoverImage;
 
-    @ApiModelProperty(value = "寰呮帴鍗曚换鍔℃�绘暟 - 鍙戝崟鏂逛娇鐢�")
-    private Integer waitReceiveTotal;
+    @ApiModelProperty(value = "浼氬憳澶村儚鍗婅矾寰�")
+    private String coverImage;
 
-    @ApiModelProperty(value = "杩涜涓换鍔℃�绘暟 - 鍙戝崟鏂逛娇鐢�")
-    private Integer doingTotal;
+    @ApiModelProperty(value = "浼氬憳鏄电О")
+    private String nickName;
 
-    @ApiModelProperty(value = "寰呰瘎浠蜂换鍔℃�绘暟 - 鍙戝崟鏂逛娇鐢�")
-    private Integer waitCommentTotal;
+    @ApiModelProperty(value = "濮撳悕")
+    private String name;
 
-    @ApiModelProperty(value = "杩涜涓换鍔℃暟閲� - 鎺ュ崟鏂逛娇鐢�")
-    private Integer taskingTotal;
+    @ApiModelProperty(value = "鑱旂郴鐢佃瘽")
+    private String telephone;
 
-    @ApiModelProperty(value = "瀹屾垚浠诲姟鏁伴噺 - 鎺ュ崟鏂逛娇鐢�")
-    private Integer doneTotal;
+    @ApiModelProperty(value = "鏄惁鏈夋秷鎭�")
+    private Boolean hasMessage;
 
-    @ApiModelProperty(value = "宸叉帴鍗曚换鍔℃暟閲� - 鎺ュ崟鏂逛娇鐢�")
-    private Integer receiveTotal;
+    @ApiModelProperty(value = "寰呮敮浠樿鍗曟暟閲�")
+    private Integer waitPayCount;
 
-    @ApiModelProperty(value = "鏈嶅姟浠嬬粛")
-    private String serverIntroduce;
+    @ApiModelProperty(value = "寰呮敹璐ц鍗曟暟閲�")
+    private Integer waitReceiveCount;
 
-    @ApiModelProperty(value = "鍏充簬鎴戜滑")
-    private String aboutUs;
-
-    @ApiModelProperty(value = "鐢ㄦ埛鍗忚")
-    private String userAgreement;
-
-    @ApiModelProperty(value = "闅愮鍗忚")
-    private String privacyAgreement;
-
-    @ApiModelProperty(value = "瀹㈡湇鐢佃瘽 澶氫釜浠�,鍒嗗壊")
-    private String serverPhone;
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/IdentityInfoService.java b/server/services/src/main/java/com/doumee/service/business/IdentityInfoService.java
deleted file mode 100644
index 8734a61..0000000
--- a/server/services/src/main/java/com/doumee/service/business/IdentityInfoService.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.doumee.service.business;
-
-import com.doumee.core.model.PageData;
-import com.doumee.core.model.PageWrap;
-import com.doumee.dao.business.model.IdentityInfo;
-import com.doumee.dao.dto.AuditDTO;
-
-import java.util.List;
-
-/**
- * 浼氬憳韬唤璁よ瘉淇℃伅琛⊿ervice瀹氫箟
- * @author 姹熻箘韫�
- * @date 2025/07/09 12:00
- */
-public interface IdentityInfoService {
-
-    /**
-     * 鍒涘缓
-     * 
-     * @param identityInfo 瀹炰綋瀵硅薄
-     * @return Integer
-     */
-    Integer create(IdentityInfo identityInfo);
-
-    /**
-     * 涓婚敭鍒犻櫎
-     *
-     * @param id 涓婚敭
-     */
-    void deleteById(Integer id);
-
-    /**
-     * 鍒犻櫎
-     *
-     * @param identityInfo 瀹炰綋瀵硅薄
-     */
-    void delete(IdentityInfo identityInfo);
-
-    /**
-     * 鎵归噺涓婚敭鍒犻櫎
-     *
-     * @param ids 涓婚敭闆�
-     */
-    void deleteByIdInBatch(List<Integer> ids);
-
-    /**
-     * 涓婚敭鏇存柊
-     *
-     * @param identityInfo 瀹炰綋瀵硅薄
-     */
-    void updateById(IdentityInfo identityInfo);
-
-    /**
-     * 鎵归噺涓婚敭鏇存柊
-     *
-     * @param identityInfos 瀹炰綋闆�
-     */
-    void updateByIdInBatch(List<IdentityInfo> identityInfos);
-
-    /**
-     * 涓婚敭鏌ヨ
-     *
-     * @param id 涓婚敭
-     * @return IdentityInfo
-     */
-    IdentityInfo findById(Integer id);
-
-    /**
-     * 鏉′欢鏌ヨ鍗曟潯璁板綍
-     *
-     * @param identityInfo 瀹炰綋瀵硅薄
-     * @return IdentityInfo
-     */
-    IdentityInfo findOne(IdentityInfo identityInfo);
-
-    /**
-     * 鏉′欢鏌ヨ
-     *
-     * @param identityInfo 瀹炰綋瀵硅薄
-     * @return List<IdentityInfo>
-     */
-    List<IdentityInfo> findList(IdentityInfo identityInfo);
-  
-    /**
-     * 鍒嗛〉鏌ヨ
-     *
-     * @param pageWrap 鍒嗛〉瀵硅薄
-     * @return PageData<IdentityInfo>
-     */
-    PageData<IdentityInfo> findPage(PageWrap<IdentityInfo> pageWrap);
-
-    /**
-     * 鏉′欢缁熻
-     *
-     * @param identityInfo 瀹炰綋瀵硅薄
-     * @return long
-     */
-    long count(IdentityInfo identityInfo);
-
-
-    IdentityInfo findByMemberType(Integer type,Integer memberId);
-
-    void updateLocation(IdentityInfo identityInfo);
-
-    List<IdentityInfo> findMemberList(IdentityInfo pageWrap);
-
-    void audit(AuditDTO auditDTO);
-}
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 897e4dc..3512e96 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
@@ -16,6 +16,7 @@
 import com.doumee.dao.vo.AccountResponse;
 import com.doumee.dao.vo.MemberDetailVO;
 import com.doumee.dao.vo.MemberListVO;
+import com.doumee.dao.vo.PlatformAboutVO;
 import com.doumee.dao.vo.UserCenterVO;
 import me.chanjar.weixin.common.error.WxErrorException;
 import org.apache.commons.lang3.StringUtils;
@@ -144,9 +145,9 @@
      * @param memberId
      * @return
      */
-    Member getMemberInfo(Integer memberId);
+    UserCenterVO getMemberInfo(Integer memberId);
 
-    UserCenterVO getPlatformAboutUs();
+    PlatformAboutVO getPlatformAboutUs();
 
     void logOut(String token,Integer memberId);
 
diff --git a/server/services/src/main/java/com/doumee/service/business/OrdersService.java b/server/services/src/main/java/com/doumee/service/business/OrdersService.java
index cb9f676..58debcd 100644
--- a/server/services/src/main/java/com/doumee/service/business/OrdersService.java
+++ b/server/services/src/main/java/com/doumee/service/business/OrdersService.java
@@ -7,6 +7,7 @@
 import com.doumee.dao.dto.CalculateRemotePriceDTO;
 import com.doumee.dao.dto.CreateOrderDTO;
 import com.doumee.dao.dto.DispatchDTO;
+import com.doumee.dao.dto.CommentOrderDTO;
 import com.doumee.dao.dto.MyOrderDTO;
 import com.doumee.dao.vo.MyOrderDetailVO;
 import com.doumee.dao.vo.MyOrderVO;
@@ -130,9 +131,9 @@
     /**
      * 浼氬憳鍙栨秷璁㈠崟锛堜粎寮傚湴瀵勫瓨锛�
      *
-     * @param orderId   璁㈠崟涓婚敭
-     * @param memberId  浼氬憳涓婚敭
-     * @param reason    鍙栨秷鍘熷洜
+     * @param orderId  璁㈠崟涓婚敭
+     * @param memberId 浼氬憳涓婚敭
+     * @param reason   鍙栨秷鍘熷洜
      */
     void cancelOrder(Integer orderId, Integer memberId, String reason);
 
@@ -189,6 +190,7 @@
 
     /**
      * 璁$畻淇濅环璐圭敤
+     *
      * @param declaredValue 鎶ヤ环閲戦
      * @return 淇濅环璐圭敤
      */
@@ -196,6 +198,7 @@
 
     /**
      * 璁$畻灏卞湴瀛樺彇棰勪及璐圭敤
+     *
      * @param dto 灏卞湴瀛樺彇璁′环璇锋眰鍙傛暟
      * @return 浠锋牸璁$畻缁撴灉
      */
@@ -203,6 +206,7 @@
 
     /**
      * 璁$畻寮傚湴瀛樺彇棰勪及璐圭敤
+     *
      * @param dto 寮傚湴瀛樺彇璁′环璇锋眰鍙傛暟
      * @return 浠锋牸璁$畻缁撴灉
      */
@@ -210,7 +214,8 @@
 
     /**
      * 鍒涘缓璁㈠崟骞跺敜璧峰井淇℃敮浠�
-     * @param dto 鍒涘缓璁㈠崟璇锋眰鍙傛暟
+     *
+     * @param dto      鍒涘缓璁㈠崟璇锋眰鍙傛暟
      * @param memberId 褰撳墠鐧诲綍浼氬憳ID
      * @return 鏀粯鍝嶅簲
      */
@@ -218,7 +223,8 @@
 
     /**
      * 缁х画鏀粯锛堝緟鏀粯璁㈠崟閲嶆柊鍞よ捣寰俊鏀粯锛�
-     * @param orderId 璁㈠崟涓婚敭
+     *
+     * @param orderId  璁㈠崟涓婚敭
      * @param memberId 褰撳墠鐧诲綍浼氬憳ID
      * @return 鏀粯鍝嶅簲
      */
@@ -226,6 +232,7 @@
 
     /**
      * 灏忕▼搴忕-鏌ヨ鎴戠殑璁㈠崟鍒嗛〉
+     *
      * @param pageWrap 鍒嗛〉鏌ヨ鍙傛暟锛坢odel鍚玸tatus锛�
      * @param memberId 浼氬憳涓婚敭
      * @return 鍒嗛〉缁撴灉
@@ -234,6 +241,7 @@
 
     /**
      * 鏌ヨ璁㈠崟瓒呮椂璐圭敤
+     *
      * @param orderId 璁㈠崟涓婚敭
      * @return 瓒呮椂璐圭敤璁$畻缁撴灉
      */
@@ -260,4 +268,91 @@
      */
     void confirmCustomerArrived(Integer orderId, Integer shopId);
 
-}
+    /**
+     * 閫炬湡璐圭敤鏀粯锛堝敜璧峰井淇℃敮浠橈級
+     *
+     * @param orderId  瀵勫瓨璁㈠崟涓婚敭
+     * @param memberId 褰撳墠鐧诲綍浼氬憳ID
+     * @return 鏀粯鍝嶅簲
+     */
+    PayResponse payOverdueFee(Integer orderId, Integer memberId);
+
+    /**
+     * 閫炬湡璐圭敤鏀粯鍥炶皟澶勭悊
+     *
+     * @param outTradeNo 鍟嗘埛璁㈠崟鍙�
+     * @param wxTradeNo  寰俊璁㈠崟鍙�
+     */
+    void handleOverdueFeePayNotify(String outTradeNo, String wxTradeNo);
+
+    /**
+     * 鍙栦欢闂ㄥ簵纭鍑哄簱
+     * 灏卞湴瀵勫瓨/寮傚湴瀵勫瓨锛屽瓨鍦ㄥ彇浠堕棬搴楋紝status=5锛宱verdueStatus=0/2锛宑onfirmArriveTime涓嶄负绌�
+     * 鍑哄簱鍚庤鍗曞畬鎴�
+     *
+     * @param orderId 璁㈠崟涓婚敭
+     * @param shopId  褰撳墠鎿嶄綔闂ㄥ簵涓婚敭
+     * @param images  鍑哄簱鍥剧墖锛堟渶澶�3寮狅級
+     * @param remark  鍑哄簱澶囨敞
+     */
+    void confirmStoreOut(Integer orderId, Integer shopId, List<String> images, String remark);
+
+    /**
+     * 璁$畻骞舵洿鏂拌鍗曚笁鏂规敹鐩婏紙瀛樹欢闂ㄥ簵/鍙栦欢闂ㄥ簵/鍙告満锛�
+     * 灏卞湴瀵勫瓨锛氫粎瀛樹欢闂ㄥ簵鏀剁泭
+     * 寮傚湴瀵勫瓨锛氬瓨浠堕棬搴� + 鍙告満鏀剁泭锛涙湁鍙栦欢闂ㄥ簵鏃跺姞涓婂彇浠堕棬搴楁敹鐩�
+     *
+     * @param orderId 璁㈠崟涓婚敭
+     */
+    void calculateAndSaveOrderFees(Integer orderId);
+
+    /**
+     * 浼氬憳鍒犻櫎璁㈠崟锛堥�昏緫鍒犻櫎锛屼粎宸插畬鎴�/宸插彇娑�/宸查��娆捐鍗曞彲鍒犻櫎锛�
+     *
+     * @param orderId  璁㈠崟涓婚敭
+     * @param memberId 浼氬憳涓婚敭
+     */
+    void deleteMyOrder(Integer orderId, Integer memberId);
+
+    /**
+     * 闂ㄥ簵鏀粯鎶奸噾锛堝敜璧峰井淇℃敮浠橈級
+     *
+     * @param shopId 闂ㄥ簵涓婚敭
+     * @return 鏀粯鍝嶅簲
+     */
+    PayResponse payShopDeposit(Integer shopId);
+
+    /**
+     * 闂ㄥ簵鎶奸噾鏀粯鍥炶皟澶勭悊
+     *
+     * @param outTradeNo 鍟嗘埛璁㈠崟鍙�
+     * @param wxTradeNo  寰俊璁㈠崟鍙�
+     */
+    void handleShopDepositPayNotify(String outTradeNo, String wxTradeNo);
+
+    /**
+     * 璁㈠崟缁撶畻锛氭牴鎹� SETTLEMENT_DATE 閰嶇疆锛屽皢宸插畬鎴愮殑寰呯粨绠楄鍗曡繘琛岀粨绠�
+     * 鏇存柊璁㈠崟缁撶畻鐘舵�併�丷evenue 鍏ヨ处鐘舵�併�侀棬搴�/鍙告満浣欓
+     */
+    void settleOrders();
+
+    /**
+     * 璁㈠崟璇勪环
+     * status=7涓攃ommentStatus=0鏃跺彲璇勪环锛屾寜瀵硅薄锛堝瓨浠堕棬搴�/鍙栦欢闂ㄥ簵/鍙告満锛夊垎鍒褰曡瘎鍒�
+     *
+     * @param dto      璇勪环璇锋眰
+     * @param memberId 褰撳墠鐧诲綍浼氬憳ID
+     */
+    void commentOrder(CommentOrderDTO dto, Integer memberId);
+
+    /**
+     * 闂ㄥ簵绔鍗曞垎椤靛垪琛�
+     * 鏌ヨ瀛樹欢闂ㄥ簵鎴栧彇浠堕棬搴楃瓑浜庡綋鍓嶇櫥褰曢棬搴楃殑璁㈠崟
+     *
+     * @param pageWrap 鍒嗛〉鏌ヨ鍙傛暟锛坢odel鍚玸tatus/combinedStatus锛�
+     * @param shopId   褰撳墠鐧诲綍闂ㄥ簵涓婚敭
+     * @return 鍒嗛〉缁撴灉
+     */
+    PageData<MyOrderVO> findShopOrderPage(PageWrap<MyOrderDTO> pageWrap, Integer shopId);
+
+}
\ No newline at end of file
diff --git a/server/services/src/main/java/com/doumee/service/business/RevenueService.java b/server/services/src/main/java/com/doumee/service/business/RevenueService.java
index 48653ec..de5f4ce 100644
--- a/server/services/src/main/java/com/doumee/service/business/RevenueService.java
+++ b/server/services/src/main/java/com/doumee/service/business/RevenueService.java
@@ -3,6 +3,7 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.Revenue;
+import com.doumee.dao.vo.RevenueStatisticsVO;
 
 import java.util.List;
 
@@ -96,4 +97,20 @@
      */
     long count(Revenue revenue);
 
+    /**
+     * 闂ㄥ簵鏀剁泭缁熻
+     *
+     * @param shopId 闂ㄥ簵涓婚敭
+     * @return 鏀剁泭缁熻
+     */
+    RevenueStatisticsVO getShopRevenueStatistics(Integer shopId);
+
+    /**
+     * 鍙告満鏀剁泭缁熻
+     *
+     * @param memberId 浼氬憳涓婚敭
+     * @return 鏀剁泭缁熻
+     */
+    RevenueStatisticsVO getDriverRevenueStatistics(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 4bcdd40..2908a9e 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
@@ -6,6 +6,7 @@
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.dto.*;
 import com.doumee.dao.vo.ShopLoginVO;
+import com.doumee.dao.vo.ShopCenterVO;
 import com.doumee.dao.vo.ShopDetailVO;
 import com.doumee.dao.vo.ShopNearbyVO;
 import com.doumee.dao.vo.ShopWebDetailVO;
@@ -178,6 +179,13 @@
 
 
     /**
+     * 鑾峰彇闂ㄥ簵鐧诲綍鍚庝俊鎭紙闂ㄥ簵涓績锛�
+     * @param shopId 闂ㄥ簵涓婚敭
+     * @return 闂ㄥ簵涓績淇℃伅
+     */
+    ShopCenterVO getShopCenterInfo(Integer shopId);
+
+    /**
      * 闂ㄥ簵瀵嗙爜鐧诲綍
      * @param dto 鐧诲綍璇锋眰
      * @return 鐧诲綍缁撴灉
diff --git a/server/services/src/main/java/com/doumee/service/business/WithdrawalOrdersService.java b/server/services/src/main/java/com/doumee/service/business/WithdrawalOrdersService.java
index e8a5c6f..679f4b8 100644
--- a/server/services/src/main/java/com/doumee/service/business/WithdrawalOrdersService.java
+++ b/server/services/src/main/java/com/doumee/service/business/WithdrawalOrdersService.java
@@ -4,6 +4,7 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.WithdrawalOrders;
 import com.doumee.dao.dto.WithdrawalApproveDTO;
+import com.doumee.dao.dto.WithdrawalDTO;
 
 import java.util.List;
 
@@ -112,4 +113,20 @@
      */
     void approve(WithdrawalApproveDTO dto);
 
+    /**
+     * 鍙告満鎻愮幇鐢宠
+     *
+     * @param dto      鎻愮幇鍙傛暟
+     * @param memberId 浼氬憳涓婚敭
+     */
+    void applyDriverWithdrawal(WithdrawalDTO dto, Integer memberId);
+
+    /**
+     * 闂ㄥ簵鎻愮幇鐢宠
+     *
+     * @param dto    鎻愮幇鍙傛暟
+     * @param shopId 闂ㄥ簵涓婚敭
+     */
+    void applyShopWithdrawal(WithdrawalDTO dto, Integer shopId);
+
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java
index fa3a3e6..0cb5720 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java
@@ -228,7 +228,7 @@
     }
 
     private String getBannerPath() {
-        return systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
+        return systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                 + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.BANNER_FILES).getCode();
     }
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
index 7208a38..46ee50f 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
@@ -139,7 +139,7 @@
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
         if(StringUtils.isNotBlank(category.getIcon())){
-            String path  = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
+            String path  = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
                     +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.CATEGORY_FILES).getCode();
             category.setIconFull(path + category.getIcon());
         }
@@ -208,7 +208,7 @@
         queryWrapper.orderByAsc(Category::getSortnum);
         PageData<Category> result =PageData.from(categoryMapper.selectJoinPage(page, Category.class,queryWrapper));
         if(result!=null && result.getRecords()!=null){
-            String path  = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
+            String path  = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
                     +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.CATEGORY_FILES).getCode();
             for(Category cate : result.getRecords()){
                 try {
@@ -236,7 +236,7 @@
                 .orderByAsc(Category::getSortnum)
         );
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categoryList)){
-            String path  = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
+            String path  = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
                     +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.CATEGORY_FILES).getCode();
             for (Category category:categoryList) {
                 if(StringUtils.isNotBlank(category.getIcon())){
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 796cf5e..11ec88f 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
@@ -555,7 +555,7 @@
         // 鎷兼帴鍥剧墖鍓嶇紑
         String imgPrefix = "";
         try {
-            imgPrefix = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
+            imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                     + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.DRIVER_FILES).getCode();
         } catch (Exception e) {
             // 鏈厤缃椂蹇界暐
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java
deleted file mode 100644
index 4aea0ff..0000000
--- a/server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java
+++ /dev/null
@@ -1,470 +0,0 @@
-package com.doumee.service.business.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.doumee.biz.system.SystemDictDataBiz;
-import com.doumee.config.wx.SendWxMessage;
-import com.doumee.core.annotation.excel.ExcelColumn;
-import com.doumee.core.constants.Constants;
-import com.doumee.core.constants.ResponseStatus;
-import com.doumee.core.exception.BusinessException;
-import com.doumee.core.model.LoginUserInfo;
-import com.doumee.core.model.PageData;
-import com.doumee.core.model.PageWrap;
-import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.CategoryMapper;
-import com.doumee.dao.business.IdentityInfoMapper;
-import com.doumee.dao.business.MemberMapper;
-import com.doumee.dao.business.model.IdentityInfo;
-import com.doumee.dao.business.model.Member;
-import com.doumee.dao.dto.AuditDTO;
-import com.doumee.dao.system.model.SystemUser;
-import com.doumee.service.business.AliSmsService;
-import com.doumee.service.business.IdentityInfoService;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import io.swagger.annotations.ApiModelProperty;
-import me.chanjar.weixin.common.error.WxErrorException;
-import nonapi.io.github.classgraph.json.Id;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.shiro.SecurityUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * 浼氬憳韬唤璁よ瘉淇℃伅琛⊿ervice瀹炵幇
- * @author 姹熻箘韫�
- * @date 2025/07/09 12:00
- */
-@Service
-public class IdentityInfoServiceImpl implements IdentityInfoService {
-
-    @Autowired
-    private IdentityInfoMapper identityInfoMapper;
-    @Autowired
-    private MemberMapper memberMapper;
-    @Autowired
-    private AliSmsService aliSmsService;
-    @Autowired
-    private SystemDictDataBiz systemDictDataBiz;
-    @Autowired
-    private CategoryMapper categoryMapper;
-
-    @Override
-    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
-    public Integer create(IdentityInfo identityInfo) {
-        if(Objects.isNull(identityInfo)
-            || Objects.isNull(identityInfo.getType())
-            || Objects.isNull(identityInfo.getMemberId())
-            || Objects.isNull(identityInfo.getAuthType())
-                || StringUtils.isEmpty(identityInfo.getLinkName())
-                || StringUtils.isEmpty(identityInfo.getTelephone())
-                || StringUtils.isEmpty(identityInfo.getLocation())
-                || StringUtils.isEmpty(identityInfo.getImg1())
-                || Objects.isNull(identityInfo.getLat())
-                || Objects.isNull(identityInfo.getLgt())
-                || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && StringUtils.isEmpty(identityInfo.getCompanyName()))
-                || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ZERO) && StringUtils.isEmpty(identityInfo.getImg2()))
-                || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && Constants.equalsInteger(identityInfo.getType(),Constants.ONE) && StringUtils.isEmpty(identityInfo.getImg2()))
-                || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && Constants.equalsInteger(identityInfo.getType(),Constants.TWO) && (StringUtils.isEmpty(identityInfo.getImg2())||StringUtils.isEmpty(identityInfo.getImg3())))
-        ){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST);
-        }
-            IdentityInfo model = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
-                    .eq(IdentityInfo::getMemberId,identityInfo.getMemberId())
-                    .eq(IdentityInfo::getType,identityInfo.getType())
-                    .last("limit 1")
-            );
-            if(Objects.nonNull(model)){
-                identityInfo.setId(model.getId());
-                this.updateById(identityInfo);
-                return identityInfo.getId();
-            }
-
-
-            //鏌ヨ鐢ㄦ埛鏄惁宸插瓨鍦ㄥ綋鍓嶈韩浠�
-            if(identityInfoMapper.selectCount(new QueryWrapper<IdentityInfo>().lambda()
-                    .eq(IdentityInfo::getDeleted,Constants.ZERO)
-                    .eq(IdentityInfo::getMemberId,identityInfo.getMemberId())
-                    .eq(IdentityInfo::getType,identityInfo.getType()))>Constants.ZERO){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸插瓨鍦ㄨ韬唤璇峰埛鏂版煡鐪嬶紒");
-            };
-            identityInfo.setDeleted(Constants.ZERO);
-            identityInfo.setCreateTime(new Date());
-            identityInfo.setUpdateTime(identityInfo.getCreateTime());
-            identityInfo.setAuditStatus(Constants.ONE);
-            identityInfoMapper.insert(identityInfo);
-
-        return identityInfo.getId();
-    }
-
-    @Override
-    public void deleteById(Integer id) {
-        identityInfoMapper.deleteById(id);
-    }
-
-    @Override
-    public void delete(IdentityInfo identityInfo) {
-        UpdateWrapper<IdentityInfo> deleteWrapper = new UpdateWrapper<>(identityInfo);
-        identityInfoMapper.delete(deleteWrapper);
-    }
-
-    @Override
-    public void deleteByIdInBatch(List<Integer> ids) {
-        if (CollectionUtils.isEmpty(ids)) {
-            return;
-        }
-        identityInfoMapper.deleteBatchIds(ids);
-    }
-
-    @Override
-    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
-    public void updateById(IdentityInfo identityInfo) {
-        if(Objects.isNull(identityInfo)
-                || Objects.isNull(identityInfo.getId())
-                || Objects.isNull(identityInfo.getType())
-                || Objects.isNull(identityInfo.getMemberId())
-                || Objects.isNull(identityInfo.getAuthType())
-                || StringUtils.isEmpty(identityInfo.getLinkName())
-                || StringUtils.isEmpty(identityInfo.getTelephone())
-                || StringUtils.isEmpty(identityInfo.getLocation())
-                || StringUtils.isEmpty(identityInfo.getImg1())
-                || Objects.isNull(identityInfo.getLat())
-                || Objects.isNull(identityInfo.getLgt())
-                || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && StringUtils.isEmpty(identityInfo.getCompanyName()))
-                || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ZERO) && StringUtils.isEmpty(identityInfo.getImg2()))
-                || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && Constants.equalsInteger(identityInfo.getType(),Constants.ONE) && StringUtils.isEmpty(identityInfo.getImg2()))
-                || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && Constants.equalsInteger(identityInfo.getType(),Constants.TWO) && (StringUtils.isEmpty(identityInfo.getImg2())||StringUtils.isEmpty(identityInfo.getImg3())))
-        ){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST);
-        }
-        IdentityInfo model = identityInfoMapper.selectById(identityInfo.getId());
-        if (Objects.isNull(model)){
-            throw new BusinessException(ResponseStatus.DATA_EMPTY);
-        }
-        if(!Constants.equalsInteger(model.getMemberId(),identityInfo.getMemberId())){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勬暟鎹棤娉曡繘琛岃鎿嶄綔");
-        }
-        if(!Constants.equalsInteger(model.getAuditStatus(),Constants.THREE)){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鐘舵�佹棤娉曡繘琛岃鎿嶄綔");
-        }
-        identityInfo.setAuditRemark("");
-        identityInfo.setUpdateTime(new Date());
-        identityInfo.setAuditStatus(Constants.ONE);
-        identityInfoMapper.updateById(identityInfo);
-    }
-
-
-    @Override
-    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
-    public void updateLocation(IdentityInfo identityInfo) {
-        if(Objects.isNull(identityInfo)
-                || Objects.isNull(identityInfo.getId())
-                || Objects.isNull(identityInfo.getMemberId())
-                || StringUtils.isEmpty(identityInfo.getLocation())
-                || Objects.isNull(identityInfo.getLat())
-                || Objects.isNull(identityInfo.getLgt())
-        ){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST);
-        }
-        IdentityInfo model = identityInfoMapper.selectById(identityInfo.getId());
-        if (Objects.isNull(model)){
-            throw new BusinessException(ResponseStatus.DATA_EMPTY);
-        }
-        if(!Constants.equalsInteger(model.getMemberId(),identityInfo.getMemberId())){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勬暟鎹棤娉曡繘琛岃鎿嶄綔");
-        }
-        if(!Constants.equalsInteger(model.getAuditStatus(),Constants.TWO)){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鐘舵�佹棤娉曡繘琛岃鎿嶄綔");
-        }
-        model.setLocation(identityInfo.getLocation());
-        model.setLat(identityInfo.getLat());
-        model.setLgt(identityInfo.getLgt());
-        model.setUpdateTime(new Date());
-        identityInfoMapper.updateById(model);
-    }
-
-    @Override
-    public void updateByIdInBatch(List<IdentityInfo> identityInfos) {
-        if (CollectionUtils.isEmpty(identityInfos)) {
-            return;
-        }
-        for (IdentityInfo identityInfo: identityInfos) {
-            this.updateById(identityInfo);
-        }
-    }
-
-    @Override
-    public IdentityInfo findById(Integer id) {
-        IdentityInfo model = identityInfoMapper.selectById(id);
-        String path  = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
-                +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INENTITY_FILES).getCode();
-        model.setImgList(new ArrayList<>());
-        if(StringUtils.isNotBlank(model.getImg1())){
-            model.getImgList().add(path + model.getImg1());
-        }
-        if(StringUtils.isNotBlank(model.getImg2())){
-            model.getImgList().add(path + model.getImg2());
-        }
-        if(StringUtils.isNotBlank(model.getImg3())) {
-            model.getImgList().add(path + model.getImg3());
-        }
-        if(StringUtils.isNotBlank(model.getImg4())){
-            model.getImgList().add(path + model.getImg4());
-        }
-        return model;
-    }
-
-
-    @Override
-    public IdentityInfo findByMemberType(Integer type,Integer memberId){
-        IdentityInfo model = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
-                .eq(IdentityInfo::getMemberId,memberId).eq(IdentityInfo::getType,type));
-        if(Objects.nonNull(model)){
-            String path  = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
-                    +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INENTITY_FILES).getCode();
-            model.setImgList(new ArrayList<>());
-            if(StringUtils.isNotBlank(model.getImg1())){
-                model.getImgList().add(path + model.getImg1());
-            }
-            if(StringUtils.isNotBlank(model.getImg2())){
-                model.getImgList().add(path + model.getImg2());
-            }
-            if(StringUtils.isNotBlank(model.getImg3())) {
-                model.getImgList().add(path + model.getImg3());
-            }
-            if(StringUtils.isNotBlank(model.getImg4())){
-                model.getImgList().add(path + model.getImg4());
-            }
-        }else{
-            model = new IdentityInfo();
-        }
-        return model;
-    }
-
-
-
-    @Override
-    public IdentityInfo findOne(IdentityInfo identityInfo) {
-        QueryWrapper<IdentityInfo> wrapper = new QueryWrapper<>(identityInfo);
-        return identityInfoMapper.selectOne(wrapper);
-    }
-
-    @Override
-    public List<IdentityInfo> findList(IdentityInfo identityInfo) {
-        QueryWrapper<IdentityInfo> wrapper = new QueryWrapper<>(identityInfo);
-        return identityInfoMapper.selectList(wrapper);
-    }
-  
-    @Override
-    public List<IdentityInfo> findMemberList(IdentityInfo identityInfo) {
-        if(identityInfo.getMemberId() == null){
-            return  new ArrayList<>();
-        }
-        Member member = memberMapper.selectById(identityInfo.getMemberId());
-        if(identityInfo == null || Constants.equalsInteger(member.getDeleted(),Constants.ONE)){
-            return  new ArrayList<>();
-        }
-        List<IdentityInfo> list = new ArrayList<>();
-
-        String path  = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
-                +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INENTITY_FILES).getCode();
-        //绫诲瀷:0=鐢ㄥ伐韬唤锛�1=璐ц繍韬唤锛�2=渚涢韬唤锛�
-        addMemberModelByType(member.getId(),Constants.ZERO,list,path);
-        addMemberModelByType(member.getId(),Constants.ONE,list,path);
-        addMemberModelByType(member.getId(),Constants.TWO,list,path);
-
-        return list;
-    }
-
-    private void addMemberModelByType(Integer id,Integer type, List<IdentityInfo> list,String path) {
-        MPJLambdaWrapper<IdentityInfo> wrapper = new MPJLambdaWrapper<IdentityInfo>()
-                .selectAll(IdentityInfo.class)
-                .selectAs(SystemUser::getUsername,IdentityInfo::getEditorName)
-                .leftJoin(SystemUser.class,SystemUser::getId,IdentityInfo::getUpdateUser)
-                .orderByDesc(IdentityInfo::getCreateTime )//鍙栨渶鏂颁竴鏉�
-                .eq(IdentityInfo::getMemberId,id)
-                .eq(IdentityInfo::getType,type)
-                .eq(IdentityInfo::getDeleted,Constants.ZERO)
-                .last("limit 1");
-         IdentityInfo model = identityInfoMapper.selectJoinOne(IdentityInfo.class,wrapper);
-         if(model !=null){
-            initModelImage(model,path);
-             list.add(model);
-         }
-    }
-
-    @Override
-    public PageData<IdentityInfo> findPage(PageWrap<IdentityInfo> pageWrap) {
-        IPage<IdentityInfo> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        MPJLambdaWrapper<IdentityInfo> queryWrapper = new MPJLambdaWrapper<>();
-        Utils.MP.blankToNull(pageWrap.getModel());
-        pageWrap.getModel().setDeleted(Constants.ZERO);
-        queryWrapper.selectAll(IdentityInfo.class)
-                .selectAs(Member::getNickName,IdentityInfo::getMemberName)
-                .selectAs(Member::getOpenid,IdentityInfo::getOpenid)
-                .selectAs(SystemUser::getUsername,IdentityInfo::getEditorName)
-                .leftJoin(Member.class,Member::getId,IdentityInfo::getMemberId)
-                .leftJoin(SystemUser.class,SystemUser::getId,IdentityInfo::getUpdateUser);
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.eq(IdentityInfo::getId, pageWrap.getModel().getId());
-        }
-        if (pageWrap.getModel().getDeleted() != null) {
-            queryWrapper.eq(IdentityInfo::getDeleted, pageWrap.getModel().getDeleted());
-        }
-        if (pageWrap.getModel().getCreateUser() != null) {
-            queryWrapper.eq(IdentityInfo::getCreateUser, pageWrap.getModel().getCreateUser());
-        }
-        if (pageWrap.getModel().getCreateTime() != null) {
-            queryWrapper.ge(IdentityInfo::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime()));
-            queryWrapper.le(IdentityInfo::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime()));
-        }
-        if (pageWrap.getModel().getUpdateUser() != null) {
-            queryWrapper.eq(IdentityInfo::getUpdateUser, pageWrap.getModel().getUpdateUser());
-        }
-        if (pageWrap.getModel().getUpdateTime() != null) {
-            queryWrapper.ge(IdentityInfo::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime()));
-            queryWrapper.le(IdentityInfo::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime()));
-        }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.like(IdentityInfo::getRemark, pageWrap.getModel().getRemark());
-        }
-        if (pageWrap.getModel().getType() != null) {
-            queryWrapper.eq(IdentityInfo::getType, pageWrap.getModel().getType());
-        }
-        if (pageWrap.getModel().getMemberId() != null) {
-            queryWrapper.eq(IdentityInfo::getMemberId, pageWrap.getModel().getMemberId());
-        }
-        if (pageWrap.getModel().getAuthType() != null) {
-            queryWrapper.eq(IdentityInfo::getAuthType, pageWrap.getModel().getAuthType());
-        }
-        if (pageWrap.getModel().getLinkName() != null) {
-            queryWrapper.like(IdentityInfo::getLinkName, pageWrap.getModel().getLinkName());
-        }
-        if (pageWrap.getModel().getTelephone() != null) {
-            queryWrapper.like(IdentityInfo::getTelephone, pageWrap.getModel().getTelephone());
-        }
-        if (pageWrap.getModel().getLocation() != null) {
-            queryWrapper.like(IdentityInfo::getLocation, pageWrap.getModel().getLocation());
-        }
-        if (pageWrap.getModel().getCompanyName() != null) {
-            queryWrapper.like(IdentityInfo::getCompanyName, pageWrap.getModel().getCompanyName());
-        }
-        if (pageWrap.getModel().getLat() != null) {
-            queryWrapper.eq(IdentityInfo::getLat, pageWrap.getModel().getLat());
-        }
-        if (pageWrap.getModel().getLgt() != null) {
-            queryWrapper.eq(IdentityInfo::getLgt, pageWrap.getModel().getLgt());
-        }
-        if (pageWrap.getModel().getAuditStatus() != null) {
-            queryWrapper.eq(IdentityInfo::getAuditStatus, pageWrap.getModel().getAuditStatus());
-        }
-        if (pageWrap.getModel().getAuditTime() != null) {
-            queryWrapper.ge(IdentityInfo::getAuditTime, Utils.Date.getStart(pageWrap.getModel().getAuditTime()));
-            queryWrapper.le(IdentityInfo::getAuditTime, Utils.Date.getEnd(pageWrap.getModel().getAuditTime()));
-        }
-        if (pageWrap.getModel().getAuditRemark() != null) {
-            queryWrapper.like(IdentityInfo::getAuditRemark, pageWrap.getModel().getAuditRemark());
-        }
-        queryWrapper.orderByAsc(IdentityInfo::getAuditStatus );
-        queryWrapper.orderByDesc(IdentityInfo::getCreateTime );
-        PageData<IdentityInfo> result = PageData.from(identityInfoMapper.selectJoinPage(page,IdentityInfo.class, queryWrapper));
-        if(result!=null && result.getRecords()!=null){
-            String path  = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
-                    +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INENTITY_FILES).getCode();
-            for (IdentityInfo model :result.getRecords()){
-                initModelImage(model,path);
-            }
-        }
-
-        return result;
-
-    }
-
-    private void initModelImage(IdentityInfo model, String path) {
-        model.setImgList(new ArrayList<>());
-        if(StringUtils.isNotBlank(model.getImg1())){
-            model.setImg1(path+model.getImg1());
-            model.getImgList().add(model.getImg1());
-        }
-        if(StringUtils.isNotBlank(model.getImg2())){
-            model.setImg2(path+model.getImg2());
-            model.getImgList().add(model.getImg2());
-        }
-        if(StringUtils.isNotBlank(model.getImg3())) {
-            model.setImg3(path + model.getImg3());
-            model.getImgList().add(model.getImg3());
-        }
-        if(StringUtils.isNotBlank(model.getImg4())){
-            model.setImg4(path+model.getImg4());
-            model.getImgList().add(model.getImg4());
-        }
-    }
-
-    @Override
-    public long count(IdentityInfo identityInfo) {
-        QueryWrapper<IdentityInfo> wrapper = new QueryWrapper<>(identityInfo);
-        return identityInfoMapper.selectCount(wrapper);
-    }
-
-
-    @Autowired
-    private SendWxMessage sendWxMessage;
-
-    @Override
-    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
-    public void audit(AuditDTO auditDTO){
-        if(Objects.isNull(auditDTO)
-            || Objects.isNull(auditDTO.getId())
-            || Objects.isNull(auditDTO.getAuditStatus())
-            ||  auditDTO.getAuditStatus()<2
-            ||  auditDTO.getAuditStatus()>3){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST);
-        }
-        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        IdentityInfo identityInfo = identityInfoMapper.selectById(auditDTO.getId());
-        if(Objects.isNull(identityInfo)){
-            throw new BusinessException(ResponseStatus.DATA_EMPTY);
-        }
-        if(!Constants.equalsInteger(identityInfo.getAuditStatus(),Constants.ONE)){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸插鎵癸紝璇峰嬁閲嶅鎿嶄綔");
-        }
-        Member member = memberMapper.selectById(identityInfo.getMemberId());
-        if(Objects.isNull(member)){
-            throw new BusinessException(ResponseStatus.DATA_EMPTY);
-        }
-        identityInfo.setAuditStatus(auditDTO.getAuditStatus());
-        identityInfo.setAuditRemark(auditDTO.getAuditRemark());
-        identityInfo.setAuditTime(new Date());
-        Date date = new Date();
-        identityInfoMapper.update(new UpdateWrapper<IdentityInfo>().lambda()
-                .set(IdentityInfo::getAuditStatus, auditDTO.getAuditStatus() )
-                .set(StringUtils.isNotBlank(auditDTO.getAuditRemark()),IdentityInfo::getAuditRemark,auditDTO.getAuditRemark())
-                .set(IdentityInfo::getAuditTime,date)
-                .set(IdentityInfo::getUpdateUser,user.getId())
-                .set(IdentityInfo::getUpdateTime,date)
-                .eq(IdentityInfo::getId,identityInfo.getId())
-        );
-
-        memberMapper.update(new UpdateWrapper<Member>().lambda()
-                .set(Member::getUpdateUser,user.getId())
-                .set(Member::getUpdateTime,date)
-                .eq(Member::getId,identityInfo.getMemberId())
-        );
-
-        //鍙戦�佸井淇¢�氱煡
-        if(StringUtils.isNotBlank(member.getOpenid())){
-            sendWxMessage.identityInfoMessage(member.getOpenid(),identityInfo);
-        }
-
-    }
-}
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 29ef2ca..5c4f12d 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
@@ -12,12 +12,12 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.IdentityInfoMapper;
 import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.OrdersMapper;
 import com.doumee.dao.business.ShopInfoMapper;
 import com.doumee.dao.business.SmsrecordMapper;
-import com.doumee.dao.business.model.IdentityInfo;
 import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.Orders;
 import com.doumee.dao.business.model.ShopInfo;
 import com.doumee.dao.business.model.MemberRevenue;
 import com.doumee.dao.business.model.Smsrecord;
@@ -27,6 +27,7 @@
 import com.doumee.dao.vo.AccountResponse;
 import com.doumee.dao.vo.MemberDetailVO;
 import com.doumee.dao.vo.MemberListVO;
+import com.doumee.dao.vo.PlatformAboutVO;
 import com.doumee.dao.vo.UserCenterVO;
 import com.doumee.service.business.MemberService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -45,6 +46,7 @@
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
@@ -64,9 +66,6 @@
     private MemberMapper memberMapper;
 
     @Autowired
-    private IdentityInfoMapper identityInfoMapper;
-
-    @Autowired
     private SmsrecordMapper smsrecordMapper;
 
     @Autowired
@@ -80,6 +79,9 @@
 
     @Autowired
     private ShopInfoMapper shopInfoMapper;
+
+    @Autowired
+    private OrdersMapper ordersMapper;
 
 
     @Override
@@ -129,8 +131,8 @@
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
         if(StringUtils.isNotBlank(member.getCoverImage())){
-            String path  = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
-                    +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MEMBER_FILES).getCode();
+            String path  = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
+                    +systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILES).getCode();
             member.setFullCoverImage(path + member.getCoverImage());
         }
         return member;
@@ -323,8 +325,7 @@
                 member.setDeleted(Constants.ZERO);
                 member.setOpenid(wxPhoneRequest.getOpenid());
                 member.setTelephone(mobile);
-                member.setNickName(mobile);
-//                member.setCoverImage("1.png");
+                member.setNickName(mobile.substring(0, 3) + "****" + mobile.substring(7));
                 member.setAmount(Constants.ZERO.longValue());
                 member.setTotalAmount(Constants.ZERO.longValue());
                 member.setStatus(Constants.ZERO);
@@ -385,75 +386,51 @@
     }
 
 
-//    @Override
-//    public void editUseIdentity(Member member){
-//        if(Objects.isNull(member)
-//                || Objects.isNull(member.getUseIdentity())){
-//            throw new BusinessException(ResponseStatus.BAD_REQUEST);
-//        }
-//        if(Constants.equalsInteger(member.getUseIdentity(),Constants.ZERO)){
-//            member.setUseIdentity(Constants.ZERO);
-//            memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getUseIdentity,Constants.ZERO).eq(Member::getId,member.getId()));
-//        }else{
-//            if(identityInfoMapper.selectCount(new QueryWrapper<IdentityInfo>().lambda().eq(IdentityInfo::getDeleted,Constants.ZERO)
-//                    .eq(IdentityInfo::getMemberId,member.getId())
-//                    .eq(IdentityInfo::getAuditStatus,Constants.TWO))>Constants.ZERO){
-//                memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getUseIdentity,Constants.ONE).eq(Member::getId,member.getId()));
-//            }else{
-//                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鏃犲彲鐢ㄦ帴鍗曡韩浠�!");
-//            }
-//        }
-//    }
-
-
     @Override
-    public Member getMemberInfo(Integer memberId){
-        Member member  = this.findById(memberId);
+    public UserCenterVO getMemberInfo(Integer memberId){
+        Member member  = memberMapper.selectById(memberId);
         if(Objects.isNull(member)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
+        // 鐢ㄦ埛涓績鏁版嵁
+        UserCenterVO userCenterVO = new UserCenterVO();
+        userCenterVO.setNickName(member.getNickName());
+        userCenterVO.setName(member.getName());
+        userCenterVO.setTelephone(member.getTelephone());
+        userCenterVO.setCoverImage(member.getCoverImage());
         if(StringUtils.isNotBlank(member.getCoverImage())){
-            String path  = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
-                    +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MEMBER_FILES).getCode();
-            member.setFullCoverImage(path + member.getCoverImage());
+            String path  = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
+                    +systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILES).getCode();
+            userCenterVO.setFullCoverImage(path + member.getCoverImage());
         }
-//        UserCenterVO userCenterVO = new UserCenterVO();
-//        userCenterVO.setReleaseTaskTotal(Constants.ZERO);
-//        userCenterVO.setWaitReceiveTotal(Constants.ZERO);
-//        userCenterVO.setDoingTotal(Constants.ZERO);
-//        userCenterVO.setWaitCommentTotal(Constants.ZERO);
-//        userCenterVO.setTaskingTotal(Constants.ZERO);
-//        userCenterVO.setDoneTotal(Constants.ZERO);
-//        userCenterVO.setReceiveTotal(Constants.ZERO);
-//        List<Orders> releaseOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO)
-//                .eq(Orders::getReleaseMemberId,member.getId()));
-//        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(releaseOrders)){
-//            userCenterVO.setReleaseTaskTotal(releaseOrders.size());
-//            userCenterVO.setWaitCommentTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.done.getKey())&&Constants.equalsInteger(i.getCommentStatus(),Constants.ZERO)).collect(Collectors.toList()).size());
-//            userCenterVO.setDoingTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())).collect(Collectors.toList()).size());
-//            userCenterVO.setWaitReceiveTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.wait.getKey())).collect(Collectors.toList()).size());
-//        }
-//        List<Orders> acceptOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO).eq(Orders::getAcceptMemberId,member.getId()));
-//        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(acceptOrders)){
-//            userCenterVO.setReceiveTotal(acceptOrders.size());
-//            userCenterVO.setTaskingTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())).collect(Collectors.toList()).size());
-//            userCenterVO.setDoneTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.done.getKey())).collect(Collectors.toList()).size());
-//        }
-//        member.setUserCenterVO(userCenterVO);
-        return member;
+        userCenterVO.setHasMessage(false);
+        // 寰呮敮浠樿鍗曟暟閲�
+        Long waitPayCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+                .eq(Orders::getMemberId, memberId)
+                .eq(Orders::getDeleted, Constants.ZERO)
+                .eq(Orders::getStatus, Constants.OrderStatus.waitPay.getStatus()));
+        userCenterVO.setWaitPayCount(waitPayCount.intValue());
+        // 寰呮敹璐ц鍗曟暟閲�
+        int[] waitReceiveStatuses = Constants.OrderCombinedStatus.waitReceive.getStatuses();
+        Long waitReceiveCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+                .eq(Orders::getMemberId, memberId)
+                .eq(Orders::getDeleted, Constants.ZERO)
+                .in(Orders::getStatus, Arrays.stream(waitReceiveStatuses).boxed().collect(Collectors.toList())));
+        userCenterVO.setWaitReceiveCount(waitReceiveCount.intValue());
+        return userCenterVO;
     }
 
 
 
 
     @Override
-    public UserCenterVO getPlatformAboutUs(){
-        UserCenterVO userCenterVO = new UserCenterVO();
-        userCenterVO.setAboutUs(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ABOUT_US).getCode()));
-        userCenterVO.setUserAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.USER_AGREEMENT).getCode()));
-        userCenterVO.setPrivacyAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PRIVACY_AGREEMENT).getCode()));
-        userCenterVO.setServerIntroduce(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_INTRODUCE).getCode()));
-        return userCenterVO;
+    public PlatformAboutVO getPlatformAboutUs(){
+        PlatformAboutVO vo = new PlatformAboutVO();
+        vo.setAboutUs(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ABOUT_US).getCode()));
+        vo.setUserAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.USER_AGREEMENT).getCode()));
+        vo.setPrivacyAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PRIVACY_AGREEMENT).getCode()));
+        vo.setServerIntroduce(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_INTRODUCE).getCode()));
+        return vo;
     }
 
     @Override
@@ -543,8 +520,8 @@
         detail.setArea(member.getArea());
         detail.setAutoReceiveStatus(member.getAutoReceiveStatus());
         if (StringUtils.isNotBlank(member.getCoverImage())) {
-            String path = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
-                    + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.MEMBER_FILES).getCode();
+            String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+                    + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILES).getCode();
             detail.setFullCoverImage(path + member.getCoverImage());
         }
         return detail;
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 566ad1d..5224b0f 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
@@ -20,9 +20,11 @@
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.system.SystemUserMapper;
+import com.doumee.dao.system.model.SystemDictData;
 import com.doumee.dao.system.model.SystemUser;
 import com.doumee.dao.dto.CalculateLocalPriceDTO;
 import com.doumee.dao.dto.CalculateRemotePriceDTO;
+import com.doumee.dao.dto.CommentOrderDTO;
 import com.doumee.dao.dto.CreateOrderDTO;
 import com.doumee.dao.dto.DispatchDTO;
 import com.doumee.dao.dto.MyOrderDTO;
@@ -30,6 +32,7 @@
 import com.doumee.dao.vo.*;
 import com.doumee.service.business.OrderLogService;
 import com.doumee.service.business.OrdersService;
+import com.doumee.service.business.AreasService;
 import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
 import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
 import com.github.binarywang.wxpay.exception.WxPayException;
@@ -92,6 +95,15 @@
     private OrdersRefundMapper ordersRefundMapper;
 
     @Autowired
+    private OtherOrdersMapper otherOrdersMapper;
+
+    @Autowired
+    private OrderCommentMapper orderCommentMapper;
+
+    @Autowired
+    private RevenueMapper revenueMapper;
+
+    @Autowired
     private WxMiniUtilService wxMiniUtilService;
 
     @Autowired
@@ -107,6 +119,9 @@
 
     @Autowired
     private OperationConfigBiz operationConfigBiz;
+
+    @Autowired
+    private AreasService areasService;
 
     @Override
     public Integer create(Orders orders) {
@@ -1135,8 +1150,8 @@
 
     private String getOrdersPrefix() {
         try {
-            return systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
-                    + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.ORDERS_FILES).getCode();
+            return systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+                    + systemDictDataBiz.queryByCode(Constants.OSS, Constants.ORDERS_FILES).getCode();
         } catch (Exception e) {
             return "";
         }
@@ -1307,6 +1322,102 @@
                 vo.setDetailList(buildDetailList(details));
 
                 // 閫炬湡淇℃伅锛堜粎寰呭彇浠剁姸鎬佽绠楋級
+                if (Integer.valueOf(Constants.OrderStatus.arrived.getStatus()).equals(o.getStatus())) {
+                    OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(o, details);
+                    vo.setOverdue(overdueInfo.getOverdue());
+                    vo.setOverdueDays(overdueInfo.getOverdueDays());
+                    vo.setOverdueFee(overdueInfo.getOverdueFee());
+                }
+                voList.add(vo);
+            }
+        }
+
+        IPage<MyOrderVO> vPage = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        PageData<MyOrderVO> pageData = PageData.from(vPage);
+        pageData.setRecords(voList);
+        pageData.setTotal(orderPage.getTotal());
+        pageData.setPage(orderPage.getCurrent());
+        pageData.setCapacity(orderPage.getSize());
+        return pageData;
+    }
+
+    @Override
+    public PageData<MyOrderVO> findShopOrderPage(PageWrap<MyOrderDTO> pageWrap, Integer shopId) {
+        MyOrderDTO model = pageWrap.getModel();
+        Integer status = model != null ? model.getStatus() : null;
+        Integer combinedStatus = model != null ? model.getCombinedStatus() : null;
+
+        // 瑙f瀽鍚堝苟鐘舵�佷负鍏蜂綋鐘舵�佸垪琛�
+        List<Integer> statusList = null;
+        if (combinedStatus != null) {
+            Constants.OrderCombinedStatus combined = Constants.OrderCombinedStatus.getByKey(combinedStatus);
+            if (combined != null) {
+                statusList = new ArrayList<>();
+                for (int s : combined.getStatuses()) {
+                    statusList.add(s);
+                }
+            }
+        }
+
+        IPage<Orders> p = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        MPJLambdaWrapper<Orders> wrapper = new MPJLambdaWrapper<Orders>()
+                .selectAll(Orders.class)
+                .select("s1.name", Orders::getDepositShopName)
+                .select("s1.link_name", Orders::getDepositShopLinkName)
+                .select("s1.link_phone", Orders::getDepositShopLinkPhone)
+                .select("s2.name", Orders::getTakeShopName)
+                .select("s2.address", Orders::getTakeShopAddress)
+                .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID")
+                .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID")
+                .eq(Orders::getPayStatus, Constants.ONE)
+                .and(w -> w.eq(Orders::getDepositShopId, shopId).or().eq(Orders::getTakeShopId, shopId))
+                .eq(status != null, Orders::getStatus, status)
+                .in(statusList != null, Orders::getStatus, statusList)
+                .orderByDesc(Orders::getCreateTime);
+
+        IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper);
+        List<MyOrderVO> voList = new ArrayList<>();
+        if (orderPage != null && orderPage.getRecords() != null) {
+            for (Orders o : orderPage.getRecords()) {
+                MyOrderVO vo = new MyOrderVO();
+                vo.setId(o.getId());
+                vo.setCode(o.getCode());
+                vo.setType(o.getType());
+                vo.setStatus(o.getStatus());
+                vo.setCreateTime(o.getCreateTime());
+                vo.setExpectedTakeTime(o.getExpectedTakeTime());
+
+                vo.setDepositShopName(o.getDepositShopName());
+                vo.setDepositShopLinkName(o.getDepositShopLinkName());
+                vo.setDepositShopPhone(o.getDepositShopLinkPhone());
+
+                // 闂ㄥ簵瑙掕壊锛氬瓨浠堕棬搴�=1锛屽彇浠堕棬搴�=2
+                if (Constants.equalsInteger(o.getDepositShopId(), shopId)) {
+                    vo.setShopRole(Constants.ONE);
+                } else if (Constants.equalsInteger(o.getTakeShopId(), shopId)) {
+                    vo.setShopRole(Constants.TWO);
+                }
+
+                if (o.getTakeShopId() != null) {
+                    vo.setTakeShopName(o.getTakeShopName());
+                    vo.setTakeShopAddress(o.getTakeShopAddress());
+                } else {
+                    vo.setTakeLocation(o.getTakeLocation());
+                    vo.setTakeLocationRemark(o.getTakeLocationRemark());
+                }
+
+                vo.setTakeUser(o.getTakeUser());
+                vo.setTakePhone(o.getTakePhone());
+                vo.setDeclaredFee(o.getDeclaredFee());
+                vo.setEstimatedAmount(o.getEstimatedAmount());
+
+                List<OrdersDetail> details = ordersDetailMapper.selectList(
+                        new QueryWrapper<OrdersDetail>().lambda()
+                                .eq(OrdersDetail::getOrderId, o.getId())
+                                .eq(OrdersDetail::getDeleted, Constants.ZERO));
+
+                vo.setDetailList(buildDetailList(details));
+
                 if (Integer.valueOf(Constants.OrderStatus.arrived.getStatus()).equals(o.getStatus())) {
                     OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(o, details);
                     vo.setOverdue(overdueInfo.getOverdue());
@@ -1607,6 +1718,443 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public PayResponse payOverdueFee(Integer orderId, Integer memberId) {
+        // 1. 鏌ヨ瀵勫瓨璁㈠崟
+        Orders order = ordersMapper.selectOne(new QueryWrapper<Orders>().lambda()
+                .eq(Orders::getId, orderId)
+                .eq(Orders::getMemberId, memberId)
+                .eq(Orders::getDeleted, Constants.ZERO));
+        if (order == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+        }
+        // 2. 鏍¢獙鐘舵�侊細寰呭彇浠�(5) + 閫炬湡(1)
+        if (!Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.arrived.getStatus())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鏀寔閫炬湡鏀粯");
+        }
+        if (!Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曚笉瀛樺湪閫炬湡璐圭敤");
+        }
+        if (order.getOverdueAmount() == null || order.getOverdueAmount() <= 0) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "閫炬湡璐圭敤寮傚父锛屾棤娉曞彂璧锋敮浠�");
+        }
+        // 3. 鏌ヨ浼氬憳
+        Member member = memberMapper.selectById(memberId);
+        if (member == null || StringUtils.isBlank(member.getOpenid())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鐢ㄦ埛淇℃伅寮傚父锛屾棤娉曞彂璧锋敮浠�");
+        }
+        // 4. 鍒涘缓閫炬湡璐圭敤璁㈠崟
+        String outTradeNo = generateOrderTradeNo();
+        Date now = new Date();
+        OtherOrders otherOrders = new OtherOrders();
+        otherOrders.setType(Constants.TWO); // 2=閫炬湡璐圭敤璁㈠崟
+        otherOrders.setMemberId(memberId);
+        otherOrders.setOrderId(orderId);
+        otherOrders.setPayAccount(order.getOverdueAmount());
+        otherOrders.setPayStatus(Constants.ZERO);
+        otherOrders.setCode("OD" + new java.text.SimpleDateFormat("yyyyMMddHHmmss").format(now) + orderId);
+        otherOrders.setOutTradeNo(outTradeNo);
+        otherOrders.setDeleted(Constants.ZERO);
+        otherOrders.setCreateTime(now);
+        otherOrdersMapper.insert(otherOrders);
+
+        // 5. 鍞よ捣寰俊鏀粯
+        return wxPayForOtherOrder(otherOrders, member.getOpenid(), Constants.OrdersAttach.OVERDUE_FEE);
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+    public void handleOverdueFeePayNotify(String outTradeNo, String wxTradeNo) {
+        // 1. 鏌ユ壘閫炬湡璐圭敤璁㈠崟
+        OtherOrders otherOrders = otherOrdersMapper.selectOne(new QueryWrapper<OtherOrders>().lambda()
+                .eq(OtherOrders::getOutTradeNo, outTradeNo)
+                .eq(OtherOrders::getDeleted, Constants.ZERO)
+                .last("limit 1"));
+        if (otherOrders == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "閫炬湡璐圭敤璁㈠崟涓嶅瓨鍦�: " + outTradeNo);
+        }
+        // 2. 骞傜瓑锛氬凡鏀粯鍒欒烦杩�
+        if (Constants.equalsInteger(otherOrders.getPayStatus(), Constants.ONE)) {
+            return;
+        }
+        Date now = new Date();
+        // 3. 鏇存柊閫炬湡璐圭敤璁㈠崟鐘舵��
+        otherOrders.setPayStatus(Constants.ONE);
+        otherOrders.setPayTime(now);
+        otherOrders.setWxExternalNo(wxTradeNo);
+        otherOrders.setUpdateTime(now);
+        otherOrdersMapper.updateById(otherOrders);
+
+        // 4. 鏇存柊瀵勫瓨璁㈠崟閫炬湡鐘舵�佷负宸叉敮浠�(2)锛屾洿鏂版�婚噾棰濓紝閲嶇畻涓夋柟鏀剁泭
+        if (otherOrders.getOrderId() != null) {
+            Orders order = ordersMapper.selectById(otherOrders.getOrderId());
+            if (order != null) {
+                order.setOverdueStatus(Constants.TWO); // 2=宸叉敮浠�
+                // 鎬婚噾棰� = 鍘熼噾棰� + 閫炬湡璐圭敤
+                Long overdueFee = otherOrders.getPayAccount() != null ? otherOrders.getPayAccount() : 0L;
+                long newTotal = (order.getTotalAmount() != null ? order.getTotalAmount() : 0L) + overdueFee;
+                order.setTotalAmount(newTotal);
+                order.setUpdateTime(now);
+                ordersMapper.updateById(order);
+                // 閲嶇畻涓夋柟鏀剁泭
+                calculateAndSaveOrderFees(order.getId());
+            }
+        }
+    }
+
+    @Override
+    public void deleteMyOrder(Integer orderId, Integer memberId) {
+        Orders order = ordersMapper.selectById(orderId);
+        if (order == null || !Constants.equalsInteger(order.getDeleted(), Constants.ZERO)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if (!Constants.equalsInteger(order.getMemberId(), memberId)) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鏃犳潈鎿嶄綔姝よ鍗�");
+        }
+        // 浠呭凡瀹屾垚(7)銆佸凡鍙栨秷(99)銆佸凡閫�娆�(96)鍙垹闄�
+        int status = Constants.formatIntegerNum(order.getStatus());
+        if (status != Constants.OrderStatus.finished.getStatus()
+                && status != Constants.OrderStatus.cancelled.getStatus()
+                && status != Constants.OrderStatus.closed.getStatus()) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍙垹闄�");
+        }
+        ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                .set(Orders::getDeleted, Constants.ONE)
+                .set(Orders::getUpdateTime, new Date())
+                .eq(Orders::getId, orderId));
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+    public PayResponse payShopDeposit(Integer shopId) {
+        // 1. 鏌ヨ闂ㄥ簵淇℃伅
+        ShopInfo shopInfo = shopInfoMapper.selectById(shopId);
+        if (shopInfo == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "闂ㄥ簵涓嶅瓨鍦�");
+        }
+        // 2. 鏍¢獙鐘舵�侊細瀹℃壒閫氳繃(1)鎵嶈兘鏀粯鎶奸噾
+        if (!Constants.equalsInteger(shopInfo.getAuditStatus(), Constants.ONE)) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠闂ㄥ簵鐘舵�佷笉鏀寔鏀粯鎶奸噾");
+        }
+        if (shopInfo.getDepositAmount() == null || shopInfo.getDepositAmount() <= 0) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎶奸噾閲戦寮傚父锛屾棤娉曞彂璧锋敮浠�");
+        }
+        // 3. 鏌ヨ浼氬憳openid
+        Member member = memberMapper.selectById(shopInfo.getRegionMemberId());
+        if (member == null || StringUtils.isBlank(member.getOpenid())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鐢ㄦ埛淇℃伅寮傚父锛屾棤娉曞彂璧锋敮浠�");
+        }
+        // 4. 鍒涘缓鎶奸噾璁㈠崟
+        String outTradeNo = generateOrderTradeNo();
+        Date now = new Date();
+        OtherOrders otherOrders = new OtherOrders();
+        otherOrders.setType(Constants.ZERO); // 0=搴楅摵鎶奸噾璁㈠崟
+        otherOrders.setMemberId(shopInfo.getRegionMemberId());
+        otherOrders.setPayAccount(shopInfo.getDepositAmount());
+        otherOrders.setPayStatus(Constants.ZERO);
+        otherOrders.setCode("SD" + new java.text.SimpleDateFormat("yyyyMMddHHmmss").format(now) + shopId);
+        otherOrders.setOutTradeNo(outTradeNo);
+        otherOrders.setDeleted(Constants.ZERO);
+        otherOrders.setCreateTime(now);
+        otherOrdersMapper.insert(otherOrders);
+
+        // 5. 鍞よ捣寰俊鏀粯
+        return wxPayForOtherOrder(otherOrders, member.getOpenid(), Constants.OrdersAttach.SHOP_DEPOSIT);
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+    public void handleShopDepositPayNotify(String outTradeNo, String wxTradeNo) {
+        // 1. 鏌ユ壘鎶奸噾璁㈠崟
+        OtherOrders otherOrders = otherOrdersMapper.selectOne(new QueryWrapper<OtherOrders>().lambda()
+                .eq(OtherOrders::getOutTradeNo, outTradeNo)
+                .eq(OtherOrders::getDeleted, Constants.ZERO)
+                .last("limit 1"));
+        if (otherOrders == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鎶奸噾璁㈠崟涓嶅瓨鍦�: " + outTradeNo);
+        }
+        // 2. 骞傜瓑锛氬凡鏀粯鍒欒烦杩�
+        if (Constants.equalsInteger(otherOrders.getPayStatus(), Constants.ONE)) {
+            return;
+        }
+        Date now = new Date();
+        // 3. 鏇存柊鎶奸噾璁㈠崟鐘舵��
+        otherOrders.setPayStatus(Constants.ONE);
+        otherOrders.setPayTime(now);
+        otherOrders.setWxExternalNo(wxTradeNo);
+        otherOrders.setUpdateTime(now);
+        otherOrdersMapper.updateById(otherOrders);
+
+        // 4. 鏌ヨ闂ㄥ簵淇℃伅锛堥�氳繃娉ㄥ唽浼氬憳涓婚敭鍏宠仈锛�
+        ShopInfo shopInfo = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
+                .eq(ShopInfo::getRegionMemberId, otherOrders.getMemberId())
+                .eq(ShopInfo::getDeleted, Constants.ZERO)
+                .last("limit 1"));
+        if (shopInfo == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "闂ㄥ簵涓嶅瓨鍦�");
+        }
+        // 5. 鏇存柊闂ㄥ簵鐘舵�侊細宸叉敮浠樻娂閲�
+        shopInfo.setAuditStatus(Constants.THREE); // 3=宸叉敮浠樻娂閲�
+        shopInfo.setPayStatus(Constants.ONE);
+        shopInfo.setPayTime(now);
+        shopInfo.setWxExternalNo(wxTradeNo);
+        shopInfo.setCode(otherOrders.getCode());
+        Member member = memberMapper.selectById(otherOrders.getMemberId());
+        if (member != null) {
+            shopInfo.setPayMemberOpenId(member.getOpenid());
+        }
+        shopInfo.setUpdateTime(now);
+        shopInfoMapper.updateById(shopInfo);
+
+        // 6. 鎶奸噾鏀粯瀹屾垚鍚庯紝鑻ュ煄甯傛湭寮�閫氬垯鑷姩寮�閫�
+        if (shopInfo.getAreaId() != null) {
+            Areas shopArea = areasBiz.resolveArea(shopInfo.getAreaId());
+            if (shopArea != null && shopArea.getParentId() != null) {
+                Areas cityArea = areasBiz.resolveArea(shopArea.getParentId());
+                if (cityArea != null && !Constants.equalsInteger(cityArea.getStatus(), Constants.ONE)) {
+                    cityArea.setStatus(Constants.ONE);
+                    cityArea.setEditDate(now);
+                    areasService.updateById(cityArea);
+                    areasService.cacheData();
+                }
+            }
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+    public void settleOrders() {
+        // 1. 璇诲彇缁撶畻澶╂暟閰嶇疆
+        SystemDictData settlementConfig = systemDictDataBiz.queryByCode(Constants.OPERATION_CONFIG, Constants.OP_SETTLEMENT_DATE);
+        if (settlementConfig == null || StringUtils.isBlank(settlementConfig.getCode())) {
+            return;
+        }
+        int days = Integer.parseInt(settlementConfig.getCode());
+        // 缁撶畻鎴鏃堕棿 = 褰撳墠鏃堕棿 - N澶�
+        Calendar cal = Calendar.getInstance();
+        cal.add(Calendar.DAY_OF_MONTH, -days);
+        Date deadline = cal.getTime();
+
+        // 2. 鏌ヨ宸插畬鎴愮殑寰呯粨绠楄鍗曪紙瀹屾垚鏃堕棿 <= 鎴鏃堕棿锛�
+        List<Orders> ordersList = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
+                .eq(Orders::getDeleted, Constants.ZERO)
+                .eq(Orders::getStatus, Constants.OrderStatus.finished.getStatus())
+                .eq(Orders::getSettlementStatus, Constants.ZERO)
+                .le(Orders::getFinishTime, deadline));
+        if (ordersList == null || ordersList.isEmpty()) {
+            return;
+        }
+
+        Date now = new Date();
+        for (Orders order : ordersList) {
+            // 3. 鏇存柊璁㈠崟缁撶畻鐘舵��
+            ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                    .set(Orders::getSettlementStatus, Constants.ONE)
+                    .set(Orders::getSettlementTime, now)
+                    .set(Orders::getUpdateTime, now)
+                    .eq(Orders::getId, order.getId()));
+
+            // 4. 鏌ヨ鍏宠仈鐨勫緟鍏ヨ处 Revenue 璁板綍
+            List<Revenue> revenues = revenueMapper.selectList(new QueryWrapper<Revenue>().lambda()
+                    .eq(Revenue::getObjId, order.getId())
+                    .eq(Revenue::getObjType, Constants.ZERO)
+                    .eq(Revenue::getVaildStatus, Constants.ZERO)
+                    .eq(Revenue::getDeleted, Constants.ZERO));
+
+            for (Revenue revenue : revenues) {
+                Long amount = revenue.getAmount() != null ? revenue.getAmount() : 0L;
+                // 鏇存柊 Revenue 涓哄凡鍏ヨ处
+                revenueMapper.update(new UpdateWrapper<Revenue>().lambda()
+                        .set(Revenue::getVaildStatus, Constants.ONE)
+                        .set(Revenue::getUpdateTime, now)
+                        .eq(Revenue::getId, revenue.getId()));
+
+                // 鏍规嵁 memberType 鏇存柊浣欓
+                if (Constants.equalsInteger(revenue.getMemberType(), Constants.ONE)) {
+                    // 鍙告満锛氶�氳繃 memberId 鏌� DriverInfo锛屾洿鏂� balance / totalBalance
+                    DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+                            .eq(DriverInfo::getMemberId, revenue.getMemberId())
+                            .eq(DriverInfo::getDeleted, Constants.ZERO)
+                            .last("limit 1"));
+                    if (driver != null) {
+                        driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+                                .setSql(" BALANCE = IFNULL(BALANCE, 0) + " + amount)
+                                .setSql(" TOTAL_BALANCE = IFNULL(TOTAL_BALANCE, 0) + " + amount)
+                                .eq(DriverInfo::getId, driver.getId()));
+                    }
+                } else if (Constants.equalsInteger(revenue.getMemberType(), Constants.TWO)) {
+                    // 闂ㄥ簵锛氶�氳繃 memberId 鏌� ShopInfo(regionMemberId)锛屾洿鏂� balance / totalBalance
+                    ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
+                            .eq(ShopInfo::getRegionMemberId, revenue.getMemberId())
+                            .eq(ShopInfo::getDeleted, Constants.ZERO)
+                            .last("limit 1"));
+                    if (shop != null) {
+                        shopInfoMapper.update(new UpdateWrapper<ShopInfo>().lambda()
+                                .setSql(" BALANCE = IFNULL(BALANCE, 0) + " + amount)
+                                .setSql(" TOTAL_BALANCE = IFNULL(TOTAL_BALANCE, 0) + " + amount)
+                                .eq(ShopInfo::getId, shop.getId()));
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+    public void commentOrder(CommentOrderDTO dto, Integer memberId) {
+        // 1. 鏍¢獙璁㈠崟
+        Orders order = ordersMapper.selectById(dto.getOrderId());
+        if (order == null || Constants.equalsInteger(order.getDeleted(), Constants.ONE)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+        }
+        if (!Constants.equalsInteger(order.getMemberId(), memberId)) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃犳潈璇勪环璇ヨ鍗�");
+        }
+        if (!Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.finished.getStatus())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鏀寔璇勪环");
+        }
+        if (Constants.equalsInteger(order.getCommentStatus(), Constants.ONE)) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曞凡璇勪环");
+        }
+
+        // 2. 寮傚湴瀵勫瓨璁㈠崟锛氬彇浠堕棬搴楀拰鍙告満璇勫垎鏍¢獙
+        boolean isRemote = Constants.equalsInteger(order.getType(), Constants.ONE);
+        if (isRemote) {
+            if (dto.getDriverScore() == null) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "寮傚湴瀵勫瓨璁㈠崟蹇呴』璇勪环鍙告満");
+            }
+            if (order.getTakeShopId() != null && dto.getTakeScore() == null) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇疯瘎浠峰彇浠堕棬搴�");
+            }
+        }
+
+        Date now = new Date();
+
+        // 3. 鏇存柊璁㈠崟璇勪环鐘舵��
+        order.setCommentStatus(Constants.ONE);
+        order.setCommentInfo(dto.getContent());
+        order.setCommentDepositLevel(dto.getDepositScore());
+        order.setCommentTakeLevel(dto.getTakeScore());
+        order.setCommentDriverLevel(dto.getDriverScore());
+        order.setCommentTime(now);
+        order.setUpdateTime(now);
+        ordersMapper.updateById(order);
+
+        // 4. 鍒涘缓璇勪环璁板綍
+        // 4.1 瀛樹欢闂ㄥ簵
+        OrderComment depositComment = new OrderComment();
+        depositComment.setOrderId(order.getId());
+        depositComment.setOrderCode(order.getCode());
+        depositComment.setMemberId(memberId);
+        depositComment.setTargetType(Constants.ONE); // 1=瀛樹欢闂ㄥ簵
+        depositComment.setTargetId(order.getDepositShopId());
+        depositComment.setScore(dto.getDepositScore());
+        depositComment.setContent(dto.getContent());
+        depositComment.setDeleted(Constants.ZERO);
+        depositComment.setCreateTime(now);
+        orderCommentMapper.insert(depositComment);
+
+        // 4.2 鍙栦欢闂ㄥ簵锛堝紓鍦板瘎瀛樹笖鏈夊彇浠堕棬搴楋級
+        if (isRemote && order.getTakeShopId() != null && dto.getTakeScore() != null) {
+            OrderComment takeComment = new OrderComment();
+            takeComment.setOrderId(order.getId());
+            takeComment.setOrderCode(order.getCode());
+            takeComment.setMemberId(memberId);
+            takeComment.setTargetType(Constants.TWO); // 2=鍙栦欢闂ㄥ簵
+            takeComment.setTargetId(order.getTakeShopId());
+            takeComment.setScore(dto.getTakeScore());
+            takeComment.setContent(dto.getContent());
+            takeComment.setDeleted(Constants.ZERO);
+            takeComment.setCreateTime(now);
+            orderCommentMapper.insert(takeComment);
+        }
+
+        // 4.3 鍙告満锛堝紓鍦板瘎瀛橈級
+        if (isRemote && order.getAcceptDriver() != null && dto.getDriverScore() != null) {
+            OrderComment driverComment = new OrderComment();
+            driverComment.setOrderId(order.getId());
+            driverComment.setOrderCode(order.getCode());
+            driverComment.setMemberId(memberId);
+            driverComment.setTargetType(Constants.THREE); // 3=鍙告満
+            driverComment.setTargetId(order.getAcceptDriver());
+            driverComment.setScore(dto.getDriverScore());
+            driverComment.setContent(dto.getContent());
+            driverComment.setDeleted(Constants.ZERO);
+            driverComment.setCreateTime(now);
+            orderCommentMapper.insert(driverComment);
+        }
+
+        // 5. 鏇存柊闂ㄥ簵/鍙告満骞冲潎璇勫垎
+        updateTargetScore(Constants.ONE, order.getDepositShopId());
+        if (isRemote && order.getTakeShopId() != null) {
+            updateTargetScore(Constants.TWO, order.getTakeShopId());
+        }
+        if (isRemote && order.getAcceptDriver() != null) {
+            updateTargetScore(Constants.THREE, order.getAcceptDriver());
+        }
+    }
+
+    /**
+     * 鏇存柊璇勪环瀵硅薄锛堥棬搴�/鍙告満锛夌殑骞冲潎璇勫垎
+     */
+    private void updateTargetScore(Integer targetType, Integer targetId) {
+        List<OrderComment> comments = orderCommentMapper.selectList(new QueryWrapper<OrderComment>().lambda()
+                .eq(OrderComment::getDeleted, Constants.ZERO)
+                .eq(OrderComment::getTargetType, targetType)
+                .eq(OrderComment::getTargetId, targetId));
+        if (comments.isEmpty()) {
+            return;
+        }
+        double avg = comments.stream()
+                .mapToInt(OrderComment::getScore)
+                .average()
+                .orElse(0.0);
+        BigDecimal score = BigDecimal.valueOf(avg).setScale(1, BigDecimal.ROUND_HALF_UP);
+        Date now = new Date();
+        if (Constants.equalsInteger(targetType, Constants.ONE) || Constants.equalsInteger(targetType, Constants.TWO)) {
+            ShopInfo shopInfo = shopInfoMapper.selectById(targetId);
+            if (shopInfo != null) {
+                shopInfo.setScore(score);
+                shopInfo.setUpdateTime(now);
+                shopInfoMapper.updateById(shopInfo);
+            }
+        } else if (Constants.equalsInteger(targetType, Constants.THREE)) {
+            DriverInfo driverInfo = driverInfoMapper.selectById(targetId);
+            if (driverInfo != null) {
+                driverInfo.setScore(score);
+                driverInfo.setUpdateTime(now);
+                driverInfoMapper.updateById(driverInfo);
+            }
+        }
+    }
+
+    /**
+     * 鍞よ捣寰俊鏀粯锛堝叾浠栬鍗曪級
+     */
+    private PayResponse wxPayForOtherOrder(OtherOrders otherOrders, String openid, Constants.OrdersAttach ordersAttach) {
+        try {
+            WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
+            request.setBody(ordersAttach.getName());
+            request.setAttach(ordersAttach.getKey());
+            request.setOutTradeNo(otherOrders.getOutTradeNo());
+            long totalFee = otherOrders.getPayAccount() != null ? otherOrders.getPayAccount() : 0L;
+            request.setTotalFee((int) totalFee);
+            request.setTimeStart(DateUtil.DateToString(new Date(), "yyyyMMddHHmmss"));
+            request.setSpbillCreateIp(Constants.getIpAddr());
+            request.setOpenid(openid);
+
+            Object response = WxMiniConfig.wxPayService.createOrder(request);
+
+            PayResponse payResponse = new PayResponse();
+            payResponse.setResponse(response);
+            payResponse.setOrderId(otherOrders.getId());
+            return payResponse;
+        } catch (WxPayException e) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏀粯璋冭捣澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    @Override
     @Transactional(rollbackFor = {Exception.class, BusinessException.class})
     public void shopVerifyOrder(String verifyCode, Integer shopId, List<String> images, String remark) {
         if (StringUtils.isBlank(verifyCode)) {
@@ -1663,11 +2211,217 @@
             releaseVerifyCode(verifyCode);
             // 淇濆瓨鍑哄簱鍥剧墖锛坥bj_type=13 闂ㄥ簵鍑哄簱鍥剧墖锛屾渶澶�3寮狅級
             saveVerifyImages(order.getId(), images, Constants.FileType.STORE_OUT.getKey(), shopId);
+            // 鐢熸垚鏀剁泭璁板綍
+            calculateAndSaveOrderFees(order.getId());
+            generateRevenueRecords(order.getId());
             // 璁板綍璁㈠崟鏃ュ織
             saveShopVerifyLog(order, "闂ㄥ簵纭鍙栦欢", "闂ㄥ簵銆�" + shopName + "銆戠‘璁ゅ彇浠讹紝璁㈠崟瀹屾垚", remark, shopId);
         } else {
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽鏍搁攢");
         }
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+    public void confirmStoreOut(Integer orderId, Integer shopId, List<String> images, String remark) {
+        // 1. 鏌ヨ璁㈠崟
+        Orders order = ordersMapper.selectById(orderId);
+        if (order == null || Constants.equalsInteger(order.getDeleted(), Constants.ONE)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+        }
+        // 2. 鏍¢獙鐘舵�侊細寰呭彇浠�(5)
+        if (!Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.arrived.getStatus())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽鍑哄簱");
+        }
+        // 3. 鏍¢獙閫炬湡鐘舵�侊細0=鏈�炬湡 鎴� 2=宸叉敮浠�
+        if (order.getOverdueStatus() != null && Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璁㈠崟瀛樺湪閫炬湡鏈敮浠樿垂鐢紝璇峰厛瀹屾垚閫炬湡璐圭敤鏀粯");
+        }
+        // 4. 鏍¢獙纭鍒板簵鏃堕棿涓嶄负绌�
+        if (order.getConfirmArriveTime() == null) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璁㈠崟灏氭湭纭鍒板簵锛屾棤娉曞嚭搴�");
+        }
+        // 5. 鏍¢獙闂ㄥ簵涓庤鍗曞叧绯�
+        if (Constants.equalsInteger(order.getType(), Constants.ZERO)) {
+            // 灏卞湴瀵勫瓨锛氬彇浠堕棬搴楀嵆瀛樹欢闂ㄥ簵
+            if (!shopId.equals(order.getDepositShopId())) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曚笉灞炰簬褰撳墠闂ㄥ簵");
+            }
+        } else {
+            // 寮傚湴瀵勫瓨锛氭牎楠屽彇浠堕棬搴�
+            if (order.getTakeShopId() == null) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曟棤鍙栦欢闂ㄥ簵锛屾棤娉曞嚭搴�");
+            }
+            if (!shopId.equals(order.getTakeShopId())) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曚笉灞炰簬褰撳墠闂ㄥ簵");
+            }
+        }
+
+        // 6. 鏌ヨ闂ㄥ簵鍚嶇О
+        String shopName = "";
+        ShopInfo shopInfo = shopInfoMapper.selectById(shopId);
+        if (shopInfo != null) {
+            shopName = shopInfo.getName() != null ? shopInfo.getName() : "";
+        }
+
+        // 7. 鏇存柊璁㈠崟鐘舵�佷负宸插畬鎴�
+        Date now = new Date();
+        order.setStatus(Constants.OrderStatus.finished.getStatus());
+        order.setFinishTime(now);
+        order.setUpdateTime(now);
+        ordersMapper.updateById(order);
+
+        // 8. 閲婃斁鏍搁攢鐮�
+        if (StringUtils.isNotBlank(order.getMemberVerifyCode())) {
+            releaseVerifyCode(order.getMemberVerifyCode());
+        }
+
+        // 9. 淇濆瓨鍑哄簱鍥剧墖锛坥bj_type=13 闂ㄥ簵鍑哄簱鍥剧墖锛屾渶澶�3寮狅級
+        saveVerifyImages(order.getId(), images, Constants.FileType.STORE_OUT.getKey(), shopId);
+
+        // 10. 濡傛灉瀛樺湪閫�娆鹃噾棰濓紝鍏堜繚瀛橀��娆捐褰曞啀璋冪敤寰俊閫�娆�
+        //    閫�娆捐褰曞湪閫�娆捐皟鐢ㄥ墠钀藉簱锛岄伩鍏嶉��娆炬垚鍔熶絾鏈湴寮傚父瀵艰嚧鏃犺褰�
+        if (order.getRefundAmount() != null && order.getRefundAmount() > 0
+                && StringUtils.isNotBlank(order.getOutTradeNo())
+                && order.getPayAmount() != null && order.getPayAmount() > 0) {
+            OrdersRefund refundRecord = new OrdersRefund();
+            refundRecord.setOrderId(orderId);
+            refundRecord.setType(3); // 鍑哄簱閫�娆�
+            refundRecord.setCreateTime(now);
+            refundRecord.setRefundRemark(remark);
+            refundRecord.setDeleted(Constants.ZERO);
+            ordersRefundMapper.insert(refundRecord);
+
+            // 璋冪敤寰俊閫�娆撅紙鏀惧湪鏈�鍚庯紝纭繚鍓嶇疆鎿嶄綔鍏ㄩ儴鎴愬姛锛�
+            String refundCode = wxMiniUtilService.wxRefund(
+                    order.getOutTradeNo(), order.getPayAmount(), order.getRefundAmount());
+
+            // 閫�娆炬垚鍔熷悗鍥炲~閫�娆惧崟鍙峰拰鏃堕棿
+            refundRecord.setRefundCode(refundCode);
+            refundRecord.setRefundTime(new Date());
+            ordersRefundMapper.updateById(refundRecord);
+        }
+
+        // 11. 鐢熸垚鏀剁泭璁板綍
+        calculateAndSaveOrderFees(orderId);
+        generateRevenueRecords(orderId);
+
+        // 12. 璁板綍璁㈠崟鏃ュ織
+        String logInfo = "闂ㄥ簵銆�" + shopName + "銆戠‘璁ゅ嚭搴擄紝璁㈠崟瀹屾垚";
+        if (order.getRefundAmount() != null && order.getRefundAmount() > 0) {
+            logInfo += "锛岄��娆�" + Constants.getFormatMoney(order.getRefundAmount()) + "鍏�";
+        }
+        saveShopVerifyLog(order, "闂ㄥ簵纭鍑哄簱", logInfo, remark, shopId);
+    }
+
+    @Override
+    public void calculateAndSaveOrderFees(Integer orderId) {
+        Orders order = ordersMapper.selectById(orderId);
+        if (order == null || Constants.equalsInteger(order.getDeleted(), Constants.ONE)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+        }
+
+        Long totalAmount = order.getTotalAmount() != null ? order.getTotalAmount() : 0L;
+        // 璐圭巼锛堜负绌烘椂榛樿0锛�
+        BigDecimal depositRate = order.getDepositShopFeeRata() != null ? order.getDepositShopFeeRata() : BigDecimal.ZERO;
+        BigDecimal takeRate = order.getTakeShopFeeRata() != null ? order.getTakeShopFeeRata() : BigDecimal.ZERO;
+        BigDecimal driverRate = order.getDriverFeeRata() != null ? order.getDriverFeeRata() : BigDecimal.ZERO;
+        Long exceptionFeeVal = order.getExceptionFee() != null ? order.getExceptionFee() : 0L;
+
+        //瀛樹欢闂ㄥ簵鏀剁泭
+        Long depositShopFee = new BigDecimal(totalAmount)
+                .multiply(depositRate)
+                .setScale(0, RoundingMode.HALF_UP)
+                .longValue();
+
+        Long takeShopFee = 0L;
+        Long driverFee = 0L;
+
+        if (Constants.equalsInteger(order.getType(), Constants.TWO)) {
+            // 寮傚湴瀵勫瓨锛氬瓨浠堕棬搴� + 鍙告満
+            driverFee = new BigDecimal(totalAmount)
+                    .multiply(driverRate)
+                    .setScale(0, RoundingMode.HALF_UP)
+                    .longValue()
+                    + exceptionFeeVal;
+
+            // 寮傚湴瀵勫瓨涓旀湁鍙栦欢闂ㄥ簵锛氬姞涓婂彇浠堕棬搴楁敹鐩�
+            if (order.getTakeShopId() != null) {
+                takeShopFee = new BigDecimal(totalAmount)
+                        .multiply(takeRate)
+                        .setScale(0, RoundingMode.HALF_UP)
+                        .longValue();
+            }
+        }
+
+        ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                .eq(Orders::getId, orderId)
+                .set(Orders::getDepositShopFee, depositShopFee)
+                .set(Orders::getTakeShopFee, takeShopFee)
+                .set(Orders::getDriverFee, driverFee)
+                .set(Orders::getUpdateTime, new Date()));
+    }
+
+    /**
+     * 鐢熸垚闂ㄥ簵/鍙告満鏀剁泭璁板綍锛堟湭缁撶畻锛�
+     * 璁㈠崟瀹屾垚鏃惰皟鐢紝璇诲彇璁㈠崟涓婂凡璁$畻濂界殑璐圭敤瀛楁
+     */
+    private void generateRevenueRecords(Integer orderId) {
+        Orders order = ordersMapper.selectById(orderId);
+        if (order == null) {
+            return;
+        }
+        Date now = new Date();
+        Long depositShopFee = order.getDepositShopFee() != null ? order.getDepositShopFee() : 0L;
+        Long takeShopFee = order.getTakeShopFee() != null ? order.getTakeShopFee() : 0L;
+        Long driverFee = order.getDriverFee() != null ? order.getDriverFee() : 0L;
+
+        // 瀛樹欢闂ㄥ簵鏀剁泭
+        if (depositShopFee > 0 && order.getDepositShopId() != null) {
+            ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId());
+            if (depositShop != null && depositShop.getRegionMemberId() != null) {
+                revenueMapper.insert(buildRevenue(depositShop.getRegionMemberId(), Constants.TWO,
+                        depositShopFee, orderId, order.getCode()));
+            }
+        }
+
+        // 鍙栦欢闂ㄥ簵鏀剁泭锛堝紓鍦板瘎瀛樹笖鏈夊彇浠堕棬搴楋級
+        if (takeShopFee > 0 && order.getTakeShopId() != null) {
+            ShopInfo takeShop = shopInfoMapper.selectById(order.getTakeShopId());
+            if (takeShop != null && takeShop.getRegionMemberId() != null) {
+                revenueMapper.insert(buildRevenue(takeShop.getRegionMemberId(), Constants.TWO,
+                        takeShopFee, orderId, order.getCode()));
+            }
+        }
+
+        // 鍙告満鏀剁泭锛堝紓鍦板瘎瀛橈級
+        if (driverFee > 0 && order.getAcceptDriver() != null) {
+            DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver());
+            if (driver != null && driver.getMemberId() != null) {
+                revenueMapper.insert(buildRevenue(driver.getMemberId(), Constants.ONE,
+                        driverFee, orderId, order.getCode()));
+            }
+        }
+    }
+
+    /**
+     * 鏋勫缓鏀剁泭璁板綍
+     */
+    private Revenue buildRevenue(Integer memberId, Integer memberType, Long amount, Integer orderId, String orderNo) {
+        Revenue revenue = new Revenue();
+        revenue.setMemberId(memberId);
+        revenue.setMemberType(memberType); // 1=鍙告満, 2=闂ㄥ簵
+        revenue.setType(Constants.ZERO); // 0=瀹屾垚璁㈠崟
+        revenue.setOptType(Constants.ONE); // 1=鏀跺叆
+        revenue.setAmount(amount);
+        revenue.setVaildStatus(Constants.ZERO); // 0=鍏ヨ处涓紙鏈粨绠楋級
+        revenue.setObjId(orderId);
+        revenue.setObjType(Constants.ZERO); // 0=璁㈠崟涓氬姟
+        revenue.setStatus(Constants.ZERO); // 0=鎴愬姛
+        revenue.setOrderNo(orderNo);
+        revenue.setDeleted(Constants.ZERO);
+        revenue.setCreateTime(new Date());
+        return revenue;
     }
 
     @Override
@@ -1799,23 +2553,48 @@
                             + "澶╋紝閫炬湡璐圭敤" + Constants.getFormatMoney(overdueInfo.getOverdueFee()) + "鍏�",
                     null, shopId);
         } else {
-            // 鏈�炬湡锛氬畬鎴愯鍗�
-            order.setStatus(Constants.OrderStatus.finished.getStatus());
+            // 鏈�炬湡锛氭爣璁伴�炬湡鐘舵�佷负0锛岃鍗曚繚鎸佸綋鍓嶇姸鎬�
             order.setConfirmArriveTime(now);
-            order.setFinishTime(now);
             order.setOverdueStatus(Constants.ZERO);
+
+            // 灏卞湴瀵勫瓨锛氳绠楁槸鍚﹂渶瑕侀��娆�
+            if (Constants.equalsInteger(order.getType(), Constants.ZERO) && !CollectionUtils.isEmpty(details)) {
+                int actualDays = calcActualDepositDays(now, order.getDepositTime());
+                order.setDepositDays(actualDays);
+
+                int estimatedDays = order.getEstimatedDepositDays() != null ? order.getEstimatedDepositDays() : 1;
+                int refundDays = estimatedDays - actualDays;
+                if (refundDays > 0) {
+                    // 閫�娆鹃噾棰� = 閫�娆惧ぉ鏁� 脳 危(鐗╁搧鍗曚环 脳 鏁伴噺)
+                    long dailyBaseFee = 0L;
+                    for (OrdersDetail d : details) {
+                        dailyBaseFee += (d.getUnitPrice() != null ? d.getUnitPrice() : 0L)
+                                * (d.getNum() != null ? d.getNum() : 0);
+                    }
+                    long refundAmount = (long) refundDays * dailyBaseFee;
+                    order.setRefundAmount(refundAmount);
+                }
+            }
+
             order.setUpdateTime(now);
             ordersMapper.updateById(order);
 
-            // 閲婃斁鏍搁攢鐮�
-            if (StringUtils.isNotBlank(order.getMemberVerifyCode())) {
-                releaseVerifyCode(order.getMemberVerifyCode());
+            // 閫�娆惧鑷存�婚噾棰濆彉鍖栵紝閲嶇畻涓夋柟鏀剁泭
+            if (order.getRefundAmount() != null && order.getRefundAmount() > 0) {
+                long newTotal = (order.getTotalAmount() != null ? order.getTotalAmount() : 0L) - order.getRefundAmount();
+                order.setTotalAmount(newTotal);
+                ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                        .eq(Orders::getId, orderId)
+                        .set(Orders::getTotalAmount, newTotal));
+                calculateAndSaveOrderFees(orderId);
             }
 
             // 璁板綍璁㈠崟鏃ュ織
-            saveShopVerifyLog(order, "纭椤惧鍒板簵",
-                    "闂ㄥ簵銆�" + shopName + "銆戠‘璁ら【瀹㈠埌搴楋紝璁㈠崟瀹屾垚",
-                    null, shopId);
+            String logInfo = "闂ㄥ簵銆�" + shopName + "銆戠‘璁ら【瀹㈠埌搴楋紝鏈�炬湡";
+            if (order.getRefundAmount() != null && order.getRefundAmount() > 0) {
+                logInfo += "锛岄渶閫�娆�" + Constants.getFormatMoney(order.getRefundAmount()) + "鍏�";
+            }
+            saveShopVerifyLog(order, "纭椤惧鍒板簵", logInfo, null, shopId);
         }
     }
 
@@ -1972,6 +2751,32 @@
     }
 
     /**
+     * 璁$畻瀹為檯瀵勫瓨澶╂暟锛坉epositTime 鍒� now 鐨勫ぉ鏁板樊锛屾渶灏�1澶╋級
+     */
+    private int calcActualDepositDays(Date now, Date depositTime) {
+        if (depositTime == null || now == null) {
+            return 1;
+        }
+        Calendar depositCal = Calendar.getInstance();
+        depositCal.setTime(depositTime);
+        depositCal.set(Calendar.HOUR_OF_DAY, 0);
+        depositCal.set(Calendar.MINUTE, 0);
+        depositCal.set(Calendar.SECOND, 0);
+        depositCal.set(Calendar.MILLISECOND, 0);
+
+        Calendar nowCal = Calendar.getInstance();
+        nowCal.setTime(now);
+        nowCal.set(Calendar.HOUR_OF_DAY, 0);
+        nowCal.set(Calendar.MINUTE, 0);
+        nowCal.set(Calendar.SECOND, 0);
+        nowCal.set(Calendar.MILLISECOND, 0);
+
+        long diffMs = nowCal.getTimeInMillis() - depositCal.getTimeInMillis();
+        int days = (int) (diffMs / (1000 * 60 * 60 * 24));
+        return Math.max(days, 1);
+    }
+
+    /**
      * 灏卞湴瀵勫瓨閫炬湡澶╂暟璁$畻
      * 杩囦簡棰勮鍙栦欢鏃堕棿褰撳ぉ鐨�12鐐瑰悗鎵嶇畻涓�澶�
      */
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java
index 441ea60..16e0ab0 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java
@@ -11,13 +11,21 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.RevenueMapper;
+import com.doumee.dao.business.WithdrawalOrdersMapper;
+import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.ShopInfoMapper;
 import com.doumee.dao.business.model.Revenue;
+import com.doumee.dao.business.model.ShopInfo;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.WithdrawalOrders;
+import com.doumee.dao.vo.RevenueStatisticsVO;
 import com.doumee.service.business.RevenueService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 
 /**
@@ -30,6 +38,15 @@
 
     @Autowired
     private RevenueMapper revenueMapper;
+
+    @Autowired
+    private WithdrawalOrdersMapper withdrawalOrdersMapper;
+
+    @Autowired
+    private ShopInfoMapper shopInfoMapper;
+
+    @Autowired
+    private MemberMapper memberMapper;
 
     @Override
     public Integer create(Revenue revenue) {
@@ -148,4 +165,74 @@
         return revenueMapper.selectCount(wrapper);
     }
 
+    @Override
+    public RevenueStatisticsVO getShopRevenueStatistics(Integer shopId) {
+        ShopInfo shop = shopInfoMapper.selectById(shopId);
+        if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "闂ㄥ簵涓嶅瓨鍦�");
+        }
+        Integer memberId = shop.getRegionMemberId();
+        return buildRevenueStatistics(memberId, Constants.TWO, shop.getBalance());
+    }
+
+    @Override
+    public RevenueStatisticsVO getDriverRevenueStatistics(Integer memberId) {
+        Member member = memberMapper.selectById(memberId);
+        if (member == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鐢ㄦ埛涓嶅瓨鍦�");
+        }
+        return buildRevenueStatistics(memberId, Constants.ONE, member.getAmount());
+    }
+
+    /**
+     * 鏋勫缓鏀剁泭缁熻
+     *
+     * @param memberId   浼氬憳涓婚敭
+     * @param memberType 浼氬憳绫诲瀷锛�1=鍙告満锛�2=闂ㄥ簵
+     * @param balance    褰撳墠浣欓锛堝垎锛�
+     */
+    private RevenueStatisticsVO buildRevenueStatistics(Integer memberId, Integer memberType, Long balance) {
+        RevenueStatisticsVO vo = new RevenueStatisticsVO();
+        vo.setBalance(balance != null ? balance : 0L);
+
+        // 寰呯粨绠楅噾棰濓細revenue涓� vaildStatus=0 涓� type=0锛堝畬鎴愯鍗曪級鐨勬敹鍏ヤ箣鍜�
+        QueryWrapper<Revenue> pendingWrapper = new QueryWrapper<>();
+        pendingWrapper.select("IFNULL(SUM(AMOUNT), 0) as amount")
+                .eq("MEMBER_ID", memberId)
+                .eq("MEMBER_TYPE", memberType)
+                .eq("VAILD_STATUS", Constants.ZERO)
+                .eq("TYPE", Constants.ZERO)
+                .eq("OPT_TYPE", Constants.ONE)
+                .eq("DELETED", Constants.ZERO);
+        Map<String, Object> pendingResult = revenueMapper.selectMaps(pendingWrapper).stream().findFirst().orElse(null);
+        vo.setPendingAmount(pendingResult != null && pendingResult.get("amount") != null
+                ? Long.parseLong(pendingResult.get("amount").toString()) : 0L);
+
+        // 绱鎻愮幇閲戦锛歸ithdrawal_orders涓� status=1锛堟彁鐜版垚鍔燂級涓� type=0锛堟彁鐜帮級
+        QueryWrapper<WithdrawalOrders> successWrapper = new QueryWrapper<>();
+        successWrapper.select("IFNULL(SUM(AMOUNT), 0) as amount")
+                .eq("MEMBER_ID", memberId)
+                .eq("MEMBER_TYPE", memberType)
+                .eq("STATUS", Constants.ONE)
+                .eq("TYPE", Constants.ZERO)
+                .eq("DELETED", Constants.ZERO);
+        Map<String, Object> successResult = withdrawalOrdersMapper.selectMaps(successWrapper).stream().findFirst().orElse(null);
+        vo.setTotalWithdrawn(successResult != null && successResult.get("amount") != null
+                ? Long.parseLong(successResult.get("amount").toString()) : 0L);
+
+        // 鎻愮幇涓噾棰濓細withdrawal_orders涓� status=0锛堟彁鐜扮敵璇蜂腑锛変笖 type=0锛堟彁鐜帮級
+        QueryWrapper<WithdrawalOrders> progressWrapper = new QueryWrapper<>();
+        progressWrapper.select("IFNULL(SUM(AMOUNT), 0) as amount")
+                .eq("MEMBER_ID", memberId)
+                .eq("MEMBER_TYPE", memberType)
+                .eq("STATUS", Constants.ZERO)
+                .eq("TYPE", Constants.ZERO)
+                .eq("DELETED", Constants.ZERO);
+        Map<String, Object> progressResult = withdrawalOrdersMapper.selectMaps(progressWrapper).stream().findFirst().orElse(null);
+        vo.setWithdrawingAmount(progressResult != null && progressResult.get("amount") != null
+                ? Long.parseLong(progressResult.get("amount").toString()) : 0L);
+
+        return vo;
+    }
+
 }
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 b46cb11..bf5a84a 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
@@ -16,18 +16,24 @@
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.dao.business.MemberMapper;
 import com.doumee.dao.business.MultifileMapper;
+import com.doumee.dao.business.OrdersMapper;
+import com.doumee.dao.business.PricingRuleMapper;
 import com.doumee.dao.business.ShopInfoMapper;
 import com.doumee.dao.business.model.Areas;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.Multifile;
+import com.doumee.dao.business.model.Orders;
+import com.doumee.dao.business.model.PricingRule;
 import com.doumee.dao.business.model.ShopInfo;
 import com.doumee.dao.dto.*;
 import com.doumee.dao.system.SystemUserMapper;
 import com.doumee.dao.system.model.SystemUser;
 import com.doumee.dao.vo.ShopDetailVO;
+import com.doumee.dao.vo.ShopCenterVO;
 import com.doumee.dao.vo.ShopLoginVO;
 import com.doumee.dao.vo.ShopNearbyVO;
 import com.doumee.dao.vo.ShopWebDetailVO;
+import com.doumee.service.business.AreasService;
 import com.doumee.service.business.ShopInfoService;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -68,6 +74,15 @@
 
     @Autowired
     private RedisTemplate<String,Object> redisTemplate;
+
+    @Autowired
+    private PricingRuleMapper pricingRuleMapper;
+
+    @Autowired
+    private OrdersMapper ordersMapper;
+
+    @Autowired
+    private AreasService areasService;
     @Override
     public Integer create(ShopInfo shopInfo) {
         shopInfoMapper.insert(shopInfo);
@@ -299,6 +314,7 @@
             existing.setLegalPersonCard(request.getLegalPersonCard());
             existing.setPassword(encryptedPassword);
             existing.setSalt(salt);
+            existing.setAliAccount(request.getAliAccount());
             existing.setAuditStatus(Constants.ZERO);
             existing.setUpdateTime(now);
             existing.setUpdateUser(memberId);
@@ -328,6 +344,7 @@
             shopInfo.setLegalPersonCard(request.getLegalPersonCard());
             shopInfo.setPassword(encryptedPassword);
             shopInfo.setSalt(salt);
+            shopInfo.setAliAccount(request.getAliAccount());
             shopInfo.setOpenid(member.getOpenid());
             shopInfo.setAuditStatus(Constants.ZERO);
             shopInfo.setStatus(Constants.ZERO);
@@ -407,6 +424,38 @@
         shopInfo.setAuditRemark(auditDTO.getAuditRemark());
         shopInfo.setAuditUserId(auditDTO.getAuditUser());
         shopInfo.setUpdateTime(now);
+        // 瀹℃壒閫氳繃鏃讹紝鏍¢獙鍩庡競pricing_rule閰嶇疆锛岃鍙栨娂閲戦噾棰�
+        if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) {
+            // 1. 瑙f瀽闂ㄥ簵鎵�鍦ㄥ煄甯�
+            Areas area = areasBiz.resolveArea(shopInfo.getAreaId());
+            if (area == null || area.getParentId() == null) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "闂ㄥ簵鍖哄垝淇℃伅寮傚父锛屾棤娉曠‘瀹氭墍鍦ㄥ煄甯�");
+            }
+            Integer cityId = area.getParentId();
+
+            // 2. 鏍¢獙 pricing_rule 閰嶇疆锛堝煄甯傚紑閫氬湪鎶奸噾鏀粯瀹屾垚鍚庡鐞嗭級
+            Areas cityArea = areasService.findById(cityId, Constants.ONE);
+            if (cityArea == null) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍩庡競淇℃伅涓嶅瓨鍦�");
+            }
+            if (!Constants.equalsInteger(cityArea.getStatus(), Constants.ONE)) {
+                List<String> errors = validateCityPricingRules(cityId);
+                if (!errors.isEmpty()) {
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),
+                            "鍩庡競[" + cityArea.getName() + "]灏氭湭寮�閫氾紝瀹氫环瑙勫垯鏈厤缃畬鏁达細" + String.join("锛�", errors));
+                }
+            }
+
+            // 3. 浠嶱ricingRule璇诲彇鎶奸噾閲戦
+            PricingRule pricingRule = pricingRuleMapper.selectOne(new QueryWrapper<PricingRule>().lambda()
+                    .eq(PricingRule::getDeleted, Constants.ZERO)
+                    .eq(PricingRule::getType, Constants.THREE)
+                    .eq(PricingRule::getFieldA, String.valueOf(shopInfo.getCompanyType()))
+                    .last("limit 1"));
+            if (pricingRule != null && StringUtils.isNotBlank(pricingRule.getFieldB())) {
+                shopInfo.setDepositAmount(Long.parseLong(pricingRule.getFieldB()));
+            }
+        }
         shopInfoMapper.updateById(shopInfo);
     }
 
@@ -612,7 +661,7 @@
         // 鎷兼帴鍥剧墖鍓嶇紑
         String imgPrefix = "";
         try {
-            imgPrefix = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
+            imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                     + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.SHOP_FILES).getCode();
         } catch (Exception e) {
             // 鏈厤缃椂蹇界暐
@@ -670,7 +719,7 @@
             if (payMember != null && StringUtils.isNotBlank(payMember.getCoverImage())) {
                 String memberPrefix = "";
                 try {
-                    memberPrefix = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
+                    memberPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                             + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.MEMBER_FILES).getCode();
                 } catch (Exception e) {
                     // 鏈厤缃椂蹇界暐
@@ -861,7 +910,7 @@
      */
     private String getShopPrefix() {
         try {
-            return systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
+            return systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                     + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.SHOP_FILES).getCode();
         } catch (Exception e) {
             return "";
@@ -903,7 +952,37 @@
         return urls;
     }
 
-
+    @Override
+    public ShopCenterVO getShopCenterInfo(Integer shopId) {
+        ShopInfo shop = shopInfoMapper.selectById(shopId);
+        if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        ShopCenterVO vo = new ShopCenterVO();
+        vo.setShopName(shop.getName());
+        vo.setLinkName(shop.getLinkName());
+        vo.setCompanyType(shop.getCompanyType());
+        vo.setCoverImg(shop.getCoverImg());
+        if (StringUtils.isNotBlank(shop.getCoverImg())) {
+            String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+                    + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.SHOP_FILES).getCode();
+            vo.setFullCoverImg(path + shop.getCoverImg());
+        }
+        vo.setHasMessage(false);
+        // 寰呮牳楠岃鍗曟暟閲忥紙瀛樹欢闂ㄥ簵锛宻tatus=1锛�
+        Long waitDepositCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+                .eq(Orders::getDepositShopId, shopId)
+                .eq(Orders::getDeleted, Constants.ZERO)
+                .eq(Orders::getStatus, Constants.OrderStatus.waitDeposit.getStatus()));
+        vo.setWaitDepositCount(waitDepositCount.intValue());
+        // 寰呮敹璐ц鍗曟暟閲忥紙鍙栦欢闂ㄥ簵锛宻tatus IN 4,5锛�
+        Long waitReceiveCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+                .eq(Orders::getTakeShopId, shopId)
+                .eq(Orders::getDeleted, Constants.ZERO)
+                .in(Orders::getStatus, Constants.OrderStatus.delivering.getStatus(), Constants.OrderStatus.arrived.getStatus()));
+        vo.setWaitReceiveCount(waitReceiveCount.intValue());
+        return vo;
+    }
 
     /**
      * 鍟嗘埛璐﹀彿瀵嗙爜鐧诲綍
@@ -993,4 +1072,91 @@
         return vo;
     }
 
+    /**
+     * 鏍¢獙鍩庡競瀹氫环瑙勫垯閰嶇疆鏄惁瀹屾暣
+     * @param cityId 鍩庡競涓婚敭
+     * @return 閿欒淇℃伅鍒楄〃锛岀┖琛ㄧず鏍¢獙閫氳繃
+     */
+    private List<String> validateCityPricingRules(Integer cityId) {
+        List<String> errors = new ArrayList<>();
+
+        // type=0 灏卞湴瀛樺彇瑙勫垯锛氳嚦灏�1鏉★紝fieldB涓嶄负绌�
+        List<PricingRule> type0 = pricingRuleMapper.selectList(new QueryWrapper<PricingRule>().lambda()
+                .eq(PricingRule::getDeleted, Constants.ZERO)
+                .eq(PricingRule::getType, Constants.ZERO)
+                .eq(PricingRule::getCityId, cityId));
+        if (type0.isEmpty()) {
+            errors.add("缂哄皯灏卞湴瀛樺彇瑙勫垯");
+        } else if (type0.stream().allMatch(r -> StringUtils.isBlank(r.getFieldB()))) {
+            errors.add("灏卞湴瀛樺彇瑙勫垯鏈厤缃敹璐瑰崟浠�");
+        }
+
+        // type=1 寮傚湴瀵勯�佽鍒欙細鑷冲皯1鏉★紝fieldB/C/D/E涓嶄负绌�
+        List<PricingRule> type1 = pricingRuleMapper.selectList(new QueryWrapper<PricingRule>().lambda()
+                .eq(PricingRule::getDeleted, Constants.ZERO)
+                .eq(PricingRule::getType, Constants.ONE)
+                .eq(PricingRule::getCityId, cityId));
+        if (type1.isEmpty()) {
+            errors.add("缂哄皯寮傚湴瀵勯�佽鍒�");
+        } else if (type1.stream().allMatch(r -> StringUtils.isAnyBlank(r.getFieldB(), r.getFieldC(), r.getFieldD(), r.getFieldE()))) {
+            errors.add("寮傚湴瀵勯�佽鍒欓厤缃笉瀹屾暣");
+        }
+
+        // type=2 棰勮鏃舵晥锛歠ieldA=1(鏍囬�熻揪) 鍜� fieldA=2(鏋侀�熻揪) 鍚�1鏉�
+        List<PricingRule> type2 = pricingRuleMapper.selectList(new QueryWrapper<PricingRule>().lambda()
+                .eq(PricingRule::getDeleted, Constants.ZERO)
+                .eq(PricingRule::getType, Constants.TWO)
+                .eq(PricingRule::getCityId, cityId));
+        Map<String, PricingRule> type2Map = type2.stream()
+                .collect(Collectors.toMap(PricingRule::getFieldA, r -> r, (a, b) -> a));
+        if (!type2Map.containsKey("1")) {
+            errors.add("缂哄皯棰勮鏃舵晥-鏍囬�熻揪閰嶇疆");
+        } else if (StringUtils.isAnyBlank(type2Map.get("1").getFieldB(), type2Map.get("1").getFieldC(),
+                type2Map.get("1").getFieldD(), type2Map.get("1").getFieldE())) {
+            errors.add("棰勮鏃舵晥-鏍囬�熻揪閰嶇疆涓嶅畬鏁�");
+        }
+        if (!type2Map.containsKey("2")) {
+            errors.add("缂哄皯棰勮鏃舵晥-鏋侀�熻揪閰嶇疆");
+        } else if (StringUtils.isAnyBlank(type2Map.get("2").getFieldB(), type2Map.get("2").getFieldC(),
+                type2Map.get("2").getFieldD(), type2Map.get("2").getFieldE())) {
+            errors.add("棰勮鏃舵晥-鏋侀�熻揪閰嶇疆涓嶅畬鏁�");
+        }
+
+        // type=3 闂ㄥ簵娉ㄥ唽鎶奸噾锛歠ieldA=0(浼佷笟) 鍜� fieldA=1(涓汉) 鍚�1鏉★紝fieldB涓嶄负绌�
+        List<PricingRule> type3 = pricingRuleMapper.selectList(new QueryWrapper<PricingRule>().lambda()
+                .eq(PricingRule::getDeleted, Constants.ZERO)
+                .eq(PricingRule::getType, Constants.THREE)
+                .eq(PricingRule::getCityId, cityId));
+        Map<String, PricingRule> type3Map = type3.stream()
+                .collect(Collectors.toMap(PricingRule::getFieldA, r -> r, (a, b) -> a));
+        String[] depositNames = {"浼佷笟", "涓汉"};
+        for (int i = 0; i <= 1; i++) {
+            String key = String.valueOf(i);
+            if (!type3Map.containsKey(key)) {
+                errors.add("缂哄皯闂ㄥ簵娉ㄥ唽鎶奸噾-" + depositNames[i] + "閰嶇疆");
+            } else if (StringUtils.isBlank(type3Map.get(key).getFieldB())) {
+                errors.add("闂ㄥ簵娉ㄥ唽鎶奸噾-" + depositNames[i] + "鏈厤缃娂閲戦噾棰�");
+            }
+        }
+
+        // type=4 鍒嗘垚姣斾緥锛歠ieldA=0~4 鍏�5鏉★紝fieldB涓嶄负绌�
+        List<PricingRule> type4 = pricingRuleMapper.selectList(new QueryWrapper<PricingRule>().lambda()
+                .eq(PricingRule::getDeleted, Constants.ZERO)
+                .eq(PricingRule::getType, Constants.FOUR)
+                .eq(PricingRule::getCityId, cityId));
+        String[] shareNames = {"浼佷笟瀵�", "涓汉瀵�", "浼佷笟鍙�", "涓汉鍙�", "閰嶉�佸憳"};
+        Map<String, PricingRule> type4Map = type4.stream()
+                .collect(Collectors.toMap(PricingRule::getFieldA, r -> r, (a, b) -> a));
+        for (int i = 0; i <= 4; i++) {
+            String key = String.valueOf(i);
+            if (!type4Map.containsKey(key)) {
+                errors.add("缂哄皯鍒嗘垚姣斾緥-" + shareNames[i] + "閰嶇疆");
+            } else if (StringUtils.isBlank(type4Map.get(key).getFieldB())) {
+                errors.add("鍒嗘垚姣斾緥-" + shareNames[i] + "鏈厤缃垎鎴愭瘮渚�");
+            }
+        }
+
+        return errors;
+    }
+
 }
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 2602c77..83e7959 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
@@ -11,12 +11,15 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.DriverInfoMapper;
+import com.doumee.dao.business.RevenueMapper;
 import com.doumee.dao.business.ShopInfoMapper;
 import com.doumee.dao.business.WithdrawalOrdersMapper;
 import com.doumee.dao.business.model.DriverInfo;
+import com.doumee.dao.business.model.Revenue;
 import com.doumee.dao.business.model.ShopInfo;
 import com.doumee.dao.business.model.WithdrawalOrders;
 import com.doumee.dao.dto.WithdrawalApproveDTO;
+import com.doumee.dao.dto.WithdrawalDTO;
 import com.doumee.dao.system.SystemUserMapper;
 import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.WithdrawalOrdersService;
@@ -25,10 +28,13 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.concurrent.ThreadLocalRandom;
 
 /**
  * 鎻愮幇鐢宠璁板綍Service瀹炵幇
@@ -49,6 +55,9 @@
 
     @Autowired
     private DriverInfoMapper driverInfoMapper;
+
+    @Autowired
+    private RevenueMapper revenueMapper;
 
     @Override
     public Integer create(WithdrawalOrders withdrawalOrders) {
@@ -238,15 +247,60 @@
 
         // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
         Integer currentUserId = getCurrentUserId();
+        Date now = new Date();
 
         WithdrawalOrders update = new WithdrawalOrders();
         update.setId(dto.getId());
         update.setStatus(dto.getStatus());
         update.setUserId(currentUserId);
-        update.setApproveTime(new Date());
+        update.setApproveTime(now);
         update.setApproveRemark(dto.getApproveRemark());
-        update.setUpdateTime(new Date());
+        update.setUpdateTime(now);
         withdrawalOrdersMapper.updateById(update);
+
+        // 椹冲洖鏃堕��鍥炰綑棰�
+        if (Constants.TWO.equals(dto.getStatus())) {
+            Long amountFen = order.getAmount() != null ? order.getAmount() : 0L;
+            if (amountFen > 0 && order.getMemberId() != null) {
+                if (Constants.equalsInteger(order.getMemberType(), Constants.ONE)) {
+                    // 鍙告満锛氶�氳繃 memberId 鏌� DriverInfo锛岄��鍥� balance
+                    DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+                            .eq(DriverInfo::getMemberId, order.getMemberId())
+                            .eq(DriverInfo::getDeleted, Constants.ZERO)
+                            .last("limit 1"));
+                    if (driver != null) {
+                        driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+                                .setSql(" BALANCE = IFNULL(BALANCE, 0) + " + amountFen)
+                                .eq(DriverInfo::getId, driver.getId()));
+                    }
+                } else if (Constants.equalsInteger(order.getMemberType(), Constants.TWO)) {
+                    // 闂ㄥ簵锛氶�氳繃 memberId 鏌� ShopInfo锛岄��鍥� balance
+                    ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
+                            .eq(ShopInfo::getRegionMemberId, order.getMemberId())
+                            .eq(ShopInfo::getDeleted, Constants.ZERO)
+                            .last("limit 1"));
+                    if (shop != null) {
+                        shopInfoMapper.update(new UpdateWrapper<ShopInfo>().lambda()
+                                .setSql(" BALANCE = IFNULL(BALANCE, 0) + " + amountFen)
+                                .eq(ShopInfo::getId, shop.getId()));
+                    }
+                }
+                // 鍒涘缓閫�鍥� Revenue 璁板綍
+                Revenue revenue = new Revenue();
+                revenue.setMemberId(order.getMemberId());
+                revenue.setMemberType(order.getMemberType());
+                revenue.setType(Constants.TWO); // 2=鎻愮幇閫�鍥�
+                revenue.setOptType(Constants.ONE); // 1=鏀跺叆
+                revenue.setAmount(amountFen);
+                revenue.setVaildStatus(Constants.ONE); // 宸插叆璐�
+                revenue.setObjId(order.getId());
+                revenue.setObjType(Constants.ONE); // 1=鎻愮幇涓氬姟
+                revenue.setStatus(Constants.ZERO);
+                revenue.setDeleted(Constants.ZERO);
+                revenue.setCreateTime(now);
+                revenueMapper.insert(revenue);
+            }
+        }
     }
 
     private Integer getCurrentUserId() {
@@ -289,4 +343,113 @@
         }
     }
 
+    @Override
+    public void applyDriverWithdrawal(WithdrawalDTO dto, Integer memberId) {
+        DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+                .eq(DriverInfo::getMemberId, memberId)
+                .eq(DriverInfo::getDeleted, Constants.ZERO)
+                .last("limit 1"));
+        if (driver == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
+        }
+        long amountFen = dto.getAmount().multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
+        long balance = driver.getBalance() != null ? driver.getBalance() : 0L;
+        if (amountFen <= 0) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎻愮幇閲戦蹇呴』澶т簬0");
+        }
+        if (amountFen > balance) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎻愮幇閲戦涓嶈兘瓒呰繃鍙敤浣欓");
+        }
+        String billNo = generateBillNo();
+        Date now = new Date();
+        // 鎵e噺鍙告満浣欓
+        driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+                .setSql(" BALANCE = IFNULL(BALANCE, 0) - " + amountFen)
+                .eq(DriverInfo::getId, driver.getId()));
+        // 鍒涘缓鎻愮幇璁板綍
+        WithdrawalOrders order = new WithdrawalOrders();
+        order.setMemberId(memberId);
+        order.setMemberType(Constants.ONE);
+        order.setAmount(amountFen);
+        order.setStatus(Constants.ZERO);
+        order.setType(Constants.ZERO);
+        order.setOutBillNo(billNo);
+        order.setAliAccount(dto.getAliAccount());
+        order.setDeleted(Constants.ZERO);
+        order.setCreateTime(now);
+        order.setUpdateTime(now);
+        order.setCreateUser(memberId);
+        withdrawalOrdersMapper.insert(order);
+        // 鍒涘缓鏀嚭 Revenue 璁板綍
+        Revenue revenue = new Revenue();
+        revenue.setMemberId(memberId);
+        revenue.setMemberType(Constants.ONE);
+        revenue.setType(Constants.ONE);
+        revenue.setOptType(-Constants.ONE);
+        revenue.setAmount(amountFen);
+        revenue.setVaildStatus(Constants.ONE);
+        revenue.setObjId(order.getId());
+        revenue.setObjType(Constants.ONE);
+        revenue.setStatus(Constants.ZERO);
+        revenue.setDeleted(Constants.ZERO);
+        revenue.setCreateTime(now);
+        revenueMapper.insert(revenue);
+    }
+
+    @Override
+    public void applyShopWithdrawal(WithdrawalDTO dto, Integer shopId) {
+        ShopInfo shop = shopInfoMapper.selectById(shopId);
+        if (shop == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        long amountFen = dto.getAmount().multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
+        long balance = shop.getBalance() != null ? shop.getBalance() : 0L;
+        if (amountFen <= 0) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎻愮幇閲戦蹇呴』澶т簬0");
+        }
+        if (amountFen > balance) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎻愮幇閲戦涓嶈兘瓒呰繃鍙敤浣欓");
+        }
+        String billNo = generateBillNo();
+        Date now = new Date();
+        // 鎵e噺闂ㄥ簵浣欓
+        shopInfoMapper.update(new UpdateWrapper<ShopInfo>().lambda()
+                .setSql(" BALANCE = IFNULL(BALANCE, 0) - " + amountFen)
+                .eq(ShopInfo::getId, shopId));
+        // 鍒涘缓鎻愮幇璁板綍
+        WithdrawalOrders order = new WithdrawalOrders();
+        order.setMemberId(shop.getRegionMemberId());
+        order.setMemberType(Constants.TWO);
+        order.setAmount(amountFen);
+        order.setStatus(Constants.ZERO);
+        order.setType(Constants.ZERO);
+        order.setOutBillNo(billNo);
+        order.setAliAccount(dto.getAliAccount());
+        order.setDeleted(Constants.ZERO);
+        order.setCreateTime(now);
+        order.setUpdateTime(now);
+        order.setCreateUser(shop.getRegionMemberId());
+        withdrawalOrdersMapper.insert(order);
+        // 鍒涘缓鏀嚭 Revenue 璁板綍
+        Revenue revenue = new Revenue();
+        revenue.setMemberId(shop.getRegionMemberId());
+        revenue.setMemberType(Constants.TWO);
+        revenue.setType(Constants.ONE); // 1=鎻愮幇鏀嚭
+        revenue.setOptType(-Constants.ONE); // -1=鏀嚭
+        revenue.setAmount(amountFen);
+        revenue.setVaildStatus(Constants.ONE); // 宸插叆璐�
+        revenue.setObjId(order.getId());
+        revenue.setObjType(Constants.ONE); // 1=鎻愮幇涓氬姟
+        revenue.setStatus(Constants.ZERO);
+        revenue.setDeleted(Constants.ZERO);
+        revenue.setCreateTime(now);
+        revenueMapper.insert(revenue);
+    }
+
+    private String generateBillNo() {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String random = String.valueOf(ThreadLocalRandom.current().nextInt(100000, 999999));
+        return "TX" + sdf.format(new Date()) + random;
+    }
+
 }
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 eb4aeaa..fcaf0aa 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
@@ -61,6 +61,7 @@
         return  ApiResponse.success("鎿嶄綔鎴愬姛",memberService.wxAuthPhone(wxPhoneRequest));
     }
 
+
     @ApiOperation(value = "闂ㄥ簵璐﹀彿瀵嗙爜鐧诲綍", notes = "灏忕▼搴忕锛岄棬搴楃敤鎴烽�氳繃鎵嬫満鍙�+瀵嗙爜鐧诲綍")
     @PostMapping("/shopLogin")
     public ApiResponse<ShopLoginVO> shopLogin(@RequestBody @Validated ShopLoginDTO dto) {
diff --git a/server/web/src/main/java/com/doumee/api/web/ConfigApi.java b/server/web/src/main/java/com/doumee/api/web/ConfigApi.java
index 46a157e..0391012 100644
--- a/server/web/src/main/java/com/doumee/api/web/ConfigApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/ConfigApi.java
@@ -10,7 +10,7 @@
 import com.doumee.dao.dto.CalculateRemotePriceDTO;
 import com.doumee.dao.vo.AccountResponse;
 import com.doumee.dao.vo.PriceCalculateVO;
-import com.doumee.dao.vo.UserCenterVO;
+import com.doumee.dao.vo.PlatformAboutVO;
 import com.doumee.service.business.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -89,12 +89,9 @@
 
     @ApiOperation(value = "鑾峰彇绯荤粺閰嶇疆", notes = "灏忕▼搴忕")
     @GetMapping("/getPlatformAboutUs")
-    public ApiResponse<UserCenterVO> getPlatformAboutUs() {
+    public ApiResponse<PlatformAboutVO> getPlatformAboutUs() {
         return  ApiResponse.success("鏌ヨ鎴愬姛",memberService.getPlatformAboutUs());
     }
-
-
-
 
     @LoginRequired
     @ApiOperation(value = "璁$畻淇濅环璐圭敤", notes = "鏍规嵁鎶ヤ环閲戦璁$畻淇濅环璐圭敤")
diff --git a/server/web/src/main/java/com/doumee/api/web/MemberApi.java b/server/web/src/main/java/com/doumee/api/web/MemberApi.java
index ec9eb29..b49cade 100644
--- a/server/web/src/main/java/com/doumee/api/web/MemberApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/MemberApi.java
@@ -42,7 +42,7 @@
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
     })
-    public ApiResponse<Member> getMemberInfo() {
+    public ApiResponse<UserCenterVO> getMemberInfo() {
         return  ApiResponse.success("鏌ヨ鎴愬姛",memberService.getMemberInfo(getMemberId()));
     }
 
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 e2b9e33..5292cb9 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
@@ -7,9 +7,12 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.dto.CancelOrderDTO;
+import com.doumee.dao.dto.CommentOrderDTO;
+import com.doumee.dao.dto.ConfirmArriveDTO;
 import com.doumee.dao.dto.CreateOrderDTO;
 import com.doumee.dao.dto.DriverVerifyDTO;
 import com.doumee.dao.dto.ShopVerifyDTO;
+import com.doumee.dao.dto.StoreOutDTO;
 import com.doumee.dao.dto.MyOrderDTO;
 import com.doumee.dao.vo.MyOrderDetailVO;
 import com.doumee.dao.vo.MyOrderVO;
@@ -77,6 +80,16 @@
         return ApiResponse.success("鏌ヨ鎴愬姛", ordersService.findMyOrderPage(pageWrap, getMemberId()));
     }
 
+    @LoginShopRequired
+    @ApiOperation(value = "闂ㄥ簵璁㈠崟鍒嗛〉", notes = "闂ㄥ簵绔紝鏌ヨ瀛樹欢/鍙栦欢闂ㄥ簵涓哄綋鍓嶉棬搴楃殑璁㈠崟")
+    @PostMapping("/shopPage")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true)
+    })
+    public ApiResponse<PageData<MyOrderVO>> shopPage(@RequestBody @Validated PageWrap<MyOrderDTO> pageWrap) {
+        return ApiResponse.success("鏌ヨ鎴愬姛", ordersService.findShopOrderPage(pageWrap, getShopId()));
+    }
+
     @LoginRequired
     @ApiOperation(value = "浼氬憳璁㈠崟璇︽儏", notes = "灏忕▼搴忕锛屾煡璇㈠綋鍓嶄細鍛樼殑璁㈠崟璇︽儏")
     @GetMapping("/detail/{orderId}")
@@ -108,6 +121,29 @@
     })
     public ApiResponse<OverdueFeeVO> overdueFee(@PathVariable Integer orderId) {
         return ApiResponse.success("鏌ヨ鎴愬姛", ordersService.calculateOverdueFee(orderId));
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "閫炬湡璐圭敤鏀粯", notes = "閫炬湡璁㈠崟鍞よ捣寰俊鏀粯")
+    @PostMapping("/payOverdueFee/{orderId}")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "path", dataType = "Integer", name = "orderId", value = "璁㈠崟涓婚敭", required = true),
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+    })
+    public ApiResponse<PayResponse> payOverdueFee(@PathVariable Integer orderId) {
+        return ApiResponse.success("鎿嶄綔鎴愬姛", ordersService.payOverdueFee(orderId, getMemberId()));
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "浼氬憳鍒犻櫎璁㈠崟", notes = "浠呭凡瀹屾垚/宸插彇娑�/宸查��娆捐鍗曞彲鍒犻櫎锛岄�昏緫鍒犻櫎")
+    @PostMapping("/delete/{orderId}")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "path", dataType = "Integer", name = "orderId", value = "璁㈠崟涓婚敭", required = true),
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+    })
+    public ApiResponse deleteOrder(@PathVariable Integer orderId) {
+        ordersService.deleteMyOrder(orderId, getMemberId());
+        return ApiResponse.success("鍒犻櫎鎴愬姛");
     }
 
     @LoginShopRequired
@@ -145,5 +181,38 @@
         return ApiResponse.success("鏌ヨ鎴愬姛", ordersService.findShopOrderDetail(orderId, verifyCode));
     }
 
+    @LoginShopRequired
+    @ApiOperation(value = "闂ㄥ簵纭鍑哄簱", notes = "鍙栦欢闂ㄥ簵纭鍑哄簱锛岃鍗曞畬鎴�")
+    @PostMapping("/storeOut")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true)
+    })
+    public ApiResponse storeOut(@RequestBody @Validated StoreOutDTO dto) {
+        ordersService.confirmStoreOut(dto.getOrderId(), getShopId(), dto.getImages(), dto.getRemark());
+        return ApiResponse.success("鍑哄簱鎴愬姛");
+    }
+
+    @LoginShopRequired
+    @ApiOperation(value = "纭椤惧鍒板簵", notes = "闂ㄥ簵纭椤惧宸插埌搴楀彇浠讹紝妫�鏌ラ�炬湡/閫�娆�")
+    @PostMapping("/confirmArrived")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true)
+    })
+    public ApiResponse confirmArrived(@RequestBody @Validated ConfirmArriveDTO dto) {
+        ordersService.confirmCustomerArrived(dto.getOrderId(), getShopId());
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "璁㈠崟璇勪环", notes = "宸插畬鎴愪笖鏈瘎浠风殑璁㈠崟鍙繘琛岃瘎浠�")
+    @PostMapping("/comment")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+    })
+    public ApiResponse comment(@RequestBody @Validated CommentOrderDTO dto) {
+        ordersService.commentOrder(dto, getMemberId());
+        return ApiResponse.success("璇勪环鎴愬姛");
+    }
+
 
 }
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 f537df4..328d3fa 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
@@ -58,12 +58,12 @@
                     }
                     //搴楅摵鎶奸噾璁㈠崟
                     case "shopDeposit": {
-
+                        ordersService.handleShopDepositPayNotify(outTradeNo, paymentNo);
                         break;
                     }
                     //閫炬湡璐圭敤璁㈠崟
                     case "overdueFee": {
-
+                        ordersService.handleOverdueFeePayNotify(outTradeNo, paymentNo);
                         break;
                     }
                 }
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 0f31c5a..60b5eee 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
@@ -11,10 +11,15 @@
 import com.doumee.dao.dto.ShopInfoMaintainDTO;
 import com.doumee.dao.dto.ShopNearbyDTO;
 import com.doumee.dao.vo.ShopDetailVO;
+import com.doumee.dao.vo.ShopCenterVO;
 import com.doumee.dao.vo.ShopNearbyVO;
 import com.doumee.dao.vo.ShopWebDetailVO;
+import com.doumee.dao.vo.PayResponse;
+import com.doumee.service.business.OrdersService;
 import com.doumee.service.business.ShopInfoService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
@@ -32,6 +37,9 @@
 
     @Autowired
     private ShopInfoService shopInfoService;
+
+    @Autowired
+    private OrdersService ordersService;
 
     @LoginRequired
     @ApiOperation("闂ㄥ簵鍏ラ┗鐢宠/淇敼")
@@ -62,6 +70,16 @@
     }
 
     @LoginShopRequired
+    @ApiOperation("鑾峰彇闂ㄥ簵鐧诲綍鍚庝俊鎭�")
+    @GetMapping("/getShopInfo")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true)
+    })
+    public ApiResponse<ShopCenterVO> getShopInfo() {
+        return ApiResponse.success("鏌ヨ鎴愬姛", shopInfoService.getShopCenterInfo(getShopId()));
+    }
+
+    @LoginShopRequired
     @ApiOperation("缁存姢闂ㄥ簵淇℃伅锛堟敮浠樻娂閲戝悗锛�")
     @PostMapping("/maintain")
     public ApiResponse maintain(@RequestBody ShopInfoMaintainDTO dto) {
@@ -76,4 +94,14 @@
         return ApiResponse.success(shopInfoService.getShopMaintainInfo(this.getMemberId()));
     }
 
+    @LoginShopRequired
+    @ApiOperation("闂ㄥ簵鏀粯鎶奸噾")
+    @PostMapping("/payDeposit")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true)
+    })
+    public ApiResponse<PayResponse> payDeposit() {
+        return ApiResponse.success("鎿嶄綔鎴愬姛", ordersService.payShopDeposit(getShopId()));
+    }
+
 }

--
Gitblit v1.9.3