From fcd0f63ea0a86d5756cf3950f08144e1552a3d4e Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期三, 15 四月 2026 20:04:50 +0800
Subject: [PATCH] 代码提交

---
 server/services/src/main/java/com/doumee/dao/dto/OrderItemDTO.java                          |   26 
 server/services/src/main/java/com/doumee/dao/business/model/Addr.java                       |  106 +
 server/services/src/main/java/com/doumee/dao/vo/ShopLoginVO.java                            |   33 
 server/services/src/main/java/com/doumee/core/utils/RandomString.java                       |   60 
 server/services/src/main/java/com/doumee/dao/vo/OrderItemVO.java                            |   27 
 server/web/src/main/java/com/doumee/api/web/PaymentCallback.java                            |  157 ++
 server/services/src/main/java/com/doumee/dao/dto/ShopVerifyDTO.java                         |   31 
 server/services/src/main/java/com/doumee/dao/dto/CalculateLocalPriceDTO.java                |   41 
 server/services/src/main/java/com/doumee/service/business/impl/OrderLogServiceImpl.java     |  139 ++
 server/services/src/main/java/com/doumee/dao/business/model/OrderLog.java                   |   78 +
 server/services/src/main/java/com/doumee/dao/dto/CancelOrderDTO.java                        |   25 
 server/services/src/main/java/com/doumee/dao/dto/ShopLoginDTO.java                          |   23 
 server/services/src/main/java/com/doumee/dao/business/AddrMapper.java                       |   13 
 server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java                    |   40 
 server/services/src/main/java/com/doumee/service/business/impl/AddrServiceImpl.java         |  171 ++
 server/services/src/main/java/com/doumee/dao/business/OrdersRefundMapper.java               |   12 
 server/services/src/main/java/com/doumee/dao/vo/ShopNearbyVO.java                           |   39 
 server/services/src/main/java/com/doumee/service/business/AddrService.java                  |   49 
 server/services/src/main/java/com/doumee/service/business/impl/OrdersRefundServiceImpl.java |  113 +
 server/services/src/main/java/com/doumee/biz/system/AgreementConfigBiz.java                 |   21 
 server/services/src/main/java/com/doumee/dao/dto/DispatchDTO.java                           |   29 
 server/services/src/main/java/com/doumee/dao/vo/MemberDetailVO.java                         |   85 +
 server/services/src/main/java/com/doumee/dao/dto/DriverVerifyDTO.java                       |   31 
 server/services/src/main/java/com/doumee/core/utils/Strings.java                            |   55 
 server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java               |   70 +
 server/services/src/main/java/com/doumee/dao/vo/ItemPriceVO.java                            |   47 
 server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java        |   89 +
 server/services/src/main/java/com/doumee/biz/system/OperationConfigBiz.java                 |   21 
 server/services/src/main/java/com/doumee/dao/dto/MyOrderDTO.java                            |   24 
 server/services/src/main/java/com/doumee/dao/dto/ShopNearbyDTO.java                         |   39 
 server/services/src/main/java/com/doumee/dao/vo/MyOrderVO.java                              |   94 +
 server/services/src/main/java/com/doumee/dao/vo/OrderDetailVO.java                          |   83 +
 server/web/src/main/java/com/doumee/api/web/OrdersApi.java                                  |  113 +
 server/services/src/main/java/com/doumee/dao/dto/MemberListQueryDTO.java                    |   33 
 server/services/src/main/java/com/doumee/dao/vo/OverdueFeeVO.java                           |   31 
 server/admin/src/main/java/com/doumee/api/business/AgreementConfigController.java           |   41 
 server/services/src/main/java/com/doumee/dao/business/OrderLogMapper.java                   |   12 
 server/services/src/main/java/com/doumee/dao/dto/ConfirmArriveDTO.java                      |   25 
 server/services/src/main/java/com/doumee/dao/vo/ShopWebDetailVO.java                        |   36 
 server/admin/src/main/java/com/doumee/api/business/OperationConfigController.java           |   40 
 server/admin/src/main/java/com/doumee/api/business/OrdersRefundController.java              |   82 +
 server/services/src/main/java/com/doumee/core/utils/Tencent/MapUtil.java                    |    6 
 server/services/src/main/java/com/doumee/dao/dto/ShopInfoMaintainDTO.java                   |   40 
 server/services/src/main/java/com/doumee/core/utils/aliyun/ALiYunSmSUtil.java               |   61 
 server/services/src/main/java/com/doumee/dao/vo/OrderDispatchVO.java                        |   52 
 server/web/src/main/java/com/doumee/api/web/AddrApi.java                                    |  100 +
 server/services/src/main/java/com/doumee/dao/dto/CreateOrderDTO.java                        |   84 +
 server/services/src/main/java/com/doumee/dao/vo/MyOrderDetailVO.java                        |  154 ++
 server/admin/src/main/java/com/doumee/api/business/AddrController.java                      |  100 +
 server/services/src/main/java/com/doumee/dao/dto/UpdMobileRequest.java                      |   29 
 server/web/src/main/java/com/doumee/api/web/MemberApi.java                                  |  113 +
 server/services/src/main/java/com/doumee/dao/vo/OrderSummaryVO.java                         |   28 
 server/services/src/main/java/com/doumee/core/utils/ID.java                                 |   89 +
 server/services/src/main/java/com/doumee/dao/dto/CalculateRemotePriceDTO.java               |   56 
 server/services/src/main/java/com/doumee/dao/dto/ShopDetailQueryDTO.java                    |   28 
 server/services/src/main/java/com/doumee/dao/dto/WithdrawalApproveDTO.java                  |   24 
 server/admin/src/main/java/com/doumee/api/business/OrderLogController.java                  |   65 
 server/services/src/main/java/com/doumee/biz/system/impl/AgreementConfigBizImpl.java        |   74 +
 /dev/null                                                                                   |  162 --
 server/services/src/main/java/com/doumee/config/wx/WxMiniUtilService.java                   |   62 
 server/services/src/main/java/com/doumee/dao/vo/PayResponse.java                            |   31 
 server/services/src/main/java/com/doumee/dao/vo/PriceCalculateVO.java                       |   40 
 server/services/src/main/java/com/doumee/dao/dto/AgreementConfigDTO.java                    |   25 
 server/services/src/main/java/com/doumee/service/business/OrdersRefundService.java          |   98 +
 server/services/db/db_change.sql                                                            |  158 ++
 server/services/src/main/java/com/doumee/dao/vo/MemberListVO.java                           |   44 
 server/services/src/main/java/com/doumee/service/business/OrderLogService.java              |   37 
 server/services/src/main/java/com/doumee/core/annotation/LoginShopRequired.java             |   10 
 68 files changed, 3,892 insertions(+), 162 deletions(-)

diff --git a/server/admin/src/main/java/com/doumee/api/business/AddrController.java b/server/admin/src/main/java/com/doumee/api/business/AddrController.java
new file mode 100644
index 0000000..1a25cdf
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/api/business/AddrController.java
@@ -0,0 +1,100 @@
+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.Addr;
+import com.doumee.service.business.AddrService;
+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 rk
+ * @date 2026/04/15
+ */
+@Api(tags = "鍦板潃绨�")
+@RestController
+@RequestMapping("/business/addr")
+public class AddrController extends BaseController {
+
+    @Autowired
+    private AddrService addrService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:addr:create")
+    public ApiResponse create(@RequestBody Addr addr) {
+        return ApiResponse.success(addrService.create(addr));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:addr:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        addrService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:addr: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));
+        }
+        addrService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:addr:update")
+    public ApiResponse updateById(@RequestBody Addr addr) {
+        addrService.updateById(addr);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("淇敼鐘舵��")
+    @PostMapping("/updateStatus")
+    @RequiresPermissions("business:addr:update")
+    public ApiResponse updateStatus(@RequestBody Addr addr) {
+        addrService.updateStatus(addr);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:addr:query")
+    public ApiResponse<PageData<Addr>> findPage(@RequestBody PageWrap<Addr> pageWrap) {
+        return ApiResponse.success(addrService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:addr:exportExcel")
+    public void exportExcel(@RequestBody PageWrap<Addr> pageWrap, HttpServletResponse response) {
+        List<Addr> addrList = addrService.findPage(pageWrap).getRecords();
+        ExcelExporter.build(Addr.class).export(addrList, "鍦板潃绨�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:addr:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(addrService.findById(id));
+    }
+}
diff --git a/server/admin/src/main/java/com/doumee/api/business/AgreementConfigController.java b/server/admin/src/main/java/com/doumee/api/business/AgreementConfigController.java
new file mode 100644
index 0000000..a245517
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/api/business/AgreementConfigController.java
@@ -0,0 +1,41 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.biz.system.AgreementConfigBiz;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.dao.dto.AgreementConfigDTO;
+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.*;
+
+/**
+ * 鍗忚閰嶇疆绠$悊
+ * @author rk
+ * @date 2026/04/13
+ */
+@Api(tags = "鍗忚閰嶇疆")
+@RestController
+@RequestMapping("/business/agreementConfig")
+public class AgreementConfigController extends BaseController {
+
+    @Autowired
+    private AgreementConfigBiz agreementConfigBiz;
+
+    @ApiOperation("鏌ヨ鍗忚閰嶇疆")
+    @GetMapping
+    public ApiResponse<AgreementConfigDTO> getConfig() {
+        return ApiResponse.success(agreementConfigBiz.getConfig());
+    }
+
+    @PreventRepeat
+    @ApiOperation("淇濆瓨鍗忚閰嶇疆")
+    @PostMapping("/save")
+    @RequiresPermissions("business:agreementConfig:update")
+    public ApiResponse saveConfig(@RequestBody AgreementConfigDTO dto) {
+        agreementConfigBiz.saveConfig(dto);
+        return ApiResponse.success(null);
+    }
+}
diff --git a/server/admin/src/main/java/com/doumee/api/business/OperationConfigController.java b/server/admin/src/main/java/com/doumee/api/business/OperationConfigController.java
new file mode 100644
index 0000000..a417e01
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/api/business/OperationConfigController.java
@@ -0,0 +1,40 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.biz.system.OperationConfigBiz;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.dao.dto.OperationConfigDTO;
+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.*;
+
+/**
+ * 杩愯惀閰嶇疆绠$悊
+ * @author rk
+ * @date 2026/04/13
+ */
+@Api(tags = "杩愯惀閰嶇疆")
+@RestController
+@RequestMapping("/business/operationConfig")
+public class OperationConfigController extends BaseController {
+
+    @Autowired
+    private OperationConfigBiz operationConfigBiz;
+
+    @ApiOperation("鏌ヨ杩愯惀閰嶇疆")
+    @GetMapping
+    public ApiResponse<OperationConfigDTO> getConfig() {
+        return ApiResponse.success(operationConfigBiz.getConfig());
+    }
+
+    @PreventRepeat
+    @ApiOperation("淇濆瓨杩愯惀閰嶇疆")
+    @PostMapping("/save")
+    public ApiResponse saveConfig(@RequestBody OperationConfigDTO dto) {
+        operationConfigBiz.saveConfig(dto);
+        return ApiResponse.success(null);
+    }
+}
diff --git a/server/admin/src/main/java/com/doumee/api/business/OrderLogController.java b/server/admin/src/main/java/com/doumee/api/business/OrderLogController.java
new file mode 100644
index 0000000..22fbf52
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/api/business/OrderLogController.java
@@ -0,0 +1,65 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.OrderLog;
+import com.doumee.service.business.OrderLogService;
+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 java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 璁㈠崟鎿嶄綔鏃ュ織
+ * @author rk
+ * @date 2026/04/13
+ */
+@Api(tags = "璁㈠崟鎿嶄綔鏃ュ織")
+@RestController
+@RequestMapping("/business/orderLog")
+public class OrderLogController extends BaseController {
+
+    @Autowired
+    private OrderLogService orderLogService;
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:orderLog:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        orderLogService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:orderLog: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));
+        }
+        orderLogService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:orderLog:query")
+    public ApiResponse<PageData<OrderLog>> findPage(@RequestBody PageWrap<OrderLog> pageWrap) {
+        return ApiResponse.success(orderLogService.findPage(pageWrap));
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:orderLog:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(orderLogService.findById(id));
+    }
+}
diff --git a/server/admin/src/main/java/com/doumee/api/business/OrdersRefundController.java b/server/admin/src/main/java/com/doumee/api/business/OrdersRefundController.java
new file mode 100644
index 0000000..fa4d284
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/api/business/OrdersRefundController.java
@@ -0,0 +1,82 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+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.OrdersRefund;
+import com.doumee.service.business.OrdersRefundService;
+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 java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 璁㈠崟閫�娆捐褰�
+ * @author rk
+ * @date 2026/04/13
+ */
+@Api(tags = "璁㈠崟閫�娆捐褰�")
+@RestController
+@RequestMapping("/business/ordersRefund")
+public class OrdersRefundController extends BaseController {
+
+    @Autowired
+    private OrdersRefundService ordersRefundService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:ordersRefund:create")
+    public ApiResponse create(@RequestBody OrdersRefund ordersRefund) {
+        return ApiResponse.success(ordersRefundService.create(ordersRefund));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:ordersRefund:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        ordersRefundService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:ordersRefund: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));
+        }
+        ordersRefundService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:ordersRefund:update")
+    public ApiResponse updateById(@RequestBody OrdersRefund ordersRefund) {
+        ordersRefundService.updateById(ordersRefund);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:ordersRefund:query")
+    public ApiResponse<PageData<OrdersRefund>> findPage(@RequestBody PageWrap<OrdersRefund> pageWrap) {
+        return ApiResponse.success(ordersRefundService.findPage(pageWrap));
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:ordersRefund:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(ordersRefundService.findById(id));
+    }
+}
diff --git a/server/services/db/db_change.sql b/server/services/db/db_change.sql
new file mode 100644
index 0000000..7b8c6c1
--- /dev/null
+++ b/server/services/db/db_change.sql
@@ -0,0 +1,158 @@
+-- ============================================================
+-- 鏁版嵁搴撳彉鏇磋剼鏈紙鍏ㄩ儴鍙樻洿缁熶竴璁板綍鍦ㄦ鏂囦欢锛�
+-- 鎸夋棩鏈熷�掑簭鎺掑垪锛屾瘡娆″彉鏇寸敤鏃ユ湡娉ㄩ噴鍧楀垎闅�
+-- ============================================================
+
+
+-- ============================================================
+-- 2026/04/13 璁㈠崟鏂板鍙栨秷澶囨敞瀛楁 + 璁㈠崟鏂囦欢璺緞瀛楀吀
+-- ============================================================
+
+ALTER TABLE `orders` ADD COLUMN `cancel_remark` VARCHAR(500) DEFAULT NULL COMMENT '鍙栨秷澶囨敞' AFTER `cancel_time`;
+
+INSERT INTO `system_dict_data`(`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`)
+SELECT 100, '/orders/', 'ORDERS_FILES', '璁㈠崟鏂囦欢璺緞', 22, 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0
+FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `DICT_ID` = 100 AND `LABEL` = 'ORDERS_FILES' AND `DELETED` = 0);
+
+
+-- ============================================================
+-- 2026/04/13 鍗忚閰嶇疆瀛楀吀鏁版嵁锛堥殣绉佸崗璁�佺敤鎴峰崗璁柊澧烇紝鍏充簬鎴戜滑宸插瓨鍦級
+-- ============================================================
+
+-- 鐖剁骇瀛楀吀ID 100 (SYSTEM) 宸插瓨鍦紝鏃犻渶鏂板缓
+
+INSERT INTO `system_dict_data`(`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`)
+SELECT 100, '', 'PRIVACY_AGREEMENT', '闅愮鍗忚', 20, 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0
+FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `DICT_ID` = 100 AND `LABEL` = 'PRIVACY_AGREEMENT' AND `DELETED` = 0);
+
+INSERT INTO `system_dict_data`(`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`)
+SELECT 100, '', 'USER_AGREEMENT', '鐢ㄦ埛鍗忚', 21, 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0
+FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `system_dict_data` WHERE `DICT_ID` = 100 AND `LABEL` = 'USER_AGREEMENT' AND `DELETED` = 0);
+
+-- 鍗忚閰嶇疆鏉冮檺
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:agreementConfig:update', '淇敼鍗忚閰嶇疆', '鍗忚閰嶇疆', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
+
+-- ============================================================
+-- 2026/04/13 杩愯惀閰嶇疆瀛楀吀鏁版嵁
+-- ============================================================
+
+-- 鐖剁骇瀛楀吀锛氳繍钀ラ厤缃紙濡傛灉ID 105宸插瓨鍦ㄥ垯璺宠繃锛�
+INSERT INTO `system_dict`(`ID`, `CODE`, `NAME`, `REMARK`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`)
+SELECT 105, 'OPERATION_CONFIG', '杩愯惀閰嶇疆', '杩愯惀鍙傛暟閰嶇疆椤�', 1, CURRENT_TIMESTAMP, NULL, NULL, 0
+FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `system_dict` WHERE `ID` = 105);
+
+-- 瀛楀吀瀛愰」
+INSERT INTO `system_dict_data`(`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`)
+VALUES (105, '3', 'DRIVER_DAILY_CANCEL_LIMIT', '鍙告満姣忔棩鍙栨秷娆℃暟', 0, 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `system_dict_data`(`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`)
+VALUES (105, '0.8', 'UNPICKED_DISCOUNT', '鏈彇浠舵姌鎵�', 1, 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `system_dict_data`(`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`)
+VALUES (105, '7', 'SETTLEMENT_DATE', '璁㈠崟缁撶畻鏃ユ湡(澶�)', 2, 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `system_dict_data`(`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`)
+VALUES (105, '1.5', 'URGENT_COEFFICIENT', '鍔犳�ョ郴鏁�', 3, 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `system_dict_data`(`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`)
+VALUES (105, '30', 'AUTO_CANCEL_TIME', '瓒呮椂鏈敮浠樿嚜鍔ㄥ彇娑堟椂闂�(鍒嗛挓)', 4, 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `system_dict_data`(`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`)
+VALUES (105, '0.01', 'INSURANCE_RATE', '淇濊垂姣旂巼', 5, 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `system_dict_data`(`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`)
+VALUES (105, '5', 'ORDER_ACCEPT_LIMIT', '鎺ュ崟鏁伴噺', 6, 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `system_dict_data`(`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`)
+VALUES (105, '7', 'AUTO_CONFIRM_RECEIPT', '鑷姩纭鏀惰揣(澶�)', 7, 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
+-- 杩愯惀閰嶇疆鏉冮檺
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:operationConfig:query', '鏌ヨ杩愯惀閰嶇疆', '杩愯惀閰嶇疆', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:operationConfig:update', '淇敼杩愯惀閰嶇疆', '杩愯惀閰嶇疆', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
+
+-- ============================================================
+-- 2026/04/13 鏀粯瀹濇彁鐜拌处鎴峰瓧娈�
+-- ============================================================
+
+ALTER TABLE `withdrawal_orders` ADD COLUMN `ali_account` VARCHAR(64) DEFAULT NULL COMMENT '鏀粯瀹濇彁鐜拌处鎴�' AFTER `out_bill_no`;
+ALTER TABLE `shop_info` ADD COLUMN `ali_account` VARCHAR(64) DEFAULT NULL COMMENT '鏀粯瀹濇彁鐜拌处鎴�' AFTER `delivery_area`;
+
+
+-- ============================================================
+-- 2026/04/13 杞挱鍥句笟鍔¤皟鏁�
+-- ============================================================
+
+ALTER TABLE `banner` MODIFY COLUMN `title` VARCHAR(255) DEFAULT NULL COMMENT '鏍囬';
+
+INSERT INTO `SYSTEM_DICT_DATA`(`TYPE`, `CODE`, `NAME`, `VALUE`, `REMARK`, `CREATE_TIME`, `DELETED`)
+VALUES ('SYSTEM', 'BANNER_FILES', '杞挱鍥炬枃浠惰矾寰�', '/banner/', '杞挱鍥惧浘鐗囧瓨鍌ㄥ瓙璺緞', CURRENT_TIMESTAMP, 0);
+
+
+-- ============================================================
+-- 2026/04/10 鎻愮幇鐢宠鍒濆鏉冮檺
+-- ============================================================
+
+-- 鎻愮幇鐢宠鐩稿叧鏉冮檺鏆傛湭褰曞叆锛屽悗缁ˉ鍏�
+
+
+-- ============================================================
+-- 2026/04/08 鍚勬ā鍧楀垵濮嬫潈闄�
+-- ============================================================
+
+-- 杞挱鍥�
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:banner:create', '鏂板缓杞挱鍥�', '杞挱鍥�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:banner:delete', '鍒犻櫎杞挱鍥�', '杞挱鍥�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:banner:update', '淇敼杞挱鍥�', '杞挱鍥�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:banner:query', '鏌ヨ杞挱鍥�', '杞挱鍥�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:banner:exportExcel', '瀵煎嚭杞挱鍥�(Excel)', '杞挱鍥�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
+-- 鍒嗙被淇℃伅琛�
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:category:create', '鏂板缓鍒嗙被淇℃伅琛�', '鍒嗙被淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:category:delete', '鍒犻櫎鍒嗙被淇℃伅琛�', '鍒嗙被淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:category:update', '淇敼鍒嗙被淇℃伅琛�', '鍒嗙被淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:category:query', '鏌ヨ鍒嗙被淇℃伅琛�', '鍒嗙被淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:category:exportExcel', '瀵煎嚭鍒嗙被淇℃伅琛�(Excel)', '鍒嗙被淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
+-- 缁勭粐淇℃伅琛�
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:company:create', '鏂板缓缁勭粐淇℃伅琛�', '缁勭粐淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:company:delete', '鍒犻櫎缁勭粐淇℃伅琛�', '缁勭粐淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:company:update', '淇敼缁勭粐淇℃伅琛�', '缁勭粐淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:company:query', '鏌ヨ缁勭粐淇℃伅琛�', '缁勭粐淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:company:exportExcel', '瀵煎嚭缁勭粐淇℃伅琛�(Excel)', '缁勭粐淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
+-- 璐d换浜轰俊鎭〃
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:managers:create', '鏂板缓璐d换浜轰俊鎭〃', '璐d换浜轰俊鎭〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:managers:delete', '鍒犻櫎璐d换浜轰俊鎭〃', '璐d换浜轰俊鎭〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:managers:update', '淇敼璐d换浜轰俊鎭〃', '璐d换浜轰俊鎭〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:managers:query', '鏌ヨ璐d换浜轰俊鎭〃', '璐d换浜轰俊鎭〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:managers:exportExcel', '瀵煎嚭璐d换浜轰俊鎭〃(Excel)', '璐d换浜轰俊鎭〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
+-- 浜哄憳淇℃伅琛�
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:member:create', '鏂板缓浜哄憳淇℃伅琛�', '浜哄憳淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:member:delete', '鍒犻櫎浜哄憳淇℃伅琛�', '浜哄憳淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:member:update', '淇敼浜哄憳淇℃伅琛�', '浜哄憳淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:member:query', '鏌ヨ浜哄憳淇℃伅琛�', '浜哄憳淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:member:exportExcel', '瀵煎嚭浜哄憳淇℃伅琛�(Excel)', '浜哄憳淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
+-- 闄勪欢涓婁紶淇℃伅琛�
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:multifile:create', '鏂板缓闄勪欢涓婁紶淇℃伅琛�', '闄勪欢涓婁紶淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:multifile:delete', '鍒犻櫎闄勪欢涓婁紶淇℃伅琛�', '闄勪欢涓婁紶淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:multifile:update', '淇敼闄勪欢涓婁紶淇℃伅琛�', '闄勪欢涓婁紶淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:multifile:query', '鏌ヨ闄勪欢涓婁紶淇℃伅琛�', '闄勪欢涓婁紶淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:multifile:exportExcel', '瀵煎嚭闄勪欢涓婁紶淇℃伅琛�(Excel)', '闄勪欢涓婁紶淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
+-- 绯荤粺娑堟伅淇℃伅琛�
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:notices:create', '鏂板缓绯荤粺娑堟伅淇℃伅琛�', '绯荤粺娑堟伅淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:notices:delete', '鍒犻櫎绯荤粺娑堟伅淇℃伅琛�', '绯荤粺娑堟伅淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:notices:update', '淇敼绯荤粺娑堟伅淇℃伅琛�', '绯荤粺娑堟伅淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:notices:query', '鏌ヨ绯荤粺娑堟伅淇℃伅琛�', '绯荤粺娑堟伅淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:notices:exportExcel', '瀵煎嚭绯荤粺娑堟伅淇℃伅琛�(Excel)', '绯荤粺娑堟伅淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
+-- 宸ュ崟淇℃伅琛�
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:workorder:create', '鏂板缓宸ュ崟淇℃伅琛�', '宸ュ崟淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:workorder:delete', '鍒犻櫎宸ュ崟淇℃伅琛�', '宸ュ崟淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:workorder:update', '淇敼宸ュ崟淇℃伅琛�', '宸ュ崟淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:workorder:query', '鏌ヨ宸ュ崟淇℃伅琛�', '宸ュ崟淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:workorder:exportExcel', '瀵煎嚭宸ュ崟淇℃伅琛�(Excel)', '宸ュ崟淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
+-- 宸ュ崟鎿嶄綔鍘嗗彶琛�
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:workorderlog:create', '鏂板缓宸ュ崟鎿嶄綔鍘嗗彶琛�', '宸ュ崟鎿嶄綔鍘嗗彶琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:workorderlog:delete', '鍒犻櫎宸ュ崟鎿嶄綔鍘嗗彶琛�', '宸ュ崟鎿嶄綔鍘嗗彶琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:workorderlog:update', '淇敼宸ュ崟鎿嶄綔鍘嗗彶琛�', '宸ュ崟鎿嶄綔鍘嗗彶琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:workorderlog:query', '鏌ヨ宸ュ崟鎿嶄綔鍘嗗彶琛�', '宸ュ崟鎿嶄綔鍘嗗彶琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:workorderlog:exportExcel', '瀵煎嚭宸ュ崟鎿嶄綔鍘嗗彶琛�(Excel)', '宸ュ崟鎿嶄綔鍘嗗彶琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
diff --git a/server/services/src/main/java/com/doumee/biz/system/AgreementConfigBiz.java b/server/services/src/main/java/com/doumee/biz/system/AgreementConfigBiz.java
new file mode 100644
index 0000000..fb8867d
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/biz/system/AgreementConfigBiz.java
@@ -0,0 +1,21 @@
+package com.doumee.biz.system;
+
+import com.doumee.dao.dto.AgreementConfigDTO;
+
+/**
+ * 鍗忚閰嶇疆涓氬姟澶勭悊
+ * @author rk
+ * @date 2026/04/13
+ */
+public interface AgreementConfigBiz {
+
+    /**
+     * 鏌ヨ鍗忚閰嶇疆
+     */
+    AgreementConfigDTO getConfig();
+
+    /**
+     * 淇濆瓨鍗忚閰嶇疆
+     */
+    void saveConfig(AgreementConfigDTO dto);
+}
diff --git a/server/services/src/main/java/com/doumee/biz/system/OperationConfigBiz.java b/server/services/src/main/java/com/doumee/biz/system/OperationConfigBiz.java
new file mode 100644
index 0000000..c4285f5
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/biz/system/OperationConfigBiz.java
@@ -0,0 +1,21 @@
+package com.doumee.biz.system;
+
+import com.doumee.dao.dto.OperationConfigDTO;
+
+/**
+ * 杩愯惀閰嶇疆涓氬姟澶勭悊
+ * @author rk
+ * @date 2026/04/13
+ */
+public interface OperationConfigBiz {
+
+    /**
+     * 鏌ヨ杩愯惀閰嶇疆
+     */
+    OperationConfigDTO getConfig();
+
+    /**
+     * 鎵归噺淇濆瓨杩愯惀閰嶇疆锛堟柊澧炴垨鏇存柊锛�
+     */
+    void saveConfig(OperationConfigDTO dto);
+}
diff --git a/server/services/src/main/java/com/doumee/biz/system/impl/AgreementConfigBizImpl.java b/server/services/src/main/java/com/doumee/biz/system/impl/AgreementConfigBizImpl.java
new file mode 100644
index 0000000..89636d3
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/biz/system/impl/AgreementConfigBizImpl.java
@@ -0,0 +1,74 @@
+package com.doumee.biz.system.impl;
+
+import com.doumee.biz.system.AgreementConfigBiz;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.dao.dto.AgreementConfigDTO;
+import com.doumee.dao.system.model.SystemDictData;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 鍗忚閰嶇疆涓氬姟瀹炵幇
+ * @author rk
+ * @date 2026/04/13
+ */
+@Service
+public class AgreementConfigBizImpl implements AgreementConfigBiz {
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+    @Override
+    public AgreementConfigDTO getConfig() {
+        AgreementConfigDTO dto = new AgreementConfigDTO();
+        dto.setPrivacyAgreement(getValue(Constants.PRIVACY_AGREEMENT));
+        dto.setUserAgreement(getValue(Constants.USER_AGREEMENT));
+        dto.setAboutUs(getValue(Constants.ABOUT_US));
+        return dto;
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+    public void saveConfig(AgreementConfigDTO dto) {
+        validate(dto);
+        saveOrUpdate(Constants.PRIVACY_AGREEMENT, "闅愮鍗忚", dto.getPrivacyAgreement());
+        saveOrUpdate(Constants.USER_AGREEMENT, "鐢ㄦ埛鍗忚", dto.getUserAgreement());
+        saveOrUpdate(Constants.ABOUT_US, "鍏充簬鎴戜滑", dto.getAboutUs());
+    }
+
+    private String getValue(String label) {
+        SystemDictData data = systemDictDataBiz.queryByCode(Constants.SYSTEM, label);
+        return data != null ? data.getCode() : null;
+    }
+
+    private void saveOrUpdate(String label, String remark, String value) {
+        SystemDictData existing = systemDictDataBiz.queryByCode(Constants.SYSTEM, label);
+        if (existing != null && existing.getId() != null) {
+            existing.setCode(value);
+            systemDictDataBiz.updateById(existing);
+        } else {
+            SystemDictData newData = new SystemDictData();
+            newData.setDictId(100);
+            newData.setLabel(label);
+            newData.setRemark(remark);
+            newData.setCode(value);
+            newData.setDisabled(false);
+            newData.setDeleted(false);
+            systemDictDataBiz.create(newData);
+        }
+    }
+
+    private void validate(AgreementConfigDTO dto) {
+        if (dto == null
+                || StringUtils.isBlank(dto.getPrivacyAgreement())
+                || StringUtils.isBlank(dto.getUserAgreement())
+                || StringUtils.isBlank(dto.getAboutUs())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎵�鏈夐厤缃」鍧囦负蹇呭~");
+        }
+    }
+}
diff --git a/server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java b/server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java
new file mode 100644
index 0000000..5d569d9
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java
@@ -0,0 +1,89 @@
+package com.doumee.biz.system.impl;
+
+import com.doumee.biz.system.OperationConfigBiz;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.dao.dto.OperationConfigDTO;
+import com.doumee.dao.system.model.SystemDictData;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 杩愯惀閰嶇疆涓氬姟瀹炵幇
+ * @author rk
+ * @date 2026/04/13
+ */
+@Service
+public class OperationConfigBizImpl implements OperationConfigBiz {
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+    @Override
+    public OperationConfigDTO getConfig() {
+        OperationConfigDTO dto = new OperationConfigDTO();
+        dto.setDriverDailyCancelLimit(getValue(Constants.OP_DRIVER_DAILY_CANCEL_LIMIT));
+        dto.setUnpickedDiscount(getValue(Constants.OP_UNPICKED_DISCOUNT));
+        dto.setSettlementDate(getValue(Constants.OP_SETTLEMENT_DATE));
+        dto.setUrgentCoefficient(getValue(Constants.OP_URGENT_COEFFICIENT));
+        dto.setAutoCancelTime(getValue(Constants.OP_AUTO_CANCEL_TIME));
+        dto.setInsuranceRate(getValue(Constants.OP_INSURANCE_RATE));
+        dto.setOrderAcceptLimit(getValue(Constants.OP_ORDER_ACCEPT_LIMIT));
+        dto.setAutoConfirmReceipt(getValue(Constants.OP_AUTO_CONFIRM_RECEIPT));
+        return dto;
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+    public void saveConfig(OperationConfigDTO dto) {
+        validate(dto);
+        saveOrUpdate(Constants.OP_DRIVER_DAILY_CANCEL_LIMIT, "鍙告満姣忔棩鍙栨秷娆℃暟", dto.getDriverDailyCancelLimit());
+        saveOrUpdate(Constants.OP_UNPICKED_DISCOUNT, "鏈彇浠舵姌鎵�", dto.getUnpickedDiscount());
+        saveOrUpdate(Constants.OP_SETTLEMENT_DATE, "璁㈠崟缁撶畻鏃ユ湡", dto.getSettlementDate());
+        saveOrUpdate(Constants.OP_URGENT_COEFFICIENT, "鍔犳�ョ郴鏁�", dto.getUrgentCoefficient());
+        saveOrUpdate(Constants.OP_AUTO_CANCEL_TIME, "瓒呮椂鏈敮浠樿嚜鍔ㄥ彇娑堟椂闂�", dto.getAutoCancelTime());
+        saveOrUpdate(Constants.OP_INSURANCE_RATE, "淇濊垂姣旂巼", dto.getInsuranceRate());
+        saveOrUpdate(Constants.OP_ORDER_ACCEPT_LIMIT, "鎺ュ崟鏁伴噺", dto.getOrderAcceptLimit());
+        saveOrUpdate(Constants.OP_AUTO_CONFIRM_RECEIPT, "鑷姩纭鏀惰揣", dto.getAutoConfirmReceipt());
+    }
+
+    private String getValue(String label) {
+        SystemDictData data = systemDictDataBiz.queryByCode(Constants.OPERATION_CONFIG, label);
+        return data != null ? data.getCode() : null;
+    }
+
+    private void saveOrUpdate(String label, String name, String value) {
+        SystemDictData existing = systemDictDataBiz.queryByCode(Constants.OPERATION_CONFIG, label);
+        if (existing != null && existing.getId() != null) {
+            existing.setCode(value);
+            systemDictDataBiz.updateById(existing);
+        } else {
+            SystemDictData newData = new SystemDictData();
+            newData.setDictId(105);
+            newData.setLabel(label);
+            newData.setRemark(name);
+            newData.setCode(value);
+            newData.setDisabled(false);
+            newData.setDeleted(false);
+            systemDictDataBiz.create(newData);
+        }
+    }
+
+    private void validate(OperationConfigDTO dto) {
+        if (dto == null
+                || StringUtils.isBlank(dto.getDriverDailyCancelLimit())
+                || StringUtils.isBlank(dto.getUnpickedDiscount())
+                || StringUtils.isBlank(dto.getSettlementDate())
+                || StringUtils.isBlank(dto.getUrgentCoefficient())
+                || StringUtils.isBlank(dto.getAutoCancelTime())
+                || StringUtils.isBlank(dto.getInsuranceRate())
+                || StringUtils.isBlank(dto.getOrderAcceptLimit())
+                || StringUtils.isBlank(dto.getAutoConfirmReceipt())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎵�鏈夐厤缃」鍧囦负蹇呭~");
+        }
+    }
+}
diff --git a/server/services/src/main/java/com/doumee/config/wx/TransferDetailEntityNew.java b/server/services/src/main/java/com/doumee/config/wx/TransferDetailEntityNew.java
deleted file mode 100644
index c40e6df..0000000
--- a/server/services/src/main/java/com/doumee/config/wx/TransferDetailEntityNew.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package com.doumee.config.wx;
-
-
-import com.google.gson.annotations.SerializedName;
-import com.wechat.pay.java.core.cipher.PrivacyDecryptor;
-import lombok.Data;
-
-import java.util.Objects;
-
-/**
- * 鍟嗘埛鍗曞彿鏌ヨ杞处鍗曞疄浣撶被淇℃伅
- *
- * @author: suhai
- * @date: 2025/05/13  11:28
- */
-@Data
-public class TransferDetailEntityNew {
-    /** 鍟嗘埛鍙� Y 璇存槑锛氬井淇℃敮浠樺垎閰嶇殑鍟嗘埛鍙� */
-    @SerializedName("mch_id")
-    private String mchId;
-
-    /** 鍟嗘埛鍗曞彿 Y 璇存槑锛氬晢鎴风郴缁熷唴閮ㄧ殑鍟嗗鍗曞彿锛岃姹傛鍙傛暟鍙兘鐢辨暟瀛椼�佸ぇ灏忓啓瀛楁瘝缁勬垚锛屽湪鍟嗘埛绯荤粺鍐呴儴鍞竴 */
-    @SerializedName("out_bill_no")
-    private String outBillNo;
-
-    /** 鍟嗗杞处璁㈠崟鍙� Y 璇存槑锛氬晢瀹惰浆璐﹁鍗曠殑涓婚敭锛屽敮涓�瀹氫箟姝よ祫婧愮殑鏍囪瘑 */
-    @SerializedName("transfer_bill_no")
-    private String transferBillNo;
-
-    /** 鍟嗘埛appid Y 璇存槑锛氱敵璇峰晢鎴峰彿鐨刟ppid鎴栧晢鎴峰彿缁戝畾鐨刟ppid锛堜紒涓氬彿corpid鍗充负姝ppid锛� */
-    @SerializedName("appid")
-    private String appid;
-
-    /** 鍗曟嵁鐘舵�� Y 璇存槑锛氬崟鎹姸鎬�  */
-    @SerializedName("state")
-    private String state;
-
-    /** 杞处閲戦 Y 璇存槑锛氳浆璐﹂噾棰濆崟浣嶄负鈥滃垎鈥濄��*/
-    @SerializedName("transfer_amount")
-    private Integer transferAmount;
-
-    /** 杞处澶囨敞 Y 璇存槑锛氳浆璐﹀娉紝鐢ㄦ埛鏀舵鏃跺彲瑙佽澶囨敞淇℃伅锛孶TF8缂栫爜锛屾渶澶氬厑璁�32涓瓧绗︺��*/
-    @SerializedName("transfer_remark")
-    private String transferRemark;
-
-    /** 澶辫触鍘熷洜 N 璇存槑锛氳鍗曞凡澶辫触鎴栬�呭凡閫�璧勯噾鏃讹紝杩斿洖澶辫触鍘熷洜銆� */
-    @SerializedName("fail_reason")
-    private String failReason;
-
-    /** 鏀舵鐢ㄦ埛OpenID Y 璇存槑锛氬晢鎴稟ppID涓嬶紝鏌愮敤鎴风殑OpenID  */
-    @SerializedName("openid")
-    private String openid;
-
-    /** 鏀舵鐢ㄦ埛濮撳悕 N 璇存槑锛氭敹娆炬柟鐪熷疄濮撳悕銆傞渶瑕佸姞瀵嗕紶鍏ワ紝鏀寔鏍囧噯RSA绠楁硶鍜屽浗瀵嗙畻娉曪紝鍏挜鐢卞井淇′晶鎻愪緵銆�
-     杞处閲戦 >= 2,000鍏冩椂锛岃绗旀槑缁嗗繀椤诲~鍐�
-     鑻ュ晢鎴蜂紶鍏ユ敹娆剧敤鎴峰鍚嶏紝寰俊鏀粯浼氭牎楠屾敹娆剧敤鎴蜂笌杈撳叆濮撳悕鏄惁涓�鑷达紝骞舵彁渚涚數瀛愬洖鍗� */
-    @SerializedName("user_name")
-    private String userName;
-
-    /** 鍗曟嵁鍒涘缓鏃堕棿 N 璇存槑锛氬崟鎹彈鐞嗘垚鍔熸椂杩斿洖锛屾寜鐓т娇鐢╮fc3339鎵�瀹氫箟鐨勬牸寮忥紝鏍煎紡涓簓yyy-MM-DDThh:mm:ss+TIMEZONE */
-    @SerializedName("create_time")
-    private String createTime;
-
-    /** 鏈�鍚庝竴娆$姸鎬佸彉鏇存椂闂� N 璇存槑锛氬崟鎹渶鍚庢洿鏂版椂闂达紝鎸夌収浣跨敤rfc3339鎵�瀹氫箟鐨勬牸寮忥紝鏍煎紡涓簓yyy-MM-DDThh:mm:ss+TIMEZONE */
-    @SerializedName("update_time")
-    private String updateTime;
-
-    public String getMchId() {
-        return mchId;
-    }
-
-    public void setMchId(String mchId) {
-        this.mchId = mchId;
-    }
-
-    public String getOutBillNo() {
-        return outBillNo;
-    }
-
-    public void setOutBillNo(String outBillNo) {
-        this.outBillNo = outBillNo;
-    }
-
-    public String getTransferBillNo() {
-        return transferBillNo;
-    }
-
-    public void setTransferBillNo(String transferBillNo) {
-        this.transferBillNo = transferBillNo;
-    }
-
-    public String getAppid() {
-        return appid;
-    }
-
-    public void setAppid(String appid) {
-        this.appid = appid;
-    }
-
-    public String getState() {
-        return state;
-    }
-
-    public void setState(String state) {
-        this.state = state;
-    }
-
-    public Integer getTransferAmount() {
-        return transferAmount;
-    }
-
-    public void setTransferAmount(Integer transferAmount) {
-        this.transferAmount = transferAmount;
-    }
-
-    public String getTransferRemark() {
-        return transferRemark;
-    }
-
-    public void setTransferRemark(String transferRemark) {
-        this.transferRemark = transferRemark;
-    }
-
-    public String getFailReason() {
-        return failReason;
-    }
-
-    public void setFailReason(String failReason) {
-        this.failReason = failReason;
-    }
-
-    public String getOpenid() {
-        return openid;
-    }
-
-    public void setOpenid(String openid) {
-        this.openid = openid;
-    }
-
-    public String getUserName() {
-        return userName;
-    }
-
-    public void setUserName(String userName) {
-        this.userName = userName;
-    }
-
-    public String getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(String createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(String updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (o == null || getClass() != o.getClass()) return false;
-        TransferDetailEntityNew that = (TransferDetailEntityNew) o;
-        return Objects.equals(mchId, that.mchId) && Objects.equals(outBillNo, that.outBillNo) && Objects.equals(transferBillNo, that.transferBillNo) && Objects.equals(appid, that.appid) && Objects.equals(state, that.state) && Objects.equals(transferAmount, that.transferAmount) && Objects.equals(transferRemark, that.transferRemark) && Objects.equals(failReason, that.failReason) && Objects.equals(openid, that.openid) && Objects.equals(userName, that.userName) && Objects.equals(createTime, that.createTime) && Objects.equals(updateTime, that.updateTime);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(mchId, outBillNo, transferBillNo, appid, state, transferAmount, transferRemark, failReason, openid, userName, createTime, updateTime);
-    }
-
-    @Override
-    public String toString() {
-        return "TransferDetailEntityNew{" +
-                "mchId='" + mchId + '\'' +
-                ", outBillNo='" + outBillNo + '\'' +
-                ", transferBillNo='" + transferBillNo + '\'' +
-                ", appid='" + appid + '\'' +
-                ", state='" + state + '\'' +
-                ", transferAmount=" + transferAmount +
-                ", transferRemark='" + transferRemark + '\'' +
-                ", failReason='" + failReason + '\'' +
-                ", openid='" + openid + '\'' +
-                ", userName='" + userName + '\'' +
-                ", createTime='" + createTime + '\'' +
-                ", updateTime='" + updateTime + '\'' +
-                '}';
-    }
-
-    public TransferDetailEntityNew cloneWithCipher(PrivacyDecryptor encryptor) {
-        TransferDetailEntityNew copy = new TransferDetailEntityNew();
-        copy.mchId = mchId;
-        copy.outBillNo = outBillNo;
-        copy.transferBillNo = transferBillNo;
-        copy.appid = appid;
-        copy.state = state;
-        copy.transferAmount = transferAmount;
-        copy.transferRemark = transferRemark;
-        copy.failReason = failReason;
-        copy.openid = openid;
-        if (userName != null && !userName.isEmpty()) {
-            copy.userName = encryptor.decrypt(userName);
-        }
-        copy.createTime = createTime;
-        copy.updateTime = updateTime;
-        return copy;
-    }
-}
-
diff --git a/server/services/src/main/java/com/doumee/config/wx/WXPayUtility.java b/server/services/src/main/java/com/doumee/config/wx/WXPayUtility.java
deleted file mode 100644
index bf29e52..0000000
--- a/server/services/src/main/java/com/doumee/config/wx/WXPayUtility.java
+++ /dev/null
@@ -1,456 +0,0 @@
-package com.doumee.config.wx;
-
-
-import com.google.gson.ExclusionStrategy;
-import com.google.gson.FieldAttributes;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import com.google.gson.JsonSyntaxException;
-import com.google.gson.annotations.Expose;
-import com.wechat.pay.java.core.util.GsonUtil;
-import okhttp3.Headers;
-import okhttp3.Response;
-import okio.BufferedSource;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.Cipher;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.NoSuchPaddingException;
-import java.io.IOException;
-import java.io.UncheckedIOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.security.InvalidKeyException;
-import java.security.KeyFactory;
-import java.security.NoSuchAlgorithmException;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.SecureRandom;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.PKCS8EncodedKeySpec;
-import java.security.spec.X509EncodedKeySpec;
-import java.time.DateTimeException;
-import java.time.Duration;
-import java.time.Instant;
-import java.util.Base64;
-import java.util.Map;
-import java.util.Objects;
-
-public class WXPayUtility {
-    private static final Gson gson = new GsonBuilder()
-            .disableHtmlEscaping()
-            .addSerializationExclusionStrategy(new ExclusionStrategy() {
-                @Override
-                public boolean shouldSkipField(FieldAttributes fieldAttributes) {
-                    final Expose expose = fieldAttributes.getAnnotation(Expose.class);
-                    return expose != null && !expose.serialize();
-                }
-
-                @Override
-                public boolean shouldSkipClass(Class<?> aClass) {
-                    return false;
-                }
-            })
-            .addDeserializationExclusionStrategy(new ExclusionStrategy() {
-                @Override
-                public boolean shouldSkipField(FieldAttributes fieldAttributes) {
-                    final Expose expose = fieldAttributes.getAnnotation(Expose.class);
-                    return expose != null && !expose.deserialize();
-                }
-
-                @Override
-                public boolean shouldSkipClass(Class<?> aClass) {
-                    return false;
-                }
-            })
-            .create();
-    private static final char[] SYMBOLS =
-            "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
-    private static final SecureRandom random = new SecureRandom();
-
-    /**
-     * 灏� Object 杞崲涓� JSON 瀛楃涓�
-     */
-    public static String toJson(Object object) {
-        return gson.toJson(object);
-    }
-
-    /**
-     * 灏� JSON 瀛楃涓茶В鏋愪负鐗瑰畾绫诲瀷鐨勫疄渚�
-     */
-    public static <T> T fromJson(String json, Class<T> classOfT) throws JsonSyntaxException {
-        return gson.fromJson(json, classOfT);
-    }
-
-    /**
-     * 浠庡叕绉侀挜鏂囦欢璺緞涓鍙栨枃浠跺唴瀹�
-     *
-     * @param keyPath 鏂囦欢璺緞
-     * @return 鏂囦欢鍐呭
-     */
-    private static String readKeyStringFromPath(String keyPath) {
-        try {
-            return new String(Files.readAllBytes(Paths.get(keyPath)), StandardCharsets.UTF_8);
-        } catch (IOException e) {
-            throw new UncheckedIOException(e);
-        }
-    }
-
-    /**
-     * 璇诲彇 PKCS#8 鏍煎紡鐨勭閽ュ瓧绗︿覆骞跺姞杞戒负绉侀挜瀵硅薄
-     *
-     * @param keyString 绉侀挜鏂囦欢鍐呭锛屼互 -----BEGIN PRIVATE KEY----- 寮�澶�
-     * @return PrivateKey 瀵硅薄
-     */
-    public static PrivateKey loadPrivateKeyFromString(String keyString) {
-        try {
-            keyString = keyString.replace("-----BEGIN PRIVATE KEY-----", "")
-                    .replace("-----END PRIVATE KEY-----", "")
-                    .replaceAll("\\s+", "");
-            return KeyFactory.getInstance("RSA").generatePrivate(
-                    new PKCS8EncodedKeySpec(Base64.getDecoder().decode(keyString)));
-        } catch (NoSuchAlgorithmException e) {
-            throw new UnsupportedOperationException(e);
-        } catch (InvalidKeySpecException e) {
-            throw new IllegalArgumentException(e);
-        }
-    }
-
-    /**
-     * 浠� PKCS#8 鏍煎紡鐨勭閽ユ枃浠朵腑鍔犺浇绉侀挜
-     *
-     * @param keyPath 绉侀挜鏂囦欢璺緞
-     * @return PrivateKey 瀵硅薄
-     */
-    public static PrivateKey loadPrivateKeyFromPath(String keyPath) {
-        return loadPrivateKeyFromString(readKeyStringFromPath(keyPath));
-    }
-
-    /**
-     * 璇诲彇 PKCS#8 鏍煎紡鐨勫叕閽ュ瓧绗︿覆骞跺姞杞戒负鍏挜瀵硅薄
-     *
-     * @param keyString 鍏挜鏂囦欢鍐呭锛屼互 -----BEGIN PUBLIC KEY----- 寮�澶�
-     * @return PublicKey 瀵硅薄
-     */
-    public static PublicKey loadPublicKeyFromString(String keyString) {
-        try {
-            keyString = keyString.replace("-----BEGIN PUBLIC KEY-----", "")
-                    .replace("-----END PUBLIC KEY-----", "")
-                    .replaceAll("\\s+", "");
-            return KeyFactory.getInstance("RSA").generatePublic(
-                    new X509EncodedKeySpec(Base64.getDecoder().decode(keyString)));
-        } catch (NoSuchAlgorithmException e) {
-            throw new UnsupportedOperationException(e);
-        } catch (InvalidKeySpecException e) {
-            throw new IllegalArgumentException(e);
-        }
-    }
-
-    /**
-     * 浠� PKCS#8 鏍煎紡鐨勫叕閽ユ枃浠朵腑鍔犺浇鍏挜
-     *
-     * @param keyPath 鍏挜鏂囦欢璺緞
-     * @return PublicKey 瀵硅薄
-     */
-    public static PublicKey loadPublicKeyFromPath(String keyPath) {
-        return loadPublicKeyFromString(readKeyStringFromPath(keyPath));
-    }
-
-    /**
-     * 鍒涘缓鎸囧畾闀垮害鐨勯殢鏈哄瓧绗︿覆锛屽瓧绗﹂泦涓篬0-9a-zA-Z]锛屽彲鐢ㄤ簬瀹夊叏鐩稿叧鐢ㄩ��
-     */
-    public static String createNonce(int length) {
-        char[] buf = new char[length];
-        for (int i = 0; i < length; ++i) {
-            buf[i] = SYMBOLS[random.nextInt(SYMBOLS.length)];
-        }
-        return new String(buf);
-    }
-
-    /**
-     * 浣跨敤鍏挜鎸夌収 RSA_PKCS1_OAEP_PADDING 绠楁硶杩涜鍔犲瘑
-     *
-     * @param publicKey 鍔犲瘑鐢ㄥ叕閽ュ璞�
-     * @param plaintext 寰呭姞瀵嗘槑鏂�
-     * @return 鍔犲瘑鍚庡瘑鏂�
-     */
-    public static String encrypt(PublicKey publicKey, String plaintext) {
-        final String transformation = "RSA/ECB/OAEPWithSHA-1AndMGF1Padding";
-
-        try {
-            Cipher cipher = Cipher.getInstance(transformation);
-            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
-            return Base64.getEncoder().encodeToString(cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)));
-        } catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
-            throw new IllegalArgumentException("The current Java environment does not support " + transformation, e);
-        } catch (InvalidKeyException e) {
-            throw new IllegalArgumentException("RSA encryption using an illegal publicKey", e);
-        } catch (BadPaddingException | IllegalBlockSizeException e) {
-            throw new IllegalArgumentException("Plaintext is too long", e);
-        }
-    }
-
-    /**
-     * 浣跨敤绉侀挜鎸夌収鎸囧畾绠楁硶杩涜绛惧悕
-     *
-     * @param message 寰呯鍚嶄覆
-     * @param algorithm 绛惧悕绠楁硶锛屽 SHA256withRSA
-     * @param privateKey 绛惧悕鐢ㄧ閽ュ璞�
-     * @return 绛惧悕缁撴灉
-     */
-    public static String sign(String message, String algorithm, PrivateKey privateKey) {
-        byte[] sign;
-        try {
-            Signature signature = Signature.getInstance(algorithm);
-            signature.initSign(privateKey);
-            signature.update(message.getBytes(StandardCharsets.UTF_8));
-            sign = signature.sign();
-        } catch (NoSuchAlgorithmException e) {
-            throw new UnsupportedOperationException("The current Java environment does not support " + algorithm, e);
-        } catch (InvalidKeyException e) {
-            throw new IllegalArgumentException(algorithm + " signature uses an illegal privateKey.", e);
-        } catch (SignatureException e) {
-            throw new RuntimeException("An error occurred during the sign process.", e);
-        }
-        return Base64.getEncoder().encodeToString(sign);
-    }
-
-    /**
-     * 浣跨敤鍏挜鎸夌収鐗瑰畾绠楁硶楠岃瘉绛惧悕
-     *
-     * @param message 寰呯鍚嶄覆
-     * @param signature 寰呴獙璇佺殑绛惧悕鍐呭
-     * @param algorithm 绛惧悕绠楁硶锛屽锛歋HA256withRSA
-     * @param publicKey 楠岀鐢ㄥ叕閽ュ璞�
-     * @return 绛惧悕楠岃瘉鏄惁閫氳繃
-     */
-    public static boolean verify(String message, String signature, String algorithm,
-                                 PublicKey publicKey) {
-        try {
-            Signature sign = Signature.getInstance(algorithm);
-            sign.initVerify(publicKey);
-            sign.update(message.getBytes(StandardCharsets.UTF_8));
-            return sign.verify(Base64.getDecoder().decode(signature));
-        } catch (SignatureException e) {
-            return false;
-        } catch (InvalidKeyException e) {
-            throw new IllegalArgumentException("verify uses an illegal publickey.", e);
-        } catch (NoSuchAlgorithmException e) {
-            throw new UnsupportedOperationException("The current Java environment does not support" + algorithm, e);
-        }
-    }
-
-    /**
-     * 鏍规嵁寰俊鏀粯APIv3璇锋眰绛惧悕瑙勫垯鏋勯�� Authorization 绛惧悕
-     *
-     * @param mchid 鍟嗘埛鍙�
-     * @param certificateSerialNo 鍟嗘埛API璇佷功搴忓垪鍙�
-     * @param privateKey 鍟嗘埛API璇佷功绉侀挜
-     * @param method 璇锋眰鎺ュ彛鐨凥TTP鏂规硶锛岃浣跨敤鍏ㄥぇ鍐欒〃杩帮紝濡� GET銆丳OST銆丳UT銆丏ELETE
-     * @param uri 璇锋眰鎺ュ彛鐨刄RL
-     * @param body 璇锋眰鎺ュ彛鐨凚ody
-     * @return 鏋勯�犲ソ鐨勫井淇℃敮浠楢PIv3 Authorization 澶�
-     */
-    public static String buildAuthorization(String mchid, String certificateSerialNo,
-                                            PrivateKey privateKey,
-                                            String method, String uri, String body) {
-        String nonce = createNonce(32);
-        long timestamp = Instant.now().getEpochSecond();
-
-        String message = String.format("%s\n%s\n%d\n%s\n%s\n", method, uri, timestamp, nonce,
-                body == null ? "" : body);
-
-        String signature = sign(message, "SHA256withRSA", privateKey);
-
-        return String.format(
-                "WECHATPAY2-SHA256-RSA2048 mchid=\"%s\",nonce_str=\"%s\",signature=\"%s\"," +
-                        "timestamp=\"%d\",serial_no=\"%s\"",
-                mchid, nonce, signature, timestamp, certificateSerialNo);
-    }
-
-    /**
-     * 瀵瑰弬鏁拌繘琛� URL 缂栫爜
-     *
-     * @param content 鍙傛暟鍐呭
-     * @return 缂栫爜鍚庣殑鍐呭
-     */
-    public static String urlEncode(String content) {
-        try {
-            return URLEncoder.encode(content, StandardCharsets.UTF_8.name());
-        } catch (UnsupportedEncodingException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    /**
-     * 瀵瑰弬鏁癕ap杩涜 URL 缂栫爜锛岀敓鎴� QueryString
-     *
-     * @param params Query鍙傛暟Map
-     * @return QueryString
-     */
-    public static String urlEncode(Map<String, Object> params) {
-        if (params == null || params.isEmpty()) {
-            return "";
-        }
-
-        int index = 0;
-        StringBuilder result = new StringBuilder();
-        for (Map.Entry<String, Object> entry : params.entrySet()) {
-            result.append(entry.getKey())
-                    .append("=")
-                    .append(urlEncode(entry.getValue().toString()));
-            index++;
-            if (index < params.size()) {
-                result.append("&");
-            }
-        }
-        return result.toString();
-    }
-
-    /**
-     * 浠庡簲绛斾腑鎻愬彇 Body
-     *
-     * @param response HTTP 璇锋眰搴旂瓟瀵硅薄
-     * @return 搴旂瓟涓殑Body鍐呭锛孊ody涓虹┖鏃惰繑鍥炵┖瀛楃涓�
-     */
-    public static String extractBody(Response response) {
-        if (response.body() == null) {
-            return "";
-        }
-
-        try {
-            BufferedSource source = response.body().source();
-            return source.readUtf8();
-        } catch (IOException e) {
-            throw new RuntimeException(String.format("An error occurred during reading response body. Status: %d", response.code()), e);
-        }
-    }
-
-    /**
-     * 鏍规嵁寰俊鏀粯APIv3搴旂瓟楠岀瑙勫垯瀵瑰簲绛旂鍚嶈繘琛岄獙璇侊紝楠岃瘉涓嶉�氳繃鏃舵姏鍑哄紓甯�
-     *
-     * @param wechatpayPublicKeyId 寰俊鏀粯鍏挜ID
-     * @param wechatpayPublicKey 寰俊鏀粯鍏挜瀵硅薄
-     * @param headers 寰俊鏀粯搴旂瓟 Header 鍒楄〃
-     * @param body 寰俊鏀粯搴旂瓟 Body
-     */
-    public static void validateResponse(String wechatpayPublicKeyId, PublicKey wechatpayPublicKey,
-                                        Headers headers,
-                                        String body) {
-        String timestamp = headers.get("Wechatpay-Timestamp");
-        try {
-            Instant responseTime = Instant.ofEpochSecond(Long.parseLong(timestamp));
-            // 鎷掔粷杩囨湡璇锋眰
-            if (Duration.between(responseTime, Instant.now()).abs().toMinutes() >= 5) {
-                throw new IllegalArgumentException(
-                        String.format("Validate http response,timestamp[%s] of httpResponse is expires, "
-                                        + "request-id[%s]",
-                                timestamp, headers.get("Request-ID")));
-            }
-        } catch (DateTimeException | NumberFormatException e) {
-            throw new IllegalArgumentException(
-                    String.format("Validate http response,timestamp[%s] of httpResponse is invalid, " +
-                                    "request-id[%s]", timestamp,
-                            headers.get("Request-ID")));
-        }
-        String message = String.format("%s\n%s\n%s\n", timestamp, headers.get("Wechatpay-Nonce"),
-                body == null ? "" : body);
-        String serialNumber = headers.get("Wechatpay-Serial");
-        if (!Objects.equals(serialNumber, wechatpayPublicKeyId)) {
-            throw new IllegalArgumentException(
-                    String.format("Invalid Wechatpay-Serial, Local: %s, Remote: %s", wechatpayPublicKeyId,
-                            serialNumber));
-        }
-        String signature = headers.get("Wechatpay-Signature");
-
-        boolean success = verify(message, signature, "SHA256withRSA", wechatpayPublicKey);
-        if (!success) {
-            throw new IllegalArgumentException(
-                    String.format("Validate response failed,the WechatPay signature is incorrect.%n"
-                                    + "Request-ID[%s]\tresponseHeader[%s]\tresponseBody[%.1024s]",
-                            headers.get("Request-ID"), headers, body));
-        }
-    }
-
-    /**
-     * 寰俊鏀粯API閿欒寮傚父锛屽彂閫丠TTP璇锋眰鎴愬姛锛屼絾杩斿洖鐘舵�佺爜涓嶆槸 2XX 鏃舵姏鍑烘湰寮傚父
-     */
-    public static class ApiException extends RuntimeException {
-        private static final long serialVersionUID = 2261086748874802175L;
-
-        private final int statusCode;
-        private final String body;
-        private final Headers headers;
-        private final String errorCode;
-        private final String errorMessage;
-
-        public ApiException(int statusCode, String body, Headers headers) {
-            super(String.format("寰俊鏀粯API璁块棶澶辫触锛孲tatusCode: [%s], Body: [%s], Headers: [%s]", statusCode, body, headers));
-            this.statusCode = statusCode;
-            this.body = body;
-            this.headers = headers;
-
-            if (body != null && !body.isEmpty()) {
-                JsonElement code;
-                JsonElement message;
-
-                try {
-                    JsonObject jsonObject = GsonUtil.getGson().fromJson(body, JsonObject.class);
-                    code = jsonObject.get("code");
-                    message = jsonObject.get("message");
-                } catch (JsonSyntaxException ignored) {
-                    code = null;
-                    message = null;
-                }
-                this.errorCode = code == null ? null : code.getAsString();
-                this.errorMessage = message == null ? null : message.getAsString();
-            } else {
-                this.errorCode = null;
-                this.errorMessage = null;
-            }
-        }
-
-        /**
-         * 鑾峰彇 HTTP 搴旂瓟鐘舵�佺爜
-         */
-        public int getStatusCode() {
-            return statusCode;
-        }
-
-        /**
-         * 鑾峰彇 HTTP 搴旂瓟鍖呬綋鍐呭
-         */
-        public String getBody() {
-            return body;
-        }
-
-        /**
-         * 鑾峰彇 HTTP 搴旂瓟 Header
-         */
-        public Headers getHeaders() {
-            return headers;
-        }
-
-        /**
-         * 鑾峰彇 閿欒鐮� 锛堥敊璇簲绛斾腑鐨� code 瀛楁锛�
-         */
-        public String getErrorCode() {
-            return errorCode;
-        }
-
-        /**
-         * 鑾峰彇 閿欒娑堟伅 锛堥敊璇簲绛斾腑鐨� message 瀛楁锛�
-         */
-        public String getErrorMessage() {
-            return errorMessage;
-        }
-    }
-}
\ No newline at end of file
diff --git a/server/services/src/main/java/com/doumee/config/wx/WxMiniUtilService.java b/server/services/src/main/java/com/doumee/config/wx/WxMiniUtilService.java
new file mode 100644
index 0000000..5deb08a
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/config/wx/WxMiniUtilService.java
@@ -0,0 +1,62 @@
+package com.doumee.core.wx;
+
+import cn.binarywang.wx.miniapp.api.WxMaQrcodeService;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.utils.ID;
+import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
+import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
+import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
+import com.github.binarywang.wxpay.exception.WxPayException;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
+import org.apache.commons.io.IOUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.Map;
+
+/**
+ * 寰俊灏忕▼搴�-鍏叡鏂规硶
+ */
+@Service
+@Slf4j
+public class WxMiniUtilService {
+
+
+    /**
+     * 璁㈠崟寰俊閫�娆�
+     * orderNo:鍟嗘埛璁㈠崟鍙�
+     * totalPrice锛氳鍗曟�婚噾棰�
+     * refundPrice锛涢��娆鹃噾棰�
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public static String wxRefund(String orderNo, BigDecimal totalPrice, BigDecimal refundPrice) {
+        try {
+            // 鍙戦�侀��娆捐姹�
+            String refNum = ID.nextGUID();
+            WxPayRefundRequest request = new WxPayRefundRequest();
+            request.setOutTradeNo(orderNo);
+            request.setOutRefundNo(refNum);
+           // request.setTotalFee(2);
+          //  request.setRefundFee(1);
+            request.setTotalFee(1);//BaseWxPayRequest.yuanToFen(totalPrice.toString()));
+            request.setRefundFee(1);//BaseWxPayRequest.yuanToFen(refundPrice.toString()));
+            WxPayRefundResult response = WxMiniConfig.wxPayService.refund(request);
+            if ("SUCCESS".equals(response.getReturnCode()) && "SUCCESS".equals(response.getResultCode())) {
+                return refNum;
+            } else {
+                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),response.getErrCode() + response.getErrCodeDes());
+            }
+        } catch (WxPayException e) {
+            e.printStackTrace();
+        }
+        throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閫�娆惧彂鐢熷紓甯歌鑱旂郴绠$悊鍛�");
+    }
+}
diff --git a/server/services/src/main/java/com/doumee/core/annotation/LoginShopRequired.java b/server/services/src/main/java/com/doumee/core/annotation/LoginShopRequired.java
new file mode 100644
index 0000000..d4b5187
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/annotation/LoginShopRequired.java
@@ -0,0 +1,10 @@
+package com.doumee.config.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.METHOD,ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface LoginShopRequired {}
diff --git a/server/services/src/main/java/com/doumee/core/utils/ID.java b/server/services/src/main/java/com/doumee/core/utils/ID.java
new file mode 100644
index 0000000..236191b
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/utils/ID.java
@@ -0,0 +1,89 @@
+package com.doumee.core.utils;
+
+import org.apache.logging.log4j.util.Strings;
+
+import java.util.UUID;
+
+/**
+ * A utility to generate id using various strategies.
+ *
+ * @author Guang YANG
+ * @version 1.0
+ */
+public class ID {
+
+  private static final SnowflakeIdGenerator snowflake = new SnowflakeIdGenerator(0);
+
+
+
+  /**
+   * Generate a random guid string of 32 byte.
+   */
+  public static String nextGUID() {
+    return UUID.randomUUID().toString().replace("-", Strings.EMPTY).toUpperCase();
+  }
+
+  /**
+   * Generate a random uuid string of 36 byte.
+   */
+  public static String nextUUID() {
+    return UUID.randomUUID().toString();
+  }
+
+  /**
+   * Generate a long number of 20 bit which is monotonically increasing by each call.
+   */
+  public static long nextSnowflakeId() {
+    return snowflake.nextId();
+  }
+
+  public static class SnowflakeIdGenerator {
+
+    private final long workerIdBits = 10L;
+    private final long maxWorkerId = -1L ^ (-1L << workerIdBits);
+    private final long sequenceBits = 12L;
+    private final long workerIdShift = sequenceBits;
+    private final long timestampLeftShift = sequenceBits + workerIdBits;
+    private final long sequenceMask = -1L ^ (-1L << sequenceBits);
+
+    private long workerId;
+    private long sequence = 0L;
+    private long lastTimestamp = -1L;
+
+    public SnowflakeIdGenerator(long workerId) {
+      if (workerId > maxWorkerId || workerId < 0) {
+        throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId));
+      }
+      this.workerId = workerId;
+    }
+
+    public synchronized long nextId() {
+      long timestamp = System.currentTimeMillis();
+      if (timestamp < lastTimestamp) {
+        throw new RuntimeException(String.format("Clock moved backwards.  Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));
+      }
+      if (lastTimestamp == timestamp) {
+        sequence = (sequence + 1) & sequenceMask;
+        if (sequence == 0) {
+          timestamp = tilNextMillis(lastTimestamp);
+        }
+      } else {
+        sequence = 0L;
+      }
+
+      lastTimestamp = timestamp;
+
+      return (timestamp << timestampLeftShift) | (workerId << workerIdShift) | sequence;
+    }
+
+    protected long tilNextMillis(long lastTimestamp) {
+      long timestamp = System.currentTimeMillis();
+      while (timestamp <= lastTimestamp) {
+        timestamp = System.currentTimeMillis();
+      }
+      return timestamp;
+    }
+
+  }
+
+}
diff --git a/server/services/src/main/java/com/doumee/core/utils/RandomString.java b/server/services/src/main/java/com/doumee/core/utils/RandomString.java
new file mode 100644
index 0000000..7b407cd
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/utils/RandomString.java
@@ -0,0 +1,60 @@
+package com.doumee.core.utils;
+
+import java.security.SecureRandom;
+import java.util.Locale;
+import java.util.Objects;
+import java.util.Random;
+
+public class RandomString {
+
+  protected static final String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+  protected static final String lower = upper.toLowerCase(Locale.ROOT);
+  protected static final String digits = "0123456789";
+  protected static final String alphaNumeric = upper + lower + digits;
+  private final Random random;
+  private final char[] symbols;
+  private final char[] buf;
+
+  public RandomString(int length, Random random, String symbols) {
+    if (length < 1) {
+      throw new IllegalArgumentException();
+    }
+    if (symbols.length() < 2) {
+      throw new IllegalArgumentException();
+    }
+    this.random = Objects.requireNonNull(random);
+    this.symbols = symbols.toCharArray();
+    this.buf = new char[length];
+  }
+
+  /**
+   * Create an alphanumeric string generator.
+   */
+  public RandomString(int length, Random random) {
+    this(length, random, alphaNumeric);
+  }
+
+  /**
+   * Create an alphanumeric strings from a secure generator.
+   */
+  public RandomString(int length) {
+    this(length, new SecureRandom());
+  }
+
+  /**
+   * Create session identifiers.
+   */
+  public RandomString() {
+    this(21);
+  }
+
+  /**
+   * Generate a random string.
+   */
+  public String nextString() {
+    for (int idx = 0; idx < buf.length; ++idx) {
+      buf[idx] = symbols[random.nextInt(symbols.length)];
+    }
+    return new String(buf);
+  }
+}
diff --git a/server/services/src/main/java/com/doumee/core/utils/Strings.java b/server/services/src/main/java/com/doumee/core/utils/Strings.java
new file mode 100644
index 0000000..9ae0196
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/utils/Strings.java
@@ -0,0 +1,55 @@
+package com.doumee.core.utils;
+
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.security.SecureRandom;
+import java.util.Random;
+
+/**
+ * A null-safe utility to handle the String instances.
+ *
+ * @author Guang YANG
+ * @version 1.1
+ */
+public final class Strings {
+
+    public static final String EMPTY = "";
+    public static final String INSTANTIATION_PROHIBITED = "Instantiation prohibited.";
+    private static final Logger LOGGER = LoggerFactory.getLogger(Strings.class);
+
+    private Strings() {
+        throw new AssertionError(INSTANTIATION_PROHIBITED);
+    }
+
+    /**
+     * Generate random string with alpha and numeric of given length.
+     */
+    public static String randomAlphanumeric(int length) {
+        return new RandomString(length).nextString();
+    }
+
+    public static String randomNumeric(int length) {
+        return new RandomString(length, new SecureRandom(), "0123456789").nextString();
+    }
+
+    public static String getRandomNumberString(Integer strLength) {
+
+        Random rnd = new Random();
+
+        String str = "9999";
+
+        if(strLength >= str.length()){
+            str = StringUtils.leftPad(str,strLength,"9");
+        }
+
+        int number = rnd.nextInt(Integer.parseInt(str));
+
+        return String.format("%06d", number);
+
+    }
+
+
+}
diff --git a/server/services/src/main/java/com/doumee/core/utils/Tencent/MapUtil.java b/server/services/src/main/java/com/doumee/core/utils/Tencent/MapUtil.java
new file mode 100644
index 0000000..0d78ce3
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/utils/Tencent/MapUtil.java
@@ -0,0 +1,6 @@
+package com.doumee.core.utils.Tencent;/**
+* Created by IntelliJ IDEA.
+* @Author : Rk
+* @create 2026/4/14 15:58
+*/public class MapUtil {
+}
diff --git a/server/services/src/main/java/com/doumee/core/utils/aliyun/ALiYunSmSUtil.java b/server/services/src/main/java/com/doumee/core/utils/aliyun/ALiYunSmSUtil.java
new file mode 100644
index 0000000..48053a3
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/utils/aliyun/ALiYunSmSUtil.java
@@ -0,0 +1,61 @@
+package com.doumee.core.utils.aliyun;
+
+import com.alibaba.fastjson.JSONObject;
+import com.aliyuncs.CommonRequest;
+import com.aliyuncs.CommonResponse;
+import com.aliyuncs.DefaultAcsClient;
+import com.aliyuncs.IAcsClient;
+import com.aliyuncs.http.MethodType;
+import com.aliyuncs.profile.DefaultProfile;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.utils.Constants;
+
+import java.security.SecureRandom;
+import java.util.Map;
+
+/**
+ * 闃块噷浜� SMS 鐭俊宸ュ叿绫�
+ * @author RenKang
+ */
+public class ALiYunSmSUtil {
+
+    public static CommonResponse sendMessage(String phone, Map<String, Object> codeMap) {
+        /**
+         * 杩炴帴闃块噷浜戯細
+         *
+         * 涓変釜鍙傛暟锛�
+         * regionId 涓嶈鍔紝榛樿浣跨敤瀹樻柟鐨�
+         * accessKeyId 鑷繁鐨勭敤鎴穉ccessKeyId
+         * accessSecret 鑷繁鐨勭敤鎴穉ccessSecret
+         */
+        DefaultProfile profile = DefaultProfile.getProfile(
+                "cn-hangzhou", "LTAI5tDuA9DXBJvVfJfMb19L", "IUsWIhUXd9pEgTNEkz1b3POI3javKN");
+        IAcsClient client = new DefaultAcsClient(profile);
+        // 鏋勫缓璇锋眰锛�
+        CommonRequest request = new CommonRequest();
+        request.setSysMethod(MethodType.POST);
+        request.setSysDomain("dysmsapi.aliyuncs.com");
+        request.setSysVersion("2017-05-25");
+        request.setSysAction("SendSms");
+        // 鑷畾涔夊弬鏁帮細
+        // 鎵嬫満鍙�
+        request.putQueryParameter("PhoneNumbers", phone);
+        // 鐭俊绛惧悕
+        request.putQueryParameter("SignName", "鍚堣偉榧庡厓鏃嬪帇绉戞妧");
+        // 鐭俊妯$増CODE
+        request.putQueryParameter("TemplateCode", "SMS_332555204");
+        // 鏋勫缓鐭俊楠岃瘉鐮�
+        request.putQueryParameter("TemplateParam", JSONObject.toJSONString(codeMap));
+        try {
+            CommonResponse response = client.getCommonResponse(request);
+            return response;
+        }catch (Exception e) {
+            e.printStackTrace();
+        }
+        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍙戦�佸け璐ワ紝璇疯仈绯荤鐞嗗憳");
+    }
+
+
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/AddrMapper.java b/server/services/src/main/java/com/doumee/dao/business/AddrMapper.java
new file mode 100644
index 0000000..925a02d
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/AddrMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business;
+
+import com.doumee.dao.business.model.Addr;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 鍦板潃绨縈apper
+ * @author rk
+ * @date 2026/04/15
+ */
+public interface AddrMapper extends MPJBaseMapper<Addr> {
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/OrderLogMapper.java b/server/services/src/main/java/com/doumee/dao/business/OrderLogMapper.java
new file mode 100644
index 0000000..b7d185a
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/OrderLogMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.doumee.dao.business.model.OrderLog;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 璁㈠崟鎿嶄綔鏃ュ織Mapper
+ * @author rk
+ * @date 2026/04/13
+ */
+public interface OrderLogMapper extends MPJBaseMapper<OrderLog> {
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/OrdersRefundMapper.java b/server/services/src/main/java/com/doumee/dao/business/OrdersRefundMapper.java
new file mode 100644
index 0000000..cadea58
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/OrdersRefundMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.doumee.dao.business.model.OrdersRefund;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 璁㈠崟閫�娆捐褰昅apper
+ * @author rk
+ * @date 2026/04/13
+ */
+public interface OrdersRefundMapper extends MPJBaseMapper<OrdersRefund> {
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Addr.java b/server/services/src/main/java/com/doumee/dao/business/model/Addr.java
new file mode 100644
index 0000000..6351c45
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Addr.java
@@ -0,0 +1,106 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 鍦板潃绨�
+ * @author rk
+ * @date 2026/04/15
+ */
+@Data
+@ApiModel("鍦板潃绨�")
+@TableName("`addr`")
+public class Addr {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    private Integer id;
+
+    @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "0")
+    private Integer deleted;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    private Integer createUser;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "鐢ㄦ埛缂栫爜锛堝叧鑱攎ember琛級", example = "1")
+    private Integer memberId;
+
+    @ApiModelProperty(value = "鏄惁榛樿 0鍚� 1鏄�", example = "0")
+    private Integer isDefault;
+
+    @ApiModelProperty(value = "濮撳悕")
+    private String name;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�")
+    private String phone;
+
+    @ApiModelProperty(value = "璇︾粏鍦板潃")
+    private String addr;
+
+    @ApiModelProperty(value = "鎵�灞炲尯鍩熺紪鐮�", example = "1")
+    private Integer areaId;
+
+    @ApiModelProperty(value = "缁忓害")
+    private BigDecimal longitude;
+
+    @ApiModelProperty(value = "绾害")
+    private BigDecimal latitude;
+
+    // ---- 鐪佸競鍖轰俊鎭紙铏氭嫙瀛楁锛孧PJ鏌ヨ濉厖锛� ----
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鐪佺紪鐮�")
+    private Integer provinceId;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鐪佸悕绉�")
+    private String provinceName;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鐪佽鏀夸唬鐮�")
+    private String provinceCode;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "甯傜紪鐮�")
+    private Integer cityId;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "甯傚悕绉�")
+    private String cityName;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "甯傝鏀夸唬鐮�")
+    private String cityCode;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鍖哄悕绉�")
+    private String districtName;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鍖鸿鏀夸唬鐮�")
+    private String districtCode;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/OrderLog.java b/server/services/src/main/java/com/doumee/dao/business/model/OrderLog.java
new file mode 100644
index 0000000..ae40e38
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/model/OrderLog.java
@@ -0,0 +1,78 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 璁㈠崟鎿嶄綔鏃ュ織
+ * @author rk
+ * @date 2026/04/13
+ */
+@Data
+@ApiModel("璁㈠崟鎿嶄綔鏃ュ織")
+@TableName("`order_log`")
+public class OrderLog {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    private Integer id;
+
+    @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "0")
+    private Integer deleted;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    private Integer createUser;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "璁㈠崟涓婚敭锛坥rders锛�", example = "1")
+    private Integer orderId;
+
+    @ApiModelProperty(value = "鏍囬")
+    private String title;
+
+    @ApiModelProperty(value = "鏃ュ織鍐呭")
+    private String logInfo;
+
+    @ApiModelProperty(value = "鎿嶄綔绫诲瀷")
+    private Integer objType;
+
+    @ApiModelProperty(value = "鎿嶄綔浜�")
+    private Integer optUserId;
+
+    @ApiModelProperty(value = "鎿嶄綔浜哄悕绉�")
+    private String optUserName;
+
+    @ApiModelProperty(value = "鎿嶄綔鍓嶆暟鎹�")
+    private String beforeInfo;
+
+    @ApiModelProperty(value = "鎿嶄綔鍚庢暟鎹�")
+    private String afterInfo;
+
+    @ApiModelProperty(value = "璁㈠崟鐘舵��:0=寰呮帴鍗�;1=宸叉帴鍗�;2=杩涜涓�;3=宸插畬鎴�;99=宸插彇娑�;", example = "0")
+    private Integer orderStatus;
+
+    @ApiModelProperty(value = "鎿嶄綔浜虹被鍨嬶細0=鐢ㄦ埛锛�1=鍙告満锛�2=闂ㄥ簵锛�3=绯荤粺绠$悊鍛�", example = "0")
+    private Integer optUserType;
+
+}
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
new file mode 100644
index 0000000..8928774
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java
@@ -0,0 +1,70 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 璁㈠崟閫�娆捐褰�
+ * @author rk
+ * @date 2026/04/13
+ */
+@Data
+@ApiModel("璁㈠崟閫�娆捐褰�")
+@TableName("`orders_refund`")
+public class OrdersRefund {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    private Integer id;
+
+    @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "0")
+    private Integer deleted;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    private Integer createUser;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "璁㈠崟涓婚敭", example = "1")
+    private Integer orderId;
+
+    @ApiModelProperty(value = "閫�娆炬柟寮忥細0=鏈瓨浠剁洿鎺ュ彇娑堬紱1=骞冲彴鐩存帴鍙栨秷锛�2=宸插瓨浠剁敵璇峰彇娑�", example = "0")
+    private Integer type;
+
+    @ApiModelProperty(value = "鍙栨秷鍘熷洜")
+    private String cancelInfo;
+
+    @ApiModelProperty(value = "璁㈠崟閫�娆惧崟鍙凤紙宸叉敮浠樿鍗曚娇鐢級")
+    private String refundCode;
+
+    @ApiModelProperty(value = "閫�娆炬椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date refundTime;
+
+    @ApiModelProperty(value = "闂ㄥ簵澶囨敞")
+    private String refundRemark;
+
+    @ApiModelProperty(value = "骞冲彴鎿嶄綔浜猴紙type=1浣跨敤锛�", example = "0")
+    private Integer userId;
+
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/AgreementConfigDTO.java b/server/services/src/main/java/com/doumee/dao/dto/AgreementConfigDTO.java
new file mode 100644
index 0000000..74adbfb
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/AgreementConfigDTO.java
@@ -0,0 +1,25 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍗忚閰嶇疆DTO
+ * @author rk
+ * @date 2026/04/13
+ */
+@Data
+@ApiModel("鍗忚閰嶇疆")
+public class AgreementConfigDTO {
+
+    @ApiModelProperty(value = "闅愮鍗忚")
+    private String privacyAgreement;
+
+    @ApiModelProperty(value = "鐢ㄦ埛鍗忚")
+    private String userAgreement;
+
+    @ApiModelProperty(value = "鍏充簬鎴戜滑")
+    private String aboutUs;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/CalculateLocalPriceDTO.java b/server/services/src/main/java/com/doumee/dao/dto/CalculateLocalPriceDTO.java
new file mode 100644
index 0000000..c411602
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/CalculateLocalPriceDTO.java
@@ -0,0 +1,41 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 灏卞湴瀛樺彇棰勪及璐圭敤璇锋眰DTO
+ *
+ * @Author : Rk
+ * @create 2026/4/14
+ */
+@Data
+@ApiModel("灏卞湴瀛樺彇棰勪及璐圭敤璇锋眰")
+public class CalculateLocalPriceDTO {
+
+    @ApiModelProperty(value = "鍩庡競涓婚敭", required = true)
+    @NotNull(message = "鍩庡競涓嶈兘涓虹┖")
+    private Integer cityId;
+
+    @ApiModelProperty(value = "棰勮瀛樻斁澶╂暟", required = true)
+    @NotNull(message = "棰勮瀛樻斁澶╂暟涓嶈兘涓虹┖")
+    private Integer estimatedDepositDays;
+
+    @ApiModelProperty(value = "鐗╁搧鍒楄〃", required = true)
+    @NotEmpty(message = "鐗╁搧鍒楄〃涓嶈兘涓虹┖")
+    @Valid
+    private List<OrderItemDTO> items;
+
+    @ApiModelProperty(value = "鏄惁淇濅环")
+    private Boolean insured;
+
+    @ApiModelProperty(value = "淇濅环閲戦(鍏�)")
+    private BigDecimal declaredAmount;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/CalculateRemotePriceDTO.java b/server/services/src/main/java/com/doumee/dao/dto/CalculateRemotePriceDTO.java
new file mode 100644
index 0000000..b512f85
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/CalculateRemotePriceDTO.java
@@ -0,0 +1,56 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 寮傚湴瀛樺彇棰勪及璐圭敤璇锋眰DTO
+ *
+ * @Author : Rk
+ * @create 2026/4/14
+ */
+@Data
+@ApiModel("寮傚湴瀛樺彇棰勪及璐圭敤璇锋眰")
+public class CalculateRemotePriceDTO {
+
+    @ApiModelProperty(value = "鍩庡競涓婚敭", required = true)
+    @NotNull(message = "鍩庡競涓嶈兘涓虹┖")
+    private Integer cityId;
+
+    @ApiModelProperty(value = "瀵勪欢绾害", required = true)
+    @NotNull(message = "瀵勪欢绾害涓嶈兘涓虹┖")
+    private BigDecimal fromLat;
+
+    @ApiModelProperty(value = "瀵勪欢缁忓害", required = true)
+    @NotNull(message = "瀵勪欢缁忓害涓嶈兘涓虹┖")
+    private BigDecimal fromLgt;
+
+    @ApiModelProperty(value = "鍙栦欢绾害", required = true)
+    @NotNull(message = "鍙栦欢绾害涓嶈兘涓虹┖")
+    private BigDecimal toLat;
+
+    @ApiModelProperty(value = "鍙栦欢缁忓害", required = true)
+    @NotNull(message = "鍙栦欢缁忓害涓嶈兘涓虹┖")
+    private BigDecimal toLgt;
+
+    @ApiModelProperty(value = "鐗╁搧鍒楄〃", required = true)
+    @NotEmpty(message = "鐗╁搧鍒楄〃涓嶈兘涓虹┖")
+    @Valid
+    private List<OrderItemDTO> items;
+
+    @ApiModelProperty(value = "鏄惁淇濅环")
+    private Boolean insured;
+
+    @ApiModelProperty(value = "淇濅环閲戦(鍏�)")
+    private BigDecimal declaredAmount;
+
+    @ApiModelProperty(value = "鏄惁鍔犳��")
+    private Boolean urgent;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/CancelOrderDTO.java b/server/services/src/main/java/com/doumee/dao/dto/CancelOrderDTO.java
new file mode 100644
index 0000000..47bac52
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/CancelOrderDTO.java
@@ -0,0 +1,25 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 浼氬憳鍙栨秷璁㈠崟璇锋眰
+ *
+ * @author rk
+ * @date 2026/04/15
+ */
+@Data
+@ApiModel("浼氬憳鍙栨秷璁㈠崟璇锋眰")
+public class CancelOrderDTO {
+
+    @NotNull(message = "璁㈠崟涓婚敭涓嶈兘涓虹┖")
+    @ApiModelProperty(value = "璁㈠崟涓婚敭", required = true, example = "1")
+    private Integer orderId;
+
+    @ApiModelProperty(value = "鍙栨秷鍘熷洜")
+    private String cancelReason;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ConfirmArriveDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ConfirmArriveDTO.java
new file mode 100644
index 0000000..396b2c4
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/ConfirmArriveDTO.java
@@ -0,0 +1,25 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 纭椤惧鍒板簵DTO
+ * @author rk
+ * @date 2026/04/15
+ */
+@Data
+@ApiModel("纭椤惧鍒板簵")
+public class ConfirmArriveDTO {
+
+    @NotNull(message = "璁㈠崟涓婚敭涓嶈兘涓虹┖")
+    @ApiModelProperty(value = "璁㈠崟涓婚敭", required = true)
+    private Integer orderId;
+
+    @NotNull(message = "闂ㄥ簵涓婚敭涓嶈兘涓虹┖")
+    @ApiModelProperty(value = "褰撳墠鎿嶄綔闂ㄥ簵涓婚敭", required = true)
+    private Integer shopId;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/CreateOrderDTO.java b/server/services/src/main/java/com/doumee/dao/dto/CreateOrderDTO.java
new file mode 100644
index 0000000..8b205f6
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/CreateOrderDTO.java
@@ -0,0 +1,84 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 鍒涘缓璁㈠崟璇锋眰DTO
+ *
+ * @Author : Rk
+ * @create 2026/4/14
+ */
+@Data
+@ApiModel("鍒涘缓璁㈠崟璇锋眰")
+public class CreateOrderDTO {
+
+    @ApiModelProperty(value = "瀵勫瓨绫诲瀷: 0=灏卞湴瀵勫瓨 1=寮傚湴瀵勫瓨", required = true)
+    @NotNull(message = "瀵勫瓨绫诲瀷涓嶈兘涓虹┖")
+    private Integer type;
+
+    @ApiModelProperty(value = "鍩庡競涓婚敭", required = true)
+    @NotNull(message = "鍩庡競涓嶈兘涓虹┖")
+    private Integer cityId;
+
+    @ApiModelProperty(value = "瀵勪欢搴楅摵涓婚敭", required = true)
+    @NotNull(message = "瀵勪欢搴楅摵涓嶈兘涓虹┖")
+    private Integer depositShopId;
+
+    @ApiModelProperty(value = "鍙栦欢搴楅摵涓婚敭(寮傚湴,搴楅摵鍙栦欢鏃�)")
+    private Integer takeShopId;
+
+    @ApiModelProperty(value = "鍙栦欢绾害(寮傚湴,鑷�夌偣鏃�)")
+    private BigDecimal takeLat;
+
+    @ApiModelProperty(value = "鍙栦欢缁忓害(寮傚湴,鑷�夌偣鏃�)")
+    private BigDecimal takeLgt;
+
+    @ApiModelProperty(value = "鍙栦欢璇︾粏鍦板潃(寮傚湴,鑷�夌偣鏃�)")
+    private String takeLocation;
+
+    @ApiModelProperty(value = "鍙栦欢浜哄鍚�", required = true)
+    @NotEmpty(message = "鍙栦欢浜哄鍚嶄笉鑳戒负绌�")
+    private String takeUser;
+
+    @ApiModelProperty(value = "鍙栦欢浜虹數璇�", required = true)
+    @NotEmpty(message = "鍙栦欢浜虹數璇濅笉鑳戒负绌�")
+    private String takePhone;
+
+    @ApiModelProperty(value = "棰勮鍒板簵瀛樹欢鏃堕棿(yyyy-MM-dd HH:mm)", required = true)
+    @NotEmpty(message = "棰勮鍒板簵瀛樹欢鏃堕棿涓嶈兘涓虹┖")
+    private String expectedDepositTime;
+
+    @ApiModelProperty(value = "棰勮鍒板簵鍙栦欢鏃堕棿(yyyy-MM-dd HH:mm)", required = true)
+    @NotEmpty(message = "棰勮鍒板簵鍙栦欢鏃堕棿涓嶈兘涓虹┖")
+    private String expectedTakeTime;
+
+    @ApiModelProperty(value = "鐗╁搧绫诲瀷(category涓婚敭)", required = true)
+    @NotNull(message = "鐗╁搧绫诲瀷涓嶈兘涓虹┖")
+    private Integer goodType;
+
+    @ApiModelProperty(value = "鐗╁搧灏哄涓庢暟閲忓垪琛�", required = true)
+    @NotEmpty(message = "鐗╁搧灏哄涓庢暟閲忎笉鑳戒负绌�")
+    @Valid
+    private List<OrderItemDTO> items;
+
+    @ApiModelProperty(value = "鐗╁搧鍥剧墖URL鍒楄〃(鏈�澶�3寮�)", required = true)
+    @NotEmpty(message = "鐗╁搧鍥剧墖涓嶈兘涓虹┖")
+    private List<String> goodsImages;
+
+    @ApiModelProperty(value = "鏈嶅姟鏃舵晥: 0=鏍囬�熻揪 1=鏋侀�熻揪(寮傚湴蹇呭~)")
+    private Integer isUrgent;
+
+    @ApiModelProperty(value = "淇濅环閲戦(鍏�,闈炲繀濉�)")
+    private BigDecimal declaredAmount;
+
+    @ApiModelProperty(value = "璁㈠崟澶囨敞(闈炲繀濉�)")
+    private String remark;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/DispatchDTO.java b/server/services/src/main/java/com/doumee/dao/dto/DispatchDTO.java
new file mode 100644
index 0000000..de8da73
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/DispatchDTO.java
@@ -0,0 +1,29 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 璁㈠崟娲惧崟DTO
+ * @author rk
+ * @date 2026/04/13
+ */
+@Data
+@ApiModel("璁㈠崟娲惧崟")
+public class DispatchDTO {
+
+    @ApiModelProperty(value = "璁㈠崟涓婚敭", required = true)
+    private Integer orderId;
+
+    @ApiModelProperty(value = "鍔犳�ヨ垂鐢紙鍏冿級", required = true, example = "10.00")
+    private BigDecimal urgentFee;
+
+    @ApiModelProperty(value = "娲鹃�佸徃鏈猴紙浼氬憳涓婚敭锛�")
+    private Integer driverId;
+
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/DriverVerifyDTO.java b/server/services/src/main/java/com/doumee/dao/dto/DriverVerifyDTO.java
new file mode 100644
index 0000000..8bb603b
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/DriverVerifyDTO.java
@@ -0,0 +1,31 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.util.List;
+
+/**
+ * 鍙告満鏍搁攢璇锋眰
+ *
+ * @author rk
+ * @date 2026/04/15
+ */
+@Data
+@ApiModel("鍙告満鏍搁攢璇锋眰")
+public class DriverVerifyDTO {
+
+    @NotBlank(message = "鏍搁攢鐮佷笉鑳戒负绌�")
+    @ApiModelProperty(value = "鍙告満鏍搁攢鐮�", required = true)
+    private String verifyCode;
+
+    @Size(max = 3, message = "鏈�澶氫笂浼�3寮犲浘鐗�")
+    @ApiModelProperty(value = "鍥剧墖鍦板潃鍒楄〃锛屾渶澶�3寮�")
+    private List<String> images;
+
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/MemberListQueryDTO.java b/server/services/src/main/java/com/doumee/dao/dto/MemberListQueryDTO.java
new file mode 100644
index 0000000..8d6197e
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/MemberListQueryDTO.java
@@ -0,0 +1,33 @@
+package com.doumee.dao.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 浼氬憳鍒楄〃鏌ヨ鏉′欢
+ * @author rk
+ * @date 2026/04/13
+ */
+@Data
+@ApiModel("浼氬憳鍒楄〃鏌ヨ鏉′欢")
+public class MemberListQueryDTO {
+
+    @ApiModelProperty(value = "浼氬憳濮撳悕/鎵嬫満鍙�")
+    private String keyword;
+
+    @ApiModelProperty(value = "鐘舵�� 0=姝e父锛�1=鍋滅敤锛�2=宸叉敞閿�")
+    private Integer status;
+
+    @ApiModelProperty(value = "鍒涘缓寮�濮嬫椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date startTime;
+
+    @ApiModelProperty(value = "鍒涘缓缁撴潫鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endTime;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/MyOrderDTO.java b/server/services/src/main/java/com/doumee/dao/dto/MyOrderDTO.java
new file mode 100644
index 0000000..ecca5c8
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/MyOrderDTO.java
@@ -0,0 +1,24 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 灏忕▼搴忕-鎴戠殑璁㈠崟鏌ヨ璇锋眰
+ * @author rk
+ * @date 2026/04/15
+ */
+@Data
+@ApiModel("浼氬憳璁㈠崟鏌ヨ璇锋眰")
+public class MyOrderDTO implements Serializable {
+
+    @ApiModelProperty(value = "璁㈠崟鐘舵�侊紙鍙�夛紝涓嶄紶鏌ュ叏閮級", example = "0")
+    private Integer status;
+
+    @ApiModelProperty(value = "鍚堝苟鐘舵�侊紙鍙�夛紝涓嶄紶鏌ュ叏閮級: 0=寰呮敮浠� 1=寰呮牳楠� 2=寰呴厤閫� 3=寰呮敹璐� 4=宸插畬鎴� 5=閫�娆�", example = "0")
+    private Integer combinedStatus;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java b/server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java
new file mode 100644
index 0000000..571a594
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java
@@ -0,0 +1,40 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 杩愯惀閰嶇疆DTO
+ * @author rk
+ * @date 2026/04/13
+ */
+@Data
+@ApiModel("杩愯惀閰嶇疆")
+public class OperationConfigDTO {
+
+    @ApiModelProperty(value = "鍙告満姣忔棩鍙栨秷娆℃暟", required = true)
+    private String driverDailyCancelLimit;
+
+    @ApiModelProperty(value = "鏈彇浠舵姌鎵�", required = true)
+    private String unpickedDiscount;
+
+    @ApiModelProperty(value = "璁㈠崟缁撶畻鏃ユ湡", required = true)
+    private String settlementDate;
+
+    @ApiModelProperty(value = "鍔犳�ョ郴鏁�", required = true)
+    private String urgentCoefficient;
+
+    @ApiModelProperty(value = "瓒呮椂鏈敮浠樿嚜鍔ㄥ彇娑堟椂闂�(鍒嗛挓)", required = true)
+    private String autoCancelTime;
+
+    @ApiModelProperty(value = "淇濊垂姣旂巼", required = true)
+    private String insuranceRate;
+
+    @ApiModelProperty(value = "鎺ュ崟鏁伴噺", required = true)
+    private String orderAcceptLimit;
+
+    @ApiModelProperty(value = "鑷姩纭鏀惰揣(澶�)", required = true)
+    private String autoConfirmReceipt;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/OrderItemDTO.java b/server/services/src/main/java/com/doumee/dao/dto/OrderItemDTO.java
new file mode 100644
index 0000000..b40c8a3
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/OrderItemDTO.java
@@ -0,0 +1,26 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 璁㈠崟鐗╁搧椤笵TO
+ *
+ * @Author : Rk
+ * @create 2026/4/14
+ */
+@Data
+@ApiModel("璁㈠崟鐗╁搧椤�")
+public class OrderItemDTO {
+
+    @ApiModelProperty(value = "鐗╁搧绫诲瀷/灏哄ID", required = true)
+    @NotNull(message = "鐗╁搧绫诲瀷涓嶈兘涓虹┖")
+    private Integer categoryId;
+
+    @ApiModelProperty(value = "鏁伴噺", required = true)
+    @NotNull(message = "鏁伴噺涓嶈兘涓虹┖")
+    private Integer quantity;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ShopDetailQueryDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ShopDetailQueryDTO.java
new file mode 100644
index 0000000..e189c32
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/ShopDetailQueryDTO.java
@@ -0,0 +1,28 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * 闂ㄥ簵璇︽儏鏌ヨ璇锋眰
+ * @author rk
+ * @date 2026/04/14
+ */
+@Data
+@ApiModel("闂ㄥ簵璇︽儏鏌ヨ璇锋眰")
+public class ShopDetailQueryDTO implements Serializable {
+
+    @ApiModelProperty(value = "闂ㄥ簵涓婚敭", required = true, example = "1")
+    @NotNull(message = "闂ㄥ簵涓婚敭涓嶈兘涓虹┖")
+    private Integer id;
+
+    @ApiModelProperty(value = "缁忓害锛堥潪蹇呭~锛屾湁鍊兼椂杩斿洖璺濈锛�", example = "116.404")
+    private Double longitude;
+
+    @ApiModelProperty(value = "绾害锛堥潪蹇呭~锛屾湁鍊兼椂杩斿洖璺濈锛�", example = "39.915")
+    private Double latitude;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ShopInfoMaintainDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ShopInfoMaintainDTO.java
new file mode 100644
index 0000000..f2f72a4
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/ShopInfoMaintainDTO.java
@@ -0,0 +1,40 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 闂ㄥ簵淇℃伅缁存姢璇锋眰锛堟敮浠樻娂閲戝悗锛�
+ * @author rk
+ * @date 2026/04/14
+ */
+@Data
+@ApiModel("闂ㄥ簵淇℃伅缁存姢璇锋眰")
+public class ShopInfoMaintainDTO implements Serializable {
+
+    @ApiModelProperty(value = "闂ㄥ簵澶村儚")
+    private String coverImg;
+
+    @ApiModelProperty(value = "闂ㄥ簵浠嬬粛")
+    private String content;
+
+    @ApiModelProperty(value = "瀵勫瓨绫诲瀷")
+    private String depositTypes;
+
+    @ApiModelProperty(value = "鏀惰垂鏍囧噯")
+    private String feeStandard;
+
+    @ApiModelProperty(value = "閰嶉�佽寖鍥�(km)")
+    private BigDecimal deliveryArea;
+
+    @ApiModelProperty(value = "闂ㄥ簵钀ヤ笟鏃堕棿")
+    private String shopHours;
+
+    @ApiModelProperty(value = "闂ㄥ簵钀ヤ笟绫诲瀷锛�0=闈炲叏澶╋紱1=鍏ㄥぉ", example = "0")
+    private Integer businessType;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ShopLoginDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ShopLoginDTO.java
new file mode 100644
index 0000000..2a3cf1a
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/ShopLoginDTO.java
@@ -0,0 +1,23 @@
+package com.doumee.dao.web.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("缁忛攢鍟嗙櫥褰曡姹傚璞�")
+public class ShopLoginDTO {
+
+//    @ApiModelProperty(value = "鍏宠仈鐢ㄦ埛涓婚敭")
+//    private Integer memberId;
+
+    @ApiModelProperty(value = "openid")
+    private String openid;
+
+    @ApiModelProperty(value = "鐢ㄦ埛鍚嶇О")
+    private String userName;
+
+    @ApiModelProperty(value = "瀵嗙爜")
+    private String password;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ShopNearbyDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ShopNearbyDTO.java
new file mode 100644
index 0000000..b322330
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/ShopNearbyDTO.java
@@ -0,0 +1,39 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * 闄勮繎闂ㄥ簵鏌ヨ璇锋眰
+ * @author rk
+ * @date 2026/04/14
+ */
+@Data
+@ApiModel("闄勮繎闂ㄥ簵鏌ヨ璇锋眰")
+public class ShopNearbyDTO implements Serializable {
+
+    @ApiModelProperty(value = "缁忓害", required = true, example = "116.404")
+    @NotNull(message = "缁忓害涓嶈兘涓虹┖")
+    private Double longitude;
+
+    @ApiModelProperty(value = "绾害", required = true, example = "39.915")
+    @NotNull(message = "绾害涓嶈兘涓虹┖")
+    private Double latitude;
+
+    @ApiModelProperty(value = "鎺掑簭绫诲瀷锛�1=璺濈鐢辫繎鍒拌繙锛�2=鎸夎瘎鍒嗘帓搴�", example = "1")
+    private Integer sortType;
+
+    @ApiModelProperty(value = "璺濈绛涢�夎寖鍥达紙鍗曚綅锛氱背锛�", example = "3000")
+    private Integer distance;
+
+    @ApiModelProperty(value = "闂ㄥ簵钀ヤ笟绫诲瀷绛涢�夛細0=闈炲叏澶╋紱1=鍏ㄥぉ", example = "1")
+    private Integer businessType;
+
+    @ApiModelProperty(value = "闂ㄥ簵鍚嶇О锛堟ā绯婃煡璇級", example = "XX闂ㄥ簵")
+    private String name;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ShopVerifyDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ShopVerifyDTO.java
new file mode 100644
index 0000000..a082b09
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/ShopVerifyDTO.java
@@ -0,0 +1,31 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.util.List;
+
+/**
+ * 闂ㄥ簵鏍搁攢璇锋眰
+ *
+ * @author rk
+ * @date 2026/04/15
+ */
+@Data
+@ApiModel("闂ㄥ簵鏍搁攢璇锋眰")
+public class ShopVerifyDTO {
+
+    @NotBlank(message = "鏍搁攢鐮佷笉鑳戒负绌�")
+    @ApiModelProperty(value = "浼氬憳鏍搁攢鐮�", required = true)
+    private String verifyCode;
+
+    @Size(max = 3, message = "鏈�澶氫笂浼�3寮犲浘鐗�")
+    @ApiModelProperty(value = "鍥剧墖鍦板潃鍒楄〃锛屾渶澶�3寮�")
+    private List<String> images;
+
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/UpdMobileRequest.java b/server/services/src/main/java/com/doumee/dao/dto/UpdMobileRequest.java
new file mode 100644
index 0000000..9933a0f
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/UpdMobileRequest.java
@@ -0,0 +1,29 @@
+package com.doumee.dao.web.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 9:50
+ */
+@Data
+@ApiModel("鎵嬫満鎹㈢粦璇锋眰绫�")
+public class UpdMobileRequest {
+
+    @ApiModelProperty(value = "楠岃瘉鐮�",example = "0")
+    private String code;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�")
+    private String phone;
+
+    @ApiModelProperty(value = "鐢ㄦ埛涓婚敭",hidden = true)
+    private Integer memberId;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/WithdrawalApproveDTO.java b/server/services/src/main/java/com/doumee/dao/dto/WithdrawalApproveDTO.java
new file mode 100644
index 0000000..12bbcf9
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/WithdrawalApproveDTO.java
@@ -0,0 +1,24 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鎻愮幇瀹℃壒DTO
+ * @author rk
+ * @date 2026/04/13
+ */
+@Data
+@ApiModel("鎻愮幇瀹℃壒")
+public class WithdrawalApproveDTO {
+
+    @ApiModelProperty(value = "鎻愮幇鐢宠涓婚敭", required = true)
+    private Integer id;
+
+    @ApiModelProperty(value = "瀹℃壒缁撴灉锛�1=閫氳繃锛�2=鎷掔粷", required = true, example = "1")
+    private Integer status;
+
+    @ApiModelProperty(value = "瀹℃壒澶囨敞")
+    private String approveRemark;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/ItemPriceVO.java b/server/services/src/main/java/com/doumee/dao/vo/ItemPriceVO.java
new file mode 100644
index 0000000..b27a05c
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/ItemPriceVO.java
@@ -0,0 +1,47 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 鍗曢」鐗╁搧璁′环VO
+ *
+ * @Author : Rk
+ * @create 2026/4/14
+ */
+@Data
+@ApiModel("鍗曢」鐗╁搧璁′环")
+public class ItemPriceVO {
+
+    @ApiModelProperty("鐗╁搧绫诲瀷ID")
+    private Integer categoryId;
+
+    @ApiModelProperty("鐗╁搧绫诲瀷鍚嶇О")
+    private String categoryName;
+
+    @ApiModelProperty("鏁伴噺")
+    private Integer quantity;
+
+    @ApiModelProperty("鍗曚环(鍒�)")
+    private Long unitPrice;
+
+    @ApiModelProperty("灏忚(鍒�)")
+    private Long subtotal;
+
+    // ========== 寮傚湴瀛樺彇棰濆瀛楁 ==========
+
+    @ApiModelProperty("璧锋璺濈(km)")
+    private BigDecimal startDistance;
+
+    @ApiModelProperty("璧锋浠�(鍒�)")
+    private Long startPrice;
+
+    @ApiModelProperty("瓒呭嚭璺濈鍗曚綅(km)")
+    private BigDecimal extraDistance;
+
+    @ApiModelProperty("瓒呭嚭璺濈鍗曚环(鍒�)")
+    private Long extraPrice;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/MemberDetailVO.java b/server/services/src/main/java/com/doumee/dao/vo/MemberDetailVO.java
new file mode 100644
index 0000000..323a555
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/MemberDetailVO.java
@@ -0,0 +1,85 @@
+package com.doumee.dao.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 浼氬憳璇︽儏VO
+ * @author rk
+ * @date 2026/04/13
+ */
+@Data
+@ApiModel("浼氬憳璇︽儏淇℃伅")
+public class MemberDetailVO {
+
+    @ApiModelProperty(value = "涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鐢ㄦ埛鏄电О")
+    private String nickName;
+
+    @ApiModelProperty(value = "浼氬憳濮撳悕")
+    private String name;
+
+    @ApiModelProperty(value = "鎺堟潈鎵嬫満鍙�")
+    private String telephone;
+
+    @ApiModelProperty(value = "澶村儚鍏ㄨ矾寰�")
+    private String fullCoverImage;
+
+    @ApiModelProperty(value = "褰撳墠浣欓(鍗曚綅:鍒�)")
+    private Long amount;
+
+    @ApiModelProperty(value = "鍘嗗彶鎬婚噾棰�(鍗曚綅:鍒�)")
+    private Long totalAmount;
+
+    @ApiModelProperty(value = "鐘舵�� 0=姝e父锛�1=鍋滅敤锛�2=宸叉敞閿�")
+    private Integer status;
+
+    @ApiModelProperty(value = "褰撳墠浣跨敤韬唤:0=鐢ㄥ伐鍙戝竷鏂�;1=鐢ㄥ伐鎺ュ崟鏂�")
+    private Integer useIdentity;
+
+    @ApiModelProperty(value = "鐢ㄦ埛绫诲瀷锛�0=浼氬憳鐢ㄦ埛锛�1=鍙告満锛�2=搴楅摵浜哄憳")
+    private Integer userType;
+
+    @ApiModelProperty(value = "涓氬姟鐘舵�侊細0=鏈璇侊紱1=璁よ瘉閫氳繃锛�2=璁よ瘉鏈�氳繃锛�3=宸叉敮浠樻娂閲�")
+    private Integer businessStatus;
+
+    @ApiModelProperty(value = "璇勫垎")
+    private BigDecimal score;
+
+    @ApiModelProperty(value = "鎬绘帴鍗曢噺")
+    private Long receiveNum;
+
+    @ApiModelProperty(value = "鎬诲彂鍗曢噺")
+    private Long publishNum;
+
+    @ApiModelProperty(value = "娉ㄥ唽鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @ApiModelProperty(value = "鏈�鍚庣櫥褰曟椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date loginTime;
+
+    @ApiModelProperty(value = "鎬荤櫥褰曟鏁�")
+    private Long loginTimes;
+
+    @ApiModelProperty(value = "鐪佷唤")
+    private String province;
+
+    @ApiModelProperty(value = "鍩庡競")
+    private String city;
+
+    @ApiModelProperty(value = "鍖哄幙")
+    private String area;
+
+    @ApiModelProperty(value = "鏄惁鎺ュ彈鑷姩娲惧崟:0=鍚︼紱1=鏄�")
+    private Integer autoReceiveStatus;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/MemberListVO.java b/server/services/src/main/java/com/doumee/dao/vo/MemberListVO.java
new file mode 100644
index 0000000..0ce0c19
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/MemberListVO.java
@@ -0,0 +1,44 @@
+package com.doumee.dao.vo;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 浼氬憳鍒楄〃VO锛堝垪琛ㄥ睍绀� + 瀵煎嚭锛�
+ * @author rk
+ * @date 2026/04/13
+ */
+@Data
+@ApiModel("浼氬憳鍒楄〃淇℃伅")
+public class MemberListVO {
+
+    @ApiModelProperty(value = "涓婚敭")
+    private Integer id;
+
+    @ExcelColumn(name = "鐢ㄦ埛鏄电О", index = 1, width = 12)
+    @ApiModelProperty(value = "鐢ㄦ埛鏄电О")
+    private String nickName;
+
+    @ExcelColumn(name = "浼氬憳濮撳悕", index = 2, width = 10)
+    @ApiModelProperty(value = "浼氬憳濮撳悕")
+    private String name;
+
+    @ExcelColumn(name = "鎺堟潈鎵嬫満鍙�", index = 3, width = 14)
+    @ApiModelProperty(value = "鎺堟潈鎵嬫満鍙�")
+    private String telephone;
+
+    @ExcelColumn(name = "娉ㄥ唽鏃堕棿", index = 4, width = 18, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @ExcelColumn(name = "鐘舵��", index = 5, width = 10, valueMapping = "0=姝e父;1=鍋滅敤;2=宸叉敞閿�;")
+    @ApiModelProperty(value = "鐘舵�� 0=姝e父锛�1=鍋滅敤锛�2=宸叉敞閿�")
+    private Integer status;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/MyOrderDetailVO.java b/server/services/src/main/java/com/doumee/dao/vo/MyOrderDetailVO.java
new file mode 100644
index 0000000..9ba8fb7
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/MyOrderDetailVO.java
@@ -0,0 +1,154 @@
+package com.doumee.dao.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 浼氬憳绔�-璁㈠崟璇︽儏
+ *
+ * @author rk
+ * @date 2026/04/15
+ */
+@Data
+@ApiModel("浼氬憳绔鍗曡鎯�")
+public class MyOrderDetailVO {
+
+    @ApiModelProperty(value = "璁㈠崟涓婚敭")
+    private Integer id;
+
+    // ---- 鐘舵�� ----
+
+    @ApiModelProperty(value = "璁㈠崟鐘舵��")
+    private Integer status;
+
+    @ApiModelProperty(value = "璁㈠崟鐘舵�佹弿杩�")
+    private String statusDesc;
+
+    @ApiModelProperty(value = "鏀粯鍊掕鏃舵绉掞紙浠呭緟鏀粯鐘舵�佽繑鍥烇紝-1琛ㄧず宸茶秴鏃讹級")
+    private Long payCountdownMs;
+
+    @ApiModelProperty(value = "浼氬憳鏍搁攢鐮侊紙寰呭瘎瀛�/寰呭彇浠剁姸鎬佽繑鍥烇級")
+    private String memberVerifyCode;
+
+    // ---- 鍩虹淇℃伅 ----
+
+    @ApiModelProperty(value = "璁㈠崟绫诲瀷: 0=灏卞湴瀵勫瓨 1=寮傚湴瀵勫瓨")
+    private Integer type;
+
+    @ApiModelProperty(value = "璁㈠崟缂栧彿")
+    private String code;
+
+    @ApiModelProperty(value = "涓夋柟璁㈠崟鍙�")
+    private String outTradeNo;
+
+    @ApiModelProperty(value = "璁㈠崟澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @ApiModelProperty(value = "鏀粯鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date payTime;
+
+    // ---- 鏃堕棿淇℃伅 ----
+
+    @ApiModelProperty(value = "棰勮鍒板簵瀛樹欢鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date expectedDepositTime;
+
+    @ApiModelProperty(value = "棰勮鍙栦欢鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date expectedTakeTime;
+
+    @ApiModelProperty(value = "琛屾潕杞Щ鍒板簵鏃堕棿锛堝紓鍦板瘎瀛橈級")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date arriveTime;
+
+    // ---- 瀛樹欢闂ㄥ簵 ----
+
+    @ApiModelProperty(value = "瀛樹欢闂ㄥ簵鍚嶇О")
+    private String depositShopName;
+
+    @ApiModelProperty(value = "瀛樹欢闂ㄥ簵鍦板潃")
+    private String depositShopAddress;
+
+    @ApiModelProperty(value = "瀛樹欢闂ㄥ簵鑱旂郴浜�")
+    private String depositShopLinkName;
+
+    @ApiModelProperty(value = "瀛樹欢闂ㄥ簵鑱旂郴鐢佃瘽")
+    private String depositShopPhone;
+
+    // ---- 鍙栦欢淇℃伅 ----
+
+    @ApiModelProperty(value = "鍙栦欢闂ㄥ簵鍚嶇О锛堟湁鍙栦欢闂ㄥ簵鏃惰繑鍥烇級")
+    private String takeShopName;
+
+    @ApiModelProperty(value = "鍙栦欢闂ㄥ簵鍦板潃锛堟湁鍙栦欢闂ㄥ簵鏃惰繑鍥烇級")
+    private String takeShopAddress;
+
+    @ApiModelProperty(value = "鍙栦欢鍦扮偣锛堟棤鍙栦欢闂ㄥ簵鏃惰繑鍥烇紝鐢ㄦ埛鑷�夛級")
+    private String takeLocation;
+
+    @ApiModelProperty(value = "鍙栦欢鍦扮偣璇︾粏鍦板潃锛堟棤鍙栦欢闂ㄥ簵鏃惰繑鍥烇級")
+    private String takeLocationRemark;
+
+    @ApiModelProperty(value = "鍙栦欢浜哄悕绉�")
+    private String takeUser;
+
+    @ApiModelProperty(value = "鍙栦欢浜烘墜鏈哄彿")
+    private String takePhone;
+
+    // ---- 璐圭敤锛堝垎锛� ----
+
+    @ApiModelProperty(value = "鍩虹瀵勫瓨璐圭敤锛堝垎锛�")
+    private Long basicAmount;
+
+    @ApiModelProperty(value = "淇濅环閲戦锛堝垎锛�")
+    private Long declaredAmount;
+
+    @ApiModelProperty(value = "淇濅环淇濊垂锛堝垎锛�")
+    private Long declaredFee;
+
+    @ApiModelProperty(value = "鍔犳�ヨ垂鐢紙鍒嗭級")
+    private Long urgentAmount;
+
+    @ApiModelProperty(value = "瀹為檯鏀粯璐圭敤锛堝垎锛�")
+    private Long actualPayAmount;
+
+    // ---- 閫炬湡 ----
+
+    @ApiModelProperty(value = "鏄惁閫炬湡")
+    private Boolean overdue;
+
+    @ApiModelProperty(value = "閫炬湡澶╂暟")
+    private Integer overdueDays;
+
+    @ApiModelProperty(value = "閫炬湡璐圭敤锛堝垎锛�")
+    private Long overdueFee;
+
+    // ---- 鏍囪 ----
+
+    @ApiModelProperty(value = "鏄惁寮傚父: 0=鍚� 1=鏄�")
+    private Integer exceptionStatus;
+
+    @ApiModelProperty(value = "鏄惁瓒呭嚭鍙栦欢鏃堕棿")
+    private Boolean pastTakeTime;
+
+    // ---- 鐗╁搧淇℃伅 ----
+
+    @ApiModelProperty(value = "鐗╁搧绫诲瀷鍚嶇О")
+    private String goodTypeName;
+
+    @ApiModelProperty(value = "涓嬪崟鐓х墖")
+    private List<String> orderImages;
+
+    @ApiModelProperty(value = "鐗╁搧鏄庣粏鍒楄〃")
+    private List<OrderItemVO> detailList;
+}
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
new file mode 100644
index 0000000..90d05ca
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/MyOrderVO.java
@@ -0,0 +1,94 @@
+package com.doumee.dao.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 灏忕▼搴忕-鎴戠殑璁㈠崟鍒楄〃椤�
+ * @author rk
+ * @date 2026/04/15
+ */
+@Data
+@ApiModel("鎴戠殑璁㈠崟鍒楄〃椤�")
+public class MyOrderVO {
+
+    @ApiModelProperty(value = "璁㈠崟涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "璁㈠崟缂栧彿")
+    private String code;
+
+    @ApiModelProperty(value = "瀵勫瓨鏂瑰紡:0=灏卞湴瀛樺彇锛�1=寮傚湴瀛樺彇")
+    private Integer type;
+
+    @ApiModelProperty(value = "璁㈠崟鐘舵��")
+    private Integer status;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @ApiModelProperty(value = "棰勮鍙栦欢鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date expectedTakeTime;
+
+    // ---- 瀛樹欢闂ㄥ簵 ----
+
+    @ApiModelProperty(value = "瀛樹欢闂ㄥ簵鍚嶇О")
+    private String depositShopName;
+
+    @ApiModelProperty(value = "瀛樹欢闂ㄥ簵鑱旂郴浜�")
+    private String depositShopLinkName;
+
+    @ApiModelProperty(value = "瀛樹欢闂ㄥ簵鑱旂郴鐢佃瘽")
+    private String depositShopPhone;
+
+    // ---- 鍙栦欢淇℃伅 ----
+
+    @ApiModelProperty(value = "鍙栦欢闂ㄥ簵鍚嶇О锛堟湁鍙栦欢闂ㄥ簵鏃惰繑鍥烇級")
+    private String takeShopName;
+
+    @ApiModelProperty(value = "鍙栦欢闂ㄥ簵鍦板潃锛堟湁鍙栦欢闂ㄥ簵鏃惰繑鍥烇級")
+    private String takeShopAddress;
+
+    @ApiModelProperty(value = "鍙栦欢鍦扮偣锛堟棤鍙栦欢闂ㄥ簵鏃惰繑鍥烇紝鐢ㄦ埛鑷�夛級")
+    private String takeLocation;
+
+    @ApiModelProperty(value = "鍙栦欢鍦扮偣璇︾粏鍦板潃锛堟棤鍙栦欢闂ㄥ簵鏃惰繑鍥烇級")
+    private String takeLocationRemark;
+
+    @ApiModelProperty(value = "鍙栦欢浜哄悕绉�")
+    private String takeUser;
+
+    @ApiModelProperty(value = "鍙栦欢浜烘墜鏈哄彿")
+    private String takePhone;
+
+    // ---- 璐圭敤 ----
+
+    @ApiModelProperty(value = "鎶ヤ环淇濊垂锛堝垎锛�")
+    private Long declaredFee;
+
+    @ApiModelProperty(value = "棰勪及璐圭敤锛堝垎锛�")
+    private Long estimatedAmount;
+
+    // ---- 閫炬湡 ----
+
+    @ApiModelProperty(value = "鏄惁閫炬湡")
+    private Boolean overdue;
+
+    @ApiModelProperty(value = "閫炬湡澶╂暟")
+    private Integer overdueDays;
+
+    @ApiModelProperty(value = "閫炬湡璐圭敤锛堝垎锛�")
+    private Long overdueFee;
+
+    // ---- 鐗╁搧鏄庣粏 ----
+
+    @ApiModelProperty(value = "鐗╁搧鏄庣粏鍒楄〃")
+    private List<OrderItemVO> detailList;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/OrderDetailVO.java b/server/services/src/main/java/com/doumee/dao/vo/OrderDetailVO.java
new file mode 100644
index 0000000..c3ba743
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/OrderDetailVO.java
@@ -0,0 +1,83 @@
+package com.doumee.dao.vo;
+
+import com.doumee.dao.business.model.Orders;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 璁㈠崟璇︽儏VO
+ * @author rk
+ * @date 2026/04/13
+ */
+@Data
+@ApiModel("璁㈠崟璇︽儏")
+public class OrderDetailVO {
+
+    @ApiModelProperty(value = "璁㈠崟鍩虹淇℃伅")
+    private Orders order;
+
+    @ApiModelProperty(value = "涓嬪崟鍥剧墖鍒楄〃")
+    private List<String> orderFiles;
+
+    @ApiModelProperty(value = "浼氬憳濮撳悕")
+    private String memberName;
+
+    @ApiModelProperty(value = "浼氬憳鑱旂郴鐢佃瘽")
+    private String memberPhone;
+
+    @ApiModelProperty(value = "瀵勫瓨闂ㄥ簵鍚嶇О")
+    private String depositShopName;
+
+    @ApiModelProperty(value = "瀵勫瓨闂ㄥ簵鑱旂郴鐢佃瘽")
+    private String depositShopPhone;
+
+    @ApiModelProperty(value = "鍙栦欢闂ㄥ簵鍚嶇О")
+    private String takeShopName;
+
+    @ApiModelProperty(value = "鍙栦欢闂ㄥ簵鍦板潃")
+    private String takeShopAddress;
+
+    @ApiModelProperty(value = "鍙栦欢闂ㄥ簵鑱旂郴鐢佃瘽")
+    private String takeShopPhone;
+
+    @ApiModelProperty(value = "璁㈠崟瀵勫瓨鍥剧墖")
+    private List<String> depositImages;
+
+    @ApiModelProperty(value = "鍙告満鍙栦欢鍥剧墖")
+    private List<String> driverTakeImages;
+
+    @ApiModelProperty(value = "鍙告満瀹屾垚鍥剧墖")
+    private List<String> driverDoneImages;
+
+    @ApiModelProperty(value = "闂ㄥ簵鍏ュ簱鍥剧墖")
+    private List<String> storeInImages;
+
+    @ApiModelProperty(value = "闂ㄥ簵鍑哄簱鍥剧墖")
+    private List<String> storeOutImages;
+
+    @ApiModelProperty(value = "鐗╁搧鏄庣粏鍒楄〃")
+    private List<OrderDetailItemVO> detailList;
+
+    /**
+     * 鐗╁搧鏄庣粏椤�
+     */
+    @Data
+    @ApiModel("鐗╁搧鏄庣粏椤�")
+    public static class OrderDetailItemVO {
+
+        @ApiModelProperty(value = "灏哄鍚嶇О")
+        private String luggageName;
+
+        @ApiModelProperty(value = "鏁伴噺")
+        private Integer num;
+
+        @ApiModelProperty(value = "鍗曚环锛堝厓锛�")
+        private Double unitPriceYuan;
+
+        @ApiModelProperty(value = "灏忚璐圭敤锛堝厓锛�")
+        private Double subtotal;
+    }
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/OrderDispatchVO.java b/server/services/src/main/java/com/doumee/dao/vo/OrderDispatchVO.java
new file mode 100644
index 0000000..1f48c65
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/OrderDispatchVO.java
@@ -0,0 +1,52 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 鎵嬪姩娲惧崟淇℃伅VO
+ * @author rk
+ * @date 2026/04/13
+ */
+@Data
+@ApiModel("鎵嬪姩娲惧崟淇℃伅")
+public class OrderDispatchVO {
+
+    @ApiModelProperty(value = "璁㈠崟缂栧彿")
+    private String code;
+
+    @ApiModelProperty(value = "瀹炰粯閲戦锛堝厓锛�")
+    private Double payAmountYuan;
+
+    @ApiModelProperty(value = "閰嶉�佹柟寮�:0=灏卞湴瀛樺彇锛�1=寮傚湴瀛樺彇")
+    private Integer type;
+
+    @ApiModelProperty(value = "閰嶉�佹柟寮忔弿杩�")
+    private String typeDesc;
+
+    @ApiModelProperty(value = "璁㈠崟鐗╁搧璇︽儏")
+    private List<DispatchItemVO> detailList;
+
+    /**
+     * 鐗╁搧鏄庣粏椤�
+     */
+    @Data
+    @ApiModel("娲惧崟鐗╁搧鏄庣粏椤�")
+    public static class DispatchItemVO {
+
+        @ApiModelProperty(value = "灏哄鍚嶇О")
+        private String luggageName;
+
+        @ApiModelProperty(value = "鏁伴噺")
+        private Integer num;
+
+        @ApiModelProperty(value = "鍗曚环锛堝厓锛�")
+        private Double unitPriceYuan;
+
+        @ApiModelProperty(value = "灏忚璐圭敤锛堝厓锛�")
+        private Double subtotal;
+    }
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/OrderItemVO.java b/server/services/src/main/java/com/doumee/dao/vo/OrderItemVO.java
new file mode 100644
index 0000000..b97466f
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/OrderItemVO.java
@@ -0,0 +1,27 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 璁㈠崟鐗╁搧鏄庣粏椤�
+ * @author rk
+ * @date 2026/04/13
+ */
+@Data
+@ApiModel("璁㈠崟鐗╁搧鏄庣粏椤�")
+public class OrderItemVO {
+
+    @ApiModelProperty(value = "灏哄鍚嶇О")
+    private String luggageName;
+
+    @ApiModelProperty(value = "鏁伴噺")
+    private Integer num;
+
+    @ApiModelProperty(value = "鍗曚环锛堝厓锛�")
+    private Double unitPriceYuan;
+
+    @ApiModelProperty(value = "灏忚璐圭敤锛堝厓锛�")
+    private Double subtotal;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/OrderSummaryVO.java b/server/services/src/main/java/com/doumee/dao/vo/OrderSummaryVO.java
new file mode 100644
index 0000000..16cb9fc
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/OrderSummaryVO.java
@@ -0,0 +1,28 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 璁㈠崟姹囨�荤粺璁�
+ * @author rk
+ * @date 2026/04/14
+ */
+@Data
+@ApiModel("璁㈠崟姹囨�荤粺璁�")
+public class OrderSummaryVO {
+
+    @ApiModelProperty(value = "璁㈠崟鎬昏垂鐢紙鍒嗭級")
+    private Long totalAmountSum;
+
+    @ApiModelProperty(value = "宸茬粨绠楁�昏垂鐢紙鍒嗭級")
+    private Long settledTotalAmountSum;
+
+    @ApiModelProperty(value = "鍙告満璐圭敤鎬昏锛堝垎锛�")
+    private Long driverFeeSum;
+
+    @ApiModelProperty(value = "鍙告満宸茬粨绠楄垂鐢紙鍒嗭級")
+    private Long settledDriverFeeSum;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/OverdueFeeVO.java b/server/services/src/main/java/com/doumee/dao/vo/OverdueFeeVO.java
new file mode 100644
index 0000000..48474c4
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/OverdueFeeVO.java
@@ -0,0 +1,31 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 瓒呮椂/閫炬湡璐圭敤璁$畻缁撴灉VO
+ *
+ * @Author : Rk
+ * @create 2026/4/15
+ */
+@Data
+@ApiModel("瓒呮椂璐圭敤璁$畻缁撴灉")
+public class OverdueFeeVO {
+
+    @ApiModelProperty("鏄惁閫炬湡")
+    private Boolean overdue;
+
+    @ApiModelProperty("閫炬湡澶╂暟")
+    private Integer overdueDays;
+
+    @ApiModelProperty("閫炬湡璐圭敤(鍒�)")
+    private Long overdueFee;
+
+    @ApiModelProperty("鐗╁搧鍩虹鏃ヨ垂鐢ㄥ悎璁�(鍒�) 鈥� 鍗曚环脳鏁伴噺涔嬪拰")
+    private Long dailyBaseFee;
+
+    @ApiModelProperty("鎶樻墸姣旂巼锛堜粎寮傚湴瀵勫瓨锛�")
+    private String discountRate;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/PayResponse.java b/server/services/src/main/java/com/doumee/dao/vo/PayResponse.java
new file mode 100644
index 0000000..57fe9e4
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/PayResponse.java
@@ -0,0 +1,31 @@
+package com.doumee.dao.web.response.goods;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 9:50
+ */
+@Data
+@ApiModel("鏀粯鐩稿簲绫�")
+public class PayResponse implements Serializable {
+
+    @ApiModelProperty(value = "鏀粯璁㈠崟涓婚敭")
+    private Integer orderId;
+
+    @ApiModelProperty(value = "鏀粯绫诲瀷锛�0=鐜伴噾鏀粯锛�1=绾Н鍒嗘敮浠�")
+    private Integer payType;
+
+    @ApiModelProperty(value = "寰俊璋冭捣涓氬姟")
+    private Object response;
+
+    @ApiModelProperty(value = "閿佸畾缂栧彿",hidden = true)
+    private String lockKey;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/PriceCalculateVO.java b/server/services/src/main/java/com/doumee/dao/vo/PriceCalculateVO.java
new file mode 100644
index 0000000..a42b9f2
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/PriceCalculateVO.java
@@ -0,0 +1,40 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 浠锋牸璁$畻缁撴灉VO
+ *
+ * @Author : Rk
+ * @create 2026/4/14
+ */
+@Data
+@ApiModel("浠锋牸璁$畻缁撴灉")
+public class PriceCalculateVO {
+
+    @ApiModelProperty("鐗╁搧璁′环璇︽儏鍒楄〃")
+    private List<ItemPriceVO> itemList;
+
+    @ApiModelProperty("鎬讳环鏍�(鍒�)")
+    private Long totalPrice;
+
+    @ApiModelProperty("鎬讳繚浠疯垂鐢�(鍒�)")
+    private Long insuranceFee;
+
+    @ApiModelProperty("鐗╁搧浠锋牸鍚堣(鍒�)")
+    private Long itemPrice;
+
+    @ApiModelProperty("鍔犳�ヨ垂鐢�(鍒�)")
+    private Long urgentFee;
+
+    @ApiModelProperty("璺濈(km)")
+    private BigDecimal distance;
+
+    @ApiModelProperty("澶╂暟")
+    private Integer days;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/ShopLoginVO.java b/server/services/src/main/java/com/doumee/dao/vo/ShopLoginVO.java
new file mode 100644
index 0000000..18946fc
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/ShopLoginVO.java
@@ -0,0 +1,33 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 闂ㄥ簵鐧诲綍鍝嶅簲
+ *
+ * @author rk
+ * @date 2026/04/15
+ */
+@Data
+@ApiModel("闂ㄥ簵鐧诲綍鍝嶅簲")
+public class ShopLoginVO implements Serializable {
+
+    @ApiModelProperty(value = "闂ㄥ簵token")
+    private String token;
+
+    @ApiModelProperty(value = "闂ㄥ簵涓婚敭")
+    private Integer shopId;
+
+    @ApiModelProperty(value = "闂ㄥ簵鍚嶇О")
+    private String shopName;
+
+    @ApiModelProperty(value = "闂ㄥ簵绫诲瀷: 0=涓汉 1=浼佷笟")
+    private Integer companyType;
+
+    @ApiModelProperty(value = "鎵�灞炲煄甯傚悕绉�")
+    private String cityName;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/ShopNearbyVO.java b/server/services/src/main/java/com/doumee/dao/vo/ShopNearbyVO.java
new file mode 100644
index 0000000..753a3c3
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/ShopNearbyVO.java
@@ -0,0 +1,39 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 闄勮繎闂ㄥ簵鍒楄〃椤�
+ * @author rk
+ * @date 2026/04/14
+ */
+@Data
+@ApiModel("闄勮繎闂ㄥ簵鍒楄〃椤�")
+public class ShopNearbyVO implements Serializable {
+
+    @ApiModelProperty(value = "闂ㄥ簵涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "闂ㄥ簵鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "闂ㄥ簵钀ヤ笟鏃堕棿")
+    private String shopHours;
+
+    @ApiModelProperty(value = "闂ㄥ簵浣嶇疆锛堣缁嗗湴鍧�锛�")
+    private String address;
+
+    @ApiModelProperty(value = "闂ㄥご鐓х涓�寮狅紙鍏ㄨ矾寰勶級")
+    private String coverImg;
+
+    @ApiModelProperty(value = "璺濈锛堝 500m銆�1.2km锛�")
+    private String distanceText;
+
+    @ApiModelProperty(value = "闂ㄥ簵璇勫垎")
+    private BigDecimal score;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/ShopWebDetailVO.java b/server/services/src/main/java/com/doumee/dao/vo/ShopWebDetailVO.java
new file mode 100644
index 0000000..6da15a3
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/ShopWebDetailVO.java
@@ -0,0 +1,36 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 闂ㄥ簵璇︽儏锛堝皬绋嬪簭绔級
+ * @author rk
+ * @date 2026/04/14
+ */
+@Data
+@ApiModel("闂ㄥ簵璇︽儏锛堝皬绋嬪簭绔級")
+public class ShopWebDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "闂ㄥ簵涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "闂ㄥ簵鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "闂ㄥ簵璇︾粏鍦板潃")
+    private String address;
+
+    @ApiModelProperty(value = "闂ㄥ簵璇存槑")
+    private String content;
+
+    @ApiModelProperty(value = "闂ㄥ簵鐓х墖锛堥棬澶寸収+鍐呴儴鐓э紝鍏ㄨ矾寰勯泦鍚堬級")
+    private List<String> images;
+
+    @ApiModelProperty(value = "璺濈锛堝 500m銆�1.2km锛夛紝鏃犵粡绾害鍏ュ弬鏃朵负绌�")
+    private String distanceText;
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/AddrService.java b/server/services/src/main/java/com/doumee/service/business/AddrService.java
new file mode 100644
index 0000000..89b3314
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/AddrService.java
@@ -0,0 +1,49 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.Addr;
+
+import java.util.List;
+
+/**
+ * 鍦板潃绨縎ervice
+ * @author rk
+ * @date 2026/04/15
+ */
+public interface AddrService {
+
+    Integer create(Addr addr);
+
+    void deleteById(Integer id);
+
+    void delete(Addr addr);
+
+    void deleteByIdInBatch(List<Integer> ids);
+
+    void updateById(Addr addr);
+
+    void updateByIdInBatch(List<Addr> addrs);
+
+    void updateStatus(Addr addr);
+
+    Addr findById(Integer id);
+
+    Addr findOne(Addr addr);
+
+    List<Addr> findList(Addr addr);
+
+    PageData<Addr> findPage(PageWrap<Addr> pageWrap);
+
+    long count(Addr addr);
+
+    /**
+     * 鏌ヨ浼氬憳鍦板潃鍒楄〃锛堝惈鐪佸競鍖轰俊鎭級
+     */
+    List<Addr> findListWithArea(Integer memberId);
+
+    /**
+     * 鏍规嵁ID鏌ヨ鍦板潃锛堝惈鐪佸競鍖轰俊鎭級
+     */
+    Addr findByIdWithArea(Integer id);
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/OrderLogService.java b/server/services/src/main/java/com/doumee/service/business/OrderLogService.java
new file mode 100644
index 0000000..9740aa0
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/OrderLogService.java
@@ -0,0 +1,37 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.OrderLog;
+
+import java.util.List;
+
+/**
+ * 璁㈠崟鎿嶄綔鏃ュ織Service瀹氫箟
+ * @author rk
+ * @date 2026/04/13
+ */
+public interface OrderLogService {
+
+    Integer create(OrderLog orderLog);
+
+    void deleteById(Integer id);
+
+    void delete(OrderLog orderLog);
+
+    void deleteByIdInBatch(List<Integer> ids);
+
+    void updateById(OrderLog orderLog);
+
+    void updateByIdInBatch(List<OrderLog> orderLogs);
+
+    OrderLog findById(Integer id);
+
+    OrderLog findOne(OrderLog orderLog);
+
+    List<OrderLog> findList(OrderLog orderLog);
+
+    PageData<OrderLog> findPage(PageWrap<OrderLog> pageWrap);
+
+    long count(OrderLog orderLog);
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/OrdersRefundService.java b/server/services/src/main/java/com/doumee/service/business/OrdersRefundService.java
new file mode 100644
index 0000000..a989dd1
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/OrdersRefundService.java
@@ -0,0 +1,98 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.OrdersRefund;
+
+import java.util.List;
+
+/**
+ * 璁㈠崟閫�娆捐褰昐ervice瀹氫箟
+ * @author rk
+ * @date 2026/04/13
+ */
+public interface OrdersRefundService {
+
+    /**
+     * 鍒涘缓
+     *
+     * @param ordersRefund 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(OrdersRefund ordersRefund);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param ordersRefund 瀹炰綋瀵硅薄
+     */
+    void delete(OrdersRefund ordersRefund);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param ordersRefund 瀹炰綋瀵硅薄
+     */
+    void updateById(OrdersRefund ordersRefund);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param ordersRefunds 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<OrdersRefund> ordersRefunds);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return OrdersRefund
+     */
+    OrdersRefund findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param ordersRefund 瀹炰綋瀵硅薄
+     * @return OrdersRefund
+     */
+    OrdersRefund findOne(OrdersRefund ordersRefund);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param ordersRefund 瀹炰綋瀵硅薄
+     * @return List<OrdersRefund>
+     */
+    List<OrdersRefund> findList(OrdersRefund ordersRefund);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<OrdersRefund>
+     */
+    PageData<OrdersRefund> findPage(PageWrap<OrdersRefund> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param ordersRefund 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(OrdersRefund ordersRefund);
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/AddrServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/AddrServiceImpl.java
new file mode 100644
index 0000000..c9e5dbc
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/impl/AddrServiceImpl.java
@@ -0,0 +1,171 @@
+package com.doumee.service.business.impl;
+
+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.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.AddrMapper;
+import com.doumee.dao.business.model.Addr;
+import com.doumee.service.business.AddrService;
+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.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 鍦板潃绨縎ervice瀹炵幇
+ * @author rk
+ * @date 2026/04/15
+ */
+@Service
+public class AddrServiceImpl implements AddrService {
+
+    @Autowired
+    private AddrMapper addrMapper;
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+    public Integer create(Addr addr) {
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        addr.setDeleted(Constants.ZERO);
+        addr.setCreateTime(new Date());
+        addr.setCreateUser(loginUserInfo.getId());
+        addr.setUpdateTime(new Date());
+        addr.setUpdateUser(loginUserInfo.getId());
+        addrMapper.insert(addr);
+        return addr.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        addrMapper.update(new UpdateWrapper<Addr>().lambda()
+                .set(Addr::getDeleted, Constants.ONE)
+                .eq(Addr::getId, id));
+    }
+
+    @Override
+    public void delete(Addr addr) {
+        UpdateWrapper<Addr> deleteWrapper = new UpdateWrapper<>(addr);
+        addrMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        for (Integer id : ids) {
+            this.deleteById(id);
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+    public void updateById(Addr addr) {
+        if (Objects.isNull(addr) || Objects.isNull(addr.getId())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        addr.setUpdateTime(new Date());
+        addr.setUpdateUser(loginUserInfo.getId());
+        addrMapper.updateById(addr);
+    }
+
+    @Override
+    public void updateStatus(Addr addr) {
+        if (Objects.isNull(addr) || Objects.isNull(addr.getId())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        addr.setUpdateTime(new Date());
+        addr.setUpdateUser(loginUserInfo.getId());
+        addrMapper.updateById(addr);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<Addr> addrs) {
+        if (CollectionUtils.isEmpty(addrs)) {
+            return;
+        }
+        for (Addr addr : addrs) {
+            this.updateById(addr);
+        }
+    }
+
+    @Override
+    public Addr findById(Integer id) {
+        Addr addr = addrMapper.selectById(id);
+        if (Objects.isNull(addr)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        return addr;
+    }
+
+    @Override
+    public Addr findOne(Addr addr) {
+        QueryWrapper<Addr> wrapper = new QueryWrapper<>(addr);
+        return addrMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<Addr> findList(Addr addr) {
+        QueryWrapper<Addr> wrapper = new QueryWrapper<>(addr);
+        return addrMapper.selectList(wrapper);
+    }
+
+    @Override
+    public PageData<Addr> findPage(PageWrap<Addr> pageWrap) {
+        IPage<Addr> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<Addr> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        pageWrap.getModel().setDeleted(Constants.ZERO);
+        if (pageWrap.getModel().getDeleted() != null) {
+            queryWrapper.lambda().eq(Addr::getDeleted, pageWrap.getModel().getDeleted());
+        }
+        if (pageWrap.getModel().getMemberId() != null) {
+            queryWrapper.lambda().eq(Addr::getMemberId, pageWrap.getModel().getMemberId());
+        }
+        if (pageWrap.getModel().getIsDefault() != null) {
+            queryWrapper.lambda().eq(Addr::getIsDefault, pageWrap.getModel().getIsDefault());
+        }
+        if (StringUtils.isNotBlank(pageWrap.getModel().getName())) {
+            queryWrapper.lambda().like(Addr::getName, pageWrap.getModel().getName());
+        }
+        if (StringUtils.isNotBlank(pageWrap.getModel().getPhone())) {
+            queryWrapper.lambda().like(Addr::getPhone, pageWrap.getModel().getPhone());
+        }
+        if (StringUtils.isNotBlank(pageWrap.getModel().getAddr())) {
+            queryWrapper.lambda().like(Addr::getAddr, pageWrap.getModel().getAddr());
+        }
+        if (pageWrap.getModel().getAreaId() != null) {
+            queryWrapper.lambda().eq(Addr::getAreaId, pageWrap.getModel().getAreaId());
+        }
+        for (PageWrap.SortData sortData : pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(addrMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(Addr addr) {
+        QueryWrapper<Addr> wrapper = new QueryWrapper<>(addr);
+        return addrMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OrderLogServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OrderLogServiceImpl.java
new file mode 100644
index 0000000..6d8492a
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/impl/OrderLogServiceImpl.java
@@ -0,0 +1,139 @@
+package com.doumee.service.business.impl;
+
+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.doumee.core.constants.Constants;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.OrderLogMapper;
+import com.doumee.dao.business.model.OrderLog;
+import com.doumee.service.business.OrderLogService;
+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.Objects;
+
+/**
+ * 璁㈠崟鎿嶄綔鏃ュ織Service瀹炵幇
+ * @author rk
+ * @date 2026/04/13
+ */
+@Service
+public class OrderLogServiceImpl implements OrderLogService {
+
+    @Autowired
+    private OrderLogMapper orderLogMapper;
+
+    @Override
+    public Integer create(OrderLog orderLog) {
+        orderLogMapper.insert(orderLog);
+        return orderLog.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        orderLogMapper.update(new UpdateWrapper<OrderLog>().lambda()
+                .set(OrderLog::getDeleted, Constants.ONE)
+                .eq(OrderLog::getId, id));
+    }
+
+    @Override
+    public void delete(OrderLog orderLog) {
+        UpdateWrapper<OrderLog> deleteWrapper = new UpdateWrapper<>(orderLog);
+        orderLogMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (ids == null || ids.isEmpty()) {
+            return;
+        }
+        for (Integer id : ids) {
+            this.deleteById(id);
+        }
+    }
+
+    @Override
+    public void updateById(OrderLog orderLog) {
+        orderLogMapper.updateById(orderLog);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<OrderLog> orderLogs) {
+        if (orderLogs == null || orderLogs.isEmpty()) {
+            return;
+        }
+        for (OrderLog orderLog : orderLogs) {
+            this.updateById(orderLog);
+        }
+    }
+
+    @Override
+    public OrderLog findById(Integer id) {
+        OrderLog orderLog = orderLogMapper.selectById(id);
+        if (Objects.isNull(orderLog)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        return orderLog;
+    }
+
+    @Override
+    public OrderLog findOne(OrderLog orderLog) {
+        QueryWrapper<OrderLog> wrapper = new QueryWrapper<>(orderLog);
+        return orderLogMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<OrderLog> findList(OrderLog orderLog) {
+        QueryWrapper<OrderLog> wrapper = new QueryWrapper<>(orderLog);
+        return orderLogMapper.selectList(wrapper);
+    }
+
+    @Override
+    public PageData<OrderLog> findPage(PageWrap<OrderLog> pageWrap) {
+        IPage<OrderLog> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<OrderLog> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        pageWrap.getModel().setDeleted(Constants.ZERO);
+        queryWrapper.lambda().eq(OrderLog::getDeleted, pageWrap.getModel().getDeleted());
+        if (pageWrap.getModel().getOrderId() != null) {
+            queryWrapper.lambda().eq(OrderLog::getOrderId, pageWrap.getModel().getOrderId());
+        }
+        if (StringUtils.isNotBlank(pageWrap.getModel().getTitle())) {
+            queryWrapper.lambda().like(OrderLog::getTitle, pageWrap.getModel().getTitle());
+        }
+        if (pageWrap.getModel().getOrderStatus() != null) {
+            queryWrapper.lambda().eq(OrderLog::getOrderStatus, pageWrap.getModel().getOrderStatus());
+        }
+        if (pageWrap.getModel().getObjType() != null) {
+            queryWrapper.lambda().eq(OrderLog::getObjType, pageWrap.getModel().getObjType());
+        }
+        if (pageWrap.getModel().getOptUserType() != null) {
+            queryWrapper.lambda().eq(OrderLog::getOptUserType, pageWrap.getModel().getOptUserType());
+        }
+        if (pageWrap.getModel().getOptUserId() != null) {
+            queryWrapper.lambda().eq(OrderLog::getOptUserId, pageWrap.getModel().getOptUserId());
+        }
+        for (PageWrap.SortData sortData : pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(orderLogMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(OrderLog orderLog) {
+        QueryWrapper<OrderLog> wrapper = new QueryWrapper<>(orderLog);
+        return orderLogMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OrdersRefundServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OrdersRefundServiceImpl.java
new file mode 100644
index 0000000..f05f6b0
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/impl/OrdersRefundServiceImpl.java
@@ -0,0 +1,113 @@
+package com.doumee.service.business.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.OrdersRefundMapper;
+import com.doumee.dao.business.model.OrdersRefund;
+import com.doumee.service.business.OrdersRefundService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 璁㈠崟閫�娆捐褰昐ervice瀹炵幇
+ * @author rk
+ * @date 2026/04/13
+ */
+@Service
+public class OrdersRefundServiceImpl implements OrdersRefundService {
+
+    @Autowired
+    private OrdersRefundMapper ordersRefundMapper;
+
+    @Override
+    public Integer create(OrdersRefund ordersRefund) {
+        ordersRefundMapper.insert(ordersRefund);
+        return ordersRefund.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        ordersRefundMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(OrdersRefund ordersRefund) {
+        QueryWrapper<OrdersRefund> deleteWrapper = new QueryWrapper<>(ordersRefund);
+        ordersRefundMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        ordersRefundMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(OrdersRefund ordersRefund) {
+        ordersRefundMapper.updateById(ordersRefund);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<OrdersRefund> ordersRefunds) {
+        if (CollectionUtils.isEmpty(ordersRefunds)) {
+            return;
+        }
+        for (OrdersRefund ordersRefund : ordersRefunds) {
+            this.updateById(ordersRefund);
+        }
+    }
+
+    @Override
+    public OrdersRefund findById(Integer id) {
+        return ordersRefundMapper.selectById(id);
+    }
+
+    @Override
+    public OrdersRefund findOne(OrdersRefund ordersRefund) {
+        QueryWrapper<OrdersRefund> wrapper = new QueryWrapper<>(ordersRefund);
+        return ordersRefundMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<OrdersRefund> findList(OrdersRefund ordersRefund) {
+        QueryWrapper<OrdersRefund> wrapper = new QueryWrapper<>(ordersRefund);
+        return ordersRefundMapper.selectList(wrapper);
+    }
+
+    @Override
+    public PageData<OrdersRefund> findPage(PageWrap<OrdersRefund> pageWrap) {
+        IPage<OrdersRefund> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<OrdersRefund> queryWrapper = new QueryWrapper<>();
+        OrdersRefund model = pageWrap.getModel();
+        if (model != null) {
+            if (model.getOrderId() != null) {
+                queryWrapper.lambda().eq(OrdersRefund::getOrderId, model.getOrderId());
+            }
+            if (model.getType() != null) {
+                queryWrapper.lambda().eq(OrdersRefund::getType, model.getType());
+            }
+        }
+        for (PageWrap.SortData sortData : pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(ordersRefundMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(OrdersRefund ordersRefund) {
+        QueryWrapper<OrdersRefund> wrapper = new QueryWrapper<>(ordersRefund);
+        return ordersRefundMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/web/src/main/java/com/doumee/api/web/AddrApi.java b/server/web/src/main/java/com/doumee/api/web/AddrApi.java
new file mode 100644
index 0000000..1d9315f
--- /dev/null
+++ b/server/web/src/main/java/com/doumee/api/web/AddrApi.java
@@ -0,0 +1,100 @@
+package com.doumee.api.web;
+
+import com.doumee.core.annotation.LoginRequired;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.dao.business.model.Addr;
+import com.doumee.service.business.AddrService;
+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.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 鍦板潃绨匡紙灏忕▼搴忕锛�
+ * @author rk
+ * @date 2026/04/15
+ */
+@Api(tags = "鍦板潃绨�")
+@RestController
+@RequestMapping("/web/addr")
+public class AddrApi extends ApiController {
+
+    @Autowired
+    private AddrService addrService;
+
+    @LoginRequired
+    @ApiOperation(value = "鏌ヨ鎴戠殑鍦板潃鍒楄〃", notes = "灏忕▼搴忕")
+    @GetMapping("/list")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<List<Addr>> list() {
+        Addr query = new Addr();
+        query.setMemberId(getMemberId());
+        query.setDeleted(0);
+        return ApiResponse.success("鏌ヨ鎴愬姛", addrService.findList(query));
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "鏍规嵁ID鏌ヨ鍦板潃", notes = "灏忕▼搴忕")
+    @GetMapping("/{id}")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<Addr> findById(@PathVariable Integer id) {
+        return ApiResponse.success("鏌ヨ鎴愬姛", addrService.findById(id));
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "鏂板鍦板潃", notes = "灏忕▼搴忕")
+    @PostMapping("/create")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse create(@RequestBody Addr addr) {
+        addr.setMemberId(getMemberId());
+        addrService.create(addr);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "淇敼鍦板潃", notes = "灏忕▼搴忕")
+    @PostMapping("/updateById")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse updateById(@RequestBody Addr addr) {
+        addr.setMemberId(getMemberId());
+        addrService.updateById(addr);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "鍒犻櫎鍦板潃", notes = "灏忕▼搴忕")
+    @GetMapping("/delete/{id}")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        addrService.deleteById(id);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "璁句负榛樿鍦板潃", notes = "灏忕▼搴忕")
+    @PostMapping("/setDefault/{id}")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse setDefault(@PathVariable Integer id) {
+        Addr addr = new Addr();
+        addr.setId(id);
+        addr.setIsDefault(1);
+        addrService.updateById(addr);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+}
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
new file mode 100644
index 0000000..a2300ec
--- /dev/null
+++ b/server/web/src/main/java/com/doumee/api/web/MemberApi.java
@@ -0,0 +1,113 @@
+package com.doumee.api.web;
+
+import com.doumee.core.annotation.LoginRequired;
+import com.doumee.core.annotation.trace.Trace;
+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.business.model.Member;
+import com.doumee.dao.business.model.MemberRevenue;
+import com.doumee.dao.dto.UpdMobileRequest;
+import com.doumee.dao.dto.WithdrawalDTO;
+import com.doumee.dao.dto.WxPhoneRequest;
+import com.doumee.dao.vo.AccountResponse;
+import com.doumee.dao.vo.UserCenterVO;
+import com.doumee.service.business.IdentityInfoService;
+import com.doumee.service.business.MemberService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/7/10 9:29
+ */
+@Api(tags = "2銆佺敤鎴蜂俊鎭�")
+@Trace(exclude = true)
+@RestController
+@RequestMapping("/web/user")
+@Slf4j
+public class UserApi extends  ApiController{
+
+
+    @Autowired
+    private MemberService memberService;
+
+//    @Autowired
+//    private IdentityInfoService identityInfoService;
+
+//    @Autowired
+//    private MemberRevenueService memberRevenueService;
+//
+//    @Autowired
+//    private WithdrawalOrdersService withdrawalOrdersService;
+
+
+    @ApiOperation(value = "鑾峰彇绯荤粺閰嶇疆", notes = "灏忕▼搴忕")
+    @GetMapping("/getPlatformAboutUs")
+    public ApiResponse<UserCenterVO> getPlatformAboutUs() {
+        return  ApiResponse.success("鏌ヨ鎴愬姛",memberService.getPlatformAboutUs());
+    }
+
+
+    @LoginRequired
+    @ApiOperation(value = "鑾峰彇涓汉淇℃伅", notes = "灏忕▼搴忕")
+    @GetMapping("/getMemberInfo")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<Member> getMemberInfo() {
+        return  ApiResponse.success("鏌ヨ鎴愬姛",memberService.getMemberInfo(getMemberId()));
+    }
+
+
+    @LoginRequired
+    @ApiOperation(value = "缂栬緫涓汉淇℃伅", notes = "灏忕▼搴忕")
+    @PostMapping("/editMemberInfo")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse editMemberInfo(@RequestBody Member member) {
+        member.setId(getMemberId());
+        memberService.editMemberInfo(member);
+        return  ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
+    @LoginRequired
+    @ApiOperation("楠岃瘉鎵嬫満鍙�")
+    @PostMapping("/verifyUserPhone")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse verifyUserPhone(@RequestBody UpdMobileRequest request) {
+        request.setMemberId(getMemberId());
+        memberService.verifyUserPhone(request);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
+    @LoginRequired
+    @ApiOperation("鏇存崲缁戝畾鎵嬫満鍙�")
+    @PostMapping("/updateUserPhone")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse updateUserPhone(@RequestBody UpdMobileRequest request) {
+        request.setMemberId(getMemberId());
+        memberService.updateUserPhone(request);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
+
+}
diff --git a/server/web/src/main/java/com/doumee/api/web/OrdersApi.java b/server/web/src/main/java/com/doumee/api/web/OrdersApi.java
new file mode 100644
index 0000000..fe1eea4
--- /dev/null
+++ b/server/web/src/main/java/com/doumee/api/web/OrdersApi.java
@@ -0,0 +1,113 @@
+package com.doumee.api.web;
+
+import com.doumee.core.annotation.LoginRequired;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.dao.business.model.Areas;
+import com.doumee.dao.business.model.Banner;
+import com.doumee.dao.business.model.Category;
+import com.doumee.dao.dto.CalculateLocalPriceDTO;
+import com.doumee.dao.dto.CalculateRemotePriceDTO;
+import com.doumee.dao.vo.AccountResponse;
+import com.doumee.dao.vo.PriceCalculateVO;
+import com.doumee.service.business.AreasService;
+import com.doumee.service.business.BannerService;
+import com.doumee.service.business.CategoryService;
+import com.doumee.service.business.OrdersService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/7/15 15:49
+ */
+@Api(tags = "閰嶇疆绫绘帴鍙�")
+@Trace(exclude = true)
+@RestController
+@RequestMapping("/web/config")
+@Slf4j
+public class ConfigApi extends ApiController{
+
+    @Autowired
+    private CategoryService categoryService;
+
+    @Autowired
+    private AreasService areasService;
+
+    @Autowired
+    private BannerService bannerService;
+
+    @Autowired
+    private OrdersService ordersService;
+
+    @ApiOperation(value = "鑾峰彇鍒嗙被鍒楄〃", notes = "灏忕▼搴忕")
+    @GetMapping("/getCategoryList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "type", value = "绫诲瀷:1=杞﹁締绫诲瀷;2=鐗╁搧鍒嗙被;3=鐗╁搧绛夌骇;4=鐗╁搧灏哄;", required = true)
+    })
+    public ApiResponse<List<Category>> getCategoryList(@RequestParam Integer type) {
+        return  ApiResponse.success("鎿嶄綔鎴愬姛",categoryService.getCategoryList(type));
+    }
+
+    @ApiOperation(value = "鑾峰彇寮�鏀惧煄甯傚垪琛�", notes = "杩斿洖宸插紑鏀惧煄甯傦紝鍚瀛楁瘝锛屾寜棣栧瓧姣嶆帓搴�")
+    @GetMapping("/getOpenCityList")
+    public ApiResponse<List<Areas>> getOpenCityList() {
+        return ApiResponse.success("鎿嶄綔鎴愬姛", areasService.getOpenCityList());
+    }
+
+    @ApiOperation(value = "鑾峰彇杞挱鍥惧垪琛�", notes = "鏍规嵁浣嶇疆杩斿洖杞挱鍥撅紝鍚浘鐗囧叏璺緞")
+    @GetMapping("/getBannerList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "position", value = "浣嶇疆:0=浼氬憳绔椤佃疆鎾�;1=鍙告満APP寮曞椤�;", required = true)
+    })
+    public ApiResponse<List<Banner>> getBannerList(@RequestParam Integer position) {
+        return ApiResponse.success("鎿嶄綔鎴愬姛", bannerService.findListByPosition(position));
+    }
+
+    @ApiOperation(value = "鑾峰彇鍩庡競宸插紑閫氱墿鍝佸昂瀵�", notes = "鏍规嵁鍩庡競涓婚敭鏌ヨ宸插紑閫氱殑鐗╁搧灏哄(category type=4)")
+    @GetMapping("/getCitySizeList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "cityId", value = "鍩庡競涓婚敭", required = true)
+    })
+    public ApiResponse<List<Category>> getCitySizeList(@RequestParam Integer cityId) {
+        return ApiResponse.success("鎿嶄綔鎴愬姛", categoryService.getCitySizeList(cityId));
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "璁$畻淇濅环璐圭敤", notes = "鏍规嵁鎶ヤ环閲戦璁$畻淇濅环璐圭敤")
+    @GetMapping("/calculateInsuranceFee")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "BigDecimal", name = "declaredValue", value = "鎶ヤ环閲戦", required = true),
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+    })
+    public ApiResponse<BigDecimal> calculateInsuranceFee(@RequestParam BigDecimal declaredValue) {
+        return ApiResponse.success("鎿嶄綔鎴愬姛", ordersService.calculateInsuranceFee(declaredValue));
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "璁$畻灏卞湴瀛樺彇棰勪及璐圭敤", notes = "鏍规嵁鍩庡競銆佸ぉ鏁般�佺墿鍝佺被鍨嬪拰鏁伴噺璁$畻灏卞湴瀛樺彇棰勪及璐圭敤")
+    @PostMapping("/calculateLocalPrice")
+    public ApiResponse<PriceCalculateVO> calculateLocalPrice(@RequestBody @Valid CalculateLocalPriceDTO dto) {
+        return ApiResponse.success("鎿嶄綔鎴愬姛", ordersService.calculateLocalPrice(dto));
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "璁$畻寮傚湴瀛樺彇棰勪及璐圭敤", notes = "鏍规嵁璺濈銆佺墿鍝佺被鍨嬪拰鏁伴噺璁$畻寮傚湴瀛樺彇棰勪及璐圭敤")
+    @PostMapping("/calculateRemotePrice")
+    public ApiResponse<PriceCalculateVO> calculateRemotePrice(@RequestBody @Valid CalculateRemotePriceDTO dto) {
+        return ApiResponse.success("鎿嶄綔鎴愬姛", ordersService.calculateRemotePrice(dto));
+    }
+
+
+}
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
new file mode 100644
index 0000000..0aae790
--- /dev/null
+++ b/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
@@ -0,0 +1,157 @@
+package com.doumee.api.web.mall;
+
+import com.doumee.api.web.ApiController;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.ID;
+import com.doumee.core.wx.WxMiniConfig;
+import com.doumee.dao.business.model.ActivitySign;
+import com.doumee.dao.business.model.Fund;
+import com.doumee.dao.business.model.Goodsorder;
+import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
+import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * 鏀粯鍥炶皟
+ *
+ * @Author : Rk
+ * @create 2023/3/24 16:57
+ */
+@Slf4j
+@RestController
+@CrossOrigin
+public class PaymentCallback extends ApiController {
+
+
+    @PostMapping("/web/api/wxPayNotify")
+    public String wxPay_notify(@RequestBody String xmlResult) {
+        String wxId = ID.nextGUID();
+        log.info("鏀粯鍥炶皟淇℃伅("+wxId+") = > "  + xmlResult);
+        if (StringUtils.isEmpty(xmlResult)){
+            return null;
+        }
+        try {
+            WxPayOrderNotifyResult result = WxMiniConfig.wxPayService.parseOrderNotifyResult(xmlResult);
+            //鑷畾涔夎鍗曞彿
+            String outTradeNo = result.getOutTradeNo();
+            //寰俊璁㈠崟鍙�
+            String paymentNo = result.getTransactionId();
+
+            if (Constants.SUCCESS_STR.equals(result.getReturnCode())) {
+                // 鏀粯鎴愬姛
+                switch (result.getAttach()) {
+                    //娲诲姩鍙備笌鏀粯
+                    case "ActivitySign": {
+                        ActivitySign activitySign = activitySignService.findById(Integer.valueOf(outTradeNo));
+                        if(Objects.isNull(activitySign)){
+                            return WxPayNotifyResponse.fail( "鏀粯鍥炶皟淇℃伅("+ wxId + ") = > 鏈煡璇㈠埌鏀粯瀵硅薄淇℃伅!");
+                        }
+                        if(activitySign.getStatus().equals(Constants.ONE)){
+                            return WxPayNotifyResponse.success("澶勭悊鎴愬姛!");
+                        }
+                        activitySign.setPayStatus(Constants.ONE);
+                        activitySign.setPayDate(new Date());
+                        activitySign.setPayOrderId(paymentNo);
+                        activitySign.setStatus(Constants.ONE);
+                        activitySignService.updateById(activitySign);
+                        break;
+                    }
+                    case "terraceMall": {
+                        Goodsorder DBGoodsOrder = new Goodsorder();
+                        DBGoodsOrder.setCode(Long.valueOf(outTradeNo));
+                        Goodsorder goodsOrder = goodsorderService.findOne(DBGoodsOrder);
+                        if(Objects.isNull(goodsOrder)){
+                            return WxPayNotifyResponse.fail( "鏀粯鍥炶皟淇℃伅("+ wxId + ") = > 鏈煡璇㈠埌鏀粯瀵硅薄淇℃伅!");
+                        }
+                        if(goodsOrder.getStatus().equals(Constants.ONE)){
+                            return WxPayNotifyResponse.success("澶勭悊鎴愬姛!");
+                        }
+                        goodsOrder.setPayStatus(Constants.ONE);
+                        goodsOrder.setPayDate(new Date());
+                        goodsOrder.setPayOrderId(paymentNo);
+                        goodsOrder.setStatus(Constants.OrderStatus.PAY_DONE.getKey());
+                        goodsOrder.setPayMethod(Constants.ZERO);
+                        goodsorderService.updateById(goodsOrder);
+                        //鐢熸垚 鍜栧暋璁″垝璁㈠崟鏄庣粏琛�
+                        if(goodsOrder.getType().equals(Constants.TWO)){
+                            planorderDetailService.createPlanOrderDetail(goodsOrder);
+                        }
+                        Fund fund = new Fund();
+                        fund.setOrderCode(goodsOrder.getPayOrderId());
+                        fund.setCreator(goodsOrder.getMemberId());
+                        fund.setCreateDate(new Date());
+                        fund.setIsdeleted(Constants.ZERO);
+                        fund.setRemark(goodsOrder.getCode().toString());
+                        fund.setMemberId(goodsOrder.getMemberId());
+                        fund.setTitle("璁㈠崟鏀粯");
+                        fund.setContent("璁㈠崟鏀粯");
+                        fund.setObjId(goodsOrder.getId());
+                        fund.setObjType(Constants.ONE);
+                        fund.setType(Constants.ZERO);
+                        fund.setNum(goodsOrder.getPrice());
+                        fundService.create(fund);
+                        break;
+                    }
+                    case "shopGoods": {
+                        Goodsorder DBGoodsOrder = new Goodsorder();
+                        DBGoodsOrder.setCode(Long.valueOf(outTradeNo));
+                        Goodsorder goodsOrder = goodsorderService.findOne(DBGoodsOrder);
+                        if(Objects.isNull(goodsOrder)){
+                            return WxPayNotifyResponse.fail( "鏀粯鍥炶皟淇℃伅("+ wxId + ") = > 鏈煡璇㈠埌鏀粯瀵硅薄淇℃伅!");
+                        }
+                        if(goodsOrder.getStatus().equals(Constants.ONE)){
+                            return WxPayNotifyResponse.success("澶勭悊鎴愬姛!");
+                        }
+                        goodsOrder.setPayStatus(Constants.ONE);
+                        goodsOrder.setPayDate(new Date());
+                        goodsOrder.setPayOrderId(paymentNo);
+                        goodsOrder.setStatus(Constants.OrderStatus.PAY_DONE.getKey());
+                        //鐢熸垚鏍搁攢鐮�
+                        if(Constants.equalsInteger(goodsOrder.getReceiveType(),Constants.ONE)){
+                            goodsOrder.setExchangeCode(goodsorderService.createExchangeCode());
+                        }
+                        goodsOrder.setPayMethod(Constants.ZERO);
+                        goodsorderService.updateById(goodsOrder);
+                        if(Objects.nonNull(goodsOrder.getPickUpShopId())){
+                            //鍙戦�佺珯鍐呬俊 - 缁忛攢鍟�
+                            noticeService.orderPayNotice(goodsOrder.getPickUpShopId(),goodsOrder.getId(),goodsOrder.getReceiveType());
+                        }
+                        Fund fund = new Fund();
+                        fund.setOrderCode(goodsOrder.getPayOrderId());
+                        fund.setCreator(goodsOrder.getMemberId());
+                        fund.setCreateDate(new Date());
+                        fund.setIsdeleted(Constants.ZERO);
+                        fund.setRemark(goodsOrder.getCode().toString());
+                        fund.setMemberId(goodsOrder.getMemberId());
+                        fund.setTitle("璁㈠崟鏀粯");
+                        fund.setContent("璁㈠崟鏀粯");
+                        fund.setObjId(goodsOrder.getId());
+                        fund.setObjType(Constants.ONE);
+                        fund.setType(Constants.ZERO);
+                        fund.setNum(goodsOrder.getPrice());
+                        fundService.create(fund);
+                        break;
+                    }
+
+                }
+                return WxPayNotifyResponse.success("澶勭悊鎴愬姛!");
+            }
+            return WxPayNotifyResponse.fail(result.getReturnMsg());
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("寰俊鍥炶皟缁撴灉寮傚父,寮傚父鍘熷洜{}", e.getLocalizedMessage());
+            return WxPayNotifyResponse.fail(e.getMessage());
+        }
+    }
+
+
+
+}
diff --git a/server/web/src/main/java/com/doumee/api/web/UserApi.java b/server/web/src/main/java/com/doumee/api/web/UserApi.java
deleted file mode 100644
index 294fd91..0000000
--- a/server/web/src/main/java/com/doumee/api/web/UserApi.java
+++ /dev/null
@@ -1,162 +0,0 @@
-package com.doumee.api.web;
-
-import com.doumee.core.annotation.LoginRequired;
-import com.doumee.core.annotation.trace.Trace;
-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.business.model.Member;
-import com.doumee.dao.business.model.MemberRevenue;
-import com.doumee.dao.dto.WithdrawalDTO;
-import com.doumee.dao.dto.WxPhoneRequest;
-import com.doumee.dao.vo.AccountResponse;
-import com.doumee.dao.vo.UserCenterVO;
-import com.doumee.service.business.IdentityInfoService;
-import com.doumee.service.business.MemberService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
-import org.checkerframework.checker.units.qual.A;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * Created by IntelliJ IDEA.
- *
- * @Author : Rk
- * @create 2025/7/10 9:29
- */
-@Api(tags = "2銆佺敤鎴蜂俊鎭�")
-@Trace(exclude = true)
-@RestController
-@RequestMapping("/web/user")
-@Slf4j
-public class UserApi extends  ApiController{
-
-
-    @Autowired
-    private MemberService memberService;
-
-//    @Autowired
-//    private IdentityInfoService identityInfoService;
-
-//    @Autowired
-//    private MemberRevenueService memberRevenueService;
-//
-//    @Autowired
-//    private WithdrawalOrdersService withdrawalOrdersService;
-
-
-    @ApiOperation(value = "鑾峰彇绯荤粺閰嶇疆", notes = "灏忕▼搴忕")
-    @GetMapping("/getPlatformAboutUs")
-    public ApiResponse<UserCenterVO> getPlatformAboutUs() {
-        return  ApiResponse.success("鏌ヨ鎴愬姛",memberService.getPlatformAboutUs());
-    }
-
-
-    @LoginRequired
-    @ApiOperation(value = "鑾峰彇涓汉淇℃伅", notes = "灏忕▼搴忕")
-    @GetMapping("/getMemberInfo")
-    @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-    })
-    public ApiResponse<Member> getMemberInfo() {
-        return  ApiResponse.success("鏌ヨ鎴愬姛",memberService.getMemberInfo(getMemberId()));
-    }
-
-
-    @LoginRequired
-    @ApiOperation(value = "缂栬緫涓汉淇℃伅", notes = "灏忕▼搴忕")
-    @PostMapping("/editMemberInfo")
-    @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-    })
-    public ApiResponse editMemberInfo(@RequestBody Member member) {
-        member.setId(getMemberId());
-        memberService.editMemberInfo(member);
-        return  ApiResponse.success("鎿嶄綔鎴愬姛");
-    }
-
-//    @LoginRequired
-//    @ApiOperation(value = "鍒囨崲鐢ㄥ伐韬唤", notes = "灏忕▼搴忕")
-//    @PostMapping("/editUseIdentity")
-//    @ApiImplicitParams({
-//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-//    })
-//    public ApiResponse editUseIdentity(@RequestBody Member member) {
-//        member.setId(getMemberId());
-//        memberService.editUseIdentity(member);
-//        return  ApiResponse.success("鎿嶄綔鎴愬姛");
-//    }
-
-
-
-//    @LoginRequired
-//    @ApiOperation(value = "鑾峰彇韬唤璁よ瘉淇℃伅", notes = "灏忕▼搴忕")
-//    @GetMapping("/getIdentityInfo")
-//    @ApiImplicitParams({
-//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-//    })
-//    public ApiResponse<IdentityInfo> getIdentityInfo(@RequestParam Integer type) {
-//        return  ApiResponse.success("鏌ヨ鎴愬姛",identityInfoService.findByMemberType(type,getMemberId()));
-//    }
-
-
-//    @LoginRequired
-//    @ApiOperation(value = "鐢宠韬唤淇℃伅", notes = "灏忕▼搴忕")
-//    @PostMapping("/applyForIdentity")
-//    @ApiImplicitParams({
-//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-//    })
-//    public ApiResponse applyForIdentity(@RequestBody IdentityInfo identityInfo) {
-//        identityInfo.setMemberId(getMemberId());
-//        identityInfoService.create(identityInfo);
-//        return  ApiResponse.success("鎿嶄綔鎴愬姛");
-//    }
-
-
-
-//    @LoginRequired
-//    @ApiOperation(value = "淇敼韬唤淇℃伅锛堣璇佸け璐ュ悗浣跨敤锛�", notes = "灏忕▼搴忕")
-//    @PostMapping("/updateIdentity")
-//    @ApiImplicitParams({
-//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-//    })
-//    public ApiResponse updateIdentity(@RequestBody IdentityInfo identityInfo) {
-//        identityInfo.setMemberId(getMemberId());
-//        identityInfoService.updateById(identityInfo);
-//        return  ApiResponse.success("鎿嶄綔鎴愬姛");
-//    }
-
-
-//    @LoginRequired
-//    @ApiOperation(value = "淇敼韬唤淇℃伅浣嶇疆锛堣璇佹垚鍔熷悗浣跨敤锛�", notes = "灏忕▼搴忕")
-//    @PostMapping("/updateLocation")
-//    @ApiImplicitParams({
-//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-//    })
-//    public ApiResponse updateLocation(@RequestBody IdentityInfo identityInfo) {
-//        identityInfo.setMemberId(getMemberId());
-//        identityInfoService.updateLocation(identityInfo);
-//        return  ApiResponse.success("鎿嶄綔鎴愬姛");
-//    }
-
-//    @LoginRequired
-//    @ApiOperation("浣欓鏄庣粏")
-//    @PostMapping("/revenuePage")
-//    @ApiImplicitParams({
-//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-//    })
-//    public ApiResponse<PageData<MemberRevenue>> revenuePage (@RequestBody PageWrap<MemberRevenue> pageWrap) {
-//        pageWrap.getModel().setMemberId(this.getMemberId());
-//        return ApiResponse.success(memberRevenueService.findPage(pageWrap));
-//    }
-
-
-
-
-}

--
Gitblit v1.9.3