From 80fd41ea0dc602ac3ca33778f17fce5bc2e817b1 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期五, 16 一月 2026 18:58:33 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java           |  260 +++++
 server/dmmall_service/src/main/java/com/doumee/dao/web/dto/shop/ShopListDTO.java                    |   23 
 server/dmmall_service/src/main/java/com/doumee/dao/web/request/MemberBankSaveRequest.java           |   44 
 server/dmmall_service/src/main/java/com/doumee/config/annotation/LoginShopRequired.java             |   10 
 server/dmmall_admin/src/main/java/com/doumee/api/business/WithdrawRecordController.java             |   90 ++
 server/dmmall_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java                         |   67 +
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberBank.java                   |   74 +
 server/dmmall_service/db/business.member_bank.permissions.sql                                       |    6 
 server/dmmall_web/src/main/java/com/doumee/api/web/ApiController.java                               |   15 
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/WithdrawRecord.java               |  105 ++
 server/dmmall_service/src/main/java/com/doumee/dao/web/response/SaleReportOrderResponse.java        |   66 +
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java       |   86 +
 server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/MemberOrderResponse.java      |    9 
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java                   |    7 
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/Shop.java                         |    5 
 server/dmmall_service/db/business.withdraw_record.permissions.sql                                   |    6 
 server/dmmall_service/src/main/java/com/doumee/dao/web/request/WxPhoneRequest.java                  |    7 
 server/dmmall_service/src/main/java/com/doumee/dao/web/response/IntegralDataResponse.java           |   29 
 server/dmmall_service/src/main/java/com/doumee/service/business/WithdrawRecordService.java          |  106 ++
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java     |   72 +
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java   |    8 
 server/dmmall_service/src/main/java/com/doumee/dao/business/MemberBankMapper.java                   |   12 
 server/dmmall_service/src/main/java/com/doumee/dao/web/response/SaleReportResponse.java             |   35 
 server/dmmall_web/src/main/java/com/doumee/api/web/MemberBankApi.java                               |   57 +
 server/dmmall_web/src/main/java/com/doumee/api/web/ShopApi.java                                     |   52 +
 server/dmmall_web/src/main/java/com/doumee/api/web/mall/OrderApi.java                               |   56 
 server/dmmall_service/src/main/java/com/doumee/dao/web/dto/ShopLoginDTO.java                        |   23 
 server/dmmall_service/src/main/java/com/doumee/dao/web/request/ShopOrderRequest.java                |   24 
 server/dmmall_service/src/main/java/com/doumee/dao/web/request/MyCustomerRequest.java               |   22 
 server/dmmall_service/src/main/java/com/doumee/dao/web/response/MyCustomerResponse.java             |   35 
 server/dmmall_service/src/main/java/com/doumee/service/business/MemberBankService.java              |  103 ++
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java         |  219 +++-
 server/dmmall_web/src/main/java/com/doumee/api/web/AccountApi.java                                  |   21 
 server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java                  |    2 
 server/dmmall_web/src/main/java/com/doumee/api/web/mall/IntegralApi.java                            |   63 +
 server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java                            |   13 
 server/dmmall_service/src/main/java/com/doumee/dao/web/response/AccountResponse.java                |    2 
 server/dmmall_service/src/main/java/com/doumee/config/Jwt/JwtPayLoad.java                           |    6 
 server/dmmall_service/src/main/java/com/doumee/dao/web/response/ShopInfoResponse.java               |   71 +
 server/dmmall_service/src/main/java/com/doumee/dao/business/WithdrawRecordMapper.java               |   12 
 server/dmmall_admin/src/main/java/com/doumee/api/business/MemberBankController.java                 |   90 ++
 server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java              |   17 
 server/dmmall_service/src/main/java/com/doumee/service/business/IntegralService.java                |   19 
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/WithdrawRecordServiceImpl.java |  274 ++++++
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/Member.java                       |    6 
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberBankServiceImpl.java     |  207 ++++
 server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java                    |   58 +
 server/dmmall_service/src/main/java/com/doumee/dao/web/request/WithdrawApplyRequest.java            |   28 
 server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderMapper.java                   |    2 
 server/dmmall_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java                         |    8 
 server/dmmall_service/src/main/java/com/doumee/dao/web/dto/IntegralRecordDTO.java                   |   24 
 server/dmmall_service/src/main/java/com/doumee/dao/web/request/SaleReportRequest.java               |   28 
 52 files changed, 2,567 insertions(+), 117 deletions(-)

diff --git a/server/dmmall_admin/src/main/java/com/doumee/api/business/MemberBankController.java b/server/dmmall_admin/src/main/java/com/doumee/api/business/MemberBankController.java
new file mode 100644
index 0000000..c131968
--- /dev/null
+++ b/server/dmmall_admin/src/main/java/com/doumee/api/business/MemberBankController.java
@@ -0,0 +1,90 @@
+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.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.dao.business.model.MemberBank;
+import com.doumee.service.business.MemberBankService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2026/01/16 11:50
+ */
+@Api(tags = "鐢ㄦ埛鎻愮幇閾惰淇℃伅")
+@RestController
+@RequestMapping("/business/memberBank")
+public class MemberBankController extends BaseController {
+
+    @Autowired
+    private MemberBankService memberBankService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:memberbank:create")
+    public ApiResponse create(@RequestBody MemberBank memberBank) {
+        return ApiResponse.success(memberBankService.create(memberBank));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:memberbank:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        memberBankService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:memberbank: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));
+        }
+        memberBankService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:memberbank:update")
+    public ApiResponse updateById(@RequestBody MemberBank memberBank) {
+        memberBankService.updateById(memberBank);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:memberbank:query")
+    public ApiResponse<PageData<MemberBank>> findPage (@RequestBody PageWrap<MemberBank> pageWrap) {
+        return ApiResponse.success(memberBankService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:memberbank:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<MemberBank> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(MemberBank.class).export(memberBankService.findPage(pageWrap).getRecords(), "鐢ㄦ埛鎻愮幇閾惰淇℃伅", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:memberbank:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(memberBankService.findById(id));
+    }
+}
diff --git a/server/dmmall_admin/src/main/java/com/doumee/api/business/WithdrawRecordController.java b/server/dmmall_admin/src/main/java/com/doumee/api/business/WithdrawRecordController.java
new file mode 100644
index 0000000..bc6ae79
--- /dev/null
+++ b/server/dmmall_admin/src/main/java/com/doumee/api/business/WithdrawRecordController.java
@@ -0,0 +1,90 @@
+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.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.dao.business.model.WithdrawRecord;
+import com.doumee.service.business.WithdrawRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2026/01/16 11:50
+ */
+@Api(tags = "鐢ㄦ埛鎻愮幇璁板綍")
+@RestController
+@RequestMapping("/business/withdrawRecord")
+public class WithdrawRecordController extends BaseController {
+
+    @Autowired
+    private WithdrawRecordService withdrawRecordService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:withdrawrecord:create")
+    public ApiResponse create(@RequestBody WithdrawRecord withdrawRecord) {
+        return ApiResponse.success(withdrawRecordService.create(withdrawRecord));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:withdrawrecord:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        withdrawRecordService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:withdrawrecord: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));
+        }
+        withdrawRecordService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:withdrawrecord:update")
+    public ApiResponse updateById(@RequestBody WithdrawRecord withdrawRecord) {
+        withdrawRecordService.updateById(withdrawRecord);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:withdrawrecord:query")
+    public ApiResponse<PageData<WithdrawRecord>> findPage (@RequestBody PageWrap<WithdrawRecord> pageWrap) {
+        return ApiResponse.success(withdrawRecordService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:withdrawrecord:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<WithdrawRecord> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(WithdrawRecord.class).export(withdrawRecordService.findPage(pageWrap).getRecords(), "鐢ㄦ埛鎻愮幇璁板綍", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:withdrawrecord:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(withdrawRecordService.findById(id));
+    }
+}
diff --git a/server/dmmall_service/db/business.member_bank.permissions.sql b/server/dmmall_service/db/business.member_bank.permissions.sql
new file mode 100644
index 0000000..27d73e4
--- /dev/null
+++ b/server/dmmall_service/db/business.member_bank.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:memberbank:create', '鏂板缓鐢ㄦ埛鎻愮幇閾惰淇℃伅', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:memberbank:delete', '鍒犻櫎鐢ㄦ埛鎻愮幇閾惰淇℃伅', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:memberbank:update', '淇敼鐢ㄦ埛鎻愮幇閾惰淇℃伅', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:memberbank:query', '鏌ヨ鐢ㄦ埛鎻愮幇閾惰淇℃伅', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:memberbank:exportExcel', '瀵煎嚭鐢ㄦ埛鎻愮幇閾惰淇℃伅(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/dmmall_service/db/business.withdraw_record.permissions.sql b/server/dmmall_service/db/business.withdraw_record.permissions.sql
new file mode 100644
index 0000000..ef80ef7
--- /dev/null
+++ b/server/dmmall_service/db/business.withdraw_record.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:withdrawrecord:create', '鏂板缓鐢ㄦ埛鎻愮幇璁板綍', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:withdrawrecord:delete', '鍒犻櫎鐢ㄦ埛鎻愮幇璁板綍', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:withdrawrecord:update', '淇敼鐢ㄦ埛鎻愮幇璁板綍', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:withdrawrecord:query', '鏌ヨ鐢ㄦ埛鎻愮幇璁板綍', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:withdrawrecord:exportExcel', '瀵煎嚭鐢ㄦ埛鎻愮幇璁板綍(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/dmmall_service/src/main/java/com/doumee/config/Jwt/JwtPayLoad.java b/server/dmmall_service/src/main/java/com/doumee/config/Jwt/JwtPayLoad.java
index 065a6cd..2567497 100644
--- a/server/dmmall_service/src/main/java/com/doumee/config/Jwt/JwtPayLoad.java
+++ b/server/dmmall_service/src/main/java/com/doumee/config/Jwt/JwtPayLoad.java
@@ -18,14 +18,14 @@
     /**
      * 鐢ㄦ埛id
      */
-    private Integer memberId;
+    private String memberId;
     private long expire;
 
 
     public JwtPayLoad() {
     }
 
-    public JwtPayLoad(Integer memberId) {
+    public JwtPayLoad(String memberId) {
         this.memberId = memberId;
     }
 
@@ -52,7 +52,7 @@
             return new JwtPayLoad();
         } else {
             JwtPayLoad jwtPayLoad = new JwtPayLoad();
-            jwtPayLoad.setMemberId((Integer) map.get("memberId"));
+            jwtPayLoad.setMemberId(map.get("memberId").toString());
 
             return jwtPayLoad;
         }
diff --git a/server/dmmall_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java b/server/dmmall_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
index e368861..a94a60c 100644
--- a/server/dmmall_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
+++ b/server/dmmall_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
@@ -43,6 +43,8 @@
     public static final String HEADER_KEY = "token";
     //鍙栧�煎悕绉�
     public static final String UserId_Name = "AppUserId";
+    //鍙栧�煎悕绉�
+    public static final String ShopId_Name = "AppShopId";
     //鍔犲瘑瀵嗛挜
     private final static String jwtSecret = "MhAjU9poLf8ko54K25XBDtonaL33vtt1";
     //杩囨湡鏃堕棿(s) 86400L=1澶� 604800L=7澶�
@@ -126,14 +128,14 @@
     /**
      * 鐢熸垚token,鏍规嵁userId鍜岃繃鏈熸椂闂�
      */
-    public static String generateToken(Integer userId, Date exppiredDate, Map<String, Object> claims) {
+    public static String generateToken(String userId, Date exppiredDate, Map<String, Object> claims) {
 
         final Date createdDate = new Date();
         String secret = getJwtSecret();
 
         if (claims == null) {
             return Jwts.builder()
-                    .setSubject(userId.toString())
+                    .setSubject(userId)
                     .setIssuedAt(createdDate)
                     .setExpiration(exppiredDate)
                     .signWith(SignatureAlgorithm.HS512, secret)
@@ -141,7 +143,7 @@
         } else {
             return Jwts.builder()
                     .setClaims(claims)
-                    .setSubject(userId.toString())
+                    .setSubject(userId)
                     .setIssuedAt(createdDate)
                     .setExpiration(exppiredDate)
                     .signWith(SignatureAlgorithm.HS512, secret)
diff --git a/server/dmmall_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java b/server/dmmall_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
index a5a63da..1f557b2 100644
--- a/server/dmmall_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
+++ b/server/dmmall_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
@@ -1,6 +1,7 @@
 package com.doumee.config.Jwt;
 
 import com.doumee.config.annotation.LoginRequired;
+import com.doumee.config.annotation.LoginShopRequired;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.utils.Constants;
@@ -51,7 +52,7 @@
                     //鑾峰彇token
                     String token = request.getHeader(JwtTokenUtil.HEADER_KEY);  // 浠� http 璇锋眰澶翠腑鍙栧嚭 token
                     if (StringUtils.isNotBlank(token)) {
-                        checkLogin(request,response);
+                        checkMemberLogin(request,response);
                     } else {
                         throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鏈櫥褰�");
                     }
@@ -59,11 +60,29 @@
                     //鑾峰彇token
                     String token = request.getHeader(JwtTokenUtil.HEADER_KEY);  // 浠� http 璇锋眰澶翠腑鍙栧嚭 token
                     if (StringUtils.isNotBlank(token)) {
-                        checkLogin(request,response);
+                        checkMemberLogin(request,response);
+                    } else {
+                        throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鏈櫥褰�");
+                    }
+                }else if (beanType.isAnnotationPresent(LoginShopRequired.class)) {
+                    //鑾峰彇token
+                    String token = request.getHeader(JwtTokenUtil.HEADER_KEY);  // 浠� http 璇锋眰澶翠腑鍙栧嚭 token
+                    if (StringUtils.isNotBlank(token)) {
+                        checkShopLogin(request,response);
+                    } else {
+                        throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鏈櫥褰�");
+                    }
+                }else if (handlerMethod.hasMethodAnnotation(LoginShopRequired.class)){
+                    //鑾峰彇token
+                    String token = request.getHeader(JwtTokenUtil.HEADER_KEY);  // 浠� http 璇锋眰澶翠腑鍙栧嚭 token
+                    if (StringUtils.isNotBlank(token)) {
+                        checkShopLogin(request,response);
                     } else {
                         throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鏈櫥褰�");
                     }
                 }
+
+
                 return true;
             }
         };
@@ -72,7 +91,7 @@
 
 
 
-    public Boolean checkLogin(HttpServletRequest request, HttpServletResponse response){
+    public Boolean checkMemberLogin(HttpServletRequest request, HttpServletResponse response){
         String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
         try {
             //鍒ゆ柇Token鏄惁瓒呮椂
@@ -81,7 +100,11 @@
                 throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME.getCode(),"闀挎椂闂存湭鎿嶄綔,璇烽噸鏂扮櫥褰�");
             }
             //鑾峰彇璐﹀彿ID
-            Integer memberId = JwtTokenUtil.getJwtPayLoad(token).getMemberId();
+            String memberIdInfo = JwtTokenUtil.getJwtPayLoad(token).getMemberId();
+            if(StringUtils.isBlank(memberIdInfo)||!memberIdInfo.startsWith(Constants.MEMBER_PREFIX)){
+                throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鐢ㄦ埛淇℃伅鍑洪敊");
+            }
+            Integer memberId = Integer.valueOf(memberIdInfo.replace(Constants.MEMBER_PREFIX,""));
             Integer isDeleted = dao.queryForObject(" select COALESCE(ISDELETED,0)  from Member where id  = ?", Integer.class, memberId);
             if(isDeleted== Constants.ONE){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸插垹闄�,璇疯仈绯荤鐞嗗憳");
@@ -102,6 +125,42 @@
         }
     }
 
+
+    public Boolean checkShopLogin(HttpServletRequest request, HttpServletResponse response){
+        String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
+        try {
+            //鍒ゆ柇Token鏄惁瓒呮椂
+            boolean expiration = JwtTokenUtil.isTokenExpired(token);
+            if (expiration) {
+                throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME.getCode(),"闀挎椂闂存湭鎿嶄綔,璇烽噸鏂扮櫥褰�");
+            }
+            //鑾峰彇璐﹀彿ID
+            String shopInfo = JwtTokenUtil.getJwtPayLoad(token).getMemberId();
+            if(StringUtils.isBlank(shopInfo)||!shopInfo.startsWith(Constants.SHOP_PREFIX)){
+                throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鐢ㄦ埛淇℃伅鍑洪敊");
+            }
+            Integer shopId = Integer.valueOf(shopInfo.replace(Constants.SHOP_PREFIX,""));
+            Integer isDeleted = dao.queryForObject(" select COALESCE(ISDELETED,0)  from shop where id  = ?", Integer.class, shopId);
+            if(isDeleted== Constants.ONE){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸插垹闄�,璇疯仈绯荤鐞嗗憳");
+            }
+            Integer isForbidden = dao.queryForObject(" select COALESCE(STATUS,0)  from shop where id  = ?", Integer.class, shopId);
+            if(isForbidden== Constants.ONE){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸茬鐢�,璇疯仈绯荤鐞嗗憳");
+            }
+            Integer count = dao.queryForObject("select count(1) from shop where id  = ?", Integer.class, shopId);
+            if (count != null && count > 0) {
+                request.setAttribute(JwtTokenUtil.ShopId_Name, shopId);
+                return true;
+            }else{
+                throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鐢ㄦ埛淇℃伅鍑洪敊");
+            }
+        } catch (IllegalArgumentException | JwtException e) {
+            throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鏈櫥褰�");
+        }
+    }
+
+
     @Bean
     public RestTemplate getRestTemplate(){
         return new RestTemplate();
diff --git a/server/dmmall_service/src/main/java/com/doumee/config/annotation/LoginShopRequired.java b/server/dmmall_service/src/main/java/com/doumee/config/annotation/LoginShopRequired.java
new file mode 100644
index 0000000..d4b5187
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/config/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/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java b/server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java
index b2cb97c..67eb4b5 100644
--- a/server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -42,6 +42,9 @@
     public static final String ORDER_SET ="ORDER_SET" ;
     public static final String INTEGRAL_SET ="INTEGRAL_SET" ;
 
+    public static final String MEMBER_PREFIX  = "member_";
+    public static final String SHOP_PREFIX  = "shop_";
+
     /**
      * mq tag
      */
@@ -128,11 +131,14 @@
 
     public static final String COFFEE_ARTICLE_BACKGROUND = "COFFEE_ARTICLE_BACKGROUND";
 
+    public static final String TRANSFER_FILE = "TRANSFER_FILE";
+
 
     public interface RedisKeys {
         public static final String GOODSORDER_KEY = "ordercode_";
         public static final String ACTIVITY_SIGN_KEY = "actcode_";
         public static final String AFTERSALE_KEY = "salecode_";
+        public static final String WITHDRAW_KEY = "withdraw_";
     }
     /**
      * 浼佷笟鏁版嵁鏉ユ簮 0骞冲彴娉ㄥ唽 1鍚庡彴瀵煎叆
@@ -326,6 +332,7 @@
         SHOP_PICTURE(7, "鍟嗗鍥剧墖澶氬浘", "鍟嗗鍥剧墖澶氬浘"),
         AFTERSALE_APPLY(8, "鐢宠鍞悗琛ュ厖璇存槑闄勪欢", "鐢宠鍞悗琛ュ厖璇存槑闄勪欢"),
         AFTERSALE_KD(9, "鐢宠鍞悗閭瘎璇存槑闄勪欢", "鐢宠鍞悗閭瘎璇存槑闄勪欢"),
+        TRANSFER_FILE(10, "鎵撴鍑瘉", "鎵撴鍑瘉"),
         ;
         // 鎴愬憳鍙橀噺
         private String name;
@@ -867,7 +874,11 @@
         ORDER_DONATE(15,"璁㈠崟璧犻�佺Н鍒�","璁㈠崟璧犻�佺Н鍒�",0),
         ORDER_DONE_AMOUNT(16,"璁㈠崟缁撶畻閲戦","璁㈠崟缁撶畻閲戦",0),
 
-        SHOP_ORDER_SETTLEMENT(16,"涓嬪崟缁撶畻閲戦","涓嬪崟缁撶畻閲戦",0), //缁忛攢鍟嗕笅鍗曠粨绠楅噾棰�
+        WITHDRAW_APPLY(17,"浣欓鎻愮幇","浣欓鎻愮幇",0), //缁忛攢鍟嗕笅鍗曠粨绠楅噾棰�
+
+
+
+
         SHOP_ORDER_CANCEL_SETTLEMENT(17,"鍙栨秷璁㈠崟缁撶畻閲戦杩旇繕","鍙栨秷璁㈠崟缁撶畻閲戦杩旇繕",0), //鍙栨秷璁㈠崟缁撶畻閲戦杩旇繕
         SHOP_YEAR_SETTLEMENT(18,"骞村害缁撶畻","骞村害缁撶畻",0) //骞村害缁撶畻
         ;
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderMapper.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderMapper.java
index af4c3a6..d031664 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderMapper.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderMapper.java
@@ -30,7 +30,7 @@
     IPage<MemberOrderResponse> goodsOrderPage(IPage<MemberOrderResponse> page, @Param(Constants.WRAPPER) Wrapper wrapper);
 
 
-    @Select(" select g.CODE AS code ,  g.id as orderId , g.CREATE_DATE as createDate    , g.TYPE as orderType , g.STATUS as orderStatus , g.IS_COMMENT as isComment , g.PAY_STATUS as  payStatus ," +
+    @Select(" select g.CODE AS code , g.remark as remark ,  g.id as orderId , g.MEMBER_ID as memberId , g.CREATE_DATE as createDate    , g.TYPE as orderType , g.STATUS as orderStatus , g.IS_COMMENT as isComment , g.PAY_STATUS as  payStatus ," +
             " g.COUPON_PRICE as couponPrice , g.price , g.LINKNAME  as linkName , g.LINKPHONE as linkPhone , g.LINKADDR as linkAddress , " +
             "g.KD_DATE as kdDate , g.KD_NAME as kdName  , g.KD_CODE as kdCode , g.INTEGRAL_PRICE as integral , SUBDATE(g.CREATE_DATE,interval - 15 minute) as cancelDate , g.PAY_DATE AS payDate , g.DONE_DATE as doneDate " +
             " , g.MEMBER_INFO , g.RECEIVE_TYPE as receiveType, s.name as shopName ,s.id as shopId,g.exchange_code as exchangeCode " +
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/MemberBankMapper.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/MemberBankMapper.java
new file mode 100644
index 0000000..33ae018
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/MemberBankMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.MemberBank;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2026/01/16 11:50
+ */
+public interface MemberBankMapper extends BaseMapper<MemberBank> {
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/WithdrawRecordMapper.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/WithdrawRecordMapper.java
new file mode 100644
index 0000000..9e7c199
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/WithdrawRecordMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.WithdrawRecord;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2026/01/16 11:50
+ */
+public interface WithdrawRecordMapper extends BaseMapper<WithdrawRecord> {
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java
index 1d9befb..0d60570 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java
@@ -224,6 +224,9 @@
     @ApiModelProperty(value = "鐢佃瘽")
     @TableField(exist = false)
     private String phone;
+    @ApiModelProperty(value = "澶村儚淇℃伅")
+    @TableField(exist = false)
+    private String imgurl;
 
     @ApiModelProperty(value = "鏀惰揣鍦板潃")
     @TableField(exist = false)
@@ -263,4 +266,8 @@
     @TableField(exist = false)
     private String everyDay;
 
+    @ApiModelProperty(value = "璁㈠崟缁撶畻閲戦")
+    @TableField(exist = false)
+    private BigDecimal shopSettlement;
+
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Member.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Member.java
index 4a5c6f2..aafedd4 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -151,6 +151,9 @@
     @ApiModelProperty(value = "缁戝畾鍟嗛摵涓婚敭 shop:id 鍒嗛攢浜�")
     private Integer bindShopId;
 
+    @ApiModelProperty(value = "缁戝畾鏃堕棿")
+    private Date bindShopDate;
+
     @ApiModelProperty(value = "鏂囦欢鍦板潃鍏ㄨ矾寰�")
     @TableField(exist = false)
     private String imgFullUrl;
@@ -170,4 +173,7 @@
     @TableField(exist = false)
     private Date endtime;
 
+
+
+
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberBank.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberBank.java
new file mode 100644
index 0000000..255a3b5
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberBank.java
@@ -0,0 +1,74 @@
+package com.doumee.dao.business.model;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 鐢ㄦ埛鎻愮幇閾惰淇℃伅
+ * @author 姹熻箘韫�
+ * @date 2026/01/16 11:50
+ */
+@Data
+@ApiModel("鐢ㄦ埛鎻愮幇閾惰淇℃伅")
+@TableName("`member_bank`")
+public class MemberBank {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    @ExcelColumn(name="涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private Integer creator;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    private Integer editor;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @ExcelColumn(name="鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date editDate;
+
+    @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "閾惰鍚嶇О")
+    @ExcelColumn(name="閾惰鍚嶇О")
+    private String bankName;
+
+    @ApiModelProperty(value = "閾惰璐︽埛")
+    @ExcelColumn(name="閾惰璐︽埛")
+    private String bankAccount;
+
+    @ApiModelProperty(value = "寮�鎴蜂汉濮撳悕")
+    @ExcelColumn(name="寮�鎴蜂汉濮撳悕")
+    private String name;
+
+    @ApiModelProperty(value = "鐢ㄦ埛涓婚敭锛堝叧鑱攎ember琛級", example = "1")
+    @ExcelColumn(name="鐢ㄦ埛涓婚敭锛堝叧鑱攎ember琛級")
+    private Integer memberId;
+
+    @ApiModelProperty(value = "鏄惁榛樿 0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁榛樿 0鍚� 1鏄�")
+    private Integer isDefault;
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Shop.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Shop.java
index ee9dd3f..91eaecf 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Shop.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Shop.java
@@ -87,6 +87,9 @@
     @ApiModelProperty(value = "娉曚汉鐢佃瘽")
     @ExcelColumn(name="娉曚汉鐢佃瘽")
     private String legalPersonPhone;
+    @ApiModelProperty(value = "寰俊openId")
+    @ExcelColumn(name="寰俊openId")
+    private String openId;
 
     @ApiModelProperty(value = "韬唤璇佸弽闈㈢収")
     @ExcelColumn(name="韬唤璇佸弽闈㈢収")
@@ -123,7 +126,7 @@
     @ExcelColumn(name="绉垎绱")
     private BigDecimal totalIntegral;
 
-    @ApiModelProperty(value = "鍙彁鎴愰噾棰�")
+    @ApiModelProperty(value = "鍙彁鐜伴噾棰�")
     @ExcelColumn(name="鍙彁鎴愰噾棰�")
     private BigDecimal amount;
 
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/WithdrawRecord.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/WithdrawRecord.java
new file mode 100644
index 0000000..65c0c87
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/WithdrawRecord.java
@@ -0,0 +1,105 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛鎻愮幇璁板綍
+ * @author 姹熻箘韫�
+ * @date 2026/01/16 11:50
+ */
+@Data
+@ApiModel("鐢ㄦ埛鎻愮幇璁板綍")
+@TableName("`withdraw_record`")
+public class WithdrawRecord {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    @ExcelColumn(name="涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private Integer creator;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    private Integer editor;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @ExcelColumn(name="鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date editDate;
+
+    @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "鐢ㄦ埛涓婚敭锛堝叧鑱攎ember琛級", example = "1")
+    @ExcelColumn(name="鐢ㄦ埛涓婚敭锛堝叧鑱攎ember琛級")
+    private Integer memberId;
+
+    @ApiModelProperty(value = "娴佹按鍙�", example = "1")
+    @ExcelColumn(name="娴佹按鍙�")
+    private Long code;
+
+    @ApiModelProperty(value = "鎻愮幇閲戦", example = "1")
+    @ExcelColumn(name="鎻愮幇閲戦")
+    private BigDecimal amount;
+
+
+
+    @ApiModelProperty(value = "閾惰涓婚敭锛堝叧鑱� member_bank 琛級", example = "1")
+    @ExcelColumn(name="閾惰涓婚敭锛堝叧鑱� member_bank 琛級")
+    private Integer bankId;
+
+    @ApiModelProperty(value = "鐘舵�侊細0=寰呭鎵癸紱1=瀹℃壒閫氳繃锛�2=瀹℃壒椹冲洖", example = "1")
+    @ExcelColumn(name="鐘舵�侊細0=寰呭鎵癸紱1=瀹℃壒閫氳繃锛�2=瀹℃壒椹冲洖")
+    private Integer status;
+
+    @ApiModelProperty(value = "瀹℃壒浜轰富閿�", example = "1")
+    @ExcelColumn(name="瀹℃壒浜轰富閿�")
+    private Integer auditUser;
+
+    @ApiModelProperty(value = "瀹℃壒鏃堕棿")
+    @ExcelColumn(name="瀹℃壒鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date auditTime;
+
+    @ApiModelProperty(value = "瀹℃壒澶囨敞")
+    @ExcelColumn(name="瀹℃壒澶囨敞")
+    private String auditRemark;
+
+    @ApiModelProperty(value = "鎵撴閾惰")
+    @ExcelColumn(name="鎵撴閾惰")
+    private String payBank;
+
+    @ApiModelProperty(value = "鎻愮幇閾惰鍚嶇О", example = "1")
+    @TableField(exist = false)
+    private String bankName;
+
+    @ApiModelProperty(value = "鎵撴鍑瘉", example = "1")
+    @TableField(exist = false)
+    private List<Multifile> payFileList;
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/dto/IntegralRecordDTO.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/dto/IntegralRecordDTO.java
new file mode 100644
index 0000000..bdc012c
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/dto/IntegralRecordDTO.java
@@ -0,0 +1,24 @@
+package com.doumee.dao.web.dto;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel("绉垎鏄庣粏鏌ヨ璇锋眰绫�")
+public class IntegralRecordDTO {
+
+    @ApiModelProperty(value = "鏀舵敮绫诲瀷 0鏀跺叆 1鏀嚭")
+    private Integer type;
+
+    @ApiModelProperty(value = "鏁版嵁绫诲瀷锛�0=娑堣垂鑰呯Н鍒嗭紱1=缁忛攢鍟嗙Н鍒嗭紱2=缁忛攢鍟嗙粨绠楅噾棰濓紱")
+    private Integer userType;
+
+    @ApiModelProperty(value = "鐢ㄦ埛涓婚敭鎴栧晢鎴蜂富閿�")
+    private Integer memberId;
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/dto/ShopLoginDTO.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/dto/ShopLoginDTO.java
new file mode 100644
index 0000000..8a4e3bc
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/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/dmmall_service/src/main/java/com/doumee/dao/web/dto/shop/ShopListDTO.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/dto/shop/ShopListDTO.java
new file mode 100644
index 0000000..83d3526
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/dto/shop/ShopListDTO.java
@@ -0,0 +1,23 @@
+package com.doumee.dao.web.dto.shop;
+
+import com.doumee.dao.web.dto.MultiFileDTO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@ApiModel("灏忕▼搴� 閫夋嫨鍟嗘埛璇锋眰绫�")
+public class ShopListDTO {
+
+    @ApiModelProperty(value = "鍩庡競涓婚敭", example = "1")
+    private Integer cityId;
+    @ApiModelProperty(value = "瀹氫綅缁村害", example = "1")
+    private String lat;
+    @ApiModelProperty(value = "瀹氫綅缁忓害", example = "1")
+    private String lgt;
+    @ApiModelProperty(value = "搴楅摵鍚嶇О", example = "1")
+    private String shopName;
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/MemberBankSaveRequest.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/MemberBankSaveRequest.java
new file mode 100644
index 0000000..af9e6db
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/MemberBankSaveRequest.java
@@ -0,0 +1,44 @@
+package com.doumee.dao.web.request;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+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;
+
+/**
+ * 鐢ㄦ埛鎻愮幇閾惰淇℃伅
+ * @author 姹熻箘韫�
+ * @date 2026/01/16 11:50
+ */
+@Data
+@ApiModel("鐢ㄦ埛鎻愮幇閾惰淇℃伅淇濆瓨璇锋眰绫�")
+public class MemberBankSaveRequest {
+
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    private Integer id;
+
+    @ApiModelProperty(value = "閾惰鍚嶇О")
+    private String bankName;
+
+    @ApiModelProperty(value = "閾惰璐︽埛")
+    private String bankAccount;
+
+    @ApiModelProperty(value = "寮�鎴蜂汉濮撳悕")
+    private String name;
+
+    @ApiModelProperty(value = "鏄惁榛樿 0鍚� 1鏄�", example = "1")
+    private Integer isDefault;
+
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "鐢ㄦ埛涓婚敭", example = "1")
+    private Integer memberId;
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/MyCustomerRequest.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/MyCustomerRequest.java
new file mode 100644
index 0000000..1ab8f33
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/MyCustomerRequest.java
@@ -0,0 +1,22 @@
+package com.doumee.dao.web.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 9:50
+ */
+@Data
+@ApiModel("鎴戠殑瀹㈡埛璇锋眰绫�")
+public class MyCustomerRequest {
+
+
+    @ApiModelProperty(value = "鐢ㄦ埛鏄电О銆佹墜鏈哄彿")
+    private String memberIfo;
+
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/SaleReportRequest.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/SaleReportRequest.java
new file mode 100644
index 0000000..71799a0
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/SaleReportRequest.java
@@ -0,0 +1,28 @@
+package com.doumee.dao.web.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 9:50
+ */
+@Data
+@ApiModel("鎴戠殑閿�鍞姤琛ㄨ姹傜被")
+public class SaleReportRequest {
+
+    @ApiModelProperty(value = "鏃ユ湡绫诲瀷锛�0=浠婃棩锛�1=鏈湀锛�2=涓婃湀锛�3=鍥哄畾鏈堜唤锛�4=鑷畾涔夋棩鏈�")
+    private Integer dateType;
+
+    @ApiModelProperty(value = "寮�濮嬫棩鏈� yyyy-MM-dd dateType = 3 銆� 4浣跨敤")
+    private String startDate;
+
+    @ApiModelProperty(value = "缁撴潫鏃ユ湡 yyyy-MM-dd dateType =  4浣跨敤")
+    private String endDate;
+
+    @ApiModelProperty(value = "鏄惁鏌ヨ璇︽儏锛�0=鍚︼紱1=鏄紱")
+    private Integer queryType;
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/ShopOrderRequest.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/ShopOrderRequest.java
new file mode 100644
index 0000000..15e7229
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/ShopOrderRequest.java
@@ -0,0 +1,24 @@
+package com.doumee.dao.web.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 9:50
+ */
+@Data
+@ApiModel("鎴戠殑閿�鍞姤琛ㄨ姹傜被")
+public class ShopOrderRequest {
+
+    @ApiModelProperty(value = "璁㈠崟鐘舵�侊細鐘舵�� 0寰呮敮浠� 1寰呭彂璐� 2寰呮敹璐� 3浜ゆ槗瀹屾垚 4宸插叧闂� 5閮ㄥ垎鍙戣揣")
+    private Integer status;
+
+    @ApiModelProperty(value = "缁忛攢鍟嗕富閿�")
+    private Integer shopId;
+
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/WithdrawApplyRequest.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/WithdrawApplyRequest.java
new file mode 100644
index 0000000..daed3dc
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/WithdrawApplyRequest.java
@@ -0,0 +1,28 @@
+package com.doumee.dao.web.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 鐢ㄦ埛鎻愮幇閾惰淇℃伅
+ * @author 姹熻箘韫�
+ * @date 2026/01/16 11:50
+ */
+@Data
+@ApiModel("鐢ㄦ埛鎻愮幇璇锋眰绫�")
+public class WithdrawApplyRequest {
+
+
+    @ApiModelProperty(value = "鎻愮幇閾惰涓婚敭")
+    private Integer bankId;
+
+    @ApiModelProperty(value = "鎻愮幇閲戦")
+    private BigDecimal amount;
+
+    @ApiModelProperty(value = "鐢ㄦ埛涓婚敭锛堝叧鑱攕hop琛ㄤ富閿級", example = "1")
+    private Integer memberId;
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/WxPhoneRequest.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/WxPhoneRequest.java
index ee29f01..9d90da6 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/WxPhoneRequest.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/WxPhoneRequest.java
@@ -30,6 +30,11 @@
     @ApiModelProperty(value = "sessionKey")
     private String sessionKey;
 
-    private Integer memberId;
+    @NotEmpty(message = "openid 涓嶈兘涓虹┖")
+    @ApiModelProperty(value = "openid")
+    private String openid;
+
+    @ApiModelProperty(value = "閭�璇风爜")
+    private Integer recId;
 
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/response/AccountResponse.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/AccountResponse.java
index b37b8b2..eb44069 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/web/response/AccountResponse.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/AccountResponse.java
@@ -26,5 +26,7 @@
     @ApiModelProperty(value = "鐢ㄦ埛淇℃伅")
     private Member member;
 
+    @ApiModelProperty(value = "鐢ㄦ埛openid")
+    private String openid;
 
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/response/IntegralDataResponse.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/IntegralDataResponse.java
new file mode 100644
index 0000000..a1461b9
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/IntegralDataResponse.java
@@ -0,0 +1,29 @@
+package com.doumee.dao.web.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 10:56
+ */
+@Data
+@ApiModel("绉垎鎯呭喌杩斿洖绫�")
+public class IntegralDataResponse {
+
+
+    @ApiModelProperty(value = "鍓╀綑鍙敤绉垎")
+    private BigDecimal surplusIntegral;
+
+    @ApiModelProperty(value = "鍗冲皢杩囨湡绉垎")
+    private BigDecimal  expiredIntegral;
+
+    @ApiModelProperty(value = "绉垎璇存槑")
+    private String info;
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/response/MyCustomerResponse.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/MyCustomerResponse.java
new file mode 100644
index 0000000..9b78979
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/MyCustomerResponse.java
@@ -0,0 +1,35 @@
+package com.doumee.dao.web.response;
+
+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;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 9:50
+ */
+@Data
+@ApiModel("鎴戠殑瀹㈡埛璇锋眰绫�")
+public class MyCustomerResponse {
+
+    @ApiModelProperty(value = "鐢ㄦ埛澶村儚")
+    private String imgFullUrl;
+
+    @ApiModelProperty(value = "鐢ㄦ埛鏄电О")
+    private String nickName;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�")
+    private String phone;
+
+    @ApiModelProperty(value = "缁戝畾鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date bindShopDate;
+
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/response/SaleReportOrderResponse.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/SaleReportOrderResponse.java
new file mode 100644
index 0000000..071e06b
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/SaleReportOrderResponse.java
@@ -0,0 +1,66 @@
+package com.doumee.dao.web.response;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.dao.business.model.GoodsorderDetail;
+import com.doumee.dao.business.model.PlanorderDetail;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 9:50
+ */
+@Data
+@ApiModel("閿�鍞姤琛ㄨ鍗曟槑缁嗚姹傝繑鍥炰俊鎭�")
+public class SaleReportOrderResponse {
+
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    private Integer id;
+
+    @ApiModelProperty(value = "璁㈠崟瀹炰粯浠锋牸锛堝厓/鍜栬眴锛�", example = "1")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "閭垂閲戦", example = "1")
+    private BigDecimal mailPrice;
+
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private Date createDate;
+
+    @ApiModelProperty(value = "璁㈠崟缂栧彿", example = "1")
+    private Long code;
+
+
+    @ApiModelProperty(value = "鏀惰揣绫诲瀷锛�0=蹇�掗厤閫侊紱1=闂ㄥ簵鑷彁锛�", example = "1")
+    private Integer receiveType;
+
+    @ApiModelProperty(value = "鍞悗宸查��娆鹃噾棰�", example = "1")
+    private BigDecimal aftersaleMoney;
+
+
+    @ApiModelProperty(value = "鐘舵�� 0寰呮敮浠� 1寰呭彂璐� 2寰呮敹璐� 3浜ゆ槗瀹屾垚 4宸插叧闂� 5閮ㄥ垎鍙戣揣", example = "1")
+    private Integer status;
+
+    @ApiModelProperty(value = "鏄电О")
+    private String nickName;
+
+    @ApiModelProperty(value = "鐢佃瘽")
+    private String phone;
+
+    @ApiModelProperty(value = "璁㈠崟缁撶畻閲戦")
+    private BigDecimal shopSettlement;
+
+
+
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/response/SaleReportResponse.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/SaleReportResponse.java
new file mode 100644
index 0000000..9e554f5
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/SaleReportResponse.java
@@ -0,0 +1,35 @@
+package com.doumee.dao.web.response;
+
+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;
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 9:50
+ */
+@Data
+@ApiModel("閿�鍞姤琛ㄨ姹傝繑鍥炰俊鎭�")
+public class SaleReportResponse {
+
+    @ApiModelProperty(value = "閿�鍞")
+    private BigDecimal saleTotal;
+
+    @ApiModelProperty(value = "璁㈠崟鏁伴噺")
+    private Integer orderNum;
+
+    @ApiModelProperty(value = "缁撶畻鍒╂鼎棰�")
+    private BigDecimal profitTotal;
+
+
+    @ApiModelProperty(value ="璁㈠崟鍒楄〃")
+    private List<SaleReportOrderResponse> saleReportOrderResponseList;
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/response/ShopInfoResponse.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/ShopInfoResponse.java
new file mode 100644
index 0000000..d0f65ae
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/ShopInfoResponse.java
@@ -0,0 +1,71 @@
+package com.doumee.dao.web.response;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.dao.business.model.Areas;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 10:56
+ */
+@Data
+@ApiModel("鍟嗘埛淇℃伅鏌ヨ杩斿洖绫�")
+public class ShopInfoResponse {
+
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    private Integer id;
+
+    @ApiModelProperty(value = "闂ㄥご鐓�")
+    private String imgurl;
+
+    @ApiModelProperty(value = "搴楅摵鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "鐪熷疄濮撳悕")
+    private String realname;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�")
+    private String phone;
+
+    @ApiModelProperty(value = "钀ヤ笟寮�濮嬫椂闂�")
+    private String startTime;
+
+    @ApiModelProperty(value = "鍦板潃")
+    private String addr;
+
+    @ApiModelProperty(value = "鍟嗗缂栫爜")
+    private String code;
+
+    @ApiModelProperty(value = "绉垎浣欓")
+    private BigDecimal integral;
+
+    @ApiModelProperty(value = "钀ヤ笟鎵х収")
+    private String businessImg;
+
+    @ApiModelProperty(value = "韬唤璇佹闈㈢収")
+    private String idcardImg;
+
+    @ApiModelProperty(value = "韬唤璇佸弽闈㈢収")
+    @ExcelColumn(name="韬唤璇佸弽闈㈢収")
+    private String idcardImgBack;
+
+    @ApiModelProperty(value = "閿�鍞ā寮� 0骞冲彴閾鸿揣 1鑷富閲囪喘")
+    private Integer saleType;
+
+    @ApiModelProperty(value = "娉曚汉濮撳悕")
+    private String legalPersonName;
+
+    @ApiModelProperty(value = "娉曚汉鐢佃瘽")
+    private String legalPersonPhone;
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/MemberOrderResponse.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/MemberOrderResponse.java
index efb7ddb..a076e15 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/MemberOrderResponse.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/MemberOrderResponse.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.web.response.goods;
 
+import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.MemberCoupon;
 import com.doumee.dao.business.model.Shop;
 import io.swagger.annotations.ApiModel;
@@ -22,6 +23,9 @@
 
     @ApiModelProperty(value = "璁㈠崟涓婚敭", example = "1")
     private Integer orderId;
+
+    @ApiModelProperty(value = "鐢ㄦ埛涓婚敭", example = "1")
+    private Integer memberId;
 
     @ApiModelProperty(value = "鍊掕鏃�", example = "1")
     private Long countdown;
@@ -69,7 +73,7 @@
     private String linkAddress;
 
     @ApiModelProperty(value = "璁㈠崟澶囨敞", example = "1")
-    private String memberInfo;
+    private String remark;
 
     @ApiModelProperty(value = "璁㈠崟鍙�", example = "1")
     private String code;
@@ -103,6 +107,9 @@
     @ApiModelProperty(value = "缁忛攢鍟嗕俊鎭�", example = "1")
     private Shop shopInfo;
 
+    @ApiModelProperty(value = "鐢ㄦ埛淇℃伅", example = "1")
+    private Member member;
+
     @ApiModelProperty(value = "浼樻儬鍒镐俊鎭�", example = "1")
     private MemberCoupon memberCoupon;
 
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java b/server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java
index e865893..3a7e8ef 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java
@@ -5,10 +5,7 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.Goodsorder;
 import com.doumee.dao.business.model.Shop;
-import com.doumee.dao.web.request.OrderCancelRequest;
-import com.doumee.dao.web.request.OrderPayRequest;
-import com.doumee.dao.web.request.PayDetailRequest;
-import com.doumee.dao.web.request.ShopOrderPayRequest;
+import com.doumee.dao.web.request.*;
 import com.doumee.dao.web.request.goods.DealOrderRequest;
 import com.doumee.dao.web.request.goods.MemberOrderRequest;
 import com.doumee.dao.web.request.goods.OrderCommentRequest;
@@ -69,7 +66,7 @@
     void orderSendOutGoods(Goodsorder goodsorder);
 
     void orderRemark(Goodsorder goodsorder);
-    IPage<Shop> getShopPage(PageWrap<Shop> pageWrap);
+//    IPage<Shop> getShopPage(PageWrap<Shop> pageWrap);
     void coffeePlanCancelOrder(Goodsorder goodsorder);
     void orderPlanCancelOrder(Goodsorder goodsorder);
 
@@ -228,4 +225,14 @@
 
     OrderPayConfirmResponse orderPayConfirm(OrderPayConfirmRequest request,
                                             MemberCouponServiceImpl memberCouponService);
+
+    /**
+     * 缁忛攢鍟嗚鍗曞垪琛�
+     * @param pageWrap
+     * @return
+     */
+    PageData<Goodsorder> shopOrderPage(PageWrap<ShopOrderRequest> pageWrap);
+
+
+
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/IntegralService.java b/server/dmmall_service/src/main/java/com/doumee/service/business/IntegralService.java
index f4dd03b..5986bcf 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/IntegralService.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/IntegralService.java
@@ -4,7 +4,9 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.Integral;
 import com.doumee.dao.web.dto.IntegralDTO;
+import com.doumee.dao.web.dto.IntegralRecordDTO;
 import com.doumee.dao.web.request.DealIntegralRequest;
+import com.doumee.dao.web.response.IntegralDataResponse;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -114,6 +116,7 @@
      * @return PageData<Integral>
      */
     PageData<IntegralDTO> findIntegralDTOPage(PageWrap<IntegralDTO> pageWrap,Integer memberId);
+
     /**
      * 鏇存柊娑堣垂鑰呯Н鍒�
      * @param dealIntegralRequest 瀹炰綋瀵硅薄
@@ -134,4 +137,20 @@
      * @return
      */
     Integer dealShopAmount(DealIntegralRequest dealIntegralRequest);
+
+
+    /**
+     * 鑾峰彇鐢ㄦ埛鐨勭Н鍒嗚褰�
+     * @param pageWrap
+     * @return
+     */
+    PageData<Integral> findIntegralRecordPage(PageWrap<IntegralRecordDTO> pageWrap);
+
+    /**
+     * 鑾峰彇鐢ㄦ埛鍓╀綑绉垎涓庡緟鎯呭喌绉垎淇℃伅
+     * @param model
+     * @return
+     */
+    IntegralDataResponse getIntegralData(IntegralRecordDTO model);
 }
+
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/MemberBankService.java b/server/dmmall_service/src/main/java/com/doumee/service/business/MemberBankService.java
new file mode 100644
index 0000000..9da0641
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/MemberBankService.java
@@ -0,0 +1,103 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.MemberBank;
+import com.doumee.dao.web.request.MemberBankSaveRequest;
+
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛鎻愮幇閾惰淇℃伅Service瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2026/01/16 11:50
+ */
+public interface MemberBankService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param memberBank 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(MemberBank memberBank);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param memberBank 瀹炰綋瀵硅薄
+     */
+    void delete(MemberBank memberBank);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param memberBank 瀹炰綋瀵硅薄
+     */
+    void updateById(MemberBank memberBank);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param memberBanks 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<MemberBank> memberBanks);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return MemberBank
+     */
+    MemberBank findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param memberBank 瀹炰綋瀵硅薄
+     * @return MemberBank
+     */
+    MemberBank findOne(MemberBank memberBank);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param memberBank 瀹炰綋瀵硅薄
+     * @return List<MemberBank>
+     */
+    List<MemberBank> findList(MemberBank memberBank);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<MemberBank>
+     */
+    PageData<MemberBank> findPage(PageWrap<MemberBank> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param memberBank 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(MemberBank memberBank);
+
+    void saveOrUpdate(MemberBankSaveRequest request);
+
+    List<MemberBank> getMyBankList(Integer shopId);
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java b/server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java
index cb33f25..6e89bfa 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -137,7 +137,7 @@
      * 鑾峰彇缁戝畾寰俊鐢ㄦ埛鎵嬫満鍙�
      * @param wxPhoneRequest
      */
-    void wxPhone(WxPhoneRequest wxPhoneRequest);
+    AccountResponse wxPhone(WxPhoneRequest wxPhoneRequest);
 
 
     /**
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java b/server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java
index a1414f0..eea1737 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java
@@ -2,13 +2,18 @@
 
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.Shop;
 import com.doumee.dao.web.dto.MemberDTO;
 import com.doumee.dao.web.dto.ResetSystemUserPwdDTO;
-import com.doumee.dao.web.dto.shop.ShopDTO;
-import com.doumee.dao.web.dto.shop.ShopDataStatisticsDTO;
-import com.doumee.dao.web.dto.shop.ShopFaceDetailDTO;
-import com.doumee.dao.web.dto.shop.ShopSimpleDTO;
+import com.doumee.dao.web.dto.ShopLoginDTO;
+import com.doumee.dao.web.dto.shop.*;
+import com.doumee.dao.web.request.MyCustomerRequest;
+import com.doumee.dao.web.request.SaleReportRequest;
+import com.doumee.dao.web.response.AccountResponse;
+import com.doumee.dao.web.response.MyCustomerResponse;
+import com.doumee.dao.web.response.SaleReportResponse;
+import com.doumee.dao.web.response.ShopInfoResponse;
 
 import java.util.List;
 
@@ -160,6 +165,51 @@
     ShopDataStatisticsDTO getShopDataStatisticsDTO(Integer shopId);
 
     void resetPwd(Shop dto);
+    /**
+     * 鐢ㄦ埛涓嬪崟鏌ヨ鍙�夋嫨鐨勮嚜鎻愮粡閿�鍟�
+     * @param dto
+     * @return
+     */
+    List<Shop> getShopList(ShopListDTO dto);
+
+    /**
+     * 缁忛攢鍟嗚处鍙峰瘑鐮佺櫥褰�
+     * @param dto
+     * @return
+     */
+    AccountResponse shopPasswordLogin(ShopLoginDTO dto);
+
+    /**
+     * 缁忛攢鍟嗛潤榛樼櫥褰�
+     * @param dto
+     * @return
+     */
+    AccountResponse shopOpenidLogin(ShopLoginDTO dto);
+
+    /**
+     * 缁忛攢鍟嗗簵閾鸿鎯�
+     * @param shopId
+     * @return
+     */
+    ShopInfoResponse getShopInfo(Integer shopId);
+
+
+    /**
+     * 鎴戠殑瀹㈡埛淇℃伅
+     * @param request
+     * @param shopId
+     * @return
+     */
+    List<MyCustomerResponse> myCustomer(MyCustomerRequest request, Integer shopId);
+
+    /**
+     * 閿�鍞槑缁�
+     * @param request
+     * @param shopId
+     * @return
+     */
+    SaleReportResponse saleReport(SaleReportRequest request, String shopId);
+
 
     String setGoodsPrice(Shop shop);
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/WithdrawRecordService.java b/server/dmmall_service/src/main/java/com/doumee/service/business/WithdrawRecordService.java
new file mode 100644
index 0000000..8069a59
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/WithdrawRecordService.java
@@ -0,0 +1,106 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.WithdrawRecord;
+import com.doumee.dao.web.request.WithdrawApplyRequest;
+
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛鎻愮幇璁板綍Service瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2026/01/16 11:50
+ */
+public interface WithdrawRecordService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param withdrawRecord 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(WithdrawRecord withdrawRecord);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param withdrawRecord 瀹炰綋瀵硅薄
+     */
+    void delete(WithdrawRecord withdrawRecord);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param withdrawRecord 瀹炰綋瀵硅薄
+     */
+    void updateById(WithdrawRecord withdrawRecord);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param withdrawRecords 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<WithdrawRecord> withdrawRecords);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return WithdrawRecord
+     */
+    WithdrawRecord findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param withdrawRecord 瀹炰綋瀵硅薄
+     * @return WithdrawRecord
+     */
+    WithdrawRecord findOne(WithdrawRecord withdrawRecord);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param withdrawRecord 瀹炰綋瀵硅薄
+     * @return List<WithdrawRecord>
+     */
+    List<WithdrawRecord> findList(WithdrawRecord withdrawRecord);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<WithdrawRecord>
+     */
+    PageData<WithdrawRecord> findPage(PageWrap<WithdrawRecord> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param withdrawRecord 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(WithdrawRecord withdrawRecord);
+
+    /**
+     * 鎻愮幇鐢宠
+     * @param request
+     * @param integralService
+     */
+    void withdrawApply(WithdrawApplyRequest request, IntegralService integralService);
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
index 4611954..a8a17a7 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -194,7 +194,7 @@
         goodsorderMapper.updateById(goodsorder);
     }
 
-    @Override
+    /*@Override
     public IPage<Shop> getShopPage(PageWrap<Shop> pageWrap) {
         IPage<Shop> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
         Shop model = pageWrap.getModel();
@@ -213,7 +213,7 @@
                         .like(StringUtils.isNotBlank(model.getName()),Shop::getName,model.getName())
                 .orderByAsc(" distance ")
         );
-    }
+    }*/
 
 
     /**
@@ -770,6 +770,7 @@
             goodsorder.setDistributionShopId(shop.getId());
             if(Objects.isNull(member.getBindShopId())){
                 member.setBindShopId(shop.getId());
+                member.setBindShopDate(new Date());
             }
         }
 
@@ -1056,6 +1057,14 @@
         if(Constants.equalsInteger(memberOrderResponse.getReceiveType(),Constants.ONE)){
             memberOrderResponse.setShopInfo(shopMapper.selectById(memberOrderResponse.getShopId()));
         }
+        Member member = memberMapper.selectById(memberOrderResponse.getMemberId());
+        if(Objects.nonNull(member)){
+            String memberfullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
+                    systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode();
+            member.setImgFullUrl(memberfullUrl + member.getImgurl());
+            memberOrderResponse.setMember(member);
+        }
+
         return memberOrderResponse;
     }
 
@@ -1786,10 +1795,12 @@
         RedisUtil.addObject(redisTemplate,Constants.RedisKeys.GOODSORDER_KEY,0);
         //鍔犲叆redis缂撳瓨锛屽埛鏂颁粖澶╁敭鍚庣紪鍙�0寮�濮�
         RedisUtil.addObject(redisTemplate,Constants.RedisKeys.AFTERSALE_KEY,0);
+        //鍔犲叆redis缂撳瓨锛屽埛鏂颁粖澶╁敭鍚庣紪鍙�0寮�濮�
+        RedisUtil.addObject(redisTemplate,Constants.RedisKeys.WITHDRAW_KEY,0);
     }
     @Override
     public  void refreshOrderCodes(){
-        long countOrder = 0,countSign=0,countSale=0;
+        long countOrder = 0,countSign=0,countSale=0,countWithdraw=0;
 
         QueryWrapper<Goodsorder> order = new QueryWrapper<>();
         order.apply(true, "TO_DAYS(NOW())=TO_DAYS(create_date)");
@@ -1818,6 +1829,22 @@
         }
         //鍔犲叆redis缂撳瓨锛屽埛鏂颁粖澶╁敭鍚庣紪鍙�0寮�濮�
         RedisUtil.addObject(redisTemplate,Constants.RedisKeys.AFTERSALE_KEY,countSale);
+
+
+
+        QueryWrapper<WithdrawRecord> withdraw = new QueryWrapper<>();
+        withdraw.apply(true, "TO_DAYS(NOW())=TO_DAYS(create_date)");
+        withdraw.orderByDesc(" CODE ");
+        withdraw.last(" limit 1 ");
+        Aftersale maxWithdrawOrder =  aftersaleMapper.selectOne(sale);
+        if(!Objects.isNull(maxWithdrawOrder)){
+            countWithdraw = Integer.valueOf(maxOrder.getCode().toString().substring(8,12));
+        }
+        //鍔犲叆redis缂撳瓨锛屽埛鏂颁粖澶╁敭鍚庣紪鍙�0寮�濮�
+        RedisUtil.addObject(redisTemplate,Constants.RedisKeys.WITHDRAW_KEY,countWithdraw);
+
+
+
     }
 
 
@@ -1899,11 +1926,13 @@
                         .eq(Goodsorder::getMemberId,member.getId())
                         .eq(Goodsorder::getStatus,Constants.OrderStatus.WAIT_RECEIVE.getKey()))
         );
+
         homeInfoResponse.setWaitPayNum(
                 goodsorderMapper.selectCount(new QueryWrapper<Goodsorder>().lambda().eq(Goodsorder::getIsdeleted,Constants.ZERO)
                         .eq(Goodsorder::getMemberId,member.getId())
                         .eq(Goodsorder::getStatus,Constants.OrderStatus.WAIT_PAY.getKey()))
         );
+
         homeInfoResponse.setCartTypeNum(
                 shopcartMapper.selectCount(new QueryWrapper<Shopcart>().lambda()
                         .eq(Shopcart::getIsdeleted,Constants.ZERO)
@@ -1925,11 +1954,44 @@
         );
 
         return homeInfoResponse;
-
-
     }
 
 
+    @Override
+    public PageData<Goodsorder> shopOrderPage(PageWrap<ShopOrderRequest> pageWrap) {
+        Integer shopId = null;
+        Integer status = null;
+        IPage<Goodsorder> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        MPJLambdaWrapper<Goodsorder> queryWrapper = new MPJLambdaWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        ShopOrderRequest model = pageWrap.getModel();
+        queryWrapper.selectAll(Goodsorder.class);
+//        queryWrapper.selectAs(Member::getNickname,Goodsorder::getNickName);
+//        queryWrapper.selectAs(Member::getPhone,Goodsorder::getPhone);
+//        queryWrapper.selectAs(Member::getImgurl,Goodsorder::getImgurl);
+        queryWrapper.eq(Goodsorder::getIsdeleted,Constants.ZERO);
+        queryWrapper.eq(Objects.nonNull(model.getStatus()),Goodsorder::getStatus,model.getStatus());
+        queryWrapper.eq(Objects.nonNull(model.getShopId()),Goodsorder::getDistributionShopId,model.getShopId());
+        queryWrapper.orderByDesc(Goodsorder::getCreateDate);
+
+        IPage<Goodsorder> result = goodsorderJoinMapper.selectJoinPage(page, Goodsorder.class, queryWrapper);
+
+        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() +
+                systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_FILE).getCode();
+
+        for(Goodsorder goodsorder:result.getRecords()){
+
+            List<GoodsorderDetail> goodsorderDetailList=goodsorderDetailJoinMapper.selectList(new QueryWrapper<GoodsorderDetail>().lambda()
+                    .eq(GoodsorderDetail::getOrderId,goodsorder.getId()));
+            goodsorderDetailList.stream().forEach(s ->{
+                if(StringUtils.isBlank(s.getImgurl())){
+                    s.setImgurl(path + s.getGoodsImgurl());
+                }
+            });
+            goodsorder.setGoodsorderDetailList(goodsorderDetailList);
+        }
+        return PageData.from(result);
+    }
 
 
 
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java
index 16cf274..7838eb0 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java
@@ -16,8 +16,11 @@
 import com.doumee.dao.business.model.Integral;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.Shop;
+import com.doumee.dao.system.model.SystemDictData;
 import com.doumee.dao.web.dto.IntegralDTO;
+import com.doumee.dao.web.dto.IntegralRecordDTO;
 import com.doumee.dao.web.request.DealIntegralRequest;
+import com.doumee.dao.web.response.IntegralDataResponse;
 import com.doumee.service.business.AreasService;
 import com.doumee.service.business.IntegralService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -385,4 +388,87 @@
         integralDTOIPage.setCurrent(result.getCurrent());
         return PageData.from(integralDTOIPage);
     }
+
+
+
+    public List<Integral> getMyIntegralList(Integer memberId) {
+
+
+
+        QueryWrapper<Integral> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(Integral::getMemberId,memberId);
+        return integralMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public PageData<Integral> findIntegralRecordPage(PageWrap<IntegralRecordDTO> pageWrap) {
+        IPage<Integral> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        Utils.MP.blankToNull(pageWrap.getModel());
+        IntegralRecordDTO model = pageWrap.getModel();
+
+        IPage<Integral> result = integralMapper.selectPage(page,new QueryWrapper<Integral>()
+                .lambda()
+                .eq(Objects.nonNull(model.getUserType()),Integral::getUserType,model.getUserType())
+                .eq(Objects.nonNull(model.getType()),Integral::getType,model.getType())
+                .eq(Integral::getMemberId,model.getMemberId())
+                .orderByDesc(Integral::getCreateDate)
+        );
+
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(result.getRecords())){
+            for (Integral integral:result.getRecords()) {
+                integral.setStrType(Constants.IntegralObjType.getName(integral.getObjType()));
+            }
+        }
+        return PageData.from(result);
+    }
+
+
+    @Override
+    public IntegralDataResponse getIntegralData(IntegralRecordDTO model){
+        IntegralDataResponse integralDataResponse = new IntegralDataResponse();
+        integralDataResponse.setSurplusIntegral(BigDecimal.ZERO);
+        integralDataResponse.setExpiredIntegral(BigDecimal.ZERO);
+        List<Integral> list = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
+                .eq(Objects.nonNull(model.getUserType()),Integral::getUserType,model.getUserType())
+                .eq(Objects.nonNull(model.getType()),Integral::getType,model.getType())
+                .eq(Integral::getMemberId,model.getMemberId())
+                .orderByDesc(Integral::getCreateDate));
+
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){
+            integralDataResponse.setSurplusIntegral(
+                    list.stream().map(i->i.getNum().multiply(new BigDecimal(i.getType().toString()))
+                    ).reduce(BigDecimal.ZERO, BigDecimal::add)
+            );
+
+            //绉垎澶辨晥鏂瑰紡 0闀挎湡鏈夋晥 1鎸夌Н鍒嗕骇鐢熸椂闂村け鏁�
+            Integer type  = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALINVALIDTYPE).getCode());
+            //娑堣垂鑰呯Н鍒� 闇�瑕佹煡璇㈠嵆灏嗚繃鏈熺Н鍒�
+            if(Constants.equalsInteger(type,Constants.ZERO)){
+                Integer validYear  = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALINVALIDCIRCLE).getCode());
+                if(validYear.compareTo(Constants.ZERO)>Constants.ZERO){
+                     list = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
+                            .eq(Objects.nonNull(model.getUserType()),Integral::getUserType,model.getUserType())
+                            .eq(Objects.nonNull(model.getType()),Integral::getType,model.getType())
+                            .eq(Integral::getMemberId,model.getMemberId())
+                             .apply(" CREATE_DATE >= DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'),INTERVAL "+(validYear*12)+1+" MONTH) ")
+                            .orderByDesc(Integral::getCreateDate));
+                    BigDecimal newIntegral = list.stream().map(i->i.getNum().multiply(new BigDecimal(i.getType().toString()))
+                    ).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    integralDataResponse.setExpiredIntegral(
+                            integralDataResponse.getSurplusIntegral().compareTo(newIntegral)>Constants.ZERO?integralDataResponse.getSurplusIntegral().subtract(newIntegral):BigDecimal.ZERO
+                    );
+                }
+            }
+
+        }
+        String info  = systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALRULEINFO).getCode();
+        integralDataResponse.setInfo(info);
+
+        return integralDataResponse;
+    }
+
+
+
+
+
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberBankServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberBankServiceImpl.java
new file mode 100644
index 0000000..0294cd1
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberBankServiceImpl.java
@@ -0,0 +1,207 @@
+package com.doumee.service.business.impl;
+
+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.Constants;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.MemberBankMapper;
+import com.doumee.dao.business.model.MemberBank;
+import com.doumee.dao.web.request.MemberBankSaveRequest;
+import com.doumee.service.business.MemberBankService;
+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 org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 鐢ㄦ埛鎻愮幇閾惰淇℃伅Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2026/01/16 11:50
+ */
+@Service
+public class MemberBankServiceImpl implements MemberBankService {
+
+    @Autowired
+    private MemberBankMapper memberBankMapper;
+
+    @Override
+    public Integer create(MemberBank memberBank) {
+        memberBankMapper.insert(memberBank);
+        return memberBank.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        memberBankMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(MemberBank memberBank) {
+        UpdateWrapper<MemberBank> deleteWrapper = new UpdateWrapper<>(memberBank);
+        memberBankMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        memberBankMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(MemberBank memberBank) {
+        memberBankMapper.updateById(memberBank);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<MemberBank> memberBanks) {
+        if (CollectionUtils.isEmpty(memberBanks)) {
+            return;
+        }
+        for (MemberBank memberBank: memberBanks) {
+            this.updateById(memberBank);
+        }
+    }
+
+    @Override
+    public MemberBank findById(Integer id) {
+        return memberBankMapper.selectById(id);
+    }
+
+    @Override
+    public MemberBank findOne(MemberBank memberBank) {
+        QueryWrapper<MemberBank> wrapper = new QueryWrapper<>(memberBank);
+        return memberBankMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<MemberBank> findList(MemberBank memberBank) {
+        QueryWrapper<MemberBank> wrapper = new QueryWrapper<>(memberBank);
+        return memberBankMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<MemberBank> findPage(PageWrap<MemberBank> pageWrap) {
+        IPage<MemberBank> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<MemberBank> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(MemberBank::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(MemberBank::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(MemberBank::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(MemberBank::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(MemberBank::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(MemberBank::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(MemberBank::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(MemberBank::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getRemark() != null) {
+            queryWrapper.lambda().eq(MemberBank::getRemark, pageWrap.getModel().getRemark());
+        }
+        if (pageWrap.getModel().getBankName() != null) {
+            queryWrapper.lambda().eq(MemberBank::getBankName, pageWrap.getModel().getBankName());
+        }
+        if (pageWrap.getModel().getBankAccount() != null) {
+            queryWrapper.lambda().eq(MemberBank::getBankAccount, pageWrap.getModel().getBankAccount());
+        }
+        if (pageWrap.getModel().getName() != null) {
+            queryWrapper.lambda().eq(MemberBank::getName, pageWrap.getModel().getName());
+        }
+        if (pageWrap.getModel().getMemberId() != null) {
+            queryWrapper.lambda().eq(MemberBank::getMemberId, pageWrap.getModel().getMemberId());
+        }
+        if (pageWrap.getModel().getIsDefault() != null) {
+            queryWrapper.lambda().eq(MemberBank::getIsDefault, pageWrap.getModel().getIsDefault());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(memberBankMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(MemberBank memberBank) {
+        QueryWrapper<MemberBank> wrapper = new QueryWrapper<>(memberBank);
+        return memberBankMapper.selectCount(wrapper);
+    }
+
+    @Override
+    public void saveOrUpdate(MemberBankSaveRequest request) {
+        if(Objects.isNull(request)
+                ||Objects.isNull(request.getIsDefault())
+                ||Objects.isNull(request.getMemberId())
+                || StringUtils.isNotBlank(request.getBankName())
+                || StringUtils.isNotBlank(request.getBankAccount())
+                || StringUtils.isNotBlank(request.getName())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if (request.getIsDefault() == 1) {
+            List<MemberBank> memberBanks = memberBankMapper.selectList(new QueryWrapper<MemberBank>().lambda()
+                    .eq(MemberBank::getMemberId, request.getMemberId())
+                    .eq(MemberBank::getIsDefault, Constants.ONE));
+            for (MemberBank memberBank: memberBanks) {
+                memberBank.setIsDefault(Constants.ZERO);
+                this.updateById(memberBank);
+            }
+        }
+        if (request.getId() == null) {
+            MemberBank memberBank = new MemberBank();
+            BeanUtils.copyProperties(request,memberBank);
+            memberBank.setCreateDate(new Date());
+            memberBank.setEditDate(new Date());
+            memberBankMapper.insert(memberBank);
+        } else {
+            MemberBank memberBank = memberBankMapper.selectById(request.getId());
+            if(Objects.isNull(memberBank)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY);
+            }
+            BeanUtils.copyProperties(request,memberBank);
+            memberBank.setEditDate(new Date());
+            this.updateById(memberBank);
+        }
+    }
+
+
+    @Override
+    public List<MemberBank> getMyBankList(Integer shopId) {
+        List<MemberBank> memberBanks = memberBankMapper.selectList(new QueryWrapper<MemberBank>()
+                .lambda()
+                .eq(MemberBank::getIsdeleted, Constants.ZERO)
+                .eq(MemberBank::getMemberId,shopId)
+                .orderByDesc(MemberBank::getIsDefault,MemberBank::getId)
+        );
+        return memberBanks;
+    }
+
+
+
+
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java
index f2b1bdb..f146ea2 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java
@@ -657,11 +657,6 @@
     }
 
 
-
-
-
-
-
     /**
      * 璁$畻褰撳墠宸查�夋嫨浼樻儬鍒告瘡涓晢鍝佸崰姣旈噾棰�
      * @param coupon 浼樻儬鍒镐俊鎭�
@@ -718,6 +713,9 @@
             response.setUseCoupon(idList.contains(Constants.equalsInteger(vaildType,Constants.ZERO)?response.getId().toString():response.getCategoryId().toString())?true:false);
         }
     }
+
+
+
 //    public Set<Integer> isVaildUse(List<String> idList,List<OrderGoodsCalculateResponse> goodsList,Integer vaildType){
 //        List<OrderGoodsCalculateResponse> resultList = new ArrayList<>();
 //        for (String id:idList) {
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 017cbe5..0ee1f97 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -20,6 +20,9 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.core.wx.WxMiniConfig;
 import com.doumee.dao.business.*;
+import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.ShopMapper;
+import com.doumee.dao.business.SmsrecordMapper;
 import com.doumee.dao.business.join.MemberJoinMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.system.SystemUserMapper;
@@ -40,6 +43,8 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import io.swagger.models.auth.In;
+import io.swagger.util.Yaml;
 import lombok.extern.log4j.Log4j;
 import me.chanjar.weixin.common.error.WxErrorException;
 import okhttp3.OkHttpClient;
@@ -79,6 +84,7 @@
     private ShopMapper shopMapper;
     @Autowired
     private UserActionMapper userActionMapper;
+
 
     @Autowired
     private SmsrecordMapper smsrecordMapper;
@@ -348,38 +354,38 @@
             if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(openId)) {
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鑾峰彇openid澶辫触锛佽鑱旂郴绠$悊鍛�");
             }
-            Member member = memberMapper.selectOne(new QueryWrapper<Member>().eq("OPEN_ID", openId));
-            if (member == null) {
-                member = new Member();
-                member.setImgurl("20230410/4010b821-2137-4e6d-86e4-5ab9c06184a4.png");
-                member.setNickname("寰俊瀹㈡埛"+ CodeVerifyUtils.createVerificationCode(4));
-                member.setCreateDate(new Date());
-                member.setIsdeleted(Constants.ZERO);
-                member.setType(Constants.ZERO);
-                member.setOrigin(Constants.ZERO);
-                member.setRecId(recId);
-                member.setOpenId(openId);
-                memberMapper.insert(member);
-            }
-            member.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
-                    systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl());
+            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getOpenId, openId)
+                            .eq(Member::getIsdeleted,Constants.ZERO)
+                    .last(" limit 1"));
             //鍒涘缓token
-            JwtPayLoad payLoad = new JwtPayLoad(member.getId());
+            JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+member.getId());
             String token = JwtTokenUtil.generateToken(payLoad);
             AccountResponse accountResponse = new AccountResponse();
-            accountResponse.setToken(token);
             accountResponse.setSessionKey(session.getSessionKey());
-            accountResponse.setMember(member);
+            if(Objects.nonNull(member)){
+                if(Objects.isNull(member.getRecId())){
+                    member.setRecId(recId);
+                }
+                memberMapper.updateById(member);
+                member.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
+                        systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl());
+                accountResponse.setToken(token);
+                accountResponse.setMember(member);
+            }else{
+                accountResponse.setOpenid(openId);
+            }
             return accountResponse;
         } catch (WxErrorException e) {
             e.printStackTrace();
         }
         throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"寰俊鐧诲綍寮傚父锛佽鑱旂郴绠$悊鍛�");
     }
+
+
     @Override
     public AccountResponse wxLoginTest( Integer memberId){
         //鍒涘缓token
-        JwtPayLoad payLoad = new JwtPayLoad(memberId);
+        JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+memberId);
         String token = JwtTokenUtil.generateToken(payLoad);
         AccountResponse accountResponse = new AccountResponse();
         accountResponse.setToken(token);
@@ -387,9 +393,82 @@
     }
 
 
+    /**
+     * 鏍规嵁openid鑾峰彇鏄惁缁戝畾浜嗗晢鎴�
+     * @param openid
+     * @param memberId
+     * @return
+     */
+    public AccountResponse shopOpenidLogin(String openid, Integer memberId){
+        Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getOpenId, openid)
+                .eq(Shop::getIsdeleted,Constants.ZERO)
+                .last("limit 1")
+        );
+        AccountResponse accountResponse = new AccountResponse();
+        accountResponse.setOpenid(openid);
+        if(Objects.nonNull(shop)){
+            if(Objects.isNull(memberId)
+             && ( Objects.isNull(shop.getMemberId())
+                    || !Constants.equalsInteger(shop.getMemberId(),memberId))){
+                shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
+                        .set(Shop::getMemberId,memberId)
+                        .eq(Shop::getId,shop.getId())
+                );
+            }
+            JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId());
+            String token = JwtTokenUtil.generateToken(payLoad);
+            accountResponse.setToken(token);
+        }
+        return accountResponse;
+    }
+
+
+    /**
+     * 鍟嗘埛璐﹀彿瀵嗙爜鐧诲綍
+     * @param userName
+     * @param password
+     * @param openid
+     * @param memberId
+     * @return
+     */
+    public AccountResponse shopPasswordLogin(String userName,String password,String openid,String memberId){
+        if(StringUtils.isBlank(userName)
+             || StringUtils.isBlank(password)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛鍚嶆垨瀵嗙爜涓嶈兘涓虹┖");
+        }
+        Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getUsername, userName)
+                .eq(Shop::getIsdeleted,Constants.ZERO)
+                .last("limit 1")
+        );
+        if(shop==null){
+            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
+        }
+        //鍔犲瘑瀵嗙爜
+        String pwd = Utils.Secure.encryptPassword(password, shop.getSalt());
+        if(!pwd.equals(shop.getPassword())){
+            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
+        }
+        //鍒涘缓token
+        JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId());
+        String token = JwtTokenUtil.generateToken(payLoad);
+        AccountResponse accountResponse = new AccountResponse();
+        accountResponse.setToken(token);
+        shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
+                .set(Shop::getOpenId,openid)
+                .set(Shop::getMemberId,memberId)
+                .eq(Shop::getId,shop.getId())
+        );
+        shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
+                .set(Shop::getOpenId,null)
+                .eq(Shop::getOpenId,openid)
+                .ne(Shop::getId,shop.getId())
+        );
+        return accountResponse;
+    }
+
 
     @Override
-    public void wxPhone(WxPhoneRequest wxPhoneRequest){
+    public AccountResponse wxPhone(WxPhoneRequest wxPhoneRequest){
         try {
             WxMaPhoneNumberInfo userPhoneInfo = WxMiniConfig.wxMaService.getUserService().getPhoneNoInfo(
                     wxPhoneRequest.getSessionKey(), wxPhoneRequest.getEncryptedData(), wxPhoneRequest.getIv());
@@ -398,46 +477,79 @@
             if(Objects.isNull(phone)){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈幏鍙栧埌鎵嬫満鍙�");
             }
-            Member member =  memberMapper.selectById(wxPhoneRequest.getMemberId());
+            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getOpenId, wxPhoneRequest.getOpenid())
+                    .eq(Member::getIsdeleted,Constants.ZERO)
+                    .last(" limit 1"));
+            if (member == null) {
+                member = new Member();
+                member.setImgurl("20230410/4010b821-2137-4e6d-86e4-5ab9c06184a4.png");
+                member.setNickname("寰俊鐢ㄦ埛"+ CodeVerifyUtils.createVerificationCode(4));
+                member.setCreateDate(new Date());
+                member.setIsdeleted(Constants.ZERO);
+                member.setType(Constants.ZERO);
+                member.setOrigin(Constants.ZERO);
+                member.setRecId(wxPhoneRequest.getRecId());
+                member.setOpenId(wxPhoneRequest.getOpenid());
+            }
             member.setPhone(phone);
             member.setEditDate(new Date());
-            member.setEditor(wxPhoneRequest.getMemberId());
             member.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                     systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl());
-            //鐢熸垚鍒嗕韩鐮�
-            String accessToken = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ACCESS_TOKEN).getCode();
-            if(StringUtils.isBlank(member.getSharingCode())){
-                //鐢熸垚鍥剧墖涓婁紶OSS
-                Map<String,Object> body = new HashMap<>();
-                // 鍦烘櫙鐮侊紝涓庡墠绔害瀹氾紝鏈�缁堟槸闇�瑕佸墠绔В鏋�
-                body.put("scene", member.getId());
-                // 姝e紡鐗堜负 "release"锛屼綋楠岀増涓� "trial"锛屽紑鍙戠増涓� "develop"銆傞粯璁ゆ槸姝e紡鐗堛��
-                body.put("env_version", "release");
-                // 閫忔槑锛屾牴鎹綘鐨勫満鏅嚜琛岃缃産ody鍙傛暟
-                body.put("is_hyaline", true);
-                OkHttpClient client = new OkHttpClient().newBuilder().build();
-                okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/json");
-                okhttp3.RequestBody requestBody = okhttp3.RequestBody.create(mediaType, JSONObject.toJSONString(body));
-                Request request = new Request.Builder().url("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+accessToken)
-                        .method("POST", requestBody).build();
-                try {
-                    Response response = client.newCall(request).execute();
-                    if (response.isSuccessful()) {
-                        InputStream inputStream = new ByteArrayInputStream(response.body().bytes());
-                        FileModel fileModel = uploadFileService.uploadWxCode(inputStream,member.getId().toString());
-                        member.setSharingCode(fileModel.getFileUrl());
-                        inputStream.close();
-                    }
-                } catch (Exception e) {
-                    e.printStackTrace();
+            if(Objects.isNull(member.getId())){
+                memberMapper.insert(member);
+                member.setSharingCode(this.createShareCode(member.getId()));
+                memberMapper.updateById(member);
+            }else{
+                if(StringUtils.isBlank(member.getSharingCode())){
+                    member.setSharingCode(this.createShareCode(member.getId()));
                 }
+                memberMapper.updateById(member);
             }
-            memberMapper.updateById(member);
+            JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+member.getId());
+            String token = JwtTokenUtil.generateToken(payLoad);
+            AccountResponse accountResponse = new AccountResponse();
+            accountResponse.setToken(token);
+            accountResponse.setMember(member);
+            return accountResponse;
         } catch (Exception e) {
             e.printStackTrace();
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏇存柊鎵嬫満鍙峰け璐�");
         }
     }
+
+
+
+    public String createShareCode(Integer memberId){
+        //鐢熸垚鍒嗕韩鐮�
+        String accessToken = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ACCESS_TOKEN).getCode();
+        //鐢熸垚鍥剧墖涓婁紶OSS
+        Map<String,Object> body = new HashMap<>();
+        // 鍦烘櫙鐮侊紝涓庡墠绔害瀹氾紝鏈�缁堟槸闇�瑕佸墠绔В鏋�
+        body.put("scene", memberId);
+        // 姝e紡鐗堜负 "release"锛屼綋楠岀増涓� "trial"锛屽紑鍙戠増涓� "develop"銆傞粯璁ゆ槸姝e紡鐗堛��
+        body.put("env_version", "release");
+        // 閫忔槑锛屾牴鎹綘鐨勫満鏅嚜琛岃缃産ody鍙傛暟
+        body.put("is_hyaline", true);
+        OkHttpClient client = new OkHttpClient().newBuilder().build();
+        okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/json");
+        okhttp3.RequestBody requestBody = okhttp3.RequestBody.create(mediaType, JSONObject.toJSONString(body));
+        Request request = new Request.Builder().url("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+accessToken)
+                .method("POST", requestBody).build();
+        try {
+            Response response = client.newCall(request).execute();
+            if (response.isSuccessful()) {
+                InputStream inputStream = new ByteArrayInputStream(response.body().bytes());
+                FileModel fileModel = uploadFileService.uploadWxCode(inputStream,memberId.toString());
+                inputStream.close();
+                return fileModel.getFileUrl();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
 
     @Override
     public Member updateMember(UpdateMemberRequest updateMemberRequest){
@@ -678,4 +790,13 @@
         Integer integer = integralService.dealIntegral(dealIntegralRequest);
         return integer;
     }
+
+
+
+
+
+
+
+
+
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
index 28eff80..ee8f7e8 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
@@ -2,6 +2,8 @@
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.config.Jwt.JwtPayLoad;
+import com.doumee.config.Jwt.JwtTokenUtil;
 import com.doumee.config.listener.event.VisitEvent;
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.constants.ResponseStatus;
@@ -11,6 +13,9 @@
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.*;
+import com.doumee.dao.business.join.GoodsorderJoinMapper;
+import com.doumee.dao.business.join.MemberJoinMapper;
+import com.doumee.dao.business.*;
 import com.doumee.dao.business.join.ProductLabelJoinMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.business.model.Labels;
@@ -19,11 +24,11 @@
 import com.doumee.dao.business.model.ShopScan;
 import com.doumee.dao.system.SystemUserMapper;
 import com.doumee.dao.system.model.SystemUser;
-import com.doumee.dao.web.dto.CouponDTO;
-import com.doumee.dao.web.dto.MemberDTO;
-import com.doumee.dao.web.dto.MultiFileDTO;
-import com.doumee.dao.web.dto.ResetSystemUserPwdDTO;
+import com.doumee.dao.web.dto.*;
 import com.doumee.dao.web.dto.shop.*;
+import com.doumee.dao.web.request.MyCustomerRequest;
+import com.doumee.dao.web.request.SaleReportRequest;
+import com.doumee.dao.web.response.*;
 import com.doumee.service.business.*;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -34,6 +39,7 @@
 import org.apache.shiro.SecurityUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.xpath.operations.Bool;
 import org.checkerframework.checker.units.qual.C;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -88,10 +94,13 @@
     private SystemDictDataBiz systemDictDataBiz;
 
     @Autowired
-    private MemberMapper memberMapper;
+    private MemberJoinMapper memberJoinMapper;
 
     @Autowired
     private SystemUserMapper systemUserMapper;
+
+    @Autowired
+    private GoodsorderJoinMapper goodsorderJoinMapper;
 
     @Autowired
     private ProductLabelJoinMapper productLabelJoinMapper;
@@ -112,6 +121,9 @@
 
     @Autowired
     private MultifileService multifileService;
+
+    @Autowired
+    private IntegralMapper integralMapper;
 
 
     @Override
@@ -596,6 +608,244 @@
         updateUserDto.setPassword(Utils.Secure.encryptPassword( shop.getCode()+"@123456", shop.getSalt()));
         shopMapper.updateById(updateUserDto);
     }
+
+
+    /**
+     * 鐢ㄦ埛涓嬪崟鏌ヨ鍙�夋嫨鐨勮嚜鎻愮粡閿�鍟�
+     * @param dto
+     * @return
+     */
+    @Override
+    public List<Shop> getShopList(ShopListDTO dto){
+        Boolean isArea = false;
+        if(Objects.nonNull(dto)&&StringUtils.isNotBlank(dto.getLat())
+        && StringUtils.isNotBlank(dto.getLgt())){
+            isArea = true;
+        }
+
+        List<Shop> shopList = shopJoinMapper.selectList(new MPJLambdaWrapper<Shop>()
+                .selectAll(Shop.class)
+                .select(" CONVERT( ST_Distance_Sphere ( POINT ( LONGITUDE, LATITUDE ), POINT ( "+dto.getLgt()+", "+dto.getLat()+" )) /1000,DECIMAL(15,2))",Shop::getDistance)
+                .leftJoin(Areas.class,Areas::getId,Shop::getAreaId)
+                .eq(Objects.nonNull(dto.getCityId()),Areas::getParentId,dto.getCityId())
+                .like(Objects.nonNull(dto.getShopName()),Shop::getName,dto.getShopName())
+                .orderByDesc(!isArea,Shop::getId)
+                .orderByAsc(isArea,Shop::getDistance)
+        );
+        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode();
+        for(Shop model:shopList){
+            model.setImgFullUrl(path+model.getImgurl());
+
+        }
+        return shopList;
+    }
+
+
+
+    /**
+     * 鏍规嵁openid鑾峰彇鏄惁缁戝畾浜嗗晢鎴�
+     * @param dto
+     * @return
+     */
+    @Override
+    public AccountResponse shopOpenidLogin(ShopLoginDTO dto){
+        Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getOpenId, dto.getOpenid())
+                .eq(Shop::getIsdeleted,Constants.ZERO)
+                .last("limit 1")
+        );
+        AccountResponse accountResponse = new AccountResponse();
+        accountResponse.setOpenid(dto.getOpenid());
+        if(Objects.nonNull(shop)){
+            if(Objects.isNull(dto.getMemberId())
+                    && ( Objects.isNull(shop.getMemberId())
+                    || !Constants.equalsInteger(shop.getMemberId(),dto.getMemberId()))){
+                shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
+                        .set(Shop::getMemberId,dto.getMemberId())
+                        .eq(Shop::getId,shop.getId())
+                );
+            }
+            JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId());
+            String token = JwtTokenUtil.generateToken(payLoad);
+            accountResponse.setToken(token);
+        }
+        return accountResponse;
+    }
+
+
+    /**
+     * 鍟嗘埛璐﹀彿瀵嗙爜鐧诲綍
+     * @param dto
+     * @return
+     */
+    @Override
+    public AccountResponse shopPasswordLogin(ShopLoginDTO dto){
+        if(StringUtils.isBlank(dto.getUserName())
+                || StringUtils.isBlank(dto.getPassword())
+                || StringUtils.isBlank(dto.getOpenid())
+        ){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛鍚嶆垨瀵嗙爜涓嶈兘涓虹┖");
+        }
+        Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getUsername, dto.getUserName())
+                .eq(Shop::getIsdeleted,Constants.ZERO)
+                .last("limit 1")
+        );
+        if(shop==null){
+            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
+        }
+        //鍔犲瘑瀵嗙爜
+        String pwd = Utils.Secure.encryptPassword( dto.getPassword(), shop.getSalt());
+        if(!pwd.equals(shop.getPassword())){
+            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
+        }
+        //鍒涘缓token
+        JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId());
+        String token = JwtTokenUtil.generateToken(payLoad);
+        AccountResponse accountResponse = new AccountResponse();
+        accountResponse.setToken(token);
+        shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
+                .set(Shop::getOpenId,dto.getOpenid())
+                .set(Shop::getMemberId,dto.getMemberId())
+                .eq(Shop::getId,shop.getId())
+        );
+        shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
+                .set(Shop::getOpenId,null)
+                .eq(Shop::getOpenId,dto.getOpenid())
+                .ne(Shop::getId,shop.getId())
+        );
+        return accountResponse;
+    }
+
+
+
+
+    @Override
+    public ShopInfoResponse getShopInfo(Integer shopId){
+        ShopInfoResponse response = new ShopInfoResponse();
+        Shop shop = shopMapper.selectById(shopId);
+        if(Objects.isNull(shop)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode();
+        BeanUtils.copyProperties(shop,response);
+        response.setImgurl(path + shop.getImgurl());
+        response.setIdcardImg(path + shop.getIdcardImg());
+        response.setIdcardImgBack(path + shop.getIdcardImgBack());
+        response.setBusinessImg(path + shop.getBusinessImg());
+
+        return response;
+    }
+
+
+    @Override
+    public List<MyCustomerResponse> myCustomer(MyCustomerRequest request, Integer shopId){
+        List<Member>  memberList = memberJoinMapper.selectJoinList(Member.class,
+                new MPJLambdaWrapper<Member>()
+                        .selectAll(Member.class)
+                        .eq(Member::getIsdeleted,Constants.ZERO)
+                        .eq(Member::getBindShopId,shopId)
+                        .and(StringUtils.isNotBlank(request.getMemberIfo()),i->i.like(Member::getPhone,request.getMemberIfo()).or().like(Member::getNickname,request.getMemberIfo()))
+        );
+        List<MyCustomerResponse> responseList = new ArrayList<>();
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){
+            String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+                    + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILE).getCode();
+            memberList.forEach(member -> {
+                MyCustomerResponse response = new MyCustomerResponse();
+                response.setNickName(member.getNickname());
+                response.setPhone(member.getPhone().replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2"));
+                response.setBindShopDate(member.getBindShopDate());
+                response.setImgFullUrl(StringUtils.isNotBlank(member.getImgurl())?path + member.getImgurl():"");
+                responseList.add(response);
+            });
+        }
+        return responseList;
+    }
+
+
+
+    @Override
+    public SaleReportResponse saleReport(SaleReportRequest request,String shopId){
+        SaleReportResponse saleReportResponse = new SaleReportResponse();
+        saleReportResponse.setSaleTotal(BigDecimal.ZERO);
+        saleReportResponse.setOrderNum(Constants.ZERO);
+        saleReportResponse.setProfitTotal(BigDecimal.ZERO);
+
+        List<Goodsorder> goodsorderList = goodsorderJoinMapper.selectJoinList(Goodsorder.class,
+                new MPJLambdaWrapper<Goodsorder>()
+                        .selectAll(Goodsorder.class)
+                        .selectAs(Member::getPhone,Goodsorder::getPhone)
+                        .selectAs(Member::getNickname,Goodsorder::getNickName)
+                        .select(" select ifnull(sum(g.SHOP_SETTLEMENT),0) from goodsorder_detail g where t.id = g.ORDER_ID   ",Goodsorder::getShopSettlement)
+                        .leftJoin(Member.class,Member::getId,Goodsorder::getMemberId)
+                        .eq(Goodsorder::getIsdeleted,Constants.ZERO)
+                        .eq(Goodsorder::getDistributionShopId,shopId)
+                        //浠婃棩
+                        .apply(Constants.equalsInteger(request.getDateType(),Constants.ZERO), " DATE(t.CREATE_DATE) = DATE(NOW())  ")
+                        //褰撴湀
+                        .apply(Constants.equalsInteger(request.getDateType(),Constants.ONE), " DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')")
+                        //涓婃湀
+                        .apply(Constants.equalsInteger(request.getDateType(),Constants.TWO), "  DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') ")
+                        //鍥哄畾鏈堜唤
+                        .apply(Constants.equalsInteger(request.getDateType(),Constants.THREE)&&StringUtils.isNotBlank(request.getStartDate()), " DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(DATE_SUB('"+request.getStartDate()+"', INTERVAL 1 MONTH), '%Y-%m') ")
+                        //鑷畾涔夋棩鏈�
+                        .apply(Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getStartDate()), "  t.CREATE_DATE >= '"+request.getStartDate()+" 00:00:00'")
+                        .apply(Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getEndDate()), "  t.CREATE_DATE <= '"+request.getEndDate()+" 23:59:59'")
+                        .ne(Goodsorder::getStatus,Constants.OrderStatus.CLOSE.getKey())
+                        .orderByDesc(Goodsorder::getId)
+        );
+        if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(goodsorderList)) {
+            saleReportResponse.setSaleTotal(goodsorderList.stream().map(i->i.getPrice().subtract(i.getMailPrice())).reduce(BigDecimal.ZERO, BigDecimal::add));
+            saleReportResponse.setOrderNum(goodsorderList.size());
+            if(Constants.equalsInteger(request.getQueryType(),Constants.ONE)){
+                List<SaleReportOrderResponse> list = new ArrayList<>();
+                goodsorderList.stream().forEach(goodsorder -> {
+                    SaleReportOrderResponse response = new SaleReportOrderResponse();
+                    response.setId(goodsorder.getId());
+                    response.setCode(goodsorder.getCode());
+                    response.setPrice(goodsorder.getPrice());
+                    response.setMailPrice(goodsorder.getMailPrice());
+                    response.setCreateDate(goodsorder.getCreateDate());
+                    response.setNickName(goodsorder.getNickName());
+                    response.setPhone(goodsorder.getPhone().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"));
+                    response.setShopSettlement(goodsorder.getShopSettlement());
+                    list.add(response);
+                });
+
+                saleReportResponse.setSaleReportOrderResponseList(list);
+            }
+        }
+        List<Integral> integralList = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
+                .eq(Integral::getIsdeleted,Constants.ZERO)
+                .eq(Integral::getMemberId,shopId)
+                .eq(Integral::getUserType,Constants.TWO)
+                .eq(Integral::getType,Constants.ZERO)
+                .eq(Integral::getObjType,Constants.IntegralObjType.ORDER_DONE_AMOUNT.getKey())
+                //浠婃棩
+                .apply(Constants.equalsInteger(request.getDateType(),Constants.ZERO), " DATE(CREATE_DATE) = DATE(NOW())  ")
+                //褰撴湀
+                .apply(Constants.equalsInteger(request.getDateType(),Constants.ONE), " DATE_FORMAT(CREATE_DATE, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')")
+                //涓婃湀
+                .apply(Constants.equalsInteger(request.getDateType(),Constants.TWO), "  DATE_FORMAT(CREATE_DATE, '%Y-%m') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') ")
+                //鍥哄畾鏈堜唤
+                .apply(Constants.equalsInteger(request.getDateType(),Constants.THREE)&&StringUtils.isNotBlank(request.getStartDate()), " DATE_FORMAT(CREATE_DATE, '%Y-%m') = DATE_FORMAT(DATE_SUB('"+request.getStartDate()+"', INTERVAL 1 MONTH), '%Y-%m') ")
+                //鑷畾涔夋棩鏈�
+                .apply(Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getStartDate()), "  CREATE_DATE >= '"+request.getStartDate()+" 00:00:00'")
+                .apply(Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getEndDate()), "  CREATE_DATE <= '"+request.getEndDate()+" 23:59:59'")
+        );
+        if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(integralList)) {
+            saleReportResponse.setProfitTotal(integralList.stream().map(i->i.getNum()).reduce(BigDecimal.ZERO, BigDecimal::add));
+        }
+        return  saleReportResponse;
+    }
+
+
+
+
+
+
+
     @Override
     @Transactional
     public  String setGoodsPrice(Shop dto){
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/WithdrawRecordServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/WithdrawRecordServiceImpl.java
new file mode 100644
index 0000000..58e153e
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/WithdrawRecordServiceImpl.java
@@ -0,0 +1,274 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.biz.system.SystemDictDataBiz;
+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.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.RedisUtil;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.model.*;
+import com.doumee.dao.web.dto.MultiFileDTO;
+import com.doumee.dao.web.request.DealIntegralRequest;
+import com.doumee.dao.web.request.WithdrawApplyRequest;
+import com.doumee.service.business.IntegralService;
+import com.doumee.service.business.WithdrawRecordService;
+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 org.apache.commons.lang3.StringUtils;
+import org.bouncycastle.cert.dane.DANEEntry;
+import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 鐢ㄦ埛鎻愮幇璁板綍Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2026/01/16 11:50
+ */
+@Service
+public class WithdrawRecordServiceImpl implements WithdrawRecordService {
+
+    @Autowired
+    private WithdrawRecordMapper withdrawRecordMapper;
+
+    @Autowired
+    private ShopMapper shopMapper;
+
+    @Autowired
+    private IntegralMapper integralMapper;
+
+    @Autowired
+    private MemberBankMapper memberBankMapper;
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private MultifileMapper multifileMapper;
+
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
+
+    @Override
+    public Integer create(WithdrawRecord withdrawRecord) {
+        withdrawRecordMapper.insert(withdrawRecord);
+        return withdrawRecord.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        withdrawRecordMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(WithdrawRecord withdrawRecord) {
+        UpdateWrapper<WithdrawRecord> deleteWrapper = new UpdateWrapper<>(withdrawRecord);
+        withdrawRecordMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        withdrawRecordMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(WithdrawRecord withdrawRecord) {
+        withdrawRecordMapper.updateById(withdrawRecord);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<WithdrawRecord> withdrawRecords) {
+        if (CollectionUtils.isEmpty(withdrawRecords)) {
+            return;
+        }
+        for (WithdrawRecord withdrawRecord: withdrawRecords) {
+            this.updateById(withdrawRecord);
+        }
+    }
+
+    @Override
+    public WithdrawRecord findById(Integer id) {
+        WithdrawRecord withdrawRecord = withdrawRecordMapper.selectById(id);
+        if (Objects.isNull(withdrawRecord)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        MemberBank memberBank = memberBankMapper.selectById(withdrawRecord.getBankId());
+        if(Objects.nonNull(memberBank)){
+            withdrawRecord.setBankName(memberBank.getBankName());
+        }
+        if(!Constants.equalsInteger(withdrawRecord.getStatus(), Constants.ZERO)){
+            String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() +
+                    systemDictDataBiz.queryByCode(Constants.OSS, Constants.TRANSFER_FILE).getCode();
+            Multifile queryfile = new Multifile();
+            queryfile.setObjId(withdrawRecord.getId());
+            queryfile.setObjType(  Constants.MultiFile.TRANSFER_FILE.getKey());
+            queryfile.setIsdeleted(Constants.ZERO);
+            List<Multifile> filelist = multifileMapper.selectList(new QueryWrapper<>(queryfile));
+            if(filelist !=null && filelist.size()>0){
+                for (Multifile multifile:filelist) {
+                    multifile.setFileFullUrl(path + multifile.getFileurl());
+                }
+                withdrawRecord.setPayFileList(filelist);
+            }
+        }
+        return withdrawRecord;
+    }
+
+    @Override
+    public WithdrawRecord findOne(WithdrawRecord withdrawRecord) {
+        QueryWrapper<WithdrawRecord> wrapper = new QueryWrapper<>(withdrawRecord);
+        return withdrawRecordMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<WithdrawRecord> findList(WithdrawRecord withdrawRecord) {
+        QueryWrapper<WithdrawRecord> wrapper = new QueryWrapper<>(withdrawRecord);
+        return withdrawRecordMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<WithdrawRecord> findPage(PageWrap<WithdrawRecord> pageWrap) {
+        IPage<WithdrawRecord> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<WithdrawRecord> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(WithdrawRecord::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(WithdrawRecord::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(WithdrawRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(WithdrawRecord::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(WithdrawRecord::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(WithdrawRecord::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(WithdrawRecord::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(WithdrawRecord::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getRemark() != null) {
+            queryWrapper.lambda().eq(WithdrawRecord::getRemark, pageWrap.getModel().getRemark());
+        }
+        if (pageWrap.getModel().getMemberId() != null) {
+            queryWrapper.lambda().eq(WithdrawRecord::getMemberId, pageWrap.getModel().getMemberId());
+        }
+        if (pageWrap.getModel().getCode() != null) {
+            queryWrapper.lambda().eq(WithdrawRecord::getCode, pageWrap.getModel().getCode());
+        }
+        if (pageWrap.getModel().getBankId() != null) {
+            queryWrapper.lambda().eq(WithdrawRecord::getBankId, pageWrap.getModel().getBankId());
+        }
+        if (pageWrap.getModel().getStatus() != null) {
+            queryWrapper.lambda().eq(WithdrawRecord::getStatus, pageWrap.getModel().getStatus());
+        }
+        if (pageWrap.getModel().getAuditUser() != null) {
+            queryWrapper.lambda().eq(WithdrawRecord::getAuditUser, pageWrap.getModel().getAuditUser());
+        }
+        if (pageWrap.getModel().getAuditTime() != null) {
+            queryWrapper.lambda().ge(WithdrawRecord::getAuditTime, Utils.Date.getStart(pageWrap.getModel().getAuditTime()));
+            queryWrapper.lambda().le(WithdrawRecord::getAuditTime, Utils.Date.getEnd(pageWrap.getModel().getAuditTime()));
+        }
+        if (pageWrap.getModel().getAuditRemark() != null) {
+            queryWrapper.lambda().eq(WithdrawRecord::getAuditRemark, pageWrap.getModel().getAuditRemark());
+        }
+        if (pageWrap.getModel().getPayBank() != null) {
+            queryWrapper.lambda().eq(WithdrawRecord::getPayBank, pageWrap.getModel().getPayBank());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(withdrawRecordMapper.selectPage(page, queryWrapper));
+    }
+
+
+
+
+    @Override
+    public long count(WithdrawRecord withdrawRecord) {
+        QueryWrapper<WithdrawRecord> wrapper = new QueryWrapper<>(withdrawRecord);
+        return withdrawRecordMapper.selectCount(wrapper);
+    }
+
+
+
+    @Override
+    public void withdrawApply(WithdrawApplyRequest request, IntegralService integralService){
+        if (Objects.isNull( request)
+            || request.getMemberId() == null
+            || request.getBankId() == null
+            || request.getAmount() == null) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        //鏌ヨ鍟嗘埛鍓╀綑浣欓
+        Shop shop = shopMapper.selectById(request.getMemberId());
+        if(Objects.isNull(shop)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鍟嗘埛淇℃伅");
+        }
+        if(shop.getAmount().compareTo(request.getAmount()) < 0){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鍟嗘埛浣欓涓嶈冻");
+        }
+
+        WithdrawRecord withdrawRecord = new WithdrawRecord();
+        withdrawRecord.setCreateDate(new Date());
+        withdrawRecord.setIsdeleted(Constants.ZERO);
+        withdrawRecord.setEditDate(new Date());
+        withdrawRecord.setBankId(request.getBankId());
+        withdrawRecord.setAmount(request.getAmount());
+        withdrawRecord.setMemberId(request.getMemberId());
+        withdrawRecord.setCode(this.getNextInCode());
+        withdrawRecord.setStatus(Constants.ZERO);
+        withdrawRecordMapper.insert(withdrawRecord);
+
+        DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+        dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.WITHDRAW_APPLY);
+        dealIntegralRequest.setIntegralNum(request.getAmount());
+        dealIntegralRequest.setObjId(withdrawRecord.getId());
+        dealIntegralRequest.setOrderCode(withdrawRecord.getCode().toString());
+        dealIntegralRequest.setMemberId(request.getMemberId());
+        dealIntegralRequest.setDealType(Constants.ONE);
+        integralService.dealShopAmount(dealIntegralRequest);
+    }
+
+
+
+    public synchronized  Long  getNextInCode(){
+        String prefix =  DateUtil.getDate(new Date(),"yyyyMMdd") ;
+        Integer countNum  = RedisUtil.getObject(redisTemplate, Constants.RedisKeys.WITHDRAW_KEY,Integer.class);
+        countNum = Constants.formatIntegerNum(countNum)+1;
+        //鏇存柊缂撳瓨
+        RedisUtil.addObject(redisTemplate,Constants.RedisKeys.WITHDRAW_KEY,countNum);
+        String nextIndex =Long.toString( countNum);
+        return Long.parseLong(prefix + StringUtils.leftPad(nextIndex,4,"0"));
+    }
+
+
+
+
+
+}
diff --git a/server/dmmall_web/src/main/java/com/doumee/api/web/AccountApi.java b/server/dmmall_web/src/main/java/com/doumee/api/web/AccountApi.java
index df75ba5..19c6c9e 100644
--- a/server/dmmall_web/src/main/java/com/doumee/api/web/AccountApi.java
+++ b/server/dmmall_web/src/main/java/com/doumee/api/web/AccountApi.java
@@ -47,6 +47,16 @@
         return  ApiResponse.success(memberService.wxLogin(code,recId));
     }
 
+    @LoginRequired
+    @ApiOperation(value = "缁戝畾鎵嬫満鍙�", notes = "灏忕▼搴忕")
+    @PostMapping("/wxPhone")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+    })
+    public ApiResponse<AccountResponse> wxPhone(@Valid @RequestBody WxPhoneRequest wxPhoneRequest) {
+        return  ApiResponse.success(memberService.wxPhone(wxPhoneRequest));
+    }
+
     @ApiOperation(value = "娴嬭瘯鐧婚檰鎺ュ彛", notes = "灏忕▼搴忕")
     @GetMapping("/testLogin")
     @ApiImplicitParams({
@@ -56,17 +66,6 @@
         return  ApiResponse.success(memberService.wxLoginTest(memberId));
     }
 
-    @LoginRequired
-    @ApiOperation(value = "缁戝畾鎵嬫満鍙�", notes = "灏忕▼搴忕")
-    @PostMapping("/wxPhone")
-    @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
-    })
-    public ApiResponse wxLogin(@Valid @RequestBody WxPhoneRequest wxPhoneRequest) {
-        wxPhoneRequest.setMemberId(getMemberId());
-        memberService.wxPhone(wxPhoneRequest);
-        return  ApiResponse.success("缁戝畾鎴愬姛");
-    }
 
     @LoginRequired
     @ApiOperation(value = "鏇存柊鐢ㄦ埛淇℃伅", notes = "灏忕▼搴忕")
diff --git a/server/dmmall_web/src/main/java/com/doumee/api/web/ApiController.java b/server/dmmall_web/src/main/java/com/doumee/api/web/ApiController.java
index 55b9b10..6095cae 100644
--- a/server/dmmall_web/src/main/java/com/doumee/api/web/ApiController.java
+++ b/server/dmmall_web/src/main/java/com/doumee/api/web/ApiController.java
@@ -10,6 +10,7 @@
 import com.doumee.dao.system.model.SystemDictData;
 import com.doumee.dao.web.response.goods.CartGoodsResponse;
 import com.doumee.service.business.*;
+import com.doumee.service.business.impl.MemberCouponServiceImpl;
 import com.doumee.service.system.SystemDictDataService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.SecurityUtils;
@@ -58,6 +59,14 @@
     @Autowired
     public ShopService shopService;
 
+    @Autowired
+    public WithdrawRecordService withdrawRecordService;
+
+    @Autowired
+    public MemberBankService memberBankService;
+
+    @Autowired
+    public MemberCouponServiceImpl memberCouponServiceImpl;
 
     @Autowired
     public GoodsorderDetailService goodsorderDetailService;
@@ -156,4 +165,10 @@
         return obj != null ? (Integer) obj : null;
     }
 
+    protected Integer getShopId() {
+        Object obj = this.getRequest().getAttribute(JwtTokenUtil.ShopId_Name);
+        return obj != null ? (Integer) obj : null;
+    }
+
+
 }
diff --git a/server/dmmall_web/src/main/java/com/doumee/api/web/MemberBankApi.java b/server/dmmall_web/src/main/java/com/doumee/api/web/MemberBankApi.java
new file mode 100644
index 0000000..8e590d2
--- /dev/null
+++ b/server/dmmall_web/src/main/java/com/doumee/api/web/MemberBankApi.java
@@ -0,0 +1,57 @@
+package com.doumee.api.web;
+
+import com.doumee.config.annotation.LoginRequired;
+import com.doumee.config.annotation.LoginShopRequired;
+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.MemberBank;
+import com.doumee.dao.web.dto.shop.*;
+import com.doumee.dao.web.request.MemberBankSaveRequest;
+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.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 17:33
+ */
+@Api(tags = "鍟嗘埛鎻愮幇閾惰鍗�")
+@Trace(exclude = true)
+@RestController
+@RequestMapping("/web/bank")
+@Slf4j
+public class MemberBankApi extends ApiController{
+
+
+    @LoginShopRequired
+    @ApiOperation(value = "鎻愮幇閾惰鏂板淇敼", notes = "灏忕▼搴忕")
+    @PostMapping("/saveBank")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse saveBank(@RequestBody MemberBankSaveRequest request){
+        request.setMemberId(getShopId());
+        memberBankService.saveOrUpdate(request);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @LoginShopRequired
+    @ApiOperation(value = "鑾峰彇鎴戠殑鎻愮幇閾惰鍗�", notes = "灏忕▼搴忕")
+    @GetMapping("/getBankList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<List<MemberBank>> getBankList(){
+        return ApiResponse.success(memberBankService.getMyBankList(getShopId()));
+    }
+
+}
diff --git a/server/dmmall_web/src/main/java/com/doumee/api/web/ShopApi.java b/server/dmmall_web/src/main/java/com/doumee/api/web/ShopApi.java
index edff3fb..3e1fc59 100644
--- a/server/dmmall_web/src/main/java/com/doumee/api/web/ShopApi.java
+++ b/server/dmmall_web/src/main/java/com/doumee/api/web/ShopApi.java
@@ -1,14 +1,24 @@
 package com.doumee.api.web;
 
+import com.doumee.config.annotation.LoginRequired;
+import com.doumee.config.annotation.LoginShopRequired;
 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.Shop;
+import com.doumee.dao.business.model.WithdrawRecord;
 import com.doumee.dao.web.dto.shop.*;
+import com.doumee.dao.web.request.WithdrawApplyRequest;
 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.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * Created by IntelliJ IDEA.
@@ -68,4 +78,46 @@
         shopService.update(shopDTO,memberId);
         return ApiResponse.success(null);
     }
+
+
+
+    @LoginRequired
+    @ApiOperation(value = "鐢ㄦ埛涓嬪崟鏌ヨ鍙�夋嫨鐨勮嚜鎻愮粡閿�鍟�", notes = "灏忕▼搴忕")
+    @PostMapping("/getShopList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse getShopList(@RequestBody ShopListDTO dto){
+        return ApiResponse.success(shopService.getShopList(dto));
+    }
+
+
+
+    @LoginShopRequired
+    @ApiOperation(value = "鎻愮幇鐢宠 - 缁忛攢鍟�", notes = "灏忕▼搴忕")
+    @PostMapping("/withdrawApply")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse withdrawApply(@RequestBody WithdrawApplyRequest request){
+        request.setMemberId(getShopId());
+        withdrawRecordService.withdrawApply(request,integralService);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
+
+    @LoginShopRequired
+    @ApiOperation("鏌ヨ鎻愮幇鐢宠璇︽儏")
+    @GetMapping("/withdrawDetail")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<WithdrawRecord> withdrawDetail(@RequestParam Integer id) {
+        return ApiResponse.success(withdrawRecordService.findById(id));
+    }
+
+
+
+
 }
diff --git a/server/dmmall_web/src/main/java/com/doumee/api/web/mall/IntegralApi.java b/server/dmmall_web/src/main/java/com/doumee/api/web/mall/IntegralApi.java
new file mode 100644
index 0000000..3a55d80
--- /dev/null
+++ b/server/dmmall_web/src/main/java/com/doumee/api/web/mall/IntegralApi.java
@@ -0,0 +1,63 @@
+package com.doumee.api.web.mall;
+
+import com.doumee.api.web.ApiController;
+import com.doumee.config.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.Integral;
+import com.doumee.dao.web.dto.IntegralRecordDTO;
+import com.doumee.dao.web.response.IntegralDataResponse;
+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.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2026/1/14 16:53
+ */
+@Api(tags = "绉垎淇℃伅涓氬姟")
+@Trace(exclude = true)
+@RestController
+@RequestMapping("/web/integral")
+@Slf4j
+public class IntegralApi extends ApiController {
+
+    @LoginRequired
+    @ApiOperation("鑾峰彇鐢ㄦ埛鐨勭Н鍒嗚褰�")
+    @PostMapping("/findIntegralRecordPage")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<PageData<Integral>> findIntegralRecordPage (@RequestBody PageWrap<IntegralRecordDTO> pageWrap) {
+        return ApiResponse.success(integralService.findIntegralRecordPage(pageWrap));
+    }
+
+    @LoginRequired
+    @ApiOperation("鑾峰彇鐢ㄦ埛鍓╀綑绉垎涓庡緟鎯呭喌绉垎淇℃伅")
+    @PostMapping("/getIntegralData")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<IntegralDataResponse> getIntegralData (@RequestBody IntegralRecordDTO dto) {
+        return ApiResponse.success(integralService.getIntegralData(dto));
+    }
+
+
+
+
+
+
+
+
+}
diff --git a/server/dmmall_web/src/main/java/com/doumee/api/web/mall/OrderApi.java b/server/dmmall_web/src/main/java/com/doumee/api/web/mall/OrderApi.java
index 00f83d4..56be23e 100644
--- a/server/dmmall_web/src/main/java/com/doumee/api/web/mall/OrderApi.java
+++ b/server/dmmall_web/src/main/java/com/doumee/api/web/mall/OrderApi.java
@@ -3,8 +3,10 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.doumee.api.web.ApiController;
 import com.doumee.config.annotation.LoginRequired;
+import com.doumee.config.annotation.LoginShopRequired;
 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.core.utils.kuaidi100.DeliveryDTO;
 import com.doumee.core.utils.kuaidi100.ExpressUtils;
@@ -14,10 +16,7 @@
 import com.doumee.dao.business.model.MemberCoupon;
 import com.doumee.dao.business.model.Shop;
 import com.doumee.dao.web.dto.CouponDTO;
-import com.doumee.dao.web.request.OrderPayRequest;
-import com.doumee.dao.web.request.PageRequest;
-import com.doumee.dao.web.request.PayDetailRequest;
-import com.doumee.dao.web.request.ShopOrderPayRequest;
+import com.doumee.dao.web.request.*;
 import com.doumee.dao.web.request.goods.DealOrderRequest;
 import com.doumee.dao.web.request.goods.MemberOrderRequest;
 import com.doumee.dao.web.request.goods.OrderCommentRequest;
@@ -135,19 +134,16 @@
         return ApiResponse.success("鏌ヨ鎴愬姛", memberCouponService.getApplyCoupon(requestList,getMemberId()));
     }
 
-    @LoginRequired
-    @ApiOperation("缁忛攢鍟嗗垪琛�")
-    @PostMapping("/shopPage")
-    @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-    })
-    public ApiResponse<IPage<Shop>> shopPage(@RequestBody PageWrap<Shop> pageWrap) {
-        IPage<Shop> page = goodsorderService.getShopPage(pageWrap);
-        return ApiResponse.success("鏌ヨ鎴愬姛",page);
-    }
-
-    @Autowired
-    public MemberCouponServiceImpl memberCouponServiceImpl;
+//    @LoginRequired
+//    @ApiOperation("缁忛攢鍟嗗垪琛�")
+//    @PostMapping("/shopPage")
+//    @ApiImplicitParams({
+//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+//    })
+//    public ApiResponse<IPage<Shop>> shopPage(@RequestBody PageWrap<Shop> pageWrap) {
+//        IPage<Shop> page = goodsorderService.getShopPage(pageWrap);
+//        return ApiResponse.success("鏌ヨ鎴愬姛",page);
+//    }
 
     @LoginRequired
     @ApiOperation("璁㈠崟鏀粯")
@@ -299,4 +295,30 @@
         return ApiResponse.success("鎿嶄綔鎴愬姛",deliveryDTO);
     }
 
+
+
+    @LoginShopRequired
+    @ApiOperation("缁忛攢鍟嗚鍗曞垪琛�")
+    @PostMapping("/shopOrderPage")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<PageData<Goodsorder>> shopOrderPage(@RequestBody PageWrap<ShopOrderRequest> pageWrap) {
+        pageWrap.getModel().setShopId(getShopId());
+        PageData<Goodsorder> page = goodsorderService.shopOrderPage(pageWrap);
+        return ApiResponse.success("鏌ヨ鎴愬姛",page);
+    }
+
+
+    @LoginShopRequired
+    @ApiOperation("璁㈠崟璇︽儏 - 缁忛攢鍟�")
+    @GetMapping("/shopOrderDetail")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "orderId", value = "璁㈠崟涓婚敭", required = true),
+    })
+    public ApiResponse<MemberOrderResponse> shopOrderDetail(@RequestParam Integer orderId) {
+        return ApiResponse.success("鏌ヨ鎴愬姛", goodsorderService.getGoodsOrderDetail(orderId));
+    }
+
 }

--
Gitblit v1.9.3