From f4e09a3f13bbf63b166c3a149497a93a9fd43bc5 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期二, 13 一月 2026 18:25:41 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/GoodsInfoResponse.java           |    8 
 server/dmmall_service/src/main/java/com/doumee/service/business/ShopcartService.java                   |    6 
 server/dmmall_web/src/main/java/com/doumee/api/web/mall/ShopCartApi.java                               |   11 
 server/dmmall_service/src/main/java/com/doumee/dao/web/dto/CouponDTO.java                              |   14 
 server/dmmall_service/db/business.shop_goods_relation.permissions.sql                                  |    6 
 server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/OrderPayConfirmResponse.java     |   51 +
 server/dmmall_web/src/main/java/com/doumee/api/web/mall/PaymentCallback.java                           |   35 
 server/dmmall_web/src/main/java/com/doumee/api/web/ApiController.java                                  |    6 
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/GoodsorderDetail.java                |   18 
 server/dmmall_service/src/main/java/com/doumee/dao/business/ShopMapper.java                            |   23 
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java             |   78 +
 server/dmmall_service/src/main/java/com/doumee/service/business/ShopGoodsRelationService.java          |   97 ++
 server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/GoodsRequest.java                 |   13 
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java          |   36 
 server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsMapper.java                           |   10 
 server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/MemberOrderResponse.java         |   24 
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java                      |   22 
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/Shop.java                            |    4 
 server/dmmall_web/src/main/java/com/doumee/api/web/mall/HomeApi.java                                   |   70 +
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/Integral.java                        |   18 
 server/dmmall_service/src/main/java/com/doumee/dao/web/request/ShopOrderPayRequest.java                |   43 +
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java        |  628 ++++++++++++++
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java      |  220 ++++
 server/dmmall_service/src/main/java/com/doumee/dao/business/ShopGoodsRelationMapper.java               |   12 
 server/dmmall_service/src/main/java/com/doumee/dao/web/request/OrderPayRequest.java                    |    1 
 server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderDetailMapper.java                |    3 
 server/dmmall_service/src/main/java/com/doumee/dao/web/request/OrderCancelRequest.java                 |   26 
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/ShopGoodsRelation.java               |   72 +
 server/dmmall_web/src/main/java/com/doumee/api/web/mall/OrderApi.java                                  |   99 ++
 server/dmmall_service/src/main/java/com/doumee/dao/web/request/DealIntegralRequest.java                |    3 
 server/dmmall_service/src/main/java/com/doumee/service/business/MemberCouponService.java               |   19 
 server/dmmall_service/src/main/java/com/doumee/dao/web/response/HomeInfoResponse.java                  |   36 
 server/dmmall_service/src/main/resources/application-dev.yml                                           |    2 
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java            |   77 +
 server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java                     |   12 
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopGoodsRelationServiceImpl.java |  139 +++
 server/dmmall_service/src/main/java/com/doumee/core/utils/ListUtil.java                                |   39 
 server/dmmall_service/src/main/java/com/doumee/dao/web/response/MemberCouponResponse.java              |   85 ++
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopcartServiceImpl.java          |   13 
 server/dmmall_service/src/main/java/com/doumee/dao/web/request/UpdMobileRequest.java                   |   29 
 server/dmmall_service/src/main/java/com/doumee/dao/business/MemberCouponMapper.java                    |    4 
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goods.java                           |    8 
 server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java                               |   78 +
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberCoupon.java                    |   16 
 server/dmmall_admin/src/main/java/com/doumee/api/business/ShopGoodsRelationController.java             |   90 ++
 server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java                 |   31 
 server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/OrderGoodsCalculateResponse.java |   90 ++
 server/dmmall_service/src/main/java/com/doumee/service/business/IntegralService.java                   |    9 
 server/dmmall_service/src/main/java/com/doumee/dao/business/model/Member.java                          |    3 
 server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/DealOrderRequest.java             |    4 
 server/dmmall_service/src/main/java/com/doumee/core/constants/ResponseStatus.java                      |    2 
 server/dmmall_service/src/main/java/com/doumee/dao/web/response/PayDetailResponse.java                 |   37 
 server/dmmall_service/src/main/java/com/doumee/core/utils/DateUtil.java                                |    2 
 server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderMapper.java                      |   12 
 server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/MemberOrderRequest.java           |    2 
 server/dmmall_service/src/main/java/com/doumee/dao/web/request/PayDetailRequest.java                   |    2 
 56 files changed, 2,396 insertions(+), 102 deletions(-)

diff --git a/server/dmmall_admin/src/main/java/com/doumee/api/business/ShopGoodsRelationController.java b/server/dmmall_admin/src/main/java/com/doumee/api/business/ShopGoodsRelationController.java
new file mode 100644
index 0000000..bff53bb
--- /dev/null
+++ b/server/dmmall_admin/src/main/java/com/doumee/api/business/ShopGoodsRelationController.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.ShopGoodsRelation;
+import com.doumee.service.business.ShopGoodsRelationService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/12/15 09:39
+ */
+@Api(tags = "缁忛攢鍟嗕緵璐т环淇℃伅")
+@RestController
+@RequestMapping("/business/shopGoodsRelation")
+public class ShopGoodsRelationController extends BaseController {
+
+    @Autowired
+    private ShopGoodsRelationService shopGoodsRelationService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:shopgoodsrelation:create")
+    public ApiResponse create(@RequestBody ShopGoodsRelation shopGoodsRelation) {
+        return ApiResponse.success(shopGoodsRelationService.create(shopGoodsRelation));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:shopgoodsrelation:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        shopGoodsRelationService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:shopgoodsrelation: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));
+        }
+        shopGoodsRelationService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:shopgoodsrelation:update")
+    public ApiResponse updateById(@RequestBody ShopGoodsRelation shopGoodsRelation) {
+        shopGoodsRelationService.updateById(shopGoodsRelation);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:shopgoodsrelation:query")
+    public ApiResponse<PageData<ShopGoodsRelation>> findPage (@RequestBody PageWrap<ShopGoodsRelation> pageWrap) {
+        return ApiResponse.success(shopGoodsRelationService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:shopgoodsrelation:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<ShopGoodsRelation> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(ShopGoodsRelation.class).export(shopGoodsRelationService.findPage(pageWrap).getRecords(), "缁忛攢鍟嗕緵璐т环淇℃伅", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:shopgoodsrelation:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(shopGoodsRelationService.findById(id));
+    }
+}
diff --git a/server/dmmall_service/db/business.shop_goods_relation.permissions.sql b/server/dmmall_service/db/business.shop_goods_relation.permissions.sql
new file mode 100644
index 0000000..9c11edb
--- /dev/null
+++ b/server/dmmall_service/db/business.shop_goods_relation.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:shopgoodsrelation: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:shopgoodsrelation: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:shopgoodsrelation: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:shopgoodsrelation: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:shopgoodsrelation:exportExcel', '瀵煎嚭缁忛攢鍟嗕緵璐т环淇℃伅(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/dmmall_service/src/main/java/com/doumee/core/constants/ResponseStatus.java b/server/dmmall_service/src/main/java/com/doumee/core/constants/ResponseStatus.java
index b686a17..c60c7be 100644
--- a/server/dmmall_service/src/main/java/com/doumee/core/constants/ResponseStatus.java
+++ b/server/dmmall_service/src/main/java/com/doumee/core/constants/ResponseStatus.java
@@ -13,7 +13,7 @@
 public enum ResponseStatus {
     // 400寮�澶磋〃绀哄弬鏁伴敊璇�
     BAD_REQUEST(4000, "鍙傛暟閿欒"),
-    DATA_EMPTY(4001, "鎵句笉鍒扮洰鏍囨暟鎹�"),
+    DATA_EMPTY(4001, "鎵句笉鍒扮洰鏍囨暟鎹垨鏁版嵁宸插垹闄�"),
     DATA_EXISTS(4002, "璁板綍宸插瓨鍦�"),
     PWD_INCORRECT(4003, "瀵嗙爜涓嶆纭�"),
     VERIFICATION_CODE_INCORRECT(4004, "楠岃瘉鐮佷笉姝g‘鎴栧凡杩囨湡"),
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 c0cceb2..84e39a4 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
@@ -57,6 +57,14 @@
     public static final String INITIAL_PASSWORD = "INITIAL_PASSWORD";
     public static final String ACCESS_TOKEN = "ACCESS_TOKEN";
 
+    public static final String MINIMUM_AVAILABLE_INTEGRAL = "MINIMUM_AVAILABLE_INTEGRAL";//鏈�浣庡彲鐢ㄧН鍒嗛厤缃�
+    public static final String SHOP_CONFIG = "SHOP_CONFIG";
+    public static final String INTEGRAL_EXCHANGE_CASH_RATA = "INTEGRAL_EXCHANGE_CASH_RATA"; //绉垎-鐜伴噾鍏戞崲姣斾緥锛圶XX绉垎鎶垫墸1鍏冿級
+
+
+    public static final String CASH_EXCHANGE_INTEGRAL_RATA = "CASH_EXCHANGE_INTEGRAL_RATA";//鐜伴噾-绉垎鍏戞崲姣斾緥锛�1鍏冨彲寰楀埌XXX绉垎锛�
+
+
     public static final String INITIAL_ROLE = "INITIAL_ROLE";
 
     public static final String PLAT_ADDR="PLAT_ADDR";
@@ -568,7 +576,7 @@
      */
     public  enum OrderStatus{
         WAIT_PAY(0, "寰呮敮浠�", "寰呮敮浠�"),
-        PAY_DONE(1, "寰呭彂璐�", "宸叉敮浠樺緟鍙戣揣"),
+        PAY_DONE(1, "寰呭彂璐�/寰呰嚜鎻�", "宸叉敮浠樺緟鍙戣揣/寰呰嚜鎻�"),
         WAIT_RECEIVE(2, "寰呮敹璐�", "宸插彂璐у緟鏀惰揣"),
         DONE(3, "浜ゆ槗瀹屾垚", "浜ゆ槗瀹屾垚"),
         CLOSE(4, "宸插叧闂�", "宸插叧闂�"),
@@ -844,7 +852,10 @@
         EXCHANGE_CARD(11,"鍗″厖鍊�","鍗″厖鍊�",0),
         SYSTEM_RECHARGE(12,"骞冲彴鍏呭��","骞冲彴鍏呭��",0),
         SYSTEM_DEDUCT(13,"骞冲彴鎵f","骞冲彴鎵f",0),
-        SHOP_ORDER_CANCEL(14,"浣欓鎶垫墸鍟嗗搧閫�杩�","浣欓鎶垫墸鍟嗗搧閫�杩�",0)
+        SHOP_ORDER_CANCEL(14,"浣欓鎶垫墸鍟嗗搧閫�杩�","浣欓鎶垫墸鍟嗗搧閫�杩�",0),
+        SHOP_ORDER_SETTLEMENT(15,"涓嬪崟缁撶畻閲戦","涓嬪崟缁撶畻閲戦",0), //缁忛攢鍟嗕笅鍗曠粨绠楅噾棰�
+        SHOP_ORDER_CANCEL_SETTLEMENT(16,"鍙栨秷璁㈠崟缁撶畻閲戦杩旇繕","鍙栨秷璁㈠崟缁撶畻閲戦杩旇繕",0), //鍙栨秷璁㈠崟缁撶畻閲戦杩旇繕
+        SHOP_YEAR_SETTLEMENT(17,"骞村害缁撶畻","骞村害缁撶畻",0) //骞村害缁撶畻
         ;
         // 鎴愬憳鍙橀噺
         private String name;
@@ -1056,4 +1067,67 @@
         }
 
     }
+
+
+    public static String getRandomNumber(){
+        Random random = new Random();
+        long randomNumber = (long)(random.nextDouble() * 90000000000L) + 100000000000L;
+        return randomNumber +"";
+    }
+
+
+    public  enum INTEGRAL_TYPE{
+        ORDER_PAY(0, "璁㈠崟娑堣��", -1),
+        ORDER_CANCEL(1, "璁㈠崟鍙栨秷杩旇繕", 1),
+        ;
+        // 鎴愬憳鍙橀噺
+        private String name;
+        private int key;
+        private int type;// 鎻忚堪
+
+        // 鏋勯�犳柟娉�
+        INTEGRAL_TYPE(int key, String name, int type) {
+            this.name = name;
+            this.key = key;
+            this.type = type;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getName(int index) {
+            for (INTEGRAL_TYPE c : INTEGRAL_TYPE.values()) {
+                if (c.getKey() == index) {
+                    return c.name;
+                }
+            }
+            return null;
+        }
+
+
+        // get set 鏂规硶
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getKey() {
+            return key;
+        }
+
+        public void setKey(int key) {
+            this.key = key;
+        }
+
+        public int getType() {
+            return type;
+        }
+
+        public void setType(int type) {
+            this.type = type;
+        }
+    }
+
+
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/core/utils/DateUtil.java b/server/dmmall_service/src/main/java/com/doumee/core/utils/DateUtil.java
index fba742f..b1520c5 100644
--- a/server/dmmall_service/src/main/java/com/doumee/core/utils/DateUtil.java
+++ b/server/dmmall_service/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -1907,7 +1907,7 @@
      */
     public static String getCurrDateTime() {
         Timestamp date = new Timestamp(System.currentTimeMillis());
-        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         return formatter.format(date);
     }
 
diff --git a/server/dmmall_service/src/main/java/com/doumee/core/utils/ListUtil.java b/server/dmmall_service/src/main/java/com/doumee/core/utils/ListUtil.java
new file mode 100644
index 0000000..877cc22
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/core/utils/ListUtil.java
@@ -0,0 +1,39 @@
+package com.doumee.core.utils;
+
+import org.springframework.beans.BeanUtils;
+
+import java.util.List;
+import java.util.function.Supplier;
+import java.util.stream.Collectors;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/12/12 9:31
+ */
+public class ListUtil {
+
+    public static <S, T> List<T> copyProperties(List<S> sources, Supplier<T> target) {
+        return sources.stream().map(source -> {
+            T t = target.get();
+            BeanUtils.copyProperties(source, t);
+            return t;
+        }).collect(Collectors.toList());
+    }
+
+    public static <S, T> List<T> copyListProperties(List<S> sources, Class<T> target) {
+        return sources.stream().map(source -> {
+            T t;
+            try {
+                t = target.newInstance();
+            } catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+            BeanUtils.copyProperties(source, t);
+            return t;
+        }).collect(Collectors.toList());
+    }
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsMapper.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsMapper.java
index 88a240d..2a54f92 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsMapper.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsMapper.java
@@ -7,6 +7,7 @@
 import com.doumee.dao.business.model.Goods;
 import com.doumee.dao.web.request.goods.GoodsRequest;
 import com.doumee.dao.web.response.goods.GoodsInfoResponse;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
@@ -14,18 +15,21 @@
  * @author 姹熻箘韫�
  * @date 2023/03/21 15:48
  */
-public interface GoodsMapper extends BaseMapper<Goods> {
+public interface GoodsMapper extends MPJJoinMapper<Goods> {
 
 
 
     @Select(" select g.* , " +
-            "(( select count(1) from goodsorder_detail gd inner join goods_sku gs on gd.GOODS_SKU_ID = gs.id where gs.GOODS_ID = g.`id`  )+ g.SALENUM) as realSaleNum   " +
+            "(( select count(1) from goodsorder_detail gd inner join goods_sku gs on gd.GOODS_SKU_ID = gs.id where gs.GOODS_ID = g.`id`  )+ g.SALENUM) as realSaleNum ," +
+            " ifnull(( select min(gs.PRICE) from goods_sku gs where gs.GOODS_ID = g.id ),0) as minPrice  " +
             " from goods g  " +
             " ${ew.customSqlSegment} ")
     IPage<GoodsInfoResponse> goodsPage(IPage<GoodsRequest> page, @Param(Constants.WRAPPER) Wrapper wrapper);
 
 
-    @Select(" select g.* ,  ( select count(1) from goodsorder_detail gd inner join goods_sku gs on gd.GOODS_SKU_ID = gs.id where gs.GOODS_ID = g.id  ) as realSaleNum    " +
+    @Select(" select g.* , " +
+            "(( select count(1) from goodsorder_detail gd inner join goods_sku gs on gd.GOODS_SKU_ID = gs.id where gs.GOODS_ID = g.`id`  )+ g.SALENUM) as realSaleNum ," +
+            " ifnull(( select min(gs.PRICE) from goods_sku gs where gs.GOODS_ID = g.id ),0) as minPrice  " +
             " from goods g  " +
             "  where g.ISDELETED = 0 and g.id = #{id} ")
     GoodsInfoResponse getGoodsInfo(@Param("id") Integer id);
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderDetailMapper.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderDetailMapper.java
index 809261b..2c27f57 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderDetailMapper.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderDetailMapper.java
@@ -8,6 +8,7 @@
 import com.doumee.dao.web.response.OrderCommentResponse;
 import com.doumee.dao.web.response.OrderDetailResponse;
 import com.doumee.dao.web.response.goods.MemberOrderDetailResponse;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
@@ -17,7 +18,7 @@
  * @author 姹熻箘韫�
  * @date 2023/03/21 15:48
  */
-public interface GoodsorderDetailMapper extends BaseMapper<GoodsorderDetail> {
+public interface GoodsorderDetailMapper extends MPJJoinMapper<GoodsorderDetail> {
 
 
     @Select(" select o.* , g.STATUS , g.PRICE as titlePrice   " +
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 e7745fe..af4c3a6 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
@@ -23,18 +23,18 @@
 
     @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 ," +
             " 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 , SUBDATE(g.CREATE_DATE,interval - 15 minute) as cancelDate , g.PAY_DATE AS payDate , g.DONE_DATE as doneDate " +
-            " , g.MEMBER_INFO  " +
-            " from goodsorder g  " +
+            "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  " +
+            " from goodsorder g left join shop s on g.PICK_UP_SHOP_ID = s.id   " +
             " ${ew.customSqlSegment} ")
     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 ," +
             " 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 , SUBDATE(g.CREATE_DATE,interval - 15 minute) as cancelDate , g.PAY_DATE AS payDate , g.DONE_DATE as doneDate " +
-            " , g.MEMBER_INFO  " +
-            " from goodsorder g  " +
+            "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 " +
+            " from goodsorder g left join shop s on g.PICK_UP_SHOP_ID = s.id   " +
             " where g.id = #{id} ")
     MemberOrderResponse goodsOrderDetail(@Param("id") Integer id);
 
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/MemberCouponMapper.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/MemberCouponMapper.java
index 7d8b794..f607b6e 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/MemberCouponMapper.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/MemberCouponMapper.java
@@ -6,6 +6,7 @@
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.doumee.dao.business.model.MemberCoupon;
 import com.doumee.dao.web.dto.CouponDTO;
+import com.doumee.dao.web.response.MemberCouponResponse;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
@@ -19,7 +20,6 @@
     @Select(" select m.*   " +
             " from member_coupon m  " +
             " ${ew.customSqlSegment} ")
-    IPage<CouponDTO> memberCouponPage(IPage<CouponDTO> page, @Param(Constants.WRAPPER) Wrapper wrapper);
-
+    IPage<MemberCouponResponse> memberCouponPage(IPage<CouponDTO> page, @Param(Constants.WRAPPER) Wrapper wrapper);
 
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/ShopGoodsRelationMapper.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/ShopGoodsRelationMapper.java
new file mode 100644
index 0000000..830222c
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/ShopGoodsRelationMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.ShopGoodsRelation;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/12/15 09:39
+ */
+public interface ShopGoodsRelationMapper extends BaseMapper<ShopGoodsRelation> {
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/ShopMapper.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/ShopMapper.java
index 5c90105..4bcd2be 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/ShopMapper.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/ShopMapper.java
@@ -2,6 +2,10 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.Shop;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.math.BigDecimal;
 
 /**
  * @author 姹熻箘韫�
@@ -9,4 +13,23 @@
  */
 public interface ShopMapper extends BaseMapper<Shop> {
 
+
+    /**
+     * 娣诲姞绉垎
+     * @param memberId
+     * @param integral
+     */
+    @Select(" update shop set INTEGRAL = ifNull( INTEGRAL,0) + #{integral} , TOTAL_INTEGRAL = ifNull(TOTAL_INTEGRAL,0) +  #{titleIntegral}   , EDIT_DATE = now()  where id = #{shopId}  ")
+    void addIntegral(@Param("shopId") Integer shopId , @Param("integral") BigDecimal integral , @Param("titleIntegral")BigDecimal titleIntegral);
+
+    /**
+     * 鍑忓皯绉垎
+     * @param memberId
+     * @param integral
+     */
+    @Select(" update shop set INTEGRAL = ifNull( INTEGRAL,0) - #{integral} , EDIT_DATE = now()   where id = #{shopId}  ")
+    void subtractIntegral(@Param("shopId") Integer shopId , @Param("integral")BigDecimal integral);
+
+
+
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goods.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goods.java
index e47f226..c5b7cd7 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goods.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goods.java
@@ -126,13 +126,15 @@
     @ExcelColumn(name="涓�绾у垎绫�")
     private String parentCategoryId;
 
-    @ApiModelProperty(value = "鎶垫墸姣斾緥锛�0.1%~100%锛�", example = "1")
+    @ApiModelProperty(value = "鎶垫墸姣斾緥锛�0.1%~100%锛�", example = "1", hidden = true)
+    @TableField(exist = false)
     private BigDecimal deductRata;
 
 
     @ApiModelProperty(value = "sku閲嶉噺", hidden = true)
     @TableField(exist = false)
     private BigDecimal weight;
+
     @ApiModelProperty(value = "sku閲戦", hidden = true)
     @TableField(exist = false)
     private BigDecimal skuPrice;
@@ -148,6 +150,10 @@
     @TableField(exist = false)
     private Integer skuId;
 
+    @ApiModelProperty(value = "sku鍥剧墖", hidden = true)
+    @TableField(exist = false)
+    private String skuImg;
+
     @ApiModelProperty(value = "鍟嗗搧杞挱鍥�", example = "1")
     @TableField(exist = false)
     private List<Multifile> fileList;
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 0695672..9005c29 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
@@ -7,6 +7,7 @@
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
@@ -58,6 +59,9 @@
     @ApiModelProperty(value = "鏀惰揣鍦板潃")
     @ExcelColumn(name="鑱旂郴浜哄湴鍧�" ,index =8 ,width = 10)
     private String linkaddr;
+
+    @ApiModelProperty(value = "璁㈠崟鎬讳环鏍�", example = "1")
+    private BigDecimal totalPrice;
 
     @ApiModelProperty(value = "璁㈠崟瀹炰粯浠锋牸锛堝厓/鍜栬眴锛�", example = "1")
     @ExcelColumn(name="璁㈠崟瀹炰粯浠锋牸",index =9,width = 10)
@@ -173,10 +177,28 @@
     @ApiModelProperty(value = "浼樻儬鍒哥紪鐮侊紙鍏宠仈MEMBER_COUPON琛級", example = "1")
     private Integer couponId;
 
+
+    @ApiModelProperty(value = "绉垎鎶垫墸閲戦", example = "1")
+    private BigDecimal integralPrice;
+
+    @ApiModelProperty(value = "娑堣�楃Н鍒嗗��", example = "1")
+    private BigDecimal useIntegral;
+
+
     @ApiModelProperty(value = "鍜栧暋璁″垝璁㈠崟褰㈠紡 0鏂板 1寤堕暱", example = "1")
     private Integer planOrderType;
 
+    @ApiModelProperty(value = "鏀惰揣绫诲瀷锛�0=蹇�掗厤閫侊紱1=闂ㄥ簵鑷彁锛�", example = "1")
+    private Integer receiveType;
 
+    @ApiModelProperty(value = "鎻愯揣鍟嗛摵涓婚敭 shop锛歩d", example = "1")
+    private Integer pickUpShopId;
+
+    @ApiModelProperty(value = "鍒嗛攢鍟嗛摵涓婚敭 shop锛歩d", example = "1")
+    private Integer distributionShopId;
+
+    @ApiModelProperty(value = "鏍搁攢鐮�", example = "1")
+    private String exchangeCode;
 
     @ApiModelProperty(value = "鏂囦欢鍦板潃")
     @TableField(exist = false)
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/GoodsorderDetail.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/GoodsorderDetail.java
index 172f0a2..d1db85a 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/GoodsorderDetail.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/GoodsorderDetail.java
@@ -84,12 +84,26 @@
 
 
 
-
-
     @ApiModelProperty(value = "鍟嗗搧鏁伴噺", example = "1")
     @ExcelColumn(name="鍟嗗搧鏁伴噺")
     private Integer goodsNum;
 
+    @ApiModelProperty(value = "鍟嗗搧閲嶉噺", example = "1")
+    @ExcelColumn(name="鍟嗗搧閲嶉噺")
+    private BigDecimal goodsWeight;
+
+    @ApiModelProperty(value = "浼樻儬鍒告姷鎵i噾棰�", example = "1")
+    private BigDecimal couponDeduct;
+
+    @ApiModelProperty(value = "绉垎鎶垫墸閲戦", example = "1")
+    private BigDecimal integralDeduct;
+
+    @ApiModelProperty(value = "缁忛攢鍟嗙粨绠楅噾棰�", example = "1")
+    private BigDecimal shopSettlement;
+
+
+
+
     @ApiModelProperty(value = "鍟嗗搧鏍囩鍚嶇О")
     @TableField(exist = false)
     private String lablesName;
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Integral.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Integral.java
index 5a03b7f..e770a0e 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Integral.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Integral.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.core.utils.Constants;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -76,6 +77,8 @@
     @ApiModelProperty(value = "浜ゆ槗鍗曞彿")
     private String orderCode;
 
+    @ApiModelProperty(value = "鐢ㄦ埛绫诲瀷锛�0=娑堣垂鑰咃紱1=缁忛攢鍟嗭紱")
+    private Integer userType;
 
     @ApiModelProperty(value = "鐢ㄦ埛鏄电О")
     @ExcelColumn(name="鐢ㄦ埛",index =1,width = 10)
@@ -109,4 +112,19 @@
     private String strObjType;
 
 
+
+//    public static  Integral createIntegral(Integer memberId, Constants.INTEGRAL_TYPE integralType,Integer objId){
+//        Integral integral = new Integral();
+//        integral.setCreator(memberId);
+//        integral.setCreateDate(new Date());
+//        integral.setIsdeleted(Constants.ZERO);
+//        integral.setMemberId(memberId);
+//        integral.setTitle(integralType.getName());
+//        integral.setObjId(objId);
+//        integral.setObjType(integralType.getKey());
+//        integral.setType(integralType.getType());
+//
+//        return integral;
+//    }
+
 }
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 da7431a..a9e72fa 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
@@ -149,6 +149,9 @@
     @ExcelColumn(name="sharingCode")
     private String sharingCode;
 
+    @ApiModelProperty(value = "缁戝畾鍟嗛摵涓婚敭 shop:id 鍒嗛攢浜�")
+    private Integer bindShopId;
+
     @ApiModelProperty(value = "鏂囦欢鍦板潃鍏ㄨ矾寰�")
     @TableField(exist = false)
     private String imgFullUrl;
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberCoupon.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberCoupon.java
index 2e15dea..6727cf6 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberCoupon.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberCoupon.java
@@ -101,7 +101,6 @@
 
     @ApiModelProperty(value = "浣跨敤鏃堕棿")
     @ExcelColumn(name="浣跨敤鏃堕棿")
-    
     private Date useDate;
 
     @ApiModelProperty(value = "浣跨敤绉垎濂栧姳鏁伴噺", example = "1")
@@ -116,9 +115,24 @@
     @ExcelColumn(name="coupon琛╥d")
     private Integer couponId;
 
+    @ApiModelProperty(value = "浼樻儬鍒哥被鍨嬶細0=婊″噺鍒革紱1=鎶樻墸鍒革紱")
+    private Integer couponType;
+
+    @ApiModelProperty(value = "閫傜敤绫诲瀷锛�0=鍏ㄥ満;1=鍝佺被锛�2=鎸囧畾鍟嗗搧")
+    private Integer applyType;
+
+    @ApiModelProperty(value = "閫傜敤鍏宠仈瀵硅薄淇℃伅涓婚敭")
+    private String applyIds;
+
+    @ApiModelProperty(value = "鎶樻墸鍗锋弧鍑忎笂闄愰噾棰�")
+    private BigDecimal maxPrice;
+
     @ApiModelProperty(value = "鏄电О")
     @TableField(exist = false)
     private String nikeName;
 
+    @ApiModelProperty(value = "瀹為檯閫傜敤鏃堕噾棰�")
+    @TableField(exist = false)
+    private BigDecimal validAmount;
 
 }
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 805e067..46168a1 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
@@ -206,6 +206,10 @@
     @TableField(exist = false)
     private BigDecimal score;
 
+    @ApiModelProperty(value = "璺濈")
+    @TableField(exist = false)
+    private BigDecimal distance;
+
 
     @ApiModelProperty(value = "搴楅摵璁块棶鏁版嵁锛氫富椤垫�昏闂噺")
     @TableField(exist = false)
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/ShopGoodsRelation.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/ShopGoodsRelation.java
new file mode 100644
index 0000000..593640d
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/ShopGoodsRelation.java
@@ -0,0 +1,72 @@
+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;
+import java.math.BigDecimal;
+
+/**
+ * 缁忛攢鍟嗕緵璐т环淇℃伅
+ * @author 姹熻箘韫�
+ * @date 2025/12/15 09:39
+ */
+@Data
+@ApiModel("缁忛攢鍟嗕緵璐т环淇℃伅")
+@TableName("`shop_goods_relation`")
+public class ShopGoodsRelation {
+
+    @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 = "鍟嗘埛涓婚敭锛坰hop涓婚敭锛�", example = "1")
+    @ExcelColumn(name="鍟嗘埛涓婚敭锛坰hop涓婚敭锛�")
+    private Integer shopId;
+
+    @ApiModelProperty(value = "鍟嗗搧SKU ID锛坓oods_sku涓婚敭锛�", example = "1")
+    @ExcelColumn(name="鍟嗗搧SKU ID锛坓oods_sku涓婚敭锛�")
+    private Integer goodsSkuId;
+
+    @ApiModelProperty(value = "渚涜揣浠�", example = "1")
+    @ExcelColumn(name="渚涜揣浠�")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "鍚敤0 绂佺敤1", example = "1")
+    @ExcelColumn(name="鍚敤0 绂佺敤1")
+    private Integer status;
+
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/dto/CouponDTO.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/dto/CouponDTO.java
index 5289837..158db3f 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/web/dto/CouponDTO.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/dto/CouponDTO.java
@@ -66,4 +66,18 @@
 
     @ApiModelProperty(value = "浼樻儬鍒哥姸鎬�")
     private String couponStatus;
+
+    @ApiModelProperty(value = "浼樻儬鍒哥被鍨嬶細0=婊″噺鍒革紱1=鎶樻墸鍒革紱")
+    private Integer couponType;
+
+    @ApiModelProperty(value = "閫傜敤绫诲瀷锛�0=鍏ㄥ満;1=鍝佺被锛�2=鎸囧畾鍟嗗搧")
+    private Integer applyType;
+
+    @ApiModelProperty(value = "閫傜敤鍏宠仈瀵硅薄淇℃伅涓婚敭")
+    private String applyIds;
+
+    @ApiModelProperty(value = "鎶樻墸鍗锋弧鍑忎笂闄愰噾棰�")
+    private BigDecimal maxPrice;
+
+
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/DealIntegralRequest.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/DealIntegralRequest.java
index c10c574..fdf20f0 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/DealIntegralRequest.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/DealIntegralRequest.java
@@ -34,4 +34,7 @@
 
     @ApiModelProperty(value = "鏀舵敮绫诲瀷 0鏀跺叆 1鏀嚭")
     private Integer dealType;
+
+
+
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/OrderCancelRequest.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/OrderCancelRequest.java
new file mode 100644
index 0000000..64a77cd
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/OrderCancelRequest.java
@@ -0,0 +1,26 @@
+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 OrderCancelRequest {
+
+    @ApiModelProperty(value = "璁㈠崟涓婚敭",example = "0")
+    private Integer orderId;
+
+    @ApiModelProperty(value = "鍙栨秷鍘熷洜")
+    private String cancelInfo;
+
+    @ApiModelProperty(value = "鐢ㄦ埛涓婚敭",hidden = true)
+    private Integer memberId;
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/OrderPayRequest.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/OrderPayRequest.java
index 0a5528c..e066817 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/OrderPayRequest.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/OrderPayRequest.java
@@ -51,6 +51,7 @@
     private BigDecimal deductionBalance;
 
 
+    @ApiModelProperty(hidden = true)
     private Integer memberId ;
 
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/PayDetailRequest.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/PayDetailRequest.java
index 7e3f337..7cb3ab2 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/PayDetailRequest.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/PayDetailRequest.java
@@ -27,5 +27,7 @@
     @ApiModelProperty(value = "璐墿杞﹀晢鍝佷富閿�")
     private Integer shopCartId;
 
+    @ApiModelProperty(value = "浼樻儬鍒告姷鎵i噾棰�",hidden = true)
+    private BigDecimal deductAmount;
 
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/ShopOrderPayRequest.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/ShopOrderPayRequest.java
new file mode 100644
index 0000000..532318d
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/ShopOrderPayRequest.java
@@ -0,0 +1,43 @@
+package com.doumee.dao.web.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/24 15:32
+ */
+@Data
+@ApiModel("鍟嗗搧涓嬪崟璇锋眰绫�")
+public class ShopOrderPayRequest {
+
+    @ApiModelProperty(value = "鏀惰揣鍦板潃涓婚敭")
+    private Integer addressId;
+
+    @NotNull(message = "璁㈠崟鎬婚噾棰� 涓嶈兘涓虹┖")
+    @ApiModelProperty(value = "璁㈠崟鎬婚噾棰�")
+    private BigDecimal titlePrice;
+
+    @ApiModelProperty(value = "鏀惰揣绫诲瀷锛�0=蹇�掗厤閫侊紱1=闂ㄥ簵鑷彁锛�")
+    private Integer receiveType;
+
+    @ApiModelProperty(value = "鑷彁鍟嗘埛涓婚敭")
+    private Integer shopId;
+
+    @ApiModelProperty(value = "鏀粯鍟嗗搧璇︾粏")
+    List<PayDetailRequest> payDetailRequestList;
+
+    @ApiModelProperty(value = "璁㈠崟澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(hidden = true)
+    private Integer memberId ;
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/UpdMobileRequest.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/UpdMobileRequest.java
new file mode 100644
index 0000000..9933a0f
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/UpdMobileRequest.java
@@ -0,0 +1,29 @@
+package com.doumee.dao.web.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 9:50
+ */
+@Data
+@ApiModel("鎵嬫満鎹㈢粦璇锋眰绫�")
+public class UpdMobileRequest {
+
+    @ApiModelProperty(value = "楠岃瘉鐮�",example = "0")
+    private String code;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�")
+    private String phone;
+
+    @ApiModelProperty(value = "鐢ㄦ埛涓婚敭",hidden = true)
+    private Integer memberId;
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/DealOrderRequest.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/DealOrderRequest.java
index 90a98fc..5cd8442 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/DealOrderRequest.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/DealOrderRequest.java
@@ -17,6 +17,9 @@
     @ApiModelProperty(value = "璁㈠崟涓婚敭")
     private Integer orderId;
 
+    @ApiModelProperty(value = "璁㈠崟鏍搁攢鐮�")
+    private String exchangeCode;
+
     @ApiModelProperty(value = "鏀惰揣鍦板潃涓婚敭锛堟洿鏂拌鍗曟敹璐у湴鍧�浣跨敤锛�")
     private Integer addressId;
 
@@ -26,6 +29,7 @@
     @ApiModelProperty(value = "璁㈠崟璇勪环淇℃伅锛堣鍗曡瘎浠蜂笟鍔′娇鐢級")
     private String  commentInfo;
 
+    @ApiModelProperty(hidden = true)
     private Integer memberId;
 
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/GoodsRequest.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/GoodsRequest.java
index 2a84e2c..f37ed01 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/GoodsRequest.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/GoodsRequest.java
@@ -28,6 +28,19 @@
     @ApiModelProperty(value = "鍟嗗搧鍚嶇О")
     private String goodsName;
 
+    @ApiModelProperty(value = "閫傜敤鍝佺墝 lables 14")
+    private Integer applicableBrandId;
+
+    @ApiModelProperty(value = "閫傜敤绯诲垪 lables 15")
+    private Integer seriesBrandId;
+
+    @ApiModelProperty(value = "鍝佽川涓撳尯涓婚敭")
+    private Integer qualityId;
+
+    @ApiModelProperty(value = "鎺掑簭鏂瑰紡锛�0=缁煎悎鎺掑簭锛�1=閿�閲忕敱浣庡埌楂� 锛�2=浠锋牸鐢变綆鍒伴珮锛�3=閿�閲忕敱楂樺埌浣庯紱4=浠锋牸鐢遍珮鍒颁綆")
+    private Integer sortInfo;
+
+
     @ApiModelProperty(value = "涓�绾у垎绫荤紪鐮�")
     private Integer parentCategoryId;
 
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/MemberOrderRequest.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/MemberOrderRequest.java
index 6954c38..9ab2647 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/MemberOrderRequest.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/MemberOrderRequest.java
@@ -23,7 +23,7 @@
     @ApiModelProperty(value = "璁㈠崟绫诲瀷 0骞冲彴鍟嗗煄 1鍜栬眴鍟嗗煄", example = "1")
     private Integer orderType;
 
-    @ApiModelProperty(value = "鐘舵�� 0寰呮敮浠� 1寰呭彂璐� 2寰呮敹璐� 3浜ゆ槗瀹屾垚", example = "1")
+    @ApiModelProperty(value = "鐘舵�� 0寰呮敮浠� 1寰呭彂璐�/鑷彁 2寰呮敹璐� 3浜ゆ槗瀹屾垚", example = "1")
     private Integer orderStatus;
 
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/response/HomeInfoResponse.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/HomeInfoResponse.java
new file mode 100644
index 0000000..0b43aa3
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/HomeInfoResponse.java
@@ -0,0 +1,36 @@
+package com.doumee.dao.web.response;
+
+import com.doumee.dao.business.model.Member;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.commons.math3.analysis.function.Log;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/12/15 14:46
+ */
+@Data
+public class HomeInfoResponse {
+
+    @ApiModelProperty(value = "鐢ㄦ埛淇℃伅")
+    private Member member;
+
+    @ApiModelProperty(value = "璐墿杞﹀晢鍝佺绫�")
+    private Long cartTypeNum;
+
+    @ApiModelProperty(value = "浼樻儬鍒告暟閲�")
+    private Long couponNum;
+
+    @ApiModelProperty(value = "鏀惰棌鏁伴噺")
+    private Long collectNum;
+
+    @ApiModelProperty(value = "寰呬粯娆炬暟閲�")
+    private Long waitPayNum;
+
+    @ApiModelProperty(value = "寰呮敹璐ф暟閲�")
+    private Long waitReceiveNum;
+
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/response/MemberCouponResponse.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/MemberCouponResponse.java
new file mode 100644
index 0000000..95c8fad
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/MemberCouponResponse.java
@@ -0,0 +1,85 @@
+package com.doumee.dao.web.response;
+
+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;
+
+@Data
+@ApiModel("鐢ㄦ埛浼樻儬鍒镐俊鎭�")
+public class MemberCouponResponse {
+
+
+    @ApiModelProperty(value = "id")
+    private Integer id;
+
+    @ApiModelProperty(value = "浼樻儬鍒稿悕绉�")
+    private String name;
+
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "鍟嗗缂栫爜锛堝叧鑱攕hop琛級")
+    private Integer shopId;
+
+    @ApiModelProperty(value = "绫诲瀷0鍟嗗浼樻儬鍒� 1骞冲彴浼樻儬鍒� ")
+    private Integer type;
+
+    @ApiModelProperty(value = "婊¢锛堝厓锛�")
+    private BigDecimal limitPrice;
+
+    @ApiModelProperty(value = "浼樻儬閲戦锛堝厓锛�")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    private Date startDate;
+
+    @ApiModelProperty(value = "缁撴潫鏃堕棿")
+    private Date endDate;
+
+    @ApiModelProperty(value = "棰嗗彇鍚庢湁鏁堝ぉ鏁�")
+    private Integer validDays;
+
+    @ApiModelProperty(value = "棰嗗彇鏂瑰紡 0棰嗗彇 1鍏戞崲")
+    private Integer getMethod;
+
+    @ApiModelProperty(value = "鍏戞崲鎵�闇�鍜栬眴閲戦")
+    private BigDecimal integral;
+
+    @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤")
+    private Integer status;
+
+    @ApiModelProperty(value = "鍙戞斁鎬婚噺")
+    private Integer num;
+
+    @ApiModelProperty(value = "棰嗗彇鎬婚噺")
+    private Integer drawNum;
+
+    @ApiModelProperty(value = "璇存槑")
+    private String info;
+
+    @ApiModelProperty(value = "棰嗗彇鐘舵�� ")
+    private String drawStatus;
+
+    @ApiModelProperty(value = "浼樻儬鍒哥姸鎬�")
+    private String couponStatus;
+
+    @ApiModelProperty(value = "浼樻儬鍒哥被鍨嬶細0=婊″噺鍒革紱1=鎶樻墸鍒革紱")
+    private Integer couponType;
+
+    @ApiModelProperty(value = "閫傜敤绫诲瀷锛�0=鍏ㄥ満;1=鍝佺被锛�2=鎸囧畾鍟嗗搧")
+    private Integer applyType;
+
+    @ApiModelProperty(value = "閫傜敤鍏宠仈瀵硅薄淇℃伅涓婚敭")
+    private String applyIds;
+
+    @ApiModelProperty(value = "鎶樻墸鍗锋弧鍑忎笂闄愰噾棰�")
+    private BigDecimal maxPrice;
+
+    @ApiModelProperty(value = "閫傜敤鍏宠仈瀵硅薄淇℃伅")
+    private List<String> relationInfoList;
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/response/PayDetailResponse.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/PayDetailResponse.java
new file mode 100644
index 0000000..706864e
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/PayDetailResponse.java
@@ -0,0 +1,37 @@
+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/24 15:32
+ */
+@Data
+@ApiModel("璁㈠崟纭杩斿洖绫�")
+public class PayDetailResponse {
+
+    @ApiModelProperty(value = "sku缁勫悎缂栫爜锛堝叧鑱攇oods_sku琛級")
+    private Integer goodsSkuId;
+
+    @ApiModelProperty(value = "鍟嗗搧鏁伴噺")
+    private Integer goodsNum;
+
+    @ApiModelProperty(value = "鍟嗗搧鏁伴噺")
+    private String skuImg;
+
+    @ApiModelProperty(value = "鍟嗗搧鍚嶇О")
+    private String goodsName;
+
+    @ApiModelProperty(value = "璐墿杞﹀晢鍝佷富閿�")
+    private Integer shopCartId;
+
+    @ApiModelProperty(value = "浼樻儬鍒告姷鎵i噾棰�",hidden = true)
+    private BigDecimal deductAmount;
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/GoodsInfoResponse.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/GoodsInfoResponse.java
index b5eeefd..2d6e375 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/GoodsInfoResponse.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/GoodsInfoResponse.java
@@ -49,8 +49,11 @@
     @ApiModelProperty(value = "鍝佺墝")
     private Labels brandLabels;
 
-    @ApiModelProperty(value = "灞曠ず浠锋牸")
+    @ApiModelProperty(value = "灞曠ず浠锋牸锛堝垝绾夸环锛�")
     private BigDecimal price;
+
+    @ApiModelProperty(value = "鏈�浣庝环")
+    private BigDecimal minPrice;
 
     @ApiModelProperty(value = "鍟嗗搧璇︽儏")
     private String content;
@@ -76,6 +79,9 @@
     @ApiModelProperty(value = "鎺掑簭鐮�")
     private Integer sortnum;
 
+    @ApiModelProperty(value = "鐪熷疄搴撳瓨")
+    private Integer stock;
+
 //    @ApiModelProperty(value = "鍟嗗搧鏍囩")
 //    private List<Labels> labelsList;
 
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 964a733..efb7ddb 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,7 @@
 package com.doumee.dao.web.response.goods;
 
+import com.doumee.dao.business.model.MemberCoupon;
+import com.doumee.dao.business.model.Shop;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -33,7 +35,16 @@
     @ApiModelProperty(value = "璁㈠崟绫诲瀷 0骞冲彴鍟嗗煄 1鍜栬眴鍟嗗煄 2鍜栧暋璁″垝缂栫爜", example = "1")
     private Integer orderType;
 
-    @ApiModelProperty(value = "鐘舵�� 0寰呮敮浠� 1寰呭彂璐� 2寰呮敹璐� 3浜ゆ槗瀹屾垚 4宸插叧闂� 5閮ㄥ垎鍙戣揣", example = "1")
+    @ApiModelProperty(value = "鏀惰揣绫诲瀷锛�0=蹇�掗厤閫侊紱1=闂ㄥ簵鑷彁锛�", example = "1")
+    private Integer receiveType;
+
+    @ApiModelProperty(value = "鑷彁缁忛攢鍟嗕富閿�", example = "1")
+    private Integer shopId;
+
+    @ApiModelProperty(value = "缁忛攢鍟嗗悕绉�", example = "1")
+    private String shopName;
+
+    @ApiModelProperty(value = "鐘舵�� 0寰呮敮浠� 1寰呭彂璐�/寰呰嚜鎻� 2寰呮敹璐� 3浜ゆ槗瀹屾垚 4宸插叧闂� 5閮ㄥ垎鍙戣揣", example = "1")
     private Integer orderStatus;
 
     @ApiModelProperty(value = "鏄惁宸茶瘎浠� 0鏈瘎浠� 1宸茶瘎浠�", example = "1")
@@ -72,6 +83,8 @@
     @ApiModelProperty(value = "瀹屾垚鏃堕棿", example = "1")
     private Date doneDate;
 
+    @ApiModelProperty(value = "鏍搁攢鐮�", example = "1")
+    private String exchangeCode;
 
     @ApiModelProperty(value = "鎶垫墸閲戦", example = "1")
     private BigDecimal integral;
@@ -86,4 +99,13 @@
     @ApiModelProperty(value = "璁㈠崟鏄庣粏淇℃伅", example = "1")
     private List<MemberOrderDetailResponse> memberOrderDetailResponseList;
 
+
+    @ApiModelProperty(value = "缁忛攢鍟嗕俊鎭�", example = "1")
+    private Shop shopInfo;
+
+    @ApiModelProperty(value = "浼樻儬鍒镐俊鎭�", example = "1")
+    private MemberCoupon memberCoupon;
+
+
+
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/OrderGoodsCalculateResponse.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/OrderGoodsCalculateResponse.java
new file mode 100644
index 0000000..af5acfe
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/OrderGoodsCalculateResponse.java
@@ -0,0 +1,90 @@
+package com.doumee.dao.web.response.goods;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.dao.business.model.GoodsSku;
+import com.doumee.dao.business.model.Multifile;
+import com.doumee.dao.business.model.Sku;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.xpath.operations.Bool;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鍟嗗搧淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/03/21 15:48
+ */
+@Data
+public class OrderGoodsCalculateResponse {
+
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    private Integer id;
+
+    @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "鍒嗙被缂栫爜锛堝叧鑱攍abels琛級", example = "1")
+    private Integer categoryId;
+
+    @ApiModelProperty(value = "鍝佺墝缂栫爜锛堝叧鑱攍abels琛級", example = "1")
+    private Integer brandId;
+
+    @ApiModelProperty(value = "鎶垫墸姣斾緥锛�0.1%~100%锛�", example = "1")
+    private BigDecimal deductRata;
+
+    @ApiModelProperty(value = "鍟嗗搧鏁伴噺")
+    private Integer goodsNum;
+
+    @ApiModelProperty(value = "鍗曚釜鍟嗗搧閲嶉噺(kg)", example = "1")
+    private BigDecimal weight;
+
+    @ApiModelProperty(value = "sku閲戦")
+    private BigDecimal skuPrice;
+
+    @ApiModelProperty(value = "sku鎬婚噾棰�")
+    private BigDecimal skuAmount;
+
+    @ApiModelProperty(value = "skuId")
+    private Integer skuId;
+
+    @ApiModelProperty(value = "璁㈠崟涓紭鎯犲埜閲戦鍗犳瘮", hidden = true)
+    private BigDecimal orderCouponRata;
+
+    @ApiModelProperty(value = "浼樻儬鍒告姷鎵i噾棰�", hidden = true)
+    private BigDecimal couponDeductCash;
+
+    @ApiModelProperty(value = "鏄惁鍙互浣跨敤浼樻儬鍒�", hidden = true)
+    private Boolean useCoupon;
+
+    @ApiModelProperty(value = "绉垎鏈�澶у彲鎶垫墸閲戦", hidden = true)
+    private BigDecimal integralMaxDeductCash;
+
+    @ApiModelProperty(value = "绉垎瀹為檯鎶垫墸閲戦", hidden = true)
+    private BigDecimal integralDeductCash;
+
+    @ApiModelProperty(value = "瀹為檯浣跨敤绉垎", hidden = true)
+    private BigDecimal integralDeduct;
+
+    @ApiModelProperty(value = "璁㈠崟涓Н鍒嗛噾棰濆疄闄呭崰姣�", hidden = true)
+    private BigDecimal orderIntegralRata;
+
+    @ApiModelProperty(value = "搴撳瓨閲�")
+    private BigDecimal stockNum;
+
+    @ApiModelProperty(value = "瀹為檯閿�閲�")
+    private BigDecimal  salesVolume;
+
+
+
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/OrderPayConfirmResponse.java b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/OrderPayConfirmResponse.java
new file mode 100644
index 0000000..0cd963c
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/OrderPayConfirmResponse.java
@@ -0,0 +1,51 @@
+package com.doumee.dao.web.response.goods;
+
+import com.doumee.dao.business.model.MemberCoupon;
+import com.doumee.dao.web.request.PayDetailRequest;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 鍟嗗搧SKU瑙勬牸缁勪俊鎭〃
+ * @author 姹熻箘韫�
+ * @date 2023/03/21 15:48
+ */
+@Data
+@ApiModel("鍟嗗搧纭椤典俊鎭搷搴旂被")
+public class OrderPayConfirmResponse {
+
+    @ApiModelProperty(value = "璁㈠崟鎬婚噾棰�", example = "1")
+    private BigDecimal amount;
+
+    @ApiModelProperty(value = "浼樻儬鍒告姷鎵i噾棰�", example = "1")
+    private BigDecimal couponAmount;
+
+    @ApiModelProperty(value = "绉垎鎶垫墸閲戦", example = "1")
+    private BigDecimal integralAmount;
+
+    @ApiModelProperty(value = "鎶垫墸绉垎鍊�", example = "1")
+    private BigDecimal deductIntegral;
+
+    @ApiModelProperty(value = "閭垂閲戦", example = "1")
+    private BigDecimal mailAmount;
+
+    @ApiModelProperty(value = "鏀粯閲戦", example = "1")
+    private BigDecimal payAmount;
+
+    @ApiModelProperty(value = "涓嬪崟杩旂Н鍒�", example = "1")
+    private BigDecimal integralBack;
+
+    @ApiModelProperty(value = "浼樻儬鍒镐俊鎭�", example = "1")
+    private MemberCoupon memberCoupon;
+
+    @ApiModelProperty(value = "鍟嗗搧淇℃伅", example = "1")
+    private List<OrderGoodsCalculateResponse> goodsCalculateList;
+
+
+
+
+}
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 767a985..5426d39 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
@@ -4,14 +4,21 @@
 import com.doumee.core.model.PageData;
 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.goods.DealOrderRequest;
 import com.doumee.dao.web.request.goods.MemberOrderRequest;
 import com.doumee.dao.web.request.goods.OrderCommentRequest;
+import com.doumee.dao.web.response.HomeInfoResponse;
 import com.doumee.dao.web.response.MyPageResponse;
 import com.doumee.dao.web.response.goods.MemberOrderResponse;
 import com.doumee.dao.web.response.goods.PayResponse;
+import com.doumee.service.business.impl.MemberCouponServiceImpl;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -60,7 +67,7 @@
     void orderSendOutGoods(Goodsorder goodsorder);
 
     void orderRemark(Goodsorder goodsorder);
-
+    IPage<Shop> getShopPage(PageWrap<Shop> pageWrap);
     void coffeePlanCancelOrder(Goodsorder goodsorder);
     void orderPlanCancelOrder(Goodsorder goodsorder);
 
@@ -120,7 +127,7 @@
      * @param orderPayRequest
      * @return
      */
-    PayResponse orderPay(OrderPayRequest orderPayRequest);
+    PayResponse orderPay(ShopOrderPayRequest orderPayRequest, MemberCouponServiceImpl memberCouponService);
 
     /**
      * 閲嶆柊鏀粯
@@ -144,13 +151,20 @@
     void updAddress(DealOrderRequest updAddressRequest);
 
     /**
-     * 鍙栨秷璁㈠崟
+     * 鍙栨秷璁㈠崟 - 鍘嗗彶鐗堟湰
      * @param orderId
      * @param optUserId
      * @param cancelInfo
      */
     void cancelOrder(Integer orderId,Integer optUserId,String cancelInfo);
 
+    /**
+     * 璁㈠崟鍙栨秷 - 鏂�
+     * @param orderId
+     * @param optUserId
+     * @param cancelInfo
+     */
+    void cancelOrderNew(Integer orderId,Integer optUserId,String cancelInfo);
 
     /**
      * 鍌彂璐�
@@ -167,6 +181,14 @@
      */
     void affirmOrder(Integer orderId,Integer memberId);
 
+    void orderWriteOff(String exchangeCode,Integer memberId);
+
+    /**
+     * 璁㈠崟鍒犻櫎
+     * @param orderId
+     * @param memberId
+     */
+    void delOrder(Integer orderId,Integer memberId);
 
     /**
      * 璁㈠崟璇︽儏
@@ -190,6 +212,7 @@
     MyPageResponse ordersStatistics(Integer memberId);
 
 
+
     /**
      * 璁㈠崟鑷姩纭
      */
@@ -198,4 +221,6 @@
     void resetOrderCodes();
 
     void refreshOrderCodes();
+
+    HomeInfoResponse getHomeInfo(int memberId);
 }
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 443fc8d..cf58289 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
@@ -115,10 +115,17 @@
      */
     PageData<IntegralDTO> findIntegralDTOPage(PageWrap<IntegralDTO> pageWrap,Integer memberId);
     /**
-     * 鏇存柊绉垎淇℃伅
+     * 鏇存柊娑堣垂鑰呯Н鍒�
      * @param dealIntegralRequest 瀹炰綋瀵硅薄
      * @return Integer
      */
     Integer dealIntegral(DealIntegralRequest dealIntegralRequest);
 
+    /**
+     * 鏇存柊缁忛攢鍟嗕綑棰�
+     * @param dealIntegralRequest
+     * @return
+     */
+    Integer dealShopIntegral(DealIntegralRequest dealIntegralRequest);
+
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/MemberCouponService.java b/server/dmmall_service/src/main/java/com/doumee/service/business/MemberCouponService.java
index a9c90a0..82cbb63 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/MemberCouponService.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/MemberCouponService.java
@@ -6,6 +6,8 @@
 import com.doumee.dao.business.model.MemberCoupon;
 import com.doumee.dao.web.dto.CouponDTO;
 import com.doumee.dao.web.dto.MemberCouponDTO;
+import com.doumee.dao.web.request.PayDetailRequest;
+import com.doumee.dao.web.response.MemberCouponResponse;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -110,9 +112,14 @@
      * @param couponType
      * @return
      */
-     IPage<CouponDTO> memberCouponPage(IPage pages, BigDecimal price, Integer memberId, Integer couponType);
+     IPage<MemberCouponResponse> memberCouponPage(IPage pages, BigDecimal price, Integer memberId, Integer couponType, Integer status);
 
-
+    /**
+     * 浼氬憳浼樻儬鍒歌鎯�
+     * @param id
+     * @return
+     */
+    MemberCouponResponse getMemberCouponDetail(Integer id);
     /**
      * 鍙敤浼樻儬鍒告暟閲�
      * @param price
@@ -130,4 +137,12 @@
      */
     PageData<MemberCouponDTO> findMemberCouponDTO(PageWrap<MemberCouponDTO> pageWrap);
 
+    /**
+     * 鏍规嵁鍟嗗搧閫夋嫨淇℃伅 鏌ヨ瀵瑰簲鍙娇鐢ㄧ殑浼樻儬鍒�
+     * @param requestList
+     * @param memberId
+     * @return
+     */
+    List<MemberCoupon> getApplyCoupon(List<PayDetailRequest> requestList, Integer memberId);
+
 }
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 ed01544..74b10eb 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
@@ -7,6 +7,7 @@
 import com.doumee.dao.system.dto.MemberRechargeDTO;
 import com.doumee.dao.web.dto.MemberOwnDTO;
 import com.doumee.dao.web.dto.shop.Position;
+import com.doumee.dao.web.request.UpdMobileRequest;
 import com.doumee.dao.web.request.UpdateMemberRequest;
 import com.doumee.dao.web.request.WxPhoneRequest;
 import com.doumee.dao.web.response.AccountResponse;
@@ -144,8 +145,17 @@
      */
     Member updateMember(UpdateMemberRequest updateMemberRequest);
 
+    /**
+     * 楠岃瘉鎵嬫満鍙�
+     * @param request
+     */
+    void verifyUserPhone(UpdMobileRequest request);
 
-
+    /**
+     * 鎹㈢粦鎵嬫満鍙�
+     * @param request
+     */
+    void updateUserPhone(UpdMobileRequest request);
 
     MemberOwnDTO getMemberOwnDTO(Integer memberId);
 
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/ShopGoodsRelationService.java b/server/dmmall_service/src/main/java/com/doumee/service/business/ShopGoodsRelationService.java
new file mode 100644
index 0000000..54166fb
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/ShopGoodsRelationService.java
@@ -0,0 +1,97 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.ShopGoodsRelation;
+import java.util.List;
+
+/**
+ * 缁忛攢鍟嗕緵璐т环淇℃伅Service瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2025/12/15 09:39
+ */
+public interface ShopGoodsRelationService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param shopGoodsRelation 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(ShopGoodsRelation shopGoodsRelation);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param shopGoodsRelation 瀹炰綋瀵硅薄
+     */
+    void delete(ShopGoodsRelation shopGoodsRelation);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param shopGoodsRelation 瀹炰綋瀵硅薄
+     */
+    void updateById(ShopGoodsRelation shopGoodsRelation);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param shopGoodsRelations 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<ShopGoodsRelation> shopGoodsRelations);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return ShopGoodsRelation
+     */
+    ShopGoodsRelation findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param shopGoodsRelation 瀹炰綋瀵硅薄
+     * @return ShopGoodsRelation
+     */
+    ShopGoodsRelation findOne(ShopGoodsRelation shopGoodsRelation);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param shopGoodsRelation 瀹炰綋瀵硅薄
+     * @return List<ShopGoodsRelation>
+     */
+    List<ShopGoodsRelation> findList(ShopGoodsRelation shopGoodsRelation);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<ShopGoodsRelation>
+     */
+    PageData<ShopGoodsRelation> findPage(PageWrap<ShopGoodsRelation> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param shopGoodsRelation 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(ShopGoodsRelation shopGoodsRelation);
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/ShopcartService.java b/server/dmmall_service/src/main/java/com/doumee/service/business/ShopcartService.java
index 5776862..6a4785f 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/ShopcartService.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/ShopcartService.java
@@ -111,6 +111,12 @@
      */
     IPage<CartGoodsResponse> cartGoodsPage(PageWrap pageWrap, Integer memberId);
 
+    /**
+     * 璐墿杞﹀晢鍝佹暟閲�
+     * @param memberId
+     * @return
+     */
+    Integer cartGoodsTypeNum(Integer memberId);
 
     /**
      * 鏇存柊璐墿杞︽暟閲忎俊鎭�
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
index 4378754..d558a10 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
@@ -821,45 +821,66 @@
      */
     @Override
     public IPage<GoodsInfoResponse> getGoodsPage(PageWrap<GoodsRequest> pageWrap) {
+       GoodsRequest model = pageWrap.getModel();
 
        QueryWrapper<GoodsRequest> wrapper = new QueryWrapper<GoodsRequest>()
                 .eq("g.ISDELETED",Constants.ZERO)
-                .eq("g.PARENT_CATEGORY_ID",pageWrap.getModel().getParentCategoryId())
-                .eq(!Objects.isNull(pageWrap.getModel()) && Objects.nonNull(pageWrap.getModel().getCategoryId()),
-                        "g.CATEGORY_ID", pageWrap.getModel().getCategoryId())
+                .eq(!Objects.isNull(model) && Objects.nonNull(model.getCategoryId()),
+                        "g.CATEGORY_ID", model.getCategoryId())
+
+               //TODO 閫傜敤鍝佺墝  閫傜敤绯诲垪
+//               .eq(!Objects.isNull(model) && Objects.nonNull(model.getApplicableBrandId()),
+//                       "","")
+//               .eq(!Objects.isNull(model) && Objects.nonNull(model.getSeriesBrandId()),
+//                       "","")
+
                 .eq("g.STATUS", Constants.ZERO)
-                .like(StringUtils.isNotBlank(pageWrap.getModel().getGoodsName()),"g.NAME",pageWrap.getModel().getGoodsName());
-//                .eq(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getType()), "g.TYPE", pageWrap.getModel().getType());
+                .like(StringUtils.isNotBlank(model.getGoodsName()),"g.NAME",model.getGoodsName());
 
-                for(PageWrap.SortData sortData:pageWrap.getSorts1()){
-                    if ("CREATE_DATE".equalsIgnoreCase(sortData.getProperty())){
-                        if (PageWrap.ASC.equalsIgnoreCase(sortData.getDirection())){
-                            wrapper.orderByAsc("g.CREATE_DATE");
-                        }
+                if(Objects.nonNull(model.getSortInfo())){
+                    //鎺掑簭鏂瑰紡锛�0=缁煎悎鎺掑簭锛�1=閿�閲忕敱浣庡埌楂� 锛�2=浠锋牸鐢变綆鍒伴珮锛�3=閿�閲忕敱楂樺埌浣庯紱4=浠锋牸鐢遍珮鍒颁綆
+                    if(Constants.equalsInteger(model.getSortInfo(),Constants.ZERO)){
                         wrapper.orderByDesc("g.CREATE_DATE");
-
-                    }
-                    if ("realSaleNum".equalsIgnoreCase(sortData.getProperty())){
-
-                        if (PageWrap.ASC.equalsIgnoreCase(sortData.getDirection())){
-                            wrapper.orderByAsc("realSaleNum");
-                        }
+                    }else if(Constants.equalsInteger(model.getSortInfo(),Constants.ONE)){
+                        wrapper.orderByAsc("realSaleNum");
+                    }else if(Constants.equalsInteger(model.getSortInfo(),Constants.TWO)){
+                        wrapper.orderByAsc("g.price");
+                    }else if(Constants.equalsInteger(model.getSortInfo(),Constants.THREE)){
                         wrapper.orderByDesc("realSaleNum");
+                    }else if(Constants.equalsInteger(model.getSortInfo(),Constants.FOUR)){
+                        wrapper.orderByDesc("g.price");
                     }
-                    if ("PRICE".equalsIgnoreCase(sortData.getProperty())){
-                        if (PageWrap.ASC.equalsIgnoreCase(sortData.getDirection())){
-                            wrapper.orderByAsc("g.PRICE");
-                        }
-                        wrapper.orderByDesc("g.PRICE");
-                    }
-
                 }
 
+//                for(PageWrap.SortData sortData:pageWrap.getSorts1()){
+//                    if ("CREATE_DATE".equalsIgnoreCase(sortData.getProperty())){
+//                        if (PageWrap.ASC.equalsIgnoreCase(sortData.getDirection())){
+//                            wrapper.orderByAsc("g.CREATE_DATE");
+//                        }
+//                        wrapper.orderByDesc("g.CREATE_DATE");
+//
+//                    }
+//                    if ("realSaleNum".equalsIgnoreCase(sortData.getProperty())){
+//
+//                        if (PageWrap.ASC.equalsIgnoreCase(sortData.getDirection())){
+//                            wrapper.orderByAsc("realSaleNum");
+//                        }
+//                        wrapper.orderByDesc("realSaleNum");
+//                    }
+//                    if ("PRICE".equalsIgnoreCase(sortData.getProperty())){
+//                        if (PageWrap.ASC.equalsIgnoreCase(sortData.getDirection())){
+//                            wrapper.orderByAsc("g.PRICE");
+//                        }
+//                        wrapper.orderByDesc("g.PRICE");
+//                    }
+//
+//                }
 
         IPage<GoodsInfoResponse> page = goodsMapper.goodsPage(pageWrap.toPage(),wrapper);
         if (!CollectionUtils.isEmpty(page.getRecords())){
             String preFixPath = systemDictDataBiz.getPreFixPath(Constants.RESOURCE_PATH, Constants.GOODS_FILE);
             page.getRecords().forEach(s->s.setImgurl(preFixPath+s.getImgurl()));
+
         }
 
 
@@ -898,6 +919,7 @@
 
         String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                 systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode();
+        Integer sumStock = Constants.ZERO;
         for (GoodsSkuResponse goodsSkuResponse:goodsSkuResponseList) {
             if(StringUtils.isBlank(goodsSkuResponse.getImgurl())){
                 goodsSkuResponse.setImgurl(fullUrl + goodsSkuResponse.getGoodsImgUrl());
@@ -930,8 +952,11 @@
                 indexData.append("," + ( skuAttr.getSortnum()-1));
             }
             goodsSkuResponse.setIndexData(indexData.toString().substring(1));
+            sumStock = sumStock + goodsSkuResponse.getStock();
         }
-
+        //鐪熷疄閿�閲� = realSaleNum  - saleNum;
+        //鐪熷疄搴撳瓨= sumStock - (realSaleNum  - saleNum)
+        goodsResponse.setStock(sumStock - goodsResponse.getRealSaleNum() + goodsResponse.getSaleNum());
         goodsResponse.setGoodsSkuResponseList(goodsSkuResponseList);
         //Sku鍩虹淇℃伅
         List<SkuResponse> skuResponseList = skuMapper.getSkuResponseList(goodsResponse.getId());
@@ -953,7 +978,7 @@
                 systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode();
         GoodsInfoResponse goodsResponse = goodsMapper.getGoodsInfo(goodsId);
         if(Objects.isNull(goodsResponse)){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠涓撳尯鍏宠仈鍟嗗搧宸插垹闄�");
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
         goodsResponse.setImgurl(fullUrl + goodsResponse.getImgurl());
         //鏌ヨ鍟嗗搧鐨勫垎绫�
@@ -970,6 +995,7 @@
                                                                                             Constants.GOODS_FILE);
         List<MultiFileDTO> multiFileDTOS = objAllFileUrl.get(Constants.MultiFile.PLATFORM_GOOD_ROTATION.getKey());
         goodsResponse.setGoodBannerMultiFiles(multiFileDTOS);
+
         return goodsResponse;
     }
 
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 ea26131..c5e1955 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
@@ -8,10 +8,7 @@
 import com.doumee.core.model.LoginUserInfo;
 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.core.utils.*;
 import com.doumee.core.utils.kuaidi100.DeliveryDTO;
 import com.doumee.core.utils.kuaidi100.ExpressUtils;
 import com.doumee.core.wx.SendWxMessage;
@@ -22,17 +19,15 @@
 import com.doumee.dao.business.join.GoodsorderJoinMapper;
 import com.doumee.dao.business.join.PlanorderDetailJoinMapper;
 import com.doumee.dao.business.model.*;
-import com.doumee.dao.web.request.DealIntegralRequest;
-import com.doumee.dao.web.request.OrderPayRequest;
-import com.doumee.dao.web.request.PayDetailRequest;
+import com.doumee.dao.web.dto.CouponDTO;
+import com.doumee.dao.web.request.*;
 import com.doumee.dao.web.request.goods.MemberOrderRequest;
 import com.doumee.dao.web.request.goods.DealOrderRequest;
 import com.doumee.dao.web.request.goods.OrderCommentRequest;
 import com.doumee.dao.web.request.goods.OrderGoodsCommentRequest;
+import com.doumee.dao.web.response.HomeInfoResponse;
 import com.doumee.dao.web.response.MyPageResponse;
-import com.doumee.dao.web.response.goods.MemberOrderDetailResponse;
-import com.doumee.dao.web.response.goods.MemberOrderResponse;
-import com.doumee.dao.web.response.goods.PayResponse;
+import com.doumee.dao.web.response.goods.*;
 import com.doumee.service.business.AreasService;
 import com.doumee.service.business.GoodsorderService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -44,15 +39,16 @@
 import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
 import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
 import com.github.binarywang.wxpay.exception.WxPayException;
+import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.checkerframework.checker.units.qual.C;
+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.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
@@ -61,6 +57,8 @@
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.*;
+import java.util.Date;
+import java.util.stream.Collectors;
 
 /**
  * 鍟嗗搧璁㈠崟淇℃伅琛⊿ervice瀹炵幇
@@ -78,7 +76,8 @@
     private ActivitySignMapper activitySignMapper;
     @Autowired
     private AftersaleMapper  aftersaleMapper;
-
+    @Autowired
+    private ShopGoodsRelationMapper shopGoodsRelationMapper;
     @Autowired
     private MemberMapper memberMapper;
 
@@ -95,7 +94,16 @@
     private AddrMapper addrMapper;
 
     @Autowired
+    private ShopMapper shopMapper;
+
+    @Autowired
+    private ShopGoodsRelationMapper relationMapper;
+
+    @Autowired
     private MemberCouponMapper memberCouponMapper;
+
+    @Autowired
+    private CollectMapper collectMapper;
 
     @Autowired
     private WxMiniUtilService wxMiniUtilService;
@@ -129,6 +137,9 @@
 
     @Autowired
     private GoodsorderDetailJoinMapper goodsorderDetailJoinMapper;
+
+    @Autowired
+    private IntegralMapper integralMapper;
 
     @Override
     public Integer create(Goodsorder goodsorder) {
@@ -179,6 +190,29 @@
         goodsorder.setEditor(user.getId());
         goodsorderMapper.updateById(goodsorder);
     }
+
+    @Override
+    public IPage<Shop> getShopPage(PageWrap<Shop> pageWrap) {
+        IPage<Shop> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        Shop model = pageWrap.getModel();
+        if(Objects.isNull(model.getLatitude())||Objects.isNull(model.getLongitude())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        return shopMapper.selectPage(page,new MPJLambdaWrapper<Shop>()
+                        .selectAll(Shop.class)
+                .select(" case when LONGITUDE IS NULL OR LATITUDE IS NULL THEN 0 " +
+                        " when t.TYPE = 0 then CONVERT( ST_Distance_Sphere ( POINT ( LONGITUDE, LATITUDE ), POINT ( "+model.getLongitude()+", "+model.getLatitude()+" )) /1000,DECIMAL(15,2))  " +
+                        " when t.TYPE = 1 then   CONVERT( ST_Distance_Sphere ( POINT ( LONGITUDE, LATITUDE ), POINT ( "+model.getLongitude()+", "+model.getLatitude()+" )) /1000,DECIMAL(15,2)) " +
+                        " else  CONVERT( ST_Distance_Sphere ( POINT ( LONGITUDE, LATITUDE ), POINT ( "+model.getLongitude()+", "+model.getLatitude()+" )) /1000,DECIMAL(15,2)) end " , Shop::getDistance)
+                        .eq(Shop::getIsdeleted,Constants.ZERO)
+                        .eq(Shop::getStatus,Constants.ZERO)
+                        .like(StringUtils.isNotBlank(model.getAddr()),Shop::getAddr,model.getAddr())
+                        .like(StringUtils.isNotBlank(model.getName()),Shop::getName,model.getName())
+                .orderByAsc(" distance ")
+        );
+    }
+
+
     /**
      * 鍜栬眴 鍟嗗煄璁㈠崟鍙戣揣
      * @param goodsorder
@@ -500,7 +534,6 @@
     /****************************************绉诲姩绔帴鍙e紑濮�********************************************************************/
 
 
-    @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public PayResponse orderPay(OrderPayRequest orderPayRequest){
         Member member = memberMapper.selectById(orderPayRequest.getMemberId());
@@ -614,7 +647,7 @@
         goodsorderMapper.insert(goodsorder);
         //鏁版嵁瀛樺偍
         BigDecimal total = Constants.formatBigdecimal(goodsorder.getPrice()).add(Constants.formatBigdecimal(goodsorder.getIntegral())).add(Constants.formatBigdecimal(goodsorder.getCouponPrice()));
-        BigDecimal rate =Constants.formatBigdecimal(goodsorder.getCouponPrice()) .divide(total,4,BigDecimal.ROUND_HALF_UP);
+        BigDecimal rate =Constants.formatBigdecimal(goodsorder.getCouponPrice()).divide(total,4,BigDecimal.ROUND_HALF_UP);
         BigDecimal totalWxMoney = new BigDecimal(0);
         BigDecimal totalIntegral = new BigDecimal(0);
         for (int i =0;i< goodsOrderDetailList.size();i++) {
@@ -630,7 +663,7 @@
                 //褰撳墠鏄庣粏瀹為檯浠锋牸
                 BigDecimal detialTotal = Constants.formatBigdecimal(goodsOrderDetail.getPrice()).multiply(new BigDecimal(Constants.formatIntegerNum(goodsOrderDetail.getGoodsNum())));
                 //鎶樼畻浼樻儬鍒稿悗鏀粯浠锋牸锛堝寘鍚幇閲戝拰浣欓閮ㄥ垎锛�
-                BigDecimal  actDetialTotal = detialTotal .subtract(detialTotal.multiply(rate));
+                BigDecimal  actDetialTotal = detialTotal.subtract(detialTotal.multiply(rate));
                 //鎸夌幇閲戝拰绉垎鏀粯姣斾緥锛屾姌绠楁瘡涓槑缁嗙幇閲戝拰绉垎鏀粯鐨勬暟閲�
                 BigDecimal rate1 = detialTotal .divide(total,4,BigDecimal.ROUND_HALF_UP);
                 //鍙��鐜伴噾閲戦
@@ -680,6 +713,179 @@
     }
 
 
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public PayResponse orderPay(ShopOrderPayRequest orderPayRequest,MemberCouponServiceImpl memberCouponService){
+        Member member = memberMapper.selectById(orderPayRequest.getMemberId());
+
+        Goodsorder goodsorder = new Goodsorder();
+        goodsorder.setCreator(orderPayRequest.getMemberId());
+        goodsorder.setIntegral(BigDecimal.ZERO);
+        goodsorder.setCreateDate(new Date());
+        goodsorder.setIsdeleted(Constants.ZERO);
+        goodsorder.setMemberInfo(orderPayRequest.getRemark());
+        goodsorder.setMemberId(member.getId());
+        goodsorder.setType(Constants.ZERO);
+        goodsorder.setStatus(Constants.ZERO);
+
+        if(Constants.equalsInteger(orderPayRequest.getReceiveType(),Constants.ZERO)){
+            //鏌ヨ鏀惰揣鍦板潃
+            Addr addr = addrMapper.selectById(orderPayRequest.getAddressId());
+            if(Objects.isNull(addr)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鏀惰揣鍦板潃淇℃伅锛�");
+            }
+            Areas area = areasService.findById(addr.getAreaId(), Constants.TWO);
+            if(Objects.isNull(area)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏀惰揣鍦板潃鍖哄垝淇℃伅鍙戠敓鍙樺寲锛岃鏇存柊鍚庝笅鍗曪紒");
+            }
+
+            goodsorder.setAddrId(addr.getId());
+            goodsorder.setLinkaddr(area.getProvinceName()+area.getCityName() + area.getName() + addr.getAddr());
+            goodsorder.setLinkphone(addr.getPhone());
+            goodsorder.setLinkname(addr.getName());
+            if(Objects.nonNull(member.getBindShopId())){
+                goodsorder.setDistributionShopId(member.getBindShopId());
+            }
+        }else{
+            if(Objects.isNull(orderPayRequest.getShopId())){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"璇烽�夋嫨姝g‘鐨勮嚜鎻愰棬搴楋紒");
+            }
+            Shop shop = shopMapper.selectById(orderPayRequest.getShopId());
+            if(Objects.isNull(shop)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"璇烽�夋嫨姝g‘鐨勮嚜鎻愰棬搴楋紒");
+            }
+
+
+            //鏍规嵁閫夋嫨鍟嗘埛杩涜浼氬憳涓庡晢鎴蜂俊鎭粦瀹�
+            if(Objects.isNull(member.getBindShopId())){
+                memberMapper.update(new UpdateWrapper<Member>().lambda()
+                        .set(Member::getBindShopId,shop.getId())
+                        .eq(Member::getId,member.getId())
+                );
+            }
+            goodsorder.setPickUpShopId(shop.getId());
+            goodsorder.setDistributionShopId(shop.getId());
+            if(Objects.isNull(member.getBindShopId())){
+                member.setBindShopId(shop.getId());
+            }
+        }
+        //鍗曟嵁缂栧彿 鑷
+        goodsorder.setCode(getNextInCode());
+        //璁$畻璁㈠崟鎬婚噾棰�
+        BigDecimal sumPrice = BigDecimal.ZERO;
+
+        //瀛樺偍璁板綍鏄庣粏
+        OrderPayConfirmResponse orderPayConfirmResponse = this.orderPayConfirm(orderPayRequest.getReceiveType(),orderPayRequest.getPayDetailRequestList(),orderPayRequest.getAddressId(),memberCouponService,member.getId());
+        if(Objects.isNull(orderPayConfirmResponse)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"绯荤粺鏀粯閿欒,璇疯仈绯荤鐞嗗憳");
+        }
+        goodsorder.setPrice(orderPayConfirmResponse.getPayAmount());
+        goodsorder.setTotalPrice(orderPayConfirmResponse.getAmount());
+        goodsorder.setUseIntegral(orderPayConfirmResponse.getDeductIntegral());
+        goodsorder.setIntegral(goodsorder.getUseIntegral());
+        goodsorder.setIntegralPrice(orderPayConfirmResponse.getIntegralAmount());
+
+        if(Objects.nonNull(orderPayConfirmResponse.getMemberCoupon())){
+            MemberCoupon memberCoupon = memberCouponMapper.selectById(orderPayConfirmResponse.getMemberCoupon().getId());
+            if(Objects.isNull(memberCoupon)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌浼樻儬鍒镐俊鎭紒");
+            }
+            if(memberCoupon.getStatus().equals(Constants.ONE)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"浼樻儬鍒稿凡浣跨敤锛�");
+            }
+            sumPrice = sumPrice.subtract(memberCoupon.getPrice());
+            goodsorder.setCouponId(memberCoupon.getId());
+            goodsorder.setCouponPrice(orderPayConfirmResponse.getMemberCoupon().getValidAmount());
+
+            memberCouponMapper.update(null,new UpdateWrapper<MemberCoupon>().lambda()
+                    .set(MemberCoupon::getStatus,Constants.ONE)
+                    .set(MemberCoupon::getUseDate,DateUtil.getCurrDateTime())
+                    .eq(MemberCoupon::getId,memberCoupon.getId())
+            );
+        }
+
+        goodsorderMapper.insert(goodsorder);
+        List<OrderGoodsCalculateResponse> goodsCalculateList  = orderPayConfirmResponse.getGoodsCalculateList();
+        if(CollectionUtils.isEmpty(goodsCalculateList)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏃犳槑缁嗘暟鎹�,璇锋鏌ラ�夋嫨鏁版嵁锛�");
+        }
+        List<GoodsorderDetail> goodsOrderDetailList = new ArrayList<>();
+        for (OrderGoodsCalculateResponse payDetailRequest:goodsCalculateList) {
+            //鏌ヨ鍟嗗搧
+            GoodsSku goodsSku = goodsSkuMapper.selectById(payDetailRequest.getSkuId());
+            if(Objects.isNull(goodsSku)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鍟嗗搧SKU淇℃伅锛�");
+            }
+            Goods goods = goodsMapper.selectById(goodsSku.getGoodsId());
+            if(Objects.isNull(goods)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鍟嗗搧淇℃伅锛�");
+            }
+            if(goods.getStatus().equals(Constants.ONE)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪鍟嗗搧宸插垹闄ゆ垨宸蹭笅鏋讹紝鏃犳硶涓嬪崟");
+            }
+            if(goodsSku.getStock().compareTo(new BigDecimal(Constants.formatIntegerNum(payDetailRequest.getGoodsNum())))<Constants.ZERO){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪鍟嗗搧搴撳瓨涓嶈冻锛屾棤娉曚笅鍗曪紒");
+            }
+            //鍟嗗搧搴撳瓨鎵i櫎
+            goodsSku.setStock(goodsSku.getStock().subtract(new BigDecimal(Constants.formatIntegerNum(payDetailRequest.getGoodsNum()))));
+            goodsSkuMapper.updateById(goodsSku);
+            GoodsorderDetail goodsOrderDetail = new GoodsorderDetail();
+            goodsOrderDetail.setCreator(member.getId());
+            goodsOrderDetail.setCreateDate(new Date());
+            goodsOrderDetail.setImgurl(StringUtils.isBlank(goodsSku.getImgurl())?goods.getImgurl():goodsSku.getImgurl());
+            goodsOrderDetail.setName(goods.getName());
+            goodsOrderDetail.setGoodsSkuId(goodsSku.getId().toString());
+            goodsOrderDetail.setSkuName(goodsSku.getName());
+            goodsOrderDetail.setPrice(goodsSku.getPrice());
+            goodsOrderDetail.setGoodsNum(payDetailRequest.getGoodsNum());
+            goodsOrderDetail.setGoodsWeight(payDetailRequest.getWeight());
+            goodsOrderDetail.setCouponDeduct(payDetailRequest.getCouponDeductCash());
+            goodsOrderDetail.setIntegralDeduct(payDetailRequest.getIntegralDeductCash());
+            goodsOrderDetail.setOrderId(goodsorder.getId());
+
+            //鍒ゆ柇闂ㄥ簵鏄惁璁剧疆鍟嗗搧鐨勪环鏍间俊鎭�
+            if(Objects.nonNull(goodsorder.getDistributionShopId())){
+                ShopGoodsRelation shopGoodsRelation = relationMapper.selectOne(new QueryWrapper<ShopGoodsRelation>().lambda()
+                        .eq(ShopGoodsRelation::getIsdeleted,Constants.ZERO) .eq(ShopGoodsRelation::getShopId,goodsorder.getDistributionShopId())
+                        .eq(ShopGoodsRelation::getStatus,Constants.ZERO)
+                        .eq(ShopGoodsRelation::getIsdeleted,Constants.ZERO)
+                        .eq(ShopGoodsRelation::getGoodsSkuId,goodsOrderDetail.getGoodsSkuId())
+                        .last(" limit 1 ")
+                );
+                if(Objects.isNull(shopGoodsRelation)){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝鍏宠仈缁忛攢鍟嗘湭缁戝畾["+goods.getName()+"]鍟嗗搧锛岃鑱旂郴绠$悊鍛橈紒");
+                }
+                goodsOrderDetail.setShopSettlement(shopGoodsRelation.getPrice());
+            }
+            goodsOrderDetailList.add(goodsOrderDetail);
+            //鍒犻櫎璐墿杞﹀晢鍝�
+            shopcartMapper.delete(new QueryWrapper<Shopcart>().lambda()
+                    .eq(Shopcart::getMemberId,member.getId())
+                    .eq(Shopcart::getGoodsSkuId,goodsOrderDetail.getGoodsSkuId())
+            );
+        }
+        //绉垎鍙樺姩璁板綍
+        if(goodsorder.getUseIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+            //鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
+            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+            dealIntegralRequest.setIntegralNum(goodsorder.getUseIntegral());
+            dealIntegralRequest.setDealType(Constants.ONE);
+            dealIntegralRequest.setMemberId(member.getId());
+            dealIntegralRequest.setObjId(goodsorder.getId());
+            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER);
+            integralService.dealIntegral(dealIntegralRequest);
+        }
+
+        if(goodsorder.getPrice().compareTo(orderPayRequest.getTitlePrice())!=Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍟嗗搧浠锋牸鍙戠敓鍙樺寲锛岃鍒锋柊鍚庨噸鏂版敮浠橈紒");
+        }
+
+        return this.wxPay(goodsorder,member);
+    }
+
+
     /**
      * 閲嶆柊鏀粯
      * @param orderId
@@ -715,7 +921,7 @@
             Object response = null;
             WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
             request.setBody("骞冲彴鍟嗗煄");
-            request.setAttach("terraceMall");
+            request.setAttach("shopGoods");
             request.setOutTradeNo(goodsorder.getCode().toString());
             request.setTotalFee(BaseWxPayRequest.yuanToFen(goodsorder.getPrice().toString()));
           //  request.setTotalFee(2);
@@ -781,6 +987,9 @@
             j.setImgUrl(fullUrl + j.getImgUrl());
         });
         memberOrderResponse.setMemberOrderDetailResponseList(memberOrderDetailResponseList);
+        if(Constants.equalsInteger(memberOrderResponse.getReceiveType(),Constants.ONE)){
+            memberOrderResponse.setShopInfo(shopMapper.selectById(memberOrderResponse.getShopId()));
+        }
         return memberOrderResponse;
     }
 
@@ -900,6 +1109,264 @@
     }
 
 
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public void cancelOrderNew(Integer orderId,Integer optUserId,String cancelInfo){
+        if(Objects.isNull(orderId)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        Goodsorder goodsorder = goodsorderMapper.selectById(orderId);
+        if(Objects.isNull(goodsorder)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!(Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.WAIT_PAY.getKey())
+        || Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.PAY_DONE.getKey()) 
+        || Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.WAIT_RECEIVE.getKey()) )){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鍙栨秷澶辫触锛氳鍗曠姸鎬佸凡娴佽浆锛�");
+        }
+        if(goodsorder.getPrice().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+            //寰俊鐜伴噾閫�娆�
+            String refundCode = WxMiniUtilService.wxRefund(goodsorder.getCode().toString(), goodsorder.getPrice(), goodsorder.getPrice());
+            Fund fund = new Fund();
+            fund.setOrderCode(refundCode);
+            fund.setCreateDate(new Date());
+            fund.setIsdeleted(Constants.ZERO);
+            fund.setRemark(goodsorder.getId().toString());
+            fund.setMemberId(goodsorder.getCreator());
+            fund.setTitle("璁㈠崟鍙栨秷");
+            fund.setContent(StringUtils.isBlank(cancelInfo)?"鐢ㄦ埛涓诲姩鍙栨秷":cancelInfo);
+            fund.setObjId(goodsorder.getId());
+            fund.setObjType(Constants.ONE);
+            fund.setType(Constants.ONE);
+            fund.setNum(goodsorder.getPrice());
+            fundMapper.insert(fund);
+        }
+        if(goodsorder.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+            //鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
+            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+            dealIntegralRequest.setIntegralNum(goodsorder.getIntegral());
+            dealIntegralRequest.setDealType(Constants.ZERO);
+            dealIntegralRequest.setMemberId(goodsorder.getMemberId());
+            dealIntegralRequest.setObjId(goodsorder.getId());
+            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_CANCEL);
+            integralService.dealIntegral(dealIntegralRequest);
+        }
+        //璁㈠崟淇℃伅鍙栨秷
+        goodsorder.setStatus(Constants.OrderStatus.CLOSE.getKey());
+        goodsorder.setCancelDate(new Date());
+        goodsorder.setCancelInfo(StringUtils.isBlank(cancelInfo)?"鐢ㄦ埛涓诲姩鍙栨秷":cancelInfo);
+        goodsorder.setCancelUser(optUserId);
+        goodsorderMapper.updateById(goodsorder);
+        String goodsName = "";
+        List<GoodsorderDetail> goodsorderDetailList =  goodsorderDetailMapper.selectList(new QueryWrapper<GoodsorderDetail>().eq("ORDER_ID",goodsorder.getId()));
+        if(!Objects.isNull(goodsorderDetailList)&&goodsorderDetailList.size()>Constants.ZERO){
+            for (GoodsorderDetail goodsorderDetail:goodsorderDetailList) {
+                GoodsSku goodsSku = goodsSkuMapper.selectById(goodsorderDetail.getGoodsSkuId());
+                if(StringUtils.isBlank(goodsName)){
+                    Goods goods = goodsMapper.selectById(goodsSku.getGoodsId());
+                    goodsName = goods.getName();
+                }
+                if(!Objects.isNull(goodsSku)){
+                    goodsSku.setStock(goodsSku.getStock().add(new BigDecimal(Constants.formatIntegerNum(goodsorderDetail.getGoodsNum()))));
+                    goodsSkuMapper.updateById(goodsSku);
+                }
+            }
+        }
+
+        //SendWxMessage.orderCancel(goodsorder,memberMapper.selectById(goodsorder.getMemberId()),goodsName);
+
+        //鏌ヨ浼樻儬鍒镐俊鎭褰�
+        if(!Objects.isNull(goodsorder.getCouponId())){
+            MemberCoupon memberCoupon = memberCouponMapper.selectById(goodsorder.getCouponId());
+            if(!Objects.isNull(memberCoupon)){
+                memberCoupon.setStatus(Constants.ZERO);
+                memberCouponMapper.updateById(memberCoupon);
+            }
+        }
+    }
+
+
+
+
+
+    public BigDecimal getDeductAmount(List<PayDetailRequest> requestList){
+        List<MemberCoupon> memberCouponList = new ArrayList<>();
+
+        List<GoodsSku> goodsSkuList = goodsSkuMapper.selectList(new QueryWrapper<GoodsSku>()
+                .lambda()
+                .eq(GoodsSku::getIsdeleted,Constants.ZERO)
+                .in(GoodsSku::getId,requestList.stream().map(i->i.getGoodsSkuId()).collect(Collectors.toList()))
+        );
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(goodsSkuList)||!Constants.equalsInteger(goodsSkuList.size(),requestList.size())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍟嗗搧SKU淇℃伅閿欒,璇峰埛鏂伴噸璇�");
+        }
+
+        //鏌ヨ鍟嗗搧鍒楄〃
+        List<Goods> goodsList = goodsMapper.selectJoinList(Goods.class,
+                new MPJLambdaWrapper<Goods>()
+                        .selectAs(GoodsSku::getPrice,Goods::getSkuPrice)
+                        .selectAs(GoodsSku::getId,Goods::getSkuId)
+                        .leftJoin(GoodsSku.class,GoodsSku::getGoodsId,Goods::getId)
+                        .in(GoodsSku::getId,requestList.stream().map(i->i.getGoodsSkuId()).collect(Collectors.toList())));
+        if(Objects.isNull(goodsList)){
+            return BigDecimal.ZERO;
+        }
+        //鑾峰彇閫夋嫨鐨勫晢鍝佹�婚噾棰� 涓� 鍗曚釜鍟嗗搧閲戦
+        BigDecimal deductAmount = BigDecimal.ZERO;
+        for (Goods goods:goodsList) {
+            List<PayDetailRequest> request = requestList.stream().filter(i->Constants.equalsInteger(i.getGoodsSkuId(), goods.getSkuId())).collect(Collectors.toList());
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(request)){
+                goods.setSkuAmount(goods.getSkuPrice().multiply(new BigDecimal(request.get(Constants.ZERO).getGoodsNum()+"")));
+                deductAmount = deductAmount.add(goods.getSkuAmount().multiply(goods.getDeductRata()));
+            }
+        }
+        return deductAmount;
+    }
+
+
+    /**
+     * 璁㈠崟纭鎺ュ彛
+     * @param receiveType 0=蹇�掗厤閫� 1=鑷彁
+     * @param requestList
+     * @param addressId
+     * @param memberCouponService
+     * @param memberId
+     */
+    public OrderPayConfirmResponse orderPayConfirm(Integer receiveType,List<PayDetailRequest> requestList,Integer addressId,
+                                MemberCouponServiceImpl memberCouponService,Integer memberId){
+        OrderPayConfirmResponse orderPayConfirmResponse = new OrderPayConfirmResponse();
+        List<Goods> goodsList = goodsMapper.selectJoinList(Goods.class,
+                new MPJLambdaWrapper<Goods>()
+                        .selectAs(GoodsSku::getPrice,Goods::getSkuPrice)
+                        .selectAs(GoodsSku::getId,Goods::getSkuId)
+                        .selectAs(GoodsSku::getIntegralRate,Goods::getDeductRata)
+                        .selectAs(GoodsSku::getWeight,Goods::getWeight)
+                        .selectAs(GoodsSku::getImgurl,Goods::getSkuImg)
+                        .leftJoin(GoodsSku.class,GoodsSku::getGoodsId,Goods::getId)
+                        .in(GoodsSku::getId,requestList.stream().map(i->i.getGoodsSkuId()).collect(Collectors.toList())));
+        if(CollectionUtils.isEmpty(goodsList)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈尮閰嶅埌鍟嗗搧淇℃伅");
+        }
+
+        List<OrderGoodsCalculateResponse> goodsCalculateList = ListUtil.copyProperties(goodsList,OrderGoodsCalculateResponse::new);
+
+        //璁㈠崟鎬婚噾棰�
+        BigDecimal amount = BigDecimal.ZERO;
+        //浼樻儬鍒告姷鎵i噾棰�
+        BigDecimal couponAmount = BigDecimal.ZERO;
+        //绉垎鎶垫墸閲戦
+        BigDecimal integralAmount = BigDecimal.ZERO;
+        //鎶垫墸绉垎鍊�
+        BigDecimal deductIntegral = BigDecimal.ZERO;
+        //閭垂閲戦
+        BigDecimal mailAmount = BigDecimal.ZERO;
+        for (OrderGoodsCalculateResponse response:goodsCalculateList) {
+            List<PayDetailRequest> request = requestList.stream().filter(i->Constants.equalsInteger(i.getGoodsSkuId(), response.getSkuId())).collect(Collectors.toList());
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(request)){
+                PayDetailRequest payDetailRequest = request.get(Constants.ZERO);
+                response.setSkuAmount(response.getSkuPrice().multiply(new BigDecimal(payDetailRequest.getGoodsNum()+"")));
+                response.setGoodsNum(payDetailRequest.getGoodsNum());
+                amount = amount.add(response.getSkuAmount());
+            }
+        }
+        //鑾峰彇浼樻儬鍒镐紭鎯犻噾棰�
+        List<MemberCoupon> memberCouponList = memberCouponService.getApplyCoupon(requestList,memberId);
+        MemberCoupon memberCoupon = new MemberCoupon();
+        if(CollectionUtils.isNotEmpty(memberCouponList)){
+            memberCoupon = memberCouponList.get(Constants.ZERO);
+            couponAmount = memberCoupon.getValidAmount();
+            memberCouponService.calculateCouponRata(memberCoupon,goodsCalculateList,amount);
+            orderPayConfirmResponse.setMemberCoupon(memberCoupon);
+        }
+        //绉垎鎶垫墸閲戦
+        //鏌ヨ鐢ㄦ埛鎬荤Н鍒�
+        Member member = memberMapper.selectById(memberId);
+        //绉垎澶т簬0 涓斿ぇ浜庡彲鐢ㄧН鍒嗛厤缃」 鎵嶅彲浠ヤ娇鐢�
+        if(member.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+            //鏈�浣庡彲鐢ㄥ惎鐢ㄧН鍒�
+            BigDecimal minimumIntegral = new BigDecimal(systemDictDataBiz.queryByCode(Constants.SHOP_CONFIG,Constants.MINIMUM_AVAILABLE_INTEGRAL).getCode());
+            if(member.getIntegral().compareTo(minimumIntegral)>=Constants.ZERO){
+                this.calculateIntegralRata(goodsCalculateList,member.getIntegral());
+            }
+        }
+        //閭垂閲戦
+        if(Constants.equalsInteger(receiveType,Constants.ZERO)){
+            //TODO  鏍规嵁鏀惰揣鍦板潃 鏌ヨ杩愯垂閰嶇疆
+
+            //璁$畻鍟嗗搧淇℃伅鎬婚噸閲�
+            BigDecimal totalWeight = goodsCalculateList.stream().map(i->
+                    i.getWeight().multiply(new BigDecimal(i.getGoodsNum().toString()))
+                    ).reduce(BigDecimal.ZERO,BigDecimal::add);
+            
+        }
+
+        orderPayConfirmResponse.setAmount(amount);
+        orderPayConfirmResponse.setCouponAmount(couponAmount);
+        orderPayConfirmResponse.setDeductIntegral(deductIntegral);
+        orderPayConfirmResponse.setMailAmount(mailAmount);
+        orderPayConfirmResponse.setIntegralAmount(integralAmount);
+        orderPayConfirmResponse.setPayAmount(amount.subtract(couponAmount).subtract(mailAmount).subtract(integralAmount));
+        orderPayConfirmResponse.setGoodsCalculateList(goodsCalculateList);
+        BigDecimal cashToIntegralRata = new BigDecimal(systemDictDataBiz.queryByCode(Constants.SHOP_CONFIG,Constants.CASH_EXCHANGE_INTEGRAL_RATA).getCode());
+        orderPayConfirmResponse.setIntegralBack(
+                orderPayConfirmResponse.getPayAmount().multiply(cashToIntegralRata)
+        );
+
+        return orderPayConfirmResponse;
+    }
+
+    /**
+     *
+     * @param goodsCalculateList 鍟嗗搧闆嗗悎
+     * @param totalIntegral 鐢ㄦ埛鎬荤Н鍒�
+     */
+    public void  calculateIntegralRata(List<OrderGoodsCalculateResponse> goodsCalculateList,BigDecimal totalIntegral){
+        //褰撳墠閫夋嫨鍟嗗搧鏈�澶у彲鐢ㄧН鍒嗘姷鎵g殑閲戦
+        BigDecimal maxDeductionCash =  goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(i.getCouponDeductCash())
+                .multiply(i.getDeductRata())).reduce(BigDecimal.ZERO,BigDecimal::add);
+        //绉垎 - 鐜伴噾 姣斾緥
+        BigDecimal cashToIntegralRata = new BigDecimal(systemDictDataBiz.queryByCode(Constants.SHOP_CONFIG,Constants.INTEGRAL_EXCHANGE_CASH_RATA).getCode());
+        //褰撳墠閫夋嫨鍟嗗搧鎶垫墸闇�瑕佷娇鐢ㄧ殑绉垎
+        BigDecimal maxDeductionIntegral =  maxDeductionCash.multiply(cashToIntegralRata).multiply(new BigDecimal("100"));
+        BigDecimal deductionRata = BigDecimal.ONE;
+        //濡傛灉瀹為檯绉垎灏戜簬鏈�澶ч渶瑕佺Н鍒� 闇�瑕佽绠楁瘮渚嬪崰姣� 鍘诲搴旀坊鍔犺嚦瀵瑰簲鐨勫晢鍝侀噷
+        if(totalIntegral.compareTo(maxDeductionIntegral)<=Constants.ZERO) {
+            deductionRata = totalIntegral.divide(maxDeductionIntegral, 2, BigDecimal.ROUND_HALF_UP);
+        }
+        //鑾峰彇鎬荤殑鎶垫墸閲戦 涓� 姣忎釜鍟嗗搧鍙姷鎵i噾棰�
+        //宸茬敤鍗犳瘮姣斾緥鍊�
+        BigDecimal rata = BigDecimal.ZERO;
+        //鍓╀綑鍙垎閰嶉噾棰�
+        BigDecimal surplusValidAmount = maxDeductionCash;
+        for (int j = 0; j < goodsCalculateList.size(); j++) {
+            if(Constants.equalsInteger(j+1,goodsCalculateList.size())){
+                goodsCalculateList.get(j).setIntegralMaxDeductCash(surplusValidAmount);
+                goodsCalculateList.get(j).setOrderIntegralRata(new BigDecimal("1").subtract(rata));
+            }else{
+                //绉垎鏈�澶у彲鎶垫墸閲戦
+                goodsCalculateList.get(j).setIntegralMaxDeductCash(
+                        goodsCalculateList.get(j).getSkuAmount()
+                                .subtract(goodsCalculateList.get(j).getCouponDeductCash())
+                                .multiply(goodsCalculateList.get(j).getDeductRata()));
+                //璁㈠崟涓Н鍒嗛噾棰濆疄闄呭崰姣�
+                goodsCalculateList.get(j).setOrderIntegralRata(
+                                goodsCalculateList.get(j)
+                                        .getIntegralMaxDeductCash().divide(maxDeductionCash,2,BigDecimal.ROUND_DOWN)
+                        );
+                rata = rata.add(goodsCalculateList.get(j).getOrderIntegralRata());
+                surplusValidAmount = surplusValidAmount.subtract(goodsCalculateList.get(j).getIntegralMaxDeductCash());
+            }
+            //濡傛灉鐢ㄦ埛绉垎澶т簬鏈闇�瑕佷娇鐢ㄧ殑鏈�澶хН鍒� 鍒欑洿鎺ヤ娇鐢ㄥ惁鍒欓渶瑕侀噸鏂拌绠�
+            goodsCalculateList.get(j).setIntegralDeductCash(goodsCalculateList.get(j).getIntegralMaxDeductCash().multiply(deductionRata));
+            goodsCalculateList.get(j).setIntegralDeduct(goodsCalculateList.get(j).getIntegralMaxDeductCash().multiply(cashToIntegralRata).multiply(deductionRata));
+        }
+
+    }
+
+
+
+
     /**
      * 鍌彂璐�
      * @param orderId
@@ -938,6 +1405,21 @@
         orderUrgeMapper.insert(orderUrge);
     }
 
+    @Override
+    public void delOrder(Integer orderId,Integer memberId){
+        Goodsorder goodsorder = goodsorderMapper.selectById(orderId);
+        if(!goodsorder.getMemberId().equals(memberId)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氱敤鎴蜂俊鎭尮閰嶅け璐ワ紒");
+        }
+        if(!goodsorder.getStatus().equals(Constants.OrderStatus.CLOSE.getKey())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氬綋鍓嶈鍗曠姸鎬侊紝鏃犳硶杩涜璇ユ搷浣滐紒");
+        }
+        goodsorder.setIsdeleted(Constants.ONE);
+        goodsorder.setEditDate(new Date());
+        goodsorderMapper.updateById(goodsorder);
+    }
+    
+    
 
     /**
      * 璁㈠崟纭鏀惰揣
@@ -950,6 +1432,9 @@
         if(!goodsorder.getMemberId().equals(memberId)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氱敤鎴蜂俊鎭尮閰嶅け璐ワ紒");
         }
+        if(Constants.equalsInteger(goodsorder.getReceiveType(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氳嚜鎻愯鍗曪紝鏃犳硶杩涜璇ユ搷浣滐紒");
+        }
         if(!goodsorder.getStatus().equals(Constants.OrderStatus.WAIT_RECEIVE.getKey())){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氳鍗曟湭鍙戣揣锛屾棤娉曡繘琛岀‘璁わ紒");
         }
@@ -959,7 +1444,69 @@
         goodsorder.setStatus(Constants.OrderStatus.DONE.getKey());
         goodsorder.setDoneDate(new Date());
         goodsorderMapper.updateById(goodsorder);
+        //缁忛攢鍟嗗垎閿� 娣诲姞鍒嗛攢閲戦璁板綍
+        this.addShopIntegral(goodsorder);
     }
+
+    /**
+     * 璁㈠崟鏍搁攢
+     * @param code
+     * @param memberId
+     */
+    @Override
+    public void orderWriteOff(String exchangeCode,Integer memberId){
+        Goodsorder goodsorder = goodsorderMapper.selectOne(new QueryWrapper<Goodsorder>().lambda()
+                .eq(Goodsorder::getExchangeCode,exchangeCode)
+                .eq(Goodsorder::getIsdeleted,Constants.ZERO).last("limit 1 "));
+        if(Objects.isNull(goodsorder)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(goodsorder.getReceiveType(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氶厤閫佽鍗曪紝鏃犳硶杩涜璇ユ搷浣滐紒");
+        }
+        if(!goodsorder.getStatus().equals(Constants.OrderStatus.PAY_DONE.getKey())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氳鍗曠姸鎬佸凡娴佽浆锛屾棤娉曡繘琛岃鎿嶄綔锛�");
+        }
+        Shop shop = shopMapper.selectById(goodsorder.getPickUpShopId());/*selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getMemberId,memberId)
+                .eq(Shop::getIsdeleted,Constants.ZERO).last("limit 1 ")
+        );*/
+        if(Objects.isNull(shop)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌璁㈠崟鍏宠仈缁忛攢鍟嗕俊鎭�,璇疯仈绯荤鐞嗗憳");
+        }
+        if(!Constants.equalsInteger(shop.getMemberId(),memberId)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"["+shop.getName()+"]闈炴偍缁戝畾鐨勭粡閿�鍟嗭紝鏃犳硶杩涜璇ユ搷浣滐紒");
+        } 
+        goodsorder.setStatus(Constants.OrderStatus.DONE.getKey());
+        goodsorder.setDoneDate(new Date());
+        goodsorderMapper.updateById(goodsorder);
+        //缁忛攢鍟嗗垎閿� 娣诲姞鍒嗛攢閲戦璁板綍
+        this.addShopIntegral(goodsorder);
+    }
+
+
+    public void addShopIntegral(Goodsorder goodsorder){
+        if(Objects.isNull(goodsorder.getDistributionShopId())){
+            return;
+        }
+        List<GoodsorderDetail> detailList = goodsorderDetailMapper.selectList(new QueryWrapper<GoodsorderDetail>().lambda()
+                .eq(GoodsorderDetail::getOrderId,goodsorder.getId())
+                .isNotNull(GoodsorderDetail::getShopSettlement)
+        );
+        if(CollectionUtils.isNotEmpty(detailList)){
+            BigDecimal settlement = detailList.stream().map(i->i.getShopSettlement()).reduce(BigDecimal.ZERO,BigDecimal::add);
+            //鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
+            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+            dealIntegralRequest.setIntegralNum(settlement);
+            dealIntegralRequest.setDealType(Constants.ZERO);
+            dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
+            dealIntegralRequest.setObjId(goodsorder.getId());
+            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_SETTLEMENT);
+            integralService.dealShopIntegral(dealIntegralRequest);
+        }
+    }
+
+
 
 
     @Override
@@ -1175,4 +1722,53 @@
     }
 
 
+
+
+    @Override
+    public HomeInfoResponse getHomeInfo(int memberId){
+        HomeInfoResponse homeInfoResponse = new HomeInfoResponse();
+        Member member = memberMapper.selectById(memberId);
+        if(Objects.isNull(member)){
+            return homeInfoResponse;
+        }
+        homeInfoResponse.setMember(member);
+        homeInfoResponse.setWaitReceiveNum(
+                goodsorderMapper.selectCount(new QueryWrapper<Goodsorder>().lambda().eq(Goodsorder::getIsdeleted,Constants.ZERO)
+                        .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)
+                        .eq(Shopcart::getMemberId,member.getId()))
+        );
+        homeInfoResponse.setCouponNum(
+                memberCouponMapper.selectCount(new QueryWrapper<MemberCoupon>().lambda()
+                        .eq(MemberCoupon::getIsdeleted,Constants.ZERO)
+                        .eq(MemberCoupon::getMemberId,member.getId())
+                        .eq(MemberCoupon::getStatus,Constants.ZERO)
+                        .apply(" end_date >now() ")
+                )
+        );
+        homeInfoResponse.setCollectNum(
+                collectMapper.selectCount(new QueryWrapper<Collect>().lambda()
+                        .eq(Collect::getIsdeleted,Constants.ZERO)
+                        .eq(Collect::getMemberId,member.getId())
+                )
+        );
+
+        return homeInfoResponse;
+
+
+    }
+
+
+
+
+
 }
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 5ed3b67..d53622a 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
@@ -10,10 +10,12 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.IntegralMapper;
 import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.ShopMapper;
 import com.doumee.dao.business.join.IntegralJoinMapper;
 import com.doumee.dao.business.model.Fund;
 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.web.dto.IntegralDTO;
 import com.doumee.dao.web.request.DealIntegralRequest;
 import com.doumee.service.business.AreasService;
@@ -58,6 +60,9 @@
 
     @Autowired
     private MemberMapper memberMapper;
+
+    @Autowired
+    private ShopMapper shopMapper;
 
     @Transactional(rollbackFor = {Exception.class, BusinessException.class})
     @Override
@@ -150,6 +155,7 @@
         integral.setNum(dealIntegralRequest.getIntegralNum());
         integral.setTotalNum(dealIntegralRequest.getDealType().equals(Constants.ZERO)? member.getIntegral().add(integral.getNum()):member.getIntegral().subtract(integral.getNum()));
         integral.setOrderCode(dealIntegralRequest.getOrderCode());
+        integral.setUserType(Constants.ZERO);
         integralMapper.insert(integral);
         if(dealIntegralRequest.getDealType().equals(Constants.ZERO)){
             memberMapper.addIntegral(member.getId(),dealIntegralRequest.getIntegralNum(),
@@ -160,7 +166,35 @@
         return integral.getId();
     }
 
-
+    @Override
+    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+    public Integer dealShopIntegral(DealIntegralRequest dealIntegralRequest) {
+        Shop shop = shopMapper.selectById(dealIntegralRequest.getMemberId());
+        if(Objects.isNull(shop)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鍟嗘埛淇℃伅");
+        }
+        Integral integral = new Integral();
+        integral.setMemberId(shop.getId());
+        integral.setCreateDate(new Date());
+        integral.setIsdeleted(Constants.ZERO);
+        integral.setTitle(dealIntegralRequest.getIntegralObjType().getName());
+        integral.setContent(dealIntegralRequest.getIntegralObjType().getNoteinfo());
+        integral.setObjId(dealIntegralRequest.getObjId());
+        integral.setObjType(dealIntegralRequest.getIntegralObjType().getKey());
+        integral.setType(dealIntegralRequest.getDealType());
+        integral.setNum(dealIntegralRequest.getIntegralNum());
+        integral.setTotalNum(dealIntegralRequest.getDealType().equals(Constants.ZERO)? shop.getIntegral().add(integral.getNum()):shop.getIntegral().subtract(integral.getNum()));
+        integral.setOrderCode(dealIntegralRequest.getOrderCode());
+        integral.setUserType(Constants.ONE);
+        integralMapper.insert(integral);
+        if(dealIntegralRequest.getDealType().equals(Constants.ZERO)){
+            shopMapper.addIntegral(shop.getId(),dealIntegralRequest.getIntegralNum(),
+                    dealIntegralRequest.getIntegralObjType().getAddTitle()==Constants.ZERO?dealIntegralRequest.getIntegralNum():BigDecimal.ZERO);
+        }else{
+            shopMapper.subtractIntegral(shop.getId(),dealIntegralRequest.getIntegralNum());
+        }
+        return integral.getId();
+    }
 
 
     @Override
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 b5af21e..83df9aa 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
@@ -7,31 +7,33 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.ListUtil;
 import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.CouponMapper;
-import com.doumee.dao.business.MemberCouponJoinMapper;
-import com.doumee.dao.business.MemberCouponMapper;
-import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.*;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.web.dto.CouponDTO;
 import com.doumee.dao.web.dto.MemberCouponDTO;
+import com.doumee.dao.web.request.PayDetailRequest;
+import com.doumee.dao.web.response.MemberCouponResponse;
+import com.doumee.dao.web.response.goods.OrderGoodsCalculateResponse;
 import com.doumee.service.business.MemberCouponService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDateTime;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 鐢ㄦ埛浼樻儬鍒稿叧鑱旇〃Service瀹炵幇
@@ -45,7 +47,17 @@
     private MemberCouponMapper memberCouponMapper;
 
     @Autowired
+    private GoodsMapper goodsMapper;
+
+    @Autowired
+    private GoodsSkuMapper goodsSkuMapper;
+
+    @Autowired
     private MemberCouponJoinMapper memberCouponJoinMapper;
+
+    @Autowired
+    private LabelsMapper labelsMapper;
+
 
     @Autowired
     private CouponMapper couponMapper;
@@ -196,11 +208,13 @@
      * @return
      */
     @Override
-    public IPage<CouponDTO> memberCouponPage(IPage pages, BigDecimal price, Integer memberId,Integer couponType) {
-        IPage<CouponDTO> page = memberCouponMapper.memberCouponPage(pages,new QueryWrapper<CouponDTO>()
+    public IPage<MemberCouponResponse> memberCouponPage(IPage pages, BigDecimal price, Integer memberId,Integer couponType,Integer status) {
+        IPage<MemberCouponResponse> page = memberCouponMapper.memberCouponPage(pages,new QueryWrapper<MemberCouponResponse>()
                 .eq("m.MEMBER_ID",memberId)
                 .eq("m.TYPE",Constants.ONE)
-                .eq("m.STATUS",Constants.ZERO)
+                .apply(Objects.nonNull(status)&&Constants.equalsInteger(status,Constants.ZERO),"m.STATUS = 0 and m.END_DATE >= now()" )
+                .apply(Objects.nonNull(status)&&Constants.equalsInteger(status,Constants.ONE),"m.STATUS = 1" )
+                .apply(Objects.nonNull(status)&&Constants.equalsInteger(status,Constants.TWO),"m.STATUS = 0 and  m.END_DATE < now() " )
                 .eq("TYPE",couponType)
                 .apply(!Objects.isNull(price)," m.LIMIT_PRICE >= "+price+" ")
                 .apply("   now() between m.START_DATE and m.END_DATE ")
@@ -208,6 +222,41 @@
         );
         return page;
     }
+
+
+    @Override
+    public MemberCouponResponse getMemberCouponDetail(Integer id){
+        MemberCoupon memberCoupon = memberCouponJoinMapper.selectById(id);
+        if(Objects.isNull(memberCoupon)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        MemberCouponResponse memberCouponResponse = new MemberCouponResponse();
+        BeanUtils.copyProperties(memberCoupon,memberCouponResponse);
+        if(StringUtils.isNotBlank(memberCouponResponse.getApplyIds())){
+            if(Constants.equalsInteger(memberCouponResponse.getApplyType(),Constants.ONE)){
+                List<Labels> labelsList = labelsMapper.selectList(new QueryWrapper<Labels>().lambda()
+                        .eq(Labels::getIsdeleted,Constants.ZERO)
+                        .eq(Labels::getType,Constants.LabelsType.GOODSTYPE.getKey())
+                        .apply(" find_in_set( id , '"+memberCouponResponse.getApplyIds()+"'  ) ")
+                );
+                if(CollectionUtils.isNotEmpty(labelsList)){
+                    memberCouponResponse.setRelationInfoList(labelsList.stream().map(i->i.getName()).collect(Collectors.toList()));
+                }
+            }else if(Constants.equalsInteger(memberCouponResponse.getApplyType(),Constants.TWO)){
+                List<Goods> labelsList = goodsMapper.selectList(new QueryWrapper<Goods>().lambda()
+                        .eq(Goods::getIsdeleted,Constants.ZERO)
+                        .apply(" find_in_set( id , '"+memberCouponResponse.getApplyIds()+"'  ) ")
+                );
+                if(CollectionUtils.isNotEmpty(labelsList)){
+                    memberCouponResponse.setRelationInfoList(labelsList.stream().map(i->i.getName()).collect(Collectors.toList()));
+                }
+            }
+        }
+
+        return memberCouponResponse;
+    }
+
+
 
     /**
      * 浼樻儬鍒告暟閲�
@@ -220,7 +269,6 @@
     public long memberCouponNum( BigDecimal price, Integer memberId,Integer couponType) {
         long count = memberCouponMapper.selectCount(new QueryWrapper<MemberCoupon>()
                 .eq("MEMBER_ID",memberId)
-                .eq("TYPE",Constants.ONE)
                 .eq("STATUS",Constants.ZERO)
                 .eq("TYPE",couponType)
                 .apply("LIMIT_PRICE >= "+price+" ")
@@ -317,4 +365,152 @@
     }
 
 
+    /**
+     * 鏍规嵁鍟嗗搧淇℃伅鑾峰彇閫傜敤鐨勪紭鎯犲埜
+     */
+    @Override
+    public List<MemberCoupon> getApplyCoupon(List<PayDetailRequest> requestList,Integer memberId){
+        List<MemberCoupon> memberCouponList = new ArrayList<>();
+        List<GoodsSku> goodsSkuList = goodsSkuMapper.selectList(new QueryWrapper<GoodsSku>()
+                .lambda()
+                .eq(GoodsSku::getIsdeleted,Constants.ZERO)
+                .in(GoodsSku::getId,requestList.stream().map(i->i.getGoodsSkuId()).collect(Collectors.toList()))
+        );
+        if(CollectionUtils.isEmpty(goodsSkuList)||!Constants.equalsInteger(goodsSkuList.size(),requestList.size())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍟嗗搧SKU淇℃伅閿欒,璇峰埛鏂伴噸璇�");
+        }
+
+        //鏌ヨ鍟嗗搧鍒楄〃
+        List<Goods> goodsList = goodsMapper.selectJoinList(Goods.class,
+                new MPJLambdaWrapper<Goods>()
+                        .selectAs(GoodsSku::getPrice,Goods::getSkuPrice)
+                        .selectAs(GoodsSku::getId,Goods::getSkuId)
+                        .leftJoin(GoodsSku.class,GoodsSku::getGoodsId,Goods::getId)
+                .in(GoodsSku::getId,requestList.stream().map(i->i.getGoodsSkuId()).collect(Collectors.toList())));
+
+        if(Objects.isNull(goodsList)){
+            return memberCouponList;
+        }
+
+        //鑾峰彇閫夋嫨鐨勫晢鍝佹�婚噾棰� 涓� 鍗曚釜鍟嗗搧閲戦
+        BigDecimal totalAmount = BigDecimal.ZERO;
+        for (Goods goods:goodsList) {
+            List<PayDetailRequest> request = requestList.stream().filter(i->Constants.equalsInteger(i.getGoodsSkuId(), goods.getSkuId())).collect(Collectors.toList());
+            if(CollectionUtils.isNotEmpty(request)){
+                goods.setSkuAmount(goods.getSkuPrice().multiply(new BigDecimal(request.get(Constants.ZERO).getGoodsNum()+"")));
+                totalAmount = totalAmount.add(goods.getSkuAmount());
+            }
+        }
+        List<OrderGoodsCalculateResponse> goodsCalculateList = ListUtil.copyProperties(goodsList,OrderGoodsCalculateResponse::new);
+        //鑾峰彇鎵�鏈夋弧瓒抽噾棰濅笖鍙敤鐨勪紭鎯犲埜
+        List<MemberCoupon> allCoupon =  memberCouponMapper.selectList(new QueryWrapper<MemberCoupon>().lambda()
+                        .eq(MemberCoupon::getIsdeleted,Constants.ZERO)
+                        .eq(MemberCoupon::getStatus,Constants.ZERO)
+                        .apply("  LIMIT_PRICE <= " + totalAmount)
+                        .apply("  now() between START_DATE and  END_DATE "));
+
+        if(CollectionUtils.isNotEmpty(allCoupon)){
+            for (MemberCoupon memberCoupon:allCoupon) {
+                //閫傜敤绫诲瀷锛�0=鍏ㄥ満;1=鍝佺被锛�2=鎸囧畾鍟嗗搧
+                 if(Constants.equalsInteger(memberCoupon.getApplyType(),Constants.ZERO)){
+                     memberCoupon.setValidAmount(memberCoupon.getPrice());
+                 }else{
+                     List<String> applyIdList = Arrays.asList(memberCoupon.getApplyIds().split(","));
+                     //鑾峰彇鏈夋晥鍙互浣跨敤浼樻儬鍒哥殑鏁版嵁
+                     isVaildUse(applyIdList,goodsCalculateList,
+                             Constants.equalsInteger(memberCoupon.getApplyType(),Constants.ONE)?Constants.ONE:Constants.ZERO);
+                     BigDecimal skuAmount = goodsCalculateList.stream().filter(i->i.getUseCoupon()).map(i->i.getSkuAmount()).reduce(BigDecimal.ZERO,BigDecimal::add);
+                     if(skuAmount.compareTo(memberCoupon.getLimitPrice())>=Constants.ZERO){
+                         //鏍规嵁閲戦璁$畻瀹為檯鎶樻墸閲戦
+                         BigDecimal couponPrice = skuAmount.multiply(memberCoupon.getPrice()).divide(new BigDecimal("100"),2, RoundingMode.HALF_UP);
+                         //鎶樻墸閲戦澶т簬鏈�澶у彲鎶樻墸閲戦  鍒欎娇鐢ㄦ渶澶у彲鎶樻墸閲戦
+                         memberCoupon.setValidAmount(couponPrice.compareTo(memberCoupon.getMaxPrice())>Constants.ZERO?memberCoupon.getMaxPrice():couponPrice);
+                         memberCouponList.add(memberCoupon);
+                     }
+                 }
+            }
+        }
+        // 浣跨敤 Stream 鎺掑簭  reversed() 琛ㄧず鍊掑簭
+        memberCouponList = memberCouponList.stream().sorted(Comparator.comparing(MemberCoupon::getValidAmount,Comparator.nullsFirst(BigDecimal::compareTo)).reversed())
+                .collect(Collectors.toList());
+        return memberCouponList;
+    }
+
+
+    /**
+     * 璁$畻褰撳墠宸查�夋嫨浼樻儬鍒告瘡涓晢鍝佸崰姣旈噾棰�
+     * @param coupon 浼樻儬鍒镐俊鎭�
+     * @param goodsCalculateList 鍟嗗搧闆嗗悎
+     * @param totalAmount 璁㈠崟鎬婚噾棰�
+     */
+    public void  calculateCouponRata(MemberCoupon coupon,List<OrderGoodsCalculateResponse> goodsCalculateList,BigDecimal totalAmount){
+        //鎬讳綑棰�
+        BigDecimal validAmount = coupon.getValidAmount();
+        //鍓╀綑鍙垎閰嶉噾棰�
+        BigDecimal surplusValidAmount = validAmount;
+        //宸茬敤鍗犳瘮姣斾緥鍊�
+        BigDecimal rata = BigDecimal.ZERO;
+        //鏍规嵁浼樻儬鍒哥被鍨� 璁$畻鍙互浣跨敤浼樻儬鍒哥殑鍟嗗搧淇℃伅 閫傜敤绫诲瀷锛�0=鍏ㄥ満;1=鍝佺被锛�2=鎸囧畾鍟嗗搧
+        if(!Constants.equalsInteger(coupon.getApplyType(),Constants.ZERO)){
+            List<String> applyIdList = Arrays.asList(coupon.getApplyIds().split(","));
+            isVaildUse(applyIdList,goodsCalculateList,
+                    Constants.equalsInteger(coupon.getApplyType(),Constants.ONE)?Constants.ONE:Constants.ZERO);
+        }
+        //浣跨敤浜嗕紭鎯犲埜鐨勫晢鍝佹暟閲�
+        Integer countCouponNum = goodsCalculateList.stream().filter(i->i.getUseCoupon()).collect(Collectors.toList()).size();
+        Integer useCouponNum = Constants.ZERO;
+        for (int i = 0; i < goodsCalculateList.size(); i++) {
+            if(!goodsCalculateList.get(i).getUseCoupon()){
+                goodsCalculateList.get(i).setCouponDeductCash(BigDecimal.ZERO);
+                continue;
+            }
+            if(Constants.equalsInteger(useCouponNum+1,countCouponNum)){
+                goodsCalculateList.get(i).setOrderCouponRata(new BigDecimal("1").subtract(rata));
+                goodsCalculateList.get(i).setCouponDeductCash(surplusValidAmount);
+                break;
+            }
+            goodsCalculateList.get(i).setOrderCouponRata(goodsCalculateList.get(i).getSkuAmount().divide(totalAmount,2,BigDecimal.ROUND_DOWN));
+            goodsCalculateList.get(i).setCouponDeductCash(validAmount.multiply(goodsCalculateList.get(i).getOrderCouponRata()));
+            surplusValidAmount = surplusValidAmount.subtract(goodsCalculateList.get(i).getCouponDeductCash());
+            rata = rata.add(goodsCalculateList.get(i).getOrderCouponRata());
+            useCouponNum = useCouponNum + 1;
+        }
+    }
+
+
+
+
+
+    /**
+     * 鍒ゆ柇鏄惁鍙互鏈夋晥浣跨敤
+     * @param idList
+     * @param goodsList
+     * @param vaildType 0=鍟嗗搧锛�1=鍝佺被
+     * @return
+     */
+    public void isVaildUse(List<String> idList,List<OrderGoodsCalculateResponse> goodsList,Integer vaildType){
+        for (OrderGoodsCalculateResponse response:goodsList) {
+            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) {
+//            if(Constants.equalsInteger(vaildType,Constants.ZERO)){
+//                resultList.addAll(goodsList.stream().filter(i->i.getId().toString().equals(id)).collect(Collectors.toList()));
+//            }else{
+//                resultList.addAll(goodsList.stream().filter(i->i.getCategoryId().toString().equals(id)).collect(Collectors.toList()));
+//            }
+//        }
+//        if(CollectionUtils.isNotEmpty(resultList)){
+//            return new HashSet<>(resultList.stream().map(i->i.getId()).collect(Collectors.toList()));
+//        }
+//        return new HashSet<>();
+//    }
+
+
+
+
+
+
 }
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 afb5b60..1dfd46f 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,16 +20,19 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.core.wx.WxMiniConfig;
 import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.SmsrecordMapper;
 import com.doumee.dao.business.join.MemberJoinMapper;
 import com.doumee.dao.business.model.Areas;
 import com.doumee.dao.business.model.Goodsorder;
 import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.Smsrecord;
 import com.doumee.dao.system.SystemUserMapper;
 import com.doumee.dao.system.dto.MemberRechargeDTO;
 import com.doumee.dao.web.dto.MemberOwnDTO;
 import com.doumee.dao.web.dto.shop.Position;
 import com.doumee.dao.system.model.SystemUser;
 import com.doumee.dao.web.request.DealIntegralRequest;
+import com.doumee.dao.web.request.UpdMobileRequest;
 import com.doumee.dao.web.request.UpdateMemberRequest;
 import com.doumee.dao.web.request.WxPhoneRequest;
 import com.doumee.dao.web.response.AccountResponse;
@@ -74,6 +77,9 @@
 
     @Autowired
     private MemberMapper memberMapper;
+
+    @Autowired
+    private SmsrecordMapper smsrecordMapper;
 
 
     @Autowired
@@ -328,6 +334,12 @@
 
     @Override
     public Member updateMember(UpdateMemberRequest updateMemberRequest){
+        if(StringUtils.isBlank(updateMemberRequest.getImgurl())
+                && StringUtils.isBlank(updateMemberRequest.getNickname())
+                && StringUtils.isBlank(updateMemberRequest.getName())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
         Member member  = new Member();
         BeanUtils.copyProperties(updateMemberRequest,member);
         member.setId(updateMemberRequest.getMemberId());
@@ -339,6 +351,9 @@
                 systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+dbMember.getImgurl());
         return dbMember;
     }
+
+
+
 
     @Override
     public MemberOwnDTO getMemberOwnDTO(Integer memberId) {
@@ -405,6 +420,68 @@
         memberMapper.updateById(member);
     }
 
+    @Override
+    public void verifyUserPhone(UpdMobileRequest request){
+        if(Objects.isNull(request)
+                || Objects.isNull(request.getMemberId())
+                || StringUtils.isBlank(request.getPhone())
+                || StringUtils.isBlank(request.getCode())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        Member member = memberMapper.selectById(request.getMemberId());
+        if(StringUtils.isNotBlank(member.getPhone())&&!member.getPhone().equals(request.getPhone())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎵嬫満鍙烽敊璇�");
+        }
+        this.verifyPhoneCode(request.getCode(),request.getMemberId());
+    }
+
+    public void verifyPhoneCode(String code,Integer memberId){
+        //楠岃瘉鐮�
+        Smsrecord smsrecord = smsrecordMapper.selectOne(new QueryWrapper<Smsrecord>().lambda()
+                .eq(Smsrecord::getIsdeleted,Constants.ZERO)
+                .eq(Smsrecord::getCode,code)
+                .eq(Smsrecord::getMemberId,memberId)
+                .last(" limit 1")
+        );
+        if(Objects.isNull(smsrecord)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"楠岃瘉鐮侀敊璇紒");
+        }
+        if(!Constants.equalsInteger(smsrecord.getStatus(),Constants.ZERO)){
+            if(Constants.equalsInteger(smsrecord.getStatus(),Constants.ONE)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"楠岃瘉鐮佸凡浣跨敤");
+            }else{
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"楠岃瘉鐮佸凡杩囨湡");
+            }
+        }
+        smsrecordMapper.update(new UpdateWrapper<Smsrecord>().lambda()
+                .set(Smsrecord::getStatus,Constants.ONE)
+                .eq(Smsrecord::getId,smsrecord.getId())
+        );
+    }
+
+    @Override
+    public void updateUserPhone(UpdMobileRequest request){
+        if(Objects.isNull(request)
+        || Objects.isNull(request.getMemberId())
+        || StringUtils.isBlank(request.getPhone())
+        || StringUtils.isBlank(request.getCode())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        Member member = memberMapper.selectById(request.getMemberId());
+        if(StringUtils.isNotBlank(member.getPhone())&&member.getPhone().equals(request.getPhone())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏃犳硶鏇存崲鐩稿悓鎵嬫満鍙�");
+        }
+        this.verifyPhoneCode(request.getCode(),request.getMemberId());
+        memberMapper.update(new UpdateWrapper<Member>().lambda()
+                .eq(Member::getPhone,request.getPhone())
+                .eq(Member::getId,request.getMemberId())
+        );
+    }
+
+
+
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     @Override
     public Integer importMemberRechargeBatch(MultipartFile file) {
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopGoodsRelationServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopGoodsRelationServiceImpl.java
new file mode 100644
index 0000000..e32fbea
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopGoodsRelationServiceImpl.java
@@ -0,0 +1,139 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.ShopGoodsRelationMapper;
+import com.doumee.dao.business.model.ShopGoodsRelation;
+import com.doumee.service.business.ShopGoodsRelationService;
+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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 缁忛攢鍟嗕緵璐т环淇℃伅Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2025/12/15 09:39
+ */
+@Service
+public class ShopGoodsRelationServiceImpl implements ShopGoodsRelationService {
+
+    @Autowired
+    private ShopGoodsRelationMapper shopGoodsRelationMapper;
+
+    @Override
+    public Integer create(ShopGoodsRelation shopGoodsRelation) {
+        shopGoodsRelationMapper.insert(shopGoodsRelation);
+        return shopGoodsRelation.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        shopGoodsRelationMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(ShopGoodsRelation shopGoodsRelation) {
+        UpdateWrapper<ShopGoodsRelation> deleteWrapper = new UpdateWrapper<>(shopGoodsRelation);
+        shopGoodsRelationMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        shopGoodsRelationMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(ShopGoodsRelation shopGoodsRelation) {
+        shopGoodsRelationMapper.updateById(shopGoodsRelation);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<ShopGoodsRelation> shopGoodsRelations) {
+        if (CollectionUtils.isEmpty(shopGoodsRelations)) {
+            return;
+        }
+        for (ShopGoodsRelation shopGoodsRelation: shopGoodsRelations) {
+            this.updateById(shopGoodsRelation);
+        }
+    }
+
+    @Override
+    public ShopGoodsRelation findById(Integer id) {
+        return shopGoodsRelationMapper.selectById(id);
+    }
+
+    @Override
+    public ShopGoodsRelation findOne(ShopGoodsRelation shopGoodsRelation) {
+        QueryWrapper<ShopGoodsRelation> wrapper = new QueryWrapper<>(shopGoodsRelation);
+        return shopGoodsRelationMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<ShopGoodsRelation> findList(ShopGoodsRelation shopGoodsRelation) {
+        QueryWrapper<ShopGoodsRelation> wrapper = new QueryWrapper<>(shopGoodsRelation);
+        return shopGoodsRelationMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<ShopGoodsRelation> findPage(PageWrap<ShopGoodsRelation> pageWrap) {
+        IPage<ShopGoodsRelation> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<ShopGoodsRelation> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(ShopGoodsRelation::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(ShopGoodsRelation::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(ShopGoodsRelation::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(ShopGoodsRelation::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(ShopGoodsRelation::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(ShopGoodsRelation::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(ShopGoodsRelation::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(ShopGoodsRelation::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getRemark() != null) {
+            queryWrapper.lambda().eq(ShopGoodsRelation::getRemark, pageWrap.getModel().getRemark());
+        }
+        if (pageWrap.getModel().getShopId() != null) {
+            queryWrapper.lambda().eq(ShopGoodsRelation::getShopId, pageWrap.getModel().getShopId());
+        }
+        if (pageWrap.getModel().getGoodsSkuId() != null) {
+            queryWrapper.lambda().eq(ShopGoodsRelation::getGoodsSkuId, pageWrap.getModel().getGoodsSkuId());
+        }
+        if (pageWrap.getModel().getPrice() != null) {
+            queryWrapper.lambda().eq(ShopGoodsRelation::getPrice, pageWrap.getModel().getPrice());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(shopGoodsRelationMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(ShopGoodsRelation shopGoodsRelation) {
+        QueryWrapper<ShopGoodsRelation> wrapper = new QueryWrapper<>(shopGoodsRelation);
+        return shopGoodsRelationMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopcartServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopcartServiceImpl.java
index 8f7a8ee..2d2e893 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopcartServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopcartServiceImpl.java
@@ -181,6 +181,19 @@
         return page;
     }
 
+    /**
+     * 璐墿杞﹀晢鍝佹暟閲�
+     * @param memberId
+     * @return
+     */
+    @Override
+    public Integer cartGoodsTypeNum(Integer memberId) {
+        return shopcartMapper.selectList(new QueryWrapper<Shopcart>().lambda()
+                .eq(Shopcart::getMemberId,memberId)
+                .eq(Shopcart::getIsdeleted,Constants.ZERO)
+        ).size();
+    }
+
 
     /**
      * 鏇存柊璐墿杞︽暟閲�
diff --git a/server/dmmall_service/src/main/resources/application-dev.yml b/server/dmmall_service/src/main/resources/application-dev.yml
index 8520b10..56b6c1b 100644
--- a/server/dmmall_service/src/main/resources/application-dev.yml
+++ b/server/dmmall_service/src/main/resources/application-dev.yml
@@ -50,7 +50,7 @@
 wx:
   pay:
     appId: wxcd2b89fd2ff065f8
-    appSecret: 1ceb7c9dff3c4330d653adc3ca55ea24
+    appSecret: 3462fa186da7cb06c544df8d8664b63a
     mchId: 1229817002
     mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
     notifyUrl: https://dmtest.ahapp.net/dmmall_interface/web/api/wxPayNotify
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 e79f0b0..55b9b10 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
@@ -56,6 +56,10 @@
     public GoodsorderService goodsorderService;
 
     @Autowired
+    public ShopService shopService;
+
+
+    @Autowired
     public GoodsorderDetailService goodsorderDetailService;
 
     @Autowired
@@ -74,8 +78,6 @@
     @Autowired
     public ArticleService articleService;
 
-    @Autowired
-    public ShopService shopService;
 
     @Autowired
     public ShopNewsService shopNewsService;
diff --git a/server/dmmall_web/src/main/java/com/doumee/api/web/mall/HomeApi.java b/server/dmmall_web/src/main/java/com/doumee/api/web/mall/HomeApi.java
new file mode 100644
index 0000000..48d3bad
--- /dev/null
+++ b/server/dmmall_web/src/main/java/com/doumee/api/web/mall/HomeApi.java
@@ -0,0 +1,70 @@
+package com.doumee.api.web.mall;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.dao.web.request.PageRequest;
+import com.doumee.dao.web.request.UpdMobileRequest;
+import com.doumee.dao.web.response.HomeInfoResponse;
+import com.doumee.dao.web.response.OrderDetailResponse;
+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.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/12/15 13:59
+ */
+
+@Api(tags = "涓汉涓績")
+@Trace(exclude = true)
+@RestController
+@RequestMapping("/web/home")
+@Slf4j
+public class HomeApi extends ApiController {
+
+
+    @LoginRequired
+    @ApiOperation("鎴戠殑淇℃伅")
+    @GetMapping("/myInfo")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<HomeInfoResponse> myInfo() {
+        return ApiResponse.success("鏌ヨ鎴愬姛",goodsorderService.getHomeInfo(getMemberId()));
+    }
+
+
+
+    @LoginRequired
+    @ApiOperation("楠岃瘉鎵嬫満鍙�")
+    @PostMapping("/verifyUserPhone")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse verifyUserPhone(@RequestBody UpdMobileRequest request) {
+        memberService.verifyUserPhone(request);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
+    @LoginRequired
+    @ApiOperation("鏇存崲缁戝畾鎵嬫満鍙�")
+    @PostMapping("/updateUserPhone")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse updateUserPhone(@RequestBody UpdMobileRequest request) {
+        memberService.updateUserPhone(request);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
+}
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 2d43191..00f83d4 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
@@ -11,27 +11,36 @@
 import com.doumee.core.wx.SendWxMessage;
 import com.doumee.dao.business.model.Goodsorder;
 import com.doumee.dao.business.model.Member;
+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.goods.DealOrderRequest;
 import com.doumee.dao.web.request.goods.MemberOrderRequest;
 import com.doumee.dao.web.request.goods.OrderCommentRequest;
+import com.doumee.dao.web.response.MemberCouponResponse;
 import com.doumee.dao.web.response.MyPageResponse;
 import com.doumee.dao.web.response.OrderCommentResponse;
 import com.doumee.dao.web.response.OrderDetailResponse;
 import com.doumee.dao.web.response.goods.MemberOrderResponse;
 import com.doumee.dao.web.response.goods.PayResponse;
+import com.doumee.service.business.HotCityService;
+import com.doumee.service.business.impl.MemberCouponServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * Created by IntelliJ IDEA.
@@ -82,25 +91,63 @@
             @ApiImplicitParam(paramType = "query", dataType = "Long", name = "current", value = "椤电爜", required = true),
             @ApiImplicitParam(paramType = "query", dataType = "Long", name = "size", value = "姣忛〉璁板綍鏁�", required = true),
             @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "couponType", value = "浼樻儬鍒哥被鍒細0鍟嗗浼樻儬鍒� 1骞冲彴浼樻儬鍒�", required = true),
-            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "limitPrice", value = "婊¢", required = false)
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "limitPrice", value = "婊¢", required = false),
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "status", value = "鐘舵�侊細0=鏈娇鐢�;1=宸蹭娇鐢紱2=宸茶繃鏈�", required = false)
     })
-    public ApiResponse<IPage<CouponDTO>> memberCouponPage(PageRequest pageable, Integer couponType, BigDecimal limitPrice) {
-        IPage<CouponDTO> page = memberCouponService.memberCouponPage(pageable.toPage(),limitPrice,getMemberId(),couponType);
+    public ApiResponse<IPage<MemberCouponResponse>> memberCouponPage(PageRequest pageable, Integer couponType, BigDecimal limitPrice, Integer status) {
+        IPage<MemberCouponResponse> page = memberCouponService.memberCouponPage(pageable.toPage(),limitPrice,getMemberId(),couponType,status);
         return ApiResponse.success("鏌ヨ鎴愬姛",page);
     }
 
     @LoginRequired
-    @ApiOperation("鍙敤浼樻儬鍒告暟閲�")
-    @GetMapping("/memberCouponNum")
+    @ApiOperation("浼氬憳浼樻儬鍒歌鎯�")
+    @GetMapping("/memberCouponDetail")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "couponType", value = "浼樻儬鍒哥被鍒�", required = true),
-            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "limitPrice", value = "婊¢", required = true)
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "涓婚敭", required = true)
     })
-    public ApiResponse<Long> memberCouponNum(Integer couponType, BigDecimal limitPrice) {
-        return ApiResponse.success("鏌ヨ鎴愬姛", memberCouponService.memberCouponNum(limitPrice,getMemberId(),couponType));
+    public ApiResponse<MemberCouponResponse> memberCouponDetail(Integer id) {
+        return ApiResponse.success("鏌ヨ鎴愬姛",memberCouponService.getMemberCouponDetail(id));
     }
 
+
+//    @LoginRequired
+//    @ApiOperation("鍙敤浼樻儬鍒告暟閲�")
+//    @GetMapping("/memberCouponNum")
+//    @ApiImplicitParams({
+//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+//            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "couponType", value = "浼樻儬鍒哥被鍒�", required = true),
+//            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "limitPrice", value = "婊¢", required = true)
+//    })
+//    public ApiResponse<Integer> memberCouponNum(Integer couponType, BigDecimal limitPrice) {
+//        return ApiResponse.success("鏌ヨ鎴愬姛", memberCouponService.memberCouponNum(limitPrice,getMemberId(),couponType));
+//    }
+
+
+
+    @LoginRequired
+    @ApiOperation("鍙敤浼樻儬鍒镐俊鎭�")
+    @PostMapping("/getApplyCoupon")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<List<MemberCoupon>> getApplyCoupon(@RequestBody List<PayDetailRequest> requestList) {
+        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("璁㈠崟鏀粯")
@@ -108,9 +155,9 @@
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
     })
-    public ApiResponse<PayResponse> orderPay(@Valid @RequestBody  OrderPayRequest orderPayRequest) {
-        orderPayRequest.setMemberId(getMemberId());
-        return ApiResponse.success("鎿嶄綔鎴愬姛", goodsorderService.orderPay(orderPayRequest));
+    public ApiResponse<PayResponse> orderPay(@Valid @RequestBody  ShopOrderPayRequest request) {
+        request.setMemberId(getMemberId());
+        return ApiResponse.success("鎿嶄綔鎴愬姛", goodsorderService.orderPay(request, memberCouponServiceImpl));
     }
 
     @LoginRequired
@@ -135,7 +182,7 @@
     }
 
     @LoginRequired
-    @ApiOperation("鎴戠殑璁㈠崟鍒楄〃")
+    @ApiOperation("璁㈠崟鍒楄〃")
     @PostMapping("/orderPage")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
@@ -165,7 +212,7 @@
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
     })
     public ApiResponse cancelOrder(@RequestBody DealOrderRequest dealOrderRequest) {
-        goodsorderService.cancelOrder(dealOrderRequest.getOrderId(),getMemberId(),dealOrderRequest.getCancelInfo());
+        goodsorderService.cancelOrderNew(dealOrderRequest.getOrderId(),getMemberId(),dealOrderRequest.getCancelInfo());
         return ApiResponse.success("鎿嶄綔鎴愬姛");
     }
 
@@ -193,6 +240,30 @@
 
 
     @LoginRequired
+    @ApiOperation("璁㈠崟鏍搁攢")
+    @PostMapping("/writeOffOrder")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse writeOffOrder(@RequestBody DealOrderRequest dealOrderRequest) {
+        goodsorderService.orderWriteOff(dealOrderRequest.getExchangeCode(),getMemberId());
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @LoginRequired
+    @ApiOperation("璁㈠崟鍒犻櫎")
+    @PostMapping("/delOrder")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse delOrder(@RequestBody DealOrderRequest dealOrderRequest) {
+        goodsorderService.delOrder(dealOrderRequest.getOrderId(),getMemberId());
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
+
+    @LoginRequired
     @ApiOperation("璁㈠崟璇勮")
     @PostMapping("/orderComment")
     @ApiImplicitParams({
diff --git a/server/dmmall_web/src/main/java/com/doumee/api/web/mall/PaymentCallback.java b/server/dmmall_web/src/main/java/com/doumee/api/web/mall/PaymentCallback.java
index 2f254cb..3d69e28 100644
--- a/server/dmmall_web/src/main/java/com/doumee/api/web/mall/PaymentCallback.java
+++ b/server/dmmall_web/src/main/java/com/doumee/api/web/mall/PaymentCallback.java
@@ -100,6 +100,41 @@
                         fundService.create(fund);
                         break;
                     }
+                    case "shopGoods": {
+                        Goodsorder DBGoodsOrder = new Goodsorder();
+                        DBGoodsOrder.setCode(Long.valueOf(outTradeNo));
+                        Goodsorder goodsOrder = goodsorderService.findOne(DBGoodsOrder);
+                        if(Objects.isNull(goodsOrder)){
+                            return WxPayNotifyResponse.fail( "鏀粯鍥炶皟淇℃伅("+ wxId + ") = > 鏈煡璇㈠埌鏀粯瀵硅薄淇℃伅!");
+                        }
+                        if(goodsOrder.getStatus().equals(Constants.ONE)){
+                            return WxPayNotifyResponse.success("澶勭悊鎴愬姛!");
+                        }
+                        goodsOrder.setPayStatus(Constants.ONE);
+                        goodsOrder.setPayDate(new Date());
+                        goodsOrder.setPayOrderId(paymentNo);
+                        goodsOrder.setStatus(Constants.OrderStatus.PAY_DONE.getKey());
+                        //鐢熸垚鏍搁攢鐮�
+                        goodsOrder.setExchangeCode(Constants.equalsInteger(goodsOrder.getReceiveType(),Constants.ZERO)?null:Constants.getRandomNumber());
+                        goodsOrder.setPayMethod(Constants.ZERO);
+                        goodsorderService.updateById(goodsOrder);
+                        Fund fund = new Fund();
+                        fund.setOrderCode(goodsOrder.getPayOrderId());
+                        fund.setCreator(goodsOrder.getMemberId());
+                        fund.setCreateDate(new Date());
+                        fund.setIsdeleted(Constants.ZERO);
+                        fund.setRemark(goodsOrder.getCode().toString());
+                        fund.setMemberId(goodsOrder.getMemberId());
+                        fund.setTitle("璁㈠崟鏀粯");
+                        fund.setContent("璁㈠崟鏀粯");
+                        fund.setObjId(goodsOrder.getId());
+                        fund.setObjType(Constants.ONE);
+                        fund.setType(Constants.ZERO);
+                        fund.setNum(goodsOrder.getPrice());
+                        fundService.create(fund);
+                        break;
+                    }
+
                 }
                 return WxPayNotifyResponse.success("澶勭悊鎴愬姛!");
             }
diff --git a/server/dmmall_web/src/main/java/com/doumee/api/web/mall/ShopCartApi.java b/server/dmmall_web/src/main/java/com/doumee/api/web/mall/ShopCartApi.java
index d726d7a..77427bd 100644
--- a/server/dmmall_web/src/main/java/com/doumee/api/web/mall/ShopCartApi.java
+++ b/server/dmmall_web/src/main/java/com/doumee/api/web/mall/ShopCartApi.java
@@ -48,6 +48,17 @@
     }
 
     @LoginRequired
+    @ApiOperation("璐墿杞﹀垪琛�")
+    @GetMapping("/cartGoodsTypeNum")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+    })
+    public ApiResponse<Integer> cartGoodsTypeNum() {
+        return ApiResponse.success("鏌ヨ鎴愬姛",shopcartService.cartGoodsTypeNum(getMemberId()));
+    }
+
+
+    @LoginRequired
     @ApiOperation("鎵归噺鍒犻櫎")
     @GetMapping("/deleteBatch")
     @ApiImplicitParams({

--
Gitblit v1.9.3