From b3ed26028083bbf66bb47601d11f42cad802b903 Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期一, 03 七月 2023 19:21:37 +0800
Subject: [PATCH] 商户端会员统计

---
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java                  |   38 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderTypeTotalVo.java                   |   28 
 ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml                                    |   27 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MerTotalDto.java                    |   32 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/goods/GoodsService.java                      |   10 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponGoodsListVo.java                |   43 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalOrderTotalVo.java                  |    2 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerTotalController.java        |   70 ++
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteGoodsFallbackFactory.java        |    6 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberSourceTotalVo.java              |   21 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderTotalVo.java                       |   61 +
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java                 |   14 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java                 |    9 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerBirthdayController.java     |   29 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MerGoodsPriceListVo.java             |   42 +
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java         |  151 +++-
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java                 |   37 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/goods/GoodsMapper.java                        |   10 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java         |  130 ++++
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberFixedTotalVo.java               |   44 +
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponPageVo.java                     |    2 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskServiceImpl.java           |    2 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/concole/GoodsController.java              |   15 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/birthday/BirthdayCardService.java          |   29 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java                 |    3 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponGetVo.java                      |   11 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerCouponController.java       |   33 +
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskService.java                    |    2 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderDistributionTotalVo.java           |   28 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerBirthdayEditDto.java                 |   27 
 ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml                                 |  214 ++++++
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtBirthdayEditDto.java                 |   12 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberTotalVo.java                    |   39 +
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerCouponEditDto.java                   |   75 ++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderGoodsRankVo.java                   |   21 
 ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml                                       |    4 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerBirthdayEditInfoVo.java               |   31 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java             |   13 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/business/MerShopController.java             |   21 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java |  215 +++++-
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java                          |   18 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerCouponPageDto.java                   |   22 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerBirthdayGetVo.java                    |    3 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java         |    5 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponService.java                  |   23 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteGoodsService.java                |   12 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberRecommendTotalVo.java           |   23 
 ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml                                 |    6 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderFromRankVo.java                    |   23 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerGoodsController.java          |   13 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java                    |   81 ++
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtCouponController.java     |    2 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponMapper.java                    |    5 
 53 files changed, 1,723 insertions(+), 114 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
index e101fde..b6e478d 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
@@ -67,4 +67,7 @@
     String STAFF_MOBILE_DOUBLE = "手机号码已被注册";
 
     String SHOP_USER_DOUBLE = "账号已经关联其他商户登录";
+
+    String COUPON_AUDIT_EDIT = "只能编辑审核拒绝的优惠券";
+
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MerTotalDto.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MerTotalDto.java
new file mode 100644
index 0000000..f608d76
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MerTotalDto.java
@@ -0,0 +1,32 @@
+package com.ruoyi.system.api.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @ClassName MerTotalDto
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 16:19
+ * @Version 1.0
+ */
+@Data
+public class MerTotalDto extends MerBaseDto{
+
+    @ApiModelProperty(value = "开始日期")
+    private String startDate;
+
+    @ApiModelProperty(value = "结束日期")
+    private String endDate;
+
+    @ApiModelProperty(value = "全部经销商标记0否1是")
+    private Integer shopAllFlag;
+
+    @ApiModelProperty(value = "商品类型1周期2服务3体验4单品")
+    private Integer goodsType;
+
+    @ApiModelProperty(value = "商户id集合",hidden = true)
+    private List<Long> shopIdList;
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MerGoodsPriceListVo.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MerGoodsPriceListVo.java
new file mode 100644
index 0000000..bd5a3b1
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MerGoodsPriceListVo.java
@@ -0,0 +1,42 @@
+package com.ruoyi.system.api.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @ClassName MerGoodsPriceVo
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 9:37
+ * @Version 1.0
+ */
+@Data
+public class MerGoodsPriceListVo {
+
+    @ApiModelProperty(value = "商品id")
+    private String goodsId;
+
+    @ApiModelProperty(value = "商品名称")
+    private String goodsName;
+
+    @ApiModelProperty(value = "商品编码")
+    private String goodsNo;
+
+    @ApiModelProperty(value = "商品类型1周期2服务3体验4单品")
+    private String goodsType;
+
+    @ApiModelProperty(value = "商品售价")
+    private BigDecimal salesPrice;
+
+    @ApiModelProperty(value = "商品建议售价")
+    private BigDecimal suggestSalesPrice;;
+
+    @ApiModelProperty(value = "商品简介")
+    private String goodsIntroduction;
+
+    @ApiModelProperty(value = "商品调理问题")
+    private String goodsNurses;
+
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteGoodsFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteGoodsFallbackFactory.java
index 889ad06..329976b 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteGoodsFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteGoodsFallbackFactory.java
@@ -5,6 +5,7 @@
 import com.ruoyi.system.api.domain.poji.goods.Goods;
 import com.ruoyi.system.api.domain.poji.goods.GoodsFile;
 import com.ruoyi.system.api.domain.poji.goods.ShopGoods;
+import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo;
 import com.ruoyi.system.api.service.RemoteGoodsService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -62,6 +63,11 @@
             public R<List<Goods>> listGoodsByGoodsId(String goodsIds) {
                 return R.fail("获取商品列表失败:" + throwable.getMessage());
             }
+
+            @Override
+            public R<List<MerGoodsPriceListVo>> listGoodsPriceByGoodsId(String goodsIds) {
+                return R.fail("获取商品列表失败:" + throwable.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java
index 1139eed..fd306fd 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java
@@ -87,6 +87,11 @@
             public R<MemberTaskSimpleVo> getLastMemberTask(Long userId) {
                 return R.fail("获取最近会员任务失败:" + throwable.getMessage());
             }
+
+            @Override
+            public R<List<Long>> listShopIdByShopId(Long shopId) {
+                return R.fail("获取商户列表失败:" + throwable.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteGoodsService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteGoodsService.java
index 08f20b1..b93ac60 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteGoodsService.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteGoodsService.java
@@ -6,6 +6,7 @@
 import com.ruoyi.system.api.domain.poji.goods.Goods;
 import com.ruoyi.system.api.domain.poji.goods.GoodsFile;
 import com.ruoyi.system.api.domain.poji.goods.ShopGoods;
+import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo;
 import com.ruoyi.system.api.factory.RemoteGoodsFallbackFactory;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -49,4 +50,15 @@
 
     @PostMapping("/goods/listGoodsByGoodsId")
     public R<List<Goods>> listGoodsByGoodsId(@RequestBody String goodsIds);
+
+
+    /**
+     * @description  通过id获取商品价格列表
+     * @author  jqs
+     * @date    2023/7/3 10:01
+     * @param goodsIds
+     * @return  R<List<MerGoodsPriceListVo>>
+     */
+    @PostMapping("/listGoodsPriceByGoodsId")
+    public R<List<MerGoodsPriceListVo>> listGoodsPriceByGoodsId(@RequestBody String goodsIds);
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java
index eba5c59..c5cf838 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java
@@ -109,4 +109,13 @@
      */
     @PostMapping("/member/getLastMemberTask")
     public R<MemberTaskSimpleVo> getLastMemberTask(@RequestBody Long userId);
+
+    /**
+     * @description  获取商户下属代理商
+     * @author  jqs
+     * @date    2023/7/3 17:26
+     * @return  R<List<Long>>
+     */
+    @PostMapping("/listShopIdByShopId")
+    public R<List<Long>> listShopIdByShopId(@RequestBody Long shopId);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerGoodsController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerGoodsController.java
index f2c3df9..9466a2c 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerGoodsController.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerGoodsController.java
@@ -5,8 +5,10 @@
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.goods.domain.dto.MerGoodsPageDto;
 import com.ruoyi.goods.domain.dto.MerShopGoodsEditDto;
+import com.ruoyi.goods.domain.dto.MgtSelectGoodsPageDto;
 import com.ruoyi.goods.domain.vo.MerGoodsPageVo;
 import com.ruoyi.goods.service.goods.GoodsService;
+import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -52,4 +54,15 @@
         goodsService.editMerShopGoods(merShopGoodsEditDto);
         return R.ok();
     }
+
+    @RequestMapping(value = "/pageMerSelectGoods", method = RequestMethod.POST)
+    @ApiOperation(value = "分页获取商品选择列表")
+    public R<Page<MgtSelectGoodsPageVo>> pageMerSelectGoods(@RequestBody MgtSelectGoodsPageDto mgtSelectGoodsPageDto) {
+        Page<MgtSelectGoodsPageVo> page = new Page<>();
+        page.setSize(mgtSelectGoodsPageDto.getPageSize());
+        page.setCurrent(mgtSelectGoodsPageDto.getPageNum());
+        page.setOptimizeCountSql(false);
+        List<MgtSelectGoodsPageVo> mgtSelectGoodsPageVos = goodsService.pageMgtSelectGoods(page,mgtSelectGoodsPageDto);
+        return R.ok(page.setRecords(mgtSelectGoodsPageVos));
+    }
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/concole/GoodsController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/concole/GoodsController.java
index c20c251..ca34831 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/concole/GoodsController.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/concole/GoodsController.java
@@ -8,6 +8,7 @@
 import com.ruoyi.system.api.domain.poji.goods.Goods;
 import com.ruoyi.system.api.domain.poji.goods.GoodsFile;
 import com.ruoyi.system.api.domain.poji.goods.ShopGoods;
+import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -99,5 +100,17 @@
         return R.ok(goodsList);
     }
 
-
+    /**
+     * @description  通过id获取商品价格列表
+     * @author  jqs
+     * @date    2023/7/3 10:01
+     * @param goodsIds
+     * @return  R<List<MerGoodsPriceListVo>>
+     */
+    @PostMapping("/listGoodsPriceByGoodsId")
+    public R<List<MerGoodsPriceListVo>> listGoodsPriceByGoodsId(@RequestBody String goodsIds)
+    {
+        List<MerGoodsPriceListVo> goodsPriceListVoList = goodsService.listGoodsPriceByGoodsId(goodsIds);
+        return R.ok(goodsPriceListVoList);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/goods/GoodsMapper.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/goods/GoodsMapper.java
index 42a9cd6..68196ca 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/goods/GoodsMapper.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/goods/GoodsMapper.java
@@ -5,6 +5,7 @@
 import com.ruoyi.goods.domain.vo.*;
 import com.ruoyi.system.api.domain.poji.goods.Goods;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo;
 import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -109,4 +110,13 @@
      * @return  List<MgtSelectGoodsPageVo>
      */
     List<MgtSelectGoodsPageVo> pageMgtSelectGoods(Page page, @Param("param")MgtSelectGoodsPageDto mgtSelectGoodsPageDto);
+
+    /**
+     * @description  通过id获取商品列表
+     * @author  jqs
+     * @date    2023/7/3 10:00
+     * @param goodsIds
+     * @return  List<MerGoodsPriceListVo>
+     */
+    List<MerGoodsPriceListVo> listGoodsPriceByGoodsId(@Param("goodsIds")String goodsIds);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/goods/GoodsService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/goods/GoodsService.java
index 7ac6afd..f724161 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/goods/GoodsService.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/goods/GoodsService.java
@@ -5,6 +5,7 @@
 import com.ruoyi.goods.domain.vo.*;
 import com.ruoyi.system.api.domain.poji.goods.Goods;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo;
 import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo;
 
 import java.util.List;
@@ -152,4 +153,13 @@
      * @return  List<MgtSelectGoodsPageVo>
      */
     List<MgtSelectGoodsPageVo> pageMgtSelectGoods(Page page,MgtSelectGoodsPageDto mgtSelectGoodsPageDto);
+
+    /**
+     * @description  通过id获取商品列表
+     * @author  jqs
+     * @date    2023/7/3 9:58
+     * @param goodsIds
+     * @return  List<MerGoodsPriceListVo>
+     */
+    List<MerGoodsPriceListVo> listGoodsPriceByGoodsId(String goodsIds);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java
index 5a6b650..460292a 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java
@@ -23,6 +23,7 @@
 import com.ruoyi.system.api.domain.poji.goods.Goods;
 import com.ruoyi.system.api.domain.poji.goods.GoodsFile;
 import com.ruoyi.system.api.domain.poji.goods.ShopGoods;
+import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo;
 import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo;
 import com.ruoyi.system.api.service.RemoteConfigService;
 import org.springframework.stereotype.Service;
@@ -466,4 +467,16 @@
     public List<MgtSelectGoodsPageVo> pageMgtSelectGoods(Page page, MgtSelectGoodsPageDto mgtSelectGoodsPageDto){
         return goodsMapper.pageMgtSelectGoods(page, mgtSelectGoodsPageDto);
     }
+
+    /**
+     * @description  通过id获取商品列表
+     * @author  jqs
+     * @date    2023/7/3 9:58
+     * @param goodsIds
+     * @return  List<MerGoodsPriceListVo>
+     */
+    @Override
+    public List<MerGoodsPriceListVo> listGoodsPriceByGoodsId(String goodsIds){
+        return goodsMapper.listGoodsPriceByGoodsId(goodsIds);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml
index d1ccc4e..49d498f 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml
+++ b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml
@@ -391,13 +391,34 @@
             t_goods
         WHERE del_flag = 0
         <if test="param.goodsType != null and param.goodsType != ''">
-            AND tg.goods_type = #{param.goodsType}
+            AND goods_type = #{param.goodsType}
         </if>
         <if test="param.goodsName != null and param.goodsName != ''">
-            AND tg.goods_name LIKE CONCAT('%',#{param.goodsName},'%')
+            AND goods_name LIKE CONCAT('%',#{param.goodsName},'%')
         </if>
         <if test="param.goodsNo != null and param.goodsNo != ''">
-            AND tg.goods_no LIKE CONCAT('%',#{param.goodsNo},'%')
+            AND goods_no LIKE CONCAT('%',#{param.goodsNo},'%')
         </if>
     </select>
+
+
+    <select id="listGoodsPriceByGoodsId" resultType="com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo">
+        SELECT
+        tg.goods_id goodsId,
+        tg.goods_name goodsName,
+        tg.goods_no goodsNo,
+        CASE tg.goods_type
+            WHEN 1 THEN "周期"
+            WHEN 2 THEN "服务"
+            WHEN 3 THEN "体验"
+            WHEN 4 THEN "单品"
+            END goodsType,
+        IFNULL(tsg.sales_price,tg.sales_price) salesPrice,
+        tg.sales_price suggestSalesPrice,
+        tg.goods_introduction goodsIntroduction,
+        tg.goods_nurses goodsNurses
+        FROM t_goods tg
+        LEFT JOIN t_shop_goods tsg ON tsg.goods_id = tg.goods_id AND tsg.del_flag = 0 AND tsg.shop_id = #{shopId}
+        WHERE tg.del_flag = 0 AND FIND_IN_SET(tg.goods_id,#{goodsIds}) &gt; 0
+    </select>
 </mapper>
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerBirthdayController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerBirthdayController.java
index 8693080..9309e1f 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerBirthdayController.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerBirthdayController.java
@@ -2,6 +2,8 @@
 
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.member.domain.dto.MerBirthdayEditDto;
+import com.ruoyi.member.domain.vo.MerBirthdayEditInfoVo;
 import com.ruoyi.member.domain.vo.MerBirthdayGetVo;
 import com.ruoyi.member.service.birthday.BirthdayCardService;
 import com.ruoyi.system.api.domain.dto.MerBaseDto;
@@ -47,4 +49,31 @@
         MerBirthdayGetVo birthdayGetVo = birthdayCardService.getMerShopBirthdayCard(merBaseDto.getShopId());
         return R.ok(birthdayGetVo);
     }
+
+    @RequestMapping(value = "/getMerShopBCEditInfo", method = RequestMethod.POST)
+    @ApiOperation(value = "商户获取生日卡编辑信息")
+    public R<MerBirthdayEditInfoVo> getMerShopBCEditInfo(@RequestBody MerBaseDto merBaseDto) {
+        Long userId = SecurityUtils.getUserId();
+        merBaseDto.setUserId(userId);
+        MerBirthdayEditInfoVo shopBCEditInfo = birthdayCardService.getMerShopBCEditInfo(merBaseDto.getShopId());
+        return R.ok(shopBCEditInfo);
+    }
+
+    @RequestMapping(value = "/editMerBirthdayCard", method = RequestMethod.POST)
+    @ApiOperation(value = "商户编辑生日卡")
+    public R editMerBirthdayCard(@RequestBody MerBirthdayEditDto merBirthdayEditDto) {
+        Long userId = SecurityUtils.getUserId();
+        merBirthdayEditDto.setUserId(userId);
+        birthdayCardService.editMerBirthdayCard(merBirthdayEditDto);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/toggleMerBirthdayCard", method = RequestMethod.POST)
+    @ApiOperation(value = "商户开关生日卡")
+    public R toggleMerBirthdayCard(@RequestBody MerBirthdayEditDto merBirthdayEditDto) {
+        Long userId = SecurityUtils.getUserId();
+        merBirthdayEditDto.setUserId(userId);
+        birthdayCardService.toggleMerBirthdayCard(merBirthdayEditDto);
+        return R.ok();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerCouponController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerCouponController.java
index 5099d07..749e80c 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerCouponController.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerCouponController.java
@@ -3,10 +3,14 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.member.domain.dto.MerCouponEditDto;
+import com.ruoyi.member.domain.dto.MerCouponPageDto;
+import com.ruoyi.member.domain.dto.MgtCouponListDto;
 import com.ruoyi.member.domain.vo.MerCouponGetVo;
 import com.ruoyi.member.domain.vo.MerCouponPageVo;
-import com.ruoyi.member.domain.vo.MgtCouponGetVo;
+import com.ruoyi.member.domain.vo.MgtCouponSimpleListVo;
 import com.ruoyi.member.service.coupon.CouponService;
+import com.ruoyi.system.api.domain.dto.MerBaseGetDto;
 import com.ruoyi.system.api.domain.dto.MerPageDto;
 import com.ruoyi.system.api.domain.dto.MgtBaseGetDto;
 import io.swagger.annotations.Api;
@@ -49,7 +53,7 @@
 
     @RequestMapping(value = "/pageShopMerCoupon", method = RequestMethod.POST)
     @ApiOperation(value = "商户分页获取商户优惠券列表")
-    public R<Page<MerCouponPageVo>> pageShopMerCoupon(@RequestBody MerPageDto merPageDto) {
+    public R<Page<MerCouponPageVo>> pageShopMerCoupon(@RequestBody MerCouponPageDto merPageDto) {
         Long userId = SecurityUtils.getUserId();
         merPageDto.setUserId(userId);
         Page<MerCouponPageVo> page = new Page<>();
@@ -67,4 +71,29 @@
         MerCouponGetVo couponGetVo = couponService.getMerCouponVo(mgtBaseGetDto.getId());
         return R.ok(couponGetVo);
     }
+
+    @RequestMapping(value = "/editMerCoupon", method = RequestMethod.POST)
+    @ApiOperation(value = "商户编辑优惠券")
+    public R editMerCoupon(@RequestBody MerCouponEditDto merCouponEditDto) {
+        Long userId = SecurityUtils.getUserId();
+        merCouponEditDto.setUserId(userId);
+        couponService.editMerCoupon(merCouponEditDto);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/deleteMerCoupon", method = RequestMethod.POST)
+    @ApiOperation(value = "商户删除优惠券")
+    public R deleteMerCoupon(@RequestBody MerBaseGetDto merBaseGetDto) {
+        Long userId = SecurityUtils.getUserId();
+        merBaseGetDto.setUserId(userId);
+        couponService.deleteMerCoupon(merBaseGetDto);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/listMerCouponSimpleVo", method = RequestMethod.POST)
+    @ApiOperation(value = "获取优惠券选择列表")
+    public R<List<MgtCouponSimpleListVo>> listMgtCouponSimpleVo(@RequestBody MgtCouponListDto mgtCouponListDto) {
+        List<MgtCouponSimpleListVo> mgtCouponSimpleListVoList = couponService.listMgtCouponSimpleVo(mgtCouponListDto);
+        return R.ok(mgtCouponSimpleListVoList);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerTotalController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerTotalController.java
new file mode 100644
index 0000000..d885f38
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerTotalController.java
@@ -0,0 +1,70 @@
+package com.ruoyi.member.controller.business;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.member.domain.vo.MerMemberFixedTotalVo;
+import com.ruoyi.member.domain.vo.MerMemberRecommendTotalVo;
+import com.ruoyi.member.domain.vo.MerMemberSourceTotalVo;
+import com.ruoyi.member.domain.vo.MerMemberTotalVo;
+import com.ruoyi.member.service.member.MemberService;
+import com.ruoyi.system.api.domain.dto.MerTotalDto;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * @ClassName MerTotalController
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 15:58
+ * @Version 1.0
+ */
+@Api(value = "商户端会员统计相关接口", tags = "商户端会员统计相关接口", description = "商户端会员统计相关接口")
+@RestController
+@RequestMapping("/mer/total")
+public class MerTotalController {
+
+    @Resource
+    private MemberService memberService;
+
+    @RequestMapping(value = "/getMerMemberTotal", method = RequestMethod.POST)
+    @ApiOperation(value = "获取商户会员人数统计")
+    public R<MerMemberTotalVo> getMerMemberTotal(@RequestBody MerTotalDto merTotalDto) {
+        Long userId = SecurityUtils.getUserId();
+        merTotalDto.setUserId(userId);
+        MerMemberTotalVo memberTotal = memberService.getMerMemberTotal(merTotalDto);
+        return R.ok(memberTotal);
+    }
+
+    @RequestMapping(value = "/getMerMemberFixedTotal", method = RequestMethod.POST)
+    @ApiOperation(value = "获取商户会员固定统计")
+    public R<MerMemberFixedTotalVo> getMerMemberFixedTotal(@RequestBody MerTotalDto merTotalDto) {
+        Long userId = SecurityUtils.getUserId();
+        merTotalDto.setUserId(userId);
+        MerMemberFixedTotalVo merMemberFixedTotal = memberService.getMerMemberFixedTotal(merTotalDto);
+        return R.ok(merMemberFixedTotal);
+    }
+
+    @RequestMapping(value = "/getMerMemberSourceTotal", method = RequestMethod.POST)
+    @ApiOperation(value = "获取商户会员人数统计")
+    public R<MerMemberSourceTotalVo> getMerMemberSourceTotal(@RequestBody MerTotalDto merTotalDto) {
+        Long userId = SecurityUtils.getUserId();
+        merTotalDto.setUserId(userId);
+        MerMemberSourceTotalVo memberTotal = memberService.getMerMemberSourceTotal(merTotalDto);
+        return R.ok(memberTotal);
+    }
+
+    @RequestMapping(value = "/getMerMemberRecommendTotal", method = RequestMethod.POST)
+    @ApiOperation(value = "获取商户会员人数统计")
+    public R<MerMemberRecommendTotalVo> getMerMemberRecommendTotal(@RequestBody MerTotalDto merTotalDto) {
+        Long userId = SecurityUtils.getUserId();
+        merTotalDto.setUserId(userId);
+        MerMemberRecommendTotalVo memberTotal = memberService.getMerMemberRecommendTotal(merTotalDto);
+        return R.ok(memberTotal);
+    }
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtCouponController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtCouponController.java
index bef8300..bf566d1 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtCouponController.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtCouponController.java
@@ -96,7 +96,7 @@
     }
 
     @RequestMapping(value = "/getMgtCouponAuditVo", method = RequestMethod.POST)
-    @ApiOperation(value = "平台获取优惠券编辑信息")
+    @ApiOperation(value = "平台获取优惠券审核信息")
     public R<MgtCouponAuditGetVo> getMgtCouponAuditVo(@RequestBody MgtBaseGetDto mgtBaseGetDto) {
         Long userId = SecurityUtils.getUserId();
         mgtBaseGetDto.setUserId(userId);
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerBirthdayEditDto.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerBirthdayEditDto.java
new file mode 100644
index 0000000..c924276
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerBirthdayEditDto.java
@@ -0,0 +1,27 @@
+package com.ruoyi.member.domain.dto;
+
+import com.ruoyi.system.api.domain.dto.MerBaseDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @ClassName MerBirthdayEditDto
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 14:03
+ * @Version 1.0
+ */
+@Data
+public class MerBirthdayEditDto extends MerBaseDto {
+
+
+    @ApiModelProperty(value = "生日卡状态1开启2关闭")
+    private Integer cardStatus;
+
+    @ApiModelProperty(value = "礼品列表")
+    private List<MgtBirthdayGiftDto> mgtBirthdayGiftDtoList;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerCouponEditDto.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerCouponEditDto.java
new file mode 100644
index 0000000..a8ba52c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerCouponEditDto.java
@@ -0,0 +1,75 @@
+package com.ruoyi.member.domain.dto;
+
+import com.ruoyi.system.api.domain.dto.MerBaseDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @ClassName MerCouponEditDto
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 9:16
+ * @Version 1.0
+ */
+@Data
+public class MerCouponEditDto extends MerBaseDto {
+
+    @ApiModelProperty(value = "优惠券id 新增不传")
+    private String couponId;
+
+    @ApiModelProperty("优惠券类型1.满减2.折扣3.代金4.商品")
+    private Integer couponType;
+
+    @ApiModelProperty("优惠券名称")
+    private String couponName;
+
+    @ApiModelProperty(value = "发送类型1.手动领取2.全部用户3.会员用户4非会员用户5自定义")
+    private Integer sendType;
+
+    @ApiModelProperty("发送时间类型1立即2定时")
+    private Integer sendTimeType;
+
+    @ApiModelProperty("发送时间")
+    private Date sendTime;
+
+    @ApiModelProperty(value = "使用范围1.全场2.指定商品")
+    private Integer useScope;
+
+    @ApiModelProperty(value = "有效期类型1.时间段2.领取之日起")
+    private Integer validTimeType;
+
+    @ApiModelProperty(value = "有效开始时间")
+    private Date validStartTime;
+
+    @ApiModelProperty(value = "有效截止时间")
+    private Date validEndTime;
+
+    @ApiModelProperty(value = "有效期")
+    private Integer validDay;
+
+    @ApiModelProperty(value = "门槛金额")
+    private BigDecimal moneyThreshold;
+
+    @ApiModelProperty(value = "折扣金额")
+    private BigDecimal discountMoney;
+
+    @ApiModelProperty(value = "折扣百分比")
+    private BigDecimal discountPercent;
+
+    @ApiModelProperty(value = "领取限制数量 0为不限")
+    private Integer limitNumber;
+
+    @ApiModelProperty(value = "选择商品id集合")
+    private List<String> relGoodsIdList;
+
+
+    @ApiModelProperty(value = "关联用户id集合")
+    private List<Long> relUserIdList;
+
+
+
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerCouponPageDto.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerCouponPageDto.java
new file mode 100644
index 0000000..856b41a
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerCouponPageDto.java
@@ -0,0 +1,22 @@
+package com.ruoyi.member.domain.dto;
+
+import com.ruoyi.system.api.domain.dto.MerPageDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @ClassName MerCouponPageDto
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 14:38
+ * @Version 1.0
+ */
+@Data
+public class MerCouponPageDto extends MerPageDto {
+
+
+    @ApiModelProperty(name = "审核状态1申请中2审核通过3审核拒绝")
+    private Integer auditStatus;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtBirthdayEditDto.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtBirthdayEditDto.java
index b3258af..a8667ae 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtBirthdayEditDto.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtBirthdayEditDto.java
@@ -16,22 +16,22 @@
 @Data
 public class MgtBirthdayEditDto extends MgtBaseDto {
 
-    @ApiModelProperty(value = "生日卡id 新增不传")
-    private Long cardId;
+    @ApiModelProperty(value = "商户id 平台不传")
+    private Long shopId;
 
     @ApiModelProperty(value = "生日卡状态1开启2关闭")
     private Integer cardStatus;
 
-    @ApiModelProperty(value = "适用地区标记1全部2指定")
+    @ApiModelProperty(value = "适用地区标记1全部2指定  商户不传")
     private Integer areaFlag;
 
-    @ApiModelProperty(value = "适用地区code集合 多个用,隔开")
+    @ApiModelProperty(value = "适用地区code集合 多个用,隔开  商户不传")
     private String designatedArea;
 
-    @ApiModelProperty(value = "适用店铺标记1全部2指定")
+    @ApiModelProperty(value = "适用店铺标记1全部2指定  商户不传")
     private Integer shopFlag;
 
-    @ApiModelProperty(value = "适用店铺 多个用,隔开")
+    @ApiModelProperty(value = "适用店铺 多个用,隔开  商户不传")
     private String applicableShop;
 
     @ApiModelProperty(value = "礼品列表")
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerBirthdayEditInfoVo.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerBirthdayEditInfoVo.java
new file mode 100644
index 0000000..b708c85
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerBirthdayEditInfoVo.java
@@ -0,0 +1,31 @@
+package com.ruoyi.member.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @ClassName MerBirthdayEditInfoVo
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 10:56
+ * @Version 1.0
+ */
+@Data
+public class MerBirthdayEditInfoVo {
+
+    @ApiModelProperty(value = "生日卡id")
+    private Long cardId;
+
+    @ApiModelProperty(value = "生日卡状态1开启2关闭")
+    private Integer cardStatus;
+
+
+    @ApiModelProperty(value = "礼品列表")
+    private List<MgtBirthdayGiftVo> mgtBirthdayGiftVoList;
+
+
+
+
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerBirthdayGetVo.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerBirthdayGetVo.java
index 39339de..a152796 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerBirthdayGetVo.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerBirthdayGetVo.java
@@ -13,6 +13,9 @@
 @Data
 public class MerBirthdayGetVo {
 
+    @ApiModelProperty(value = "生日卡状态1开启2关闭")
+    private Integer cardStatus;
+
     @ApiModelProperty(value = "礼品描述")
     private String giftDesc;
 
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponGetVo.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponGetVo.java
index f75fcaf..bcb61ac 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponGetVo.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponGetVo.java
@@ -1,6 +1,7 @@
 package com.ruoyi.member.domain.vo;
 
 import com.ruoyi.system.api.domain.dto.MerBaseDto;
+import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -60,14 +61,12 @@
     @ApiModelProperty(value = "折扣百分比")
     private BigDecimal discountPercent;
 
+    @ApiModelProperty(value = "领取限制数量 0为不限")
+    private Integer limitNumber;
+
     @ApiModelProperty(value = "选择商品集合")
-    private List<MgtCouponGoodsListVo> relGoodsList;
+    private List<MerGoodsPriceListVo> relGoodsList;
 
-    @ApiModelProperty(value = "关联类型1.用户管理筛选2.活动管理筛选")
-    private Integer relationType;
-
-    @ApiModelProperty(value = "关联活动id")
-    private String relationActivityId;
 
     @ApiModelProperty(value = "关联用户集合")
     private List<MgtCouponMemberListVo> relUserList;
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponGoodsListVo.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponGoodsListVo.java
new file mode 100644
index 0000000..5f30671
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponGoodsListVo.java
@@ -0,0 +1,43 @@
+package com.ruoyi.member.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @ClassName MerCouponGoodsListVo
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 9:29
+ * @Version 1.0
+ */
+@Data
+public class MerCouponGoodsListVo {
+
+    @ApiModelProperty(value = "商品id")
+    private String goodsId;
+
+    @ApiModelProperty(value = "商品名称")
+    private String goodsName;
+
+    @ApiModelProperty(value = "商品编码")
+    private String goodsNo;
+
+    @ApiModelProperty(value = "商品类型1周期2服务3体验4单品")
+    private String goodsType;
+
+    @ApiModelProperty(value = "商品售价")
+    private BigDecimal salesPrice;
+
+    @ApiModelProperty(value = "商品建议售价")
+    private BigDecimal suggestSalesPrice;;
+
+    @ApiModelProperty(value = "商品简介")
+    private String goodsIntroduction;
+
+    @ApiModelProperty(value = "商品调理问题")
+    private String goodsNurses;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponPageVo.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponPageVo.java
index d519be4..8930402 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponPageVo.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponPageVo.java
@@ -68,4 +68,6 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
+    @ApiModelProperty("拒绝理由")
+    private String auditReason;
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberFixedTotalVo.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberFixedTotalVo.java
new file mode 100644
index 0000000..f021539
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberFixedTotalVo.java
@@ -0,0 +1,44 @@
+package com.ruoyi.member.domain.vo;
+
+import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @ClassName MerMemberFixedTotalVo
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 16:31
+ * @Version 1.0
+ */
+@Data
+public class MerMemberFixedTotalVo {
+
+    @ApiModelProperty(value = "男人")
+    private Integer manTotal;
+
+    @ApiModelProperty(value = "女人")
+    private Integer womenTotal;
+
+    @ApiModelProperty(value = "会员年龄key")
+    private String[] ageKey;
+
+    @ApiModelProperty(value = "会员年龄value")
+    private Integer[] ageValue;
+
+    @ApiModelProperty(value = "会员调理")
+    private List<MgtMapIntTotalVo> nurseTotalVos;
+
+    @ApiModelProperty(value = "商品类型")
+    private List<MgtMapIntTotalVo> goodsTypeTotalVos;
+
+    @ApiModelProperty(value = "活跃度")
+    private List<MgtMapIntTotalVo> activenessList;
+
+    @ApiModelProperty(value = "消费排行")
+    private List<MgtMapIntTotalVo> memberPayList;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberRecommendTotalVo.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberRecommendTotalVo.java
new file mode 100644
index 0000000..e74c7db
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberRecommendTotalVo.java
@@ -0,0 +1,23 @@
+package com.ruoyi.member.domain.vo;
+
+import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @ClassName MerMemberRecommendTotalVo
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 16:36
+ * @Version 1.0
+ */
+@Data
+public class MerMemberRecommendTotalVo {
+
+    @ApiModelProperty(value = "推荐榜单")
+    private List<MgtMapIntTotalVo> recommendList;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberSourceTotalVo.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberSourceTotalVo.java
new file mode 100644
index 0000000..7ac2b6d
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberSourceTotalVo.java
@@ -0,0 +1,21 @@
+package com.ruoyi.member.domain.vo;
+
+import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @ClassName MerMemberSourceTotalVo
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 16:34
+ * @Version 1.0
+ */
+@Data
+public class MerMemberSourceTotalVo {
+
+    @ApiModelProperty(value = "来源渠道")
+    private List<MgtMapIntTotalVo> customerSourceList;
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberTotalVo.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberTotalVo.java
new file mode 100644
index 0000000..42b61fe
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberTotalVo.java
@@ -0,0 +1,39 @@
+package com.ruoyi.member.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @ClassName MerMemberTotalVo
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 16:23
+ * @Version 1.0
+ */
+@Data
+public class MerMemberTotalVo {
+
+    @ApiModelProperty(value = "总会员")
+    private Integer memberTotal;
+
+    @ApiModelProperty(value = "线上来源")
+    private Integer onlineTotal;
+
+    @ApiModelProperty(value = "线下来源")
+    private Integer offlineTotal;
+
+    @ApiModelProperty(value = "转介绍")
+    private Integer introduceTotal;
+
+    @ApiModelProperty(value = "周期会员")
+    private Integer cycleTotal;
+
+    @ApiModelProperty(value = "体验会员")
+    private Integer experienceTotal;
+
+    @ApiModelProperty(value = "服务会员")
+    private Integer serviceTotal;
+
+
+
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponMapper.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponMapper.java
index 3d12abd..41ceb22 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponMapper.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.member.domain.dto.MerCouponPageDto;
 import com.ruoyi.member.domain.dto.MgtCouponAuditPageDto;
 import com.ruoyi.member.domain.dto.MgtCouponListDto;
 import com.ruoyi.member.domain.dto.MgtCouponPageDto;
@@ -77,12 +78,12 @@
     List<MerCouponPageVo> pagePlatformMerCoupon(Page page, @Param("param")MerPageDto merPageDto);
 
     /**
-     * @description  平台获取优惠券列表
+     * @description  获取商户优惠券列表
      * @author  jqs
      * @date    2023/6/30 16:53
      * @param page
      * @param merPageDto
      * @return  List<MerCouponPageVo>
      */
-    List<MerCouponPageVo> pageShopMerCoupon(Page page, @Param("param")MerPageDto merPageDto);
+    List<MerCouponPageVo> pageShopMerCoupon(Page page, @Param("param") MerCouponPageDto merPageDto);
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java
index 56b649e..b7fc156 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java
@@ -6,10 +6,7 @@
 import com.ruoyi.member.domain.dto.MerMemberPageDto;
 import com.ruoyi.member.domain.dto.MgtMemberPageDto;
 import com.ruoyi.member.domain.vo.*;
-import com.ruoyi.system.api.domain.dto.MgtActivityAgeDto;
-import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
-import com.ruoyi.system.api.domain.dto.MgtBaseShopDto;
-import com.ruoyi.system.api.domain.dto.MgtUserIdByKeywordDto;
+import com.ruoyi.system.api.domain.dto.*;
 import com.ruoyi.system.api.domain.poji.member.Member;
 import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
 import com.ruoyi.system.api.domain.vo.MgtPlTotalMemberTotalVo;
@@ -96,7 +93,7 @@
      * @param sendType
      * @return  List<Long>
      */
-    List<Long> listIdBySendType(@Param("sendType")Integer sendType);
+    List<Long> listIdBySendType(@Param("sendType")Integer sendType,@Param("shopId")Long shopId);
 
     /**
      * @description  通过ids获取用户简易返回
@@ -212,6 +209,7 @@
     List<Long> listUserIdByAge(@Param("param")MgtActivityAgeDto mgtActivityAgeDto);
 
 
+
     /**
      * @description  会员人数统计
      * @author  jqs
@@ -294,6 +292,79 @@
      * @return  List<Long>
      */
     List<Long> listUserIdByShopId(@Param("shopIdList")List<Long> shopIdList);
+
+    /**
+     * @description
+     * @author  jqs
+     * @date    2023/7/3 18:29
+     * @param merTotalDto
+     * @return  MerMemberTotalVo
+     */
+    MerMemberTotalVo getMerMemberTotal(@Param("param")MerTotalDto merTotalDto);
+
+
+    /**
+     * @description  会员年龄分布统计
+     * @author  jqs
+     * @date    2023/6/19 15:26
+     * @param
+     * @return  MgtTotalMemberTotalVo
+     */
+    MgtAgeTotalVo getMerMemberTotalAge(@Param("param") MerTotalDto merTotalDto);
+
+    /**
+     * @description  会员调理问题人数统计
+     * @author  jqs
+     * @date    2023/6/19 15:26
+     * @param
+     * @return  MgtTotalMemberTotalVo
+     */
+    List<MgtMapIntTotalVo> getMerMemberTotalNurse(@Param("param") MerTotalDto merTotalDto);
+
+    /**
+     * @description  会员商品类型人数统计
+     * @author  jqs
+     * @date    2023/6/19 15:26
+     * @param
+     * @return  MgtTotalMemberTotalVo
+     */
+    List<MgtMapIntTotalVo> getMerMemberTotalGoodsType(@Param("param") MerTotalDto merTotalDto);
+
+    /**
+     * @description 会员活跃度统计
+     * @param merTotalDto
+     * @return Integer
+     * @author jqs34
+     * @date 2023/6/19 21:24
+     */
+    Integer getMerMemberTotalActiveness(@Param("param") MerTotalDto merTotalDto);
+
+    /**
+     * @description  会员消费次数排名
+     * @author  jqs
+     * @date    2023/6/19 15:26
+     * @param
+     * @return  MgtTotalMemberTotalVo
+     */
+    List<MgtMapIntTotalVo> getMerMemberPayRank(@Param("param") MerTotalDto merTotalDto);
+
+    /**
+     * @description  会员来源排名计
+     * @author  jqs
+     * @date    2023/6/19 15:26
+     * @param
+     * @return  MgtTotalMemberTotalVo
+     */
+    List<MgtMapIntTotalVo> getMerMemberCustomerSourceRank(@Param("param") MerTotalDto merTotalDto);
+
+    /**
+     * @description  会员推荐排名
+     * @author  jqs
+     * @date    2023/7/3 19:16
+     * @param merTotalDto
+     * @return  List<MgtMapIntTotalVo>
+     */
+    List<MgtMapIntTotalVo> getMerMemberRecommendRank(@Param("param") MerTotalDto merTotalDto);
 }
 
 
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/birthday/BirthdayCardService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/birthday/BirthdayCardService.java
index e207ffd..3ffd35c 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/birthday/BirthdayCardService.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/birthday/BirthdayCardService.java
@@ -1,9 +1,11 @@
 package com.ruoyi.member.service.birthday;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.member.domain.dto.MerBirthdayEditDto;
 import com.ruoyi.member.domain.dto.MgtBirthdayEditDto;
 import com.ruoyi.member.domain.dto.MgtBirthdayGetDto;
 import com.ruoyi.member.domain.pojo.birthday.BirthdayCard;
+import com.ruoyi.member.domain.vo.MerBirthdayEditInfoVo;
 import com.ruoyi.member.domain.vo.MerBirthdayGetVo;
 import com.ruoyi.member.domain.vo.MgtBirthdayGetVo;
 
@@ -52,4 +54,31 @@
      * @return  MerBirthdayGetVo
      */
     MerBirthdayGetVo getMerShopBirthdayCard(Long shopId);
+
+    /**
+     * @description  获取商户生日卡详情
+     * @author  jqs
+     * @date    2023/7/3 10:58
+     * @param shopId
+     * @return  MerBirthdayGetVo
+     */
+    MerBirthdayEditInfoVo getMerShopBCEditInfo(Long shopId);
+
+    /**
+     * @description  商户编辑生日卡
+     * @author  jqs
+     * @date    2023/7/3 14:15
+     * @param merBirthdayEditDto
+     * @return  void
+     */
+    void editMerBirthdayCard(MerBirthdayEditDto merBirthdayEditDto);
+
+    /**
+     * @description  开关生日卡成功
+     * @author  jqs
+     * @date    2023/7/3 14:27
+     * @param merBirthdayEditDto
+     * @return  void
+     */
+    void toggleMerBirthdayCard(MerBirthdayEditDto merBirthdayEditDto);
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponService.java
index c3049a3..5c042f0 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponService.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponService.java
@@ -5,6 +5,7 @@
 import com.ruoyi.member.domain.pojo.coupon.Coupon;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.member.domain.vo.*;
+import com.ruoyi.system.api.domain.dto.MerBaseGetDto;
 import com.ruoyi.system.api.domain.dto.MerPageDto;
 import com.ruoyi.system.api.domain.dto.MgtBaseGetDto;
 
@@ -124,12 +125,30 @@
     List<MerCouponPageVo> pagePlatformMerCoupon(Page page, MerPageDto merPageDto);
 
     /**
-     * @description  平台获取优惠券列表
+     * @description  获取商户优惠券列表
      * @author  jqs
      * @date    2023/6/30 16:53
      * @param page
      * @param merPageDto
      * @return  List<MerCouponPageVo>
      */
-    List<MerCouponPageVo> pageShopMerCoupon(Page page, MerPageDto merPageDto);
+    List<MerCouponPageVo> pageShopMerCoupon(Page page, MerCouponPageDto merPageDto);
+
+    /**
+     * @description  商户编辑优惠券
+     * @author  jqs
+     * @date    2023/7/3 9:21
+     * @param merCouponEditDto
+     * @return  void
+     */
+    void editMerCoupon(MerCouponEditDto merCouponEditDto);
+
+    /**
+     * @description  商户删除优惠券
+     * @author  jqs
+     * @date    2023/7/3 15:04
+     * @param merBaseGetDto
+     * @return  void
+     */
+    void deleteMerCoupon(MerBaseGetDto merBaseGetDto);
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java
index b9ab5de..ef991e7 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java
@@ -2,11 +2,13 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.member.domain.dto.MerBirthdayEditDto;
 import com.ruoyi.member.domain.dto.MgtBirthdayEditDto;
 import com.ruoyi.member.domain.dto.MgtBirthdayGetDto;
 import com.ruoyi.member.domain.dto.MgtBirthdayGiftDto;
 import com.ruoyi.member.domain.pojo.birthday.BirthdayCard;
 import com.ruoyi.member.domain.pojo.birthday.BirthdayGift;
+import com.ruoyi.member.domain.vo.MerBirthdayEditInfoVo;
 import com.ruoyi.member.domain.vo.MerBirthdayGetVo;
 import com.ruoyi.member.domain.vo.MgtBirthdayGetVo;
 import com.ruoyi.member.domain.vo.MgtBirthdayGiftVo;
@@ -47,57 +49,83 @@
      */
     @Override
     public void editMgtBirthdayCard(MgtBirthdayEditDto mgtBirthdayEditDto){
-        if(mgtBirthdayEditDto.getCardId()!=null){
-            BirthdayCard birthdayCardOld = this.getById(mgtBirthdayEditDto.getCardId());
+        // 创建查询包装器
+        LambdaQueryWrapper<BirthdayCard> queryWrapper = new LambdaQueryWrapper<>();
+        // 添加查询条件:删除标志为0
+        queryWrapper.eq(BirthdayCard::getDelFlag,0);
+        // 如果店铺ID不为空,则添加查询条件:店铺ID
+        if(mgtBirthdayEditDto.getShopId()!=null){
+            queryWrapper.eq(BirthdayCard::getShopId,mgtBirthdayEditDto.getShopId());
+        }else{
+            // 否则,添加查询条件:店铺ID为0
+            queryWrapper.eq(BirthdayCard::getShopId,0);
+        }
+        // 获取查询结果
+        BirthdayCard birthdayCardOld = this.getOne(queryWrapper,false);
+        // 如果查询结果不为空,则进行更新操作
+        if (birthdayCardOld!=null) {
+            // 设置删除标志为1
             birthdayCardOld.setDelFlag(1);
+            // 保存或更新数据
             this.saveOrUpdate(birthdayCardOld);
+            // 删除旧的生日卡的礼物
             birthdayGiftService.deleteByCardId(birthdayCardOld.getCardId());
         }
+        // 创建新的生日卡
         BirthdayCard birthdayCard = new BirthdayCard();
         birthdayCard.setDelFlag(0);
         birthdayCard.setShopId(0L);
         birthdayCard.setCardStatus(mgtBirthdayEditDto.getCardStatus());
+        // 根据卡状态设置开启或关闭时间
         if(mgtBirthdayEditDto.getCardStatus()==1){
             birthdayCard.setOpenTime(new Date());
         }else{
             birthdayCard.setCloseTime(new Date());
         }
+        // 设置创建时间
         birthdayCard.setCreateTime(new Date());
-        birthdayCard.setAreaFlag(mgtBirthdayEditDto.getAreaFlag());
-        if(mgtBirthdayEditDto.getAreaFlag()==2){
-            birthdayCard.setDesignatedArea(mgtBirthdayEditDto.getDesignatedArea());
-        }else{
-            birthdayCard.setDesignatedArea(null);
+        // 如果店铺ID不为空,则进行相关设置
+        if(mgtBirthdayEditDto.getShopId()!=null){
+            birthdayCard.setAreaFlag(mgtBirthdayEditDto.getAreaFlag());
+            if(mgtBirthdayEditDto.getAreaFlag()==2){
+                birthdayCard.setDesignatedArea(mgtBirthdayEditDto.getDesignatedArea());
+            }else{
+                birthdayCard.setDesignatedArea(null);
+            }
+            birthdayCard.setShopFlag(mgtBirthdayEditDto.getShopFlag());
+            if(mgtBirthdayEditDto.getShopFlag()==2){
+                birthdayCard.setApplicableShop(mgtBirthdayEditDto.getApplicableShop());
+            }else{
+                birthdayCard.setApplicableShop(null);
+            }
         }
-        birthdayCard.setShopFlag(mgtBirthdayEditDto.getShopFlag());
-        if(mgtBirthdayEditDto.getShopFlag()==2){
-            birthdayCard.setApplicableShop(mgtBirthdayEditDto.getApplicableShop());
-        }else{
-            birthdayCard.setApplicableShop(null);
-        }
+        // 设置创建用户ID
         birthdayCard.setCreateUserId(mgtBirthdayEditDto.getUserId());
+        // 保存或更新数据
         this.saveOrUpdate(birthdayCard);
+        // 获取生日礼物列表
         List<MgtBirthdayGiftDto> mgtBirthdayGiftDtoList = mgtBirthdayEditDto.getMgtBirthdayGiftDtoList();
         List<BirthdayGift> birthdayGiftList = new ArrayList<>();
-        if(!mgtBirthdayGiftDtoList.isEmpty()){
-            mgtBirthdayGiftDtoList.forEach( dto->{
-                        BirthdayGift birthdayGift = new BirthdayGift();
-                        birthdayGift.setDelFlag(0);
-                        birthdayGift.setCardId(birthdayCard.getCardId());
-                        birthdayGift.setGiftType(dto.getGiftType());
-                        birthdayGift.setCouponId(dto.getCouponId());
-                        birthdayGift.setCouponName(dto.getCouponName());
-                        birthdayGift.setCouponNumber(dto.getCouponNumber());
-                        birthdayGift.setGoodsId(dto.getGoodsId());
-                        birthdayGift.setGoodsName(dto.getGoodsName());
-                        birthdayGift.setGoodsNumber(dto.getGoodsNumber());
-                        birthdayGift.setGiftName(dto.getGiftName());
-                        birthdayGift.setGiftNumber(dto.getGiftNumber());
-                        birthdayGift.setMoney(dto.getMoney());
-                        birthdayGift.setWinningProbability(dto.getWinningProbability());
-                        birthdayGiftList.add(birthdayGift);
-                    }
-            );
+        // 如果生日礼物列表不为空,则进行相关设置
+        if(!mgtBirthdayGiftDtoList.isEmpty()) {
+            mgtBirthdayGiftDtoList.forEach(dto -> {
+                BirthdayGift birthdayGift = new BirthdayGift();
+                birthdayGift.setDelFlag(0);
+                birthdayGift.setCardId(birthdayCard.getCardId());
+                birthdayGift.setGiftType(dto.getGiftType());
+                birthdayGift.setCouponId(dto.getCouponId());
+                birthdayGift.setCouponName(dto.getCouponName());
+                birthdayGift.setCouponNumber(dto.getCouponNumber());
+                birthdayGift.setGoodsId(dto.getGoodsId());
+                birthdayGift.setGoodsName(dto.getGoodsName());
+                birthdayGift.setGoodsNumber(dto.getGoodsNumber());
+                birthdayGift.setGiftName(dto.getGiftName());
+                birthdayGift.setGiftNumber(dto.getGiftNumber());
+                birthdayGift.setMoney(dto.getMoney());
+                birthdayGift.setWinningProbability(dto.getWinningProbability());
+                birthdayGiftList.add(birthdayGift);
+            });
+            // 批量保存生日礼物
             birthdayGiftService.saveBatch(birthdayGiftList);
         }
     }
@@ -185,13 +213,15 @@
                 giftDesc = giftSj.toString();
                 birthdayGetVo.setGiftDesc(giftDesc);
             }
+        }else{
+            birthdayGetVo.setCardStatus(2);
         }
         return birthdayGetVo;
     }
 
 
     /**
-     * @description  获取平台生日卡
+     * @description  获取商户生日卡
      * @author  jqs
      * @date    2023/7/1 15:25
      * @param
@@ -242,7 +272,126 @@
                 giftDesc = giftSj.toString();
                 birthdayGetVo.setGiftDesc(giftDesc);
             }
+            birthdayGetVo.setCardStatus(birthdayCard.getCardStatus());
+        }else{
+            birthdayGetVo.setCardStatus(2);
         }
         return birthdayGetVo;
     }
+
+    /**
+     * @description  获取商户生日卡详情
+     * @author  jqs
+     * @date    2023/7/3 10:58
+     * @param shopId
+     * @return  MerBirthdayGetVo
+     */
+    @Override
+    public MerBirthdayEditInfoVo getMerShopBCEditInfo(Long shopId){
+        MerBirthdayEditInfoVo merBirthdayEditInfoVo = new MerBirthdayEditInfoVo();
+        LambdaQueryWrapper<BirthdayCard> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(BirthdayCard::getDelFlag,0);
+        queryWrapper.eq(BirthdayCard::getShopId,shopId);
+        BirthdayCard birthdayCard = this.getOne(queryWrapper,false);
+        if(birthdayCard!=null){
+            merBirthdayEditInfoVo.setCardId(birthdayCard.getCardId());
+            merBirthdayEditInfoVo.setCardStatus(birthdayCard.getCardStatus());
+            List<MgtBirthdayGiftVo> mgtBirthdayGiftVoList = birthdayGiftService.listGiftVoByCardId(birthdayCard.getCardId());
+            merBirthdayEditInfoVo.setMgtBirthdayGiftVoList(mgtBirthdayGiftVoList);
+        }
+        return merBirthdayEditInfoVo;
+    }
+
+    /**
+     * @description  商户编辑生日卡
+     * @author  jqs
+     * @date    2023/7/3 14:15
+     * @param merBirthdayEditDto
+     * @return  void
+     */
+    @Override
+    public void editMerBirthdayCard(MerBirthdayEditDto merBirthdayEditDto){
+        // 创建查询包装器
+        LambdaQueryWrapper<BirthdayCard> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(BirthdayCard::getDelFlag,0);
+        queryWrapper.eq(BirthdayCard::getShopId,merBirthdayEditDto.getShopId());
+        // 获取查询结果
+        BirthdayCard birthdayCardOld = this.getOne(queryWrapper,false);
+        // 如果查询结果不为空,则进行更新操作
+        if (birthdayCardOld!=null) {
+            // 设置删除标志为1
+            birthdayCardOld.setDelFlag(1);
+            // 保存或更新数据
+            this.saveOrUpdate(birthdayCardOld);
+            // 删除旧的生日卡的礼物
+            birthdayGiftService.deleteByCardId(birthdayCardOld.getCardId());
+        }
+        // 创建新的生日卡
+        BirthdayCard birthdayCard = new BirthdayCard();
+        birthdayCard.setDelFlag(0);
+        birthdayCard.setShopId(0L);
+        birthdayCard.setCardStatus(merBirthdayEditDto.getCardStatus());
+        // 根据卡状态设置开启或关闭时间
+        if(merBirthdayEditDto.getCardStatus()==1){
+            birthdayCard.setOpenTime(new Date());
+        }else{
+            birthdayCard.setCloseTime(new Date());
+        }
+        // 设置创建时间
+        birthdayCard.setCreateTime(new Date());
+        // 设置创建用户ID
+        birthdayCard.setCreateUserId(merBirthdayEditDto.getUserId());
+        // 保存或更新数据
+        this.saveOrUpdate(birthdayCard);
+        // 获取生日礼物列表
+        List<MgtBirthdayGiftDto> mgtBirthdayGiftDtoList = merBirthdayEditDto.getMgtBirthdayGiftDtoList();
+        List<BirthdayGift> birthdayGiftList = new ArrayList<>();
+        // 如果生日礼物列表不为空,则进行相关设置
+        if(!mgtBirthdayGiftDtoList.isEmpty()) {
+            mgtBirthdayGiftDtoList.forEach(dto -> {
+                BirthdayGift birthdayGift = new BirthdayGift();
+                birthdayGift.setDelFlag(0);
+                birthdayGift.setCardId(birthdayCard.getCardId());
+                birthdayGift.setGiftType(dto.getGiftType());
+                birthdayGift.setCouponId(dto.getCouponId());
+                birthdayGift.setCouponName(dto.getCouponName());
+                birthdayGift.setCouponNumber(dto.getCouponNumber());
+                birthdayGift.setGoodsId(dto.getGoodsId());
+                birthdayGift.setGoodsName(dto.getGoodsName());
+                birthdayGift.setGoodsNumber(dto.getGoodsNumber());
+                birthdayGift.setGiftName(dto.getGiftName());
+                birthdayGift.setGiftNumber(dto.getGiftNumber());
+                birthdayGift.setMoney(dto.getMoney());
+                birthdayGift.setWinningProbability(dto.getWinningProbability());
+                birthdayGiftList.add(birthdayGift);
+            });
+            // 批量保存生日礼物
+            birthdayGiftService.saveBatch(birthdayGiftList);
+        }
+    }
+
+    /**
+     * @description  开关生日卡成功
+     * @author  jqs
+     * @date    2023/7/3 14:27
+     * @param merBirthdayEditDto
+     * @return  void
+     */
+    @Override
+    public void toggleMerBirthdayCard(MerBirthdayEditDto merBirthdayEditDto){
+        // 创建查询包装器
+        LambdaQueryWrapper<BirthdayCard> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(BirthdayCard::getDelFlag,0);
+        queryWrapper.eq(BirthdayCard::getShopId,merBirthdayEditDto.getShopId());
+        // 获取查询结果
+        BirthdayCard birthdayCard = this.getOne(queryWrapper,false);
+        if(birthdayCard==null){
+            birthdayCard = new BirthdayCard();
+            birthdayCard.setDelFlag(0);
+            birthdayCard.setCreateTime(new Date());
+            birthdayCard.setCreateUserId(merBirthdayEditDto.getUserId());
+        }
+        birthdayCard.setCardStatus(merBirthdayEditDto.getCardStatus());
+        this.saveOrUpdate(birthdayCard);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
index 5f9e205..d11c200 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
@@ -13,6 +13,7 @@
 import com.ruoyi.member.domain.pojo.coupon.CouponRelGoods;
 import com.ruoyi.member.domain.pojo.coupon.CouponRelUser;
 import com.ruoyi.member.domain.pojo.coupon.CouponTotal;
+import com.ruoyi.system.api.domain.dto.MerBaseGetDto;
 import com.ruoyi.system.api.domain.dto.MerPageDto;
 import com.ruoyi.system.api.domain.poji.member.MemberCoupon;
 import com.ruoyi.member.domain.vo.*;
@@ -26,6 +27,7 @@
 import com.ruoyi.system.api.constant.AppErrorConstant;
 import com.ruoyi.system.api.domain.dto.MgtBaseGetDto;
 import com.ruoyi.system.api.domain.poji.goods.Goods;
+import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo;
 import com.ruoyi.system.api.service.RemoteActivityService;
 import com.ruoyi.system.api.service.RemoteGoodsService;
 import org.springframework.scheduling.annotation.Async;
@@ -208,37 +210,9 @@
             String relGoodsIds = coupon.getRelGoodsIds();
             if(StringUtils.isNotBlank(relGoodsIds)){
                 //获取指定商品列表
-                List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(relGoodsIds).getData();
+                List<MerGoodsPriceListVo> goodsList = remoteGoodsService.listGoodsPriceByGoodsId(relGoodsIds).getData();
                 if(!goodsList.isEmpty()){
-                    //转换为返回对象
-                    List<MgtCouponGoodsListVo> relGoodsList = new ArrayList<>();
-                    MgtCouponGoodsListVo mgtCouponGoodsListVo;
-                    for(Goods goods : goodsList){
-                        mgtCouponGoodsListVo = new MgtCouponGoodsListVo();
-                        mgtCouponGoodsListVo.setGoodsId(goods.getGoodsId());
-                        mgtCouponGoodsListVo.setGoodsName(goods.getGoodsName());
-                        mgtCouponGoodsListVo.setGoodsNo(goods.getGoodsNo());
-                        //商品类型1周期2服务3体验4单品
-                        switch (goods.getGoodsType()){
-                            case 1:
-                                mgtCouponGoodsListVo.setGoodsType("周期");
-                                break;
-                            case 2:
-                                mgtCouponGoodsListVo.setGoodsType("服务");
-                                break;
-                            case 3:
-                                mgtCouponGoodsListVo.setGoodsType("体验");
-                                break;
-                            case 4:
-                                mgtCouponGoodsListVo.setGoodsType("单品");
-                                break;
-                            default:
-                                break;
-                        }
-                        mgtCouponGoodsListVo.setSalesPrice(goods.getSalesPrice());
-                        relGoodsList.add(mgtCouponGoodsListVo);
-                    }
-                    merCouponGetVo.setRelGoodsList(relGoodsList);
+                    merCouponGetVo.setRelGoodsList(goodsList);
                 }
             }
         }
@@ -359,8 +333,12 @@
         Date nowTime = new Date();
         Integer sendType = coupon.getSendType();
         List<Long> userIdList = new ArrayList<>();
+        Long shopId = null;
+        if(coupon.getCouponFrom()==2 && sendType==3){
+            shopId = coupon.getShopId();
+        }
         if(sendType >= 2 && sendType <= 4){
-            userIdList = memberService.listIdBySendType(sendType);
+            userIdList = memberService.listIdBySendType(sendType,shopId);
         }else if(sendType == 5){
             //关联类型1.用户管理筛选2.活动管理筛选
             if(coupon.getRelationType()==2){
@@ -691,7 +669,7 @@
     }
 
     /**
-     * @description  平台获取优惠券列表
+     * @description  获取商户优惠券列表
      * @author  jqs
      * @date    2023/6/30 16:53
      * @param page
@@ -699,7 +677,7 @@
      * @return  List<MerCouponPageVo>
      */
     @Override
-    public List<MerCouponPageVo> pageShopMerCoupon(Page page, MerPageDto merPageDto){
+    public List<MerCouponPageVo> pageShopMerCoupon(Page page, MerCouponPageDto merPageDto){
         List<MerCouponPageVo> couponPageVoList = couponMapper.pageShopMerCoupon(page, merPageDto);
         //处理使用限制和有效期
         if(couponPageVoList!=null&&!couponPageVoList.isEmpty()){
@@ -747,4 +725,111 @@
         }
         return couponPageVoList;
     }
+
+
+    /**
+     * @description  商户编辑优惠券
+     * @author  jqs
+     * @date    2023/7/3 9:21
+     * @param merCouponEditDto
+     * @return  void
+     */
+    @Override
+    public void editMerCoupon(MerCouponEditDto merCouponEditDto){
+        //编辑优惠券
+        Coupon coupon;
+        CouponTotal couponTotal;
+        if(StringUtils.isNotBlank(merCouponEditDto.getCouponId())){
+            coupon = this.getById(merCouponEditDto.getCouponId());
+            if(coupon.getAuditStatus()!=3){
+                throw new ServiceException(AppErrorConstant.COUPON_AUDIT_EDIT);
+            }
+            couponRelUserService.deleteCouponRelByCouponId(coupon.getCouponId());
+            couponRelGoodsService.deleteCouponRelByCouponId(coupon.getCouponId());
+            coupon.setCouponStatus(1);
+        }else{
+            coupon = new Coupon();
+            String couponId = IdUtils.simpleUUID();
+            coupon.setCouponId(couponId);
+            coupon.setDelFlag(0);
+            coupon.setShopId(merCouponEditDto.getShopId());
+            coupon.setCouponStatus(1);
+            coupon.setCreateTime(new Date());
+            coupon.setCreateUserId(merCouponEditDto.getUserId());
+            coupon.setCouponFrom(2);
+            //创建优惠券统计
+            couponTotal = new CouponTotal();
+            couponTotal.setCouponId(couponId);
+            couponTotal.setSendCount(0);
+            couponTotal.setSendUserCount(0);
+            couponTotalService.save(couponTotal);
+        }
+        //优惠券赋值
+        coupon.setAuditStatus(1);
+        coupon.setCouponType(merCouponEditDto.getCouponType());
+        coupon.setCouponName(merCouponEditDto.getCouponName());
+        coupon.setSendType(merCouponEditDto.getSendType());
+        coupon.setSendTimeType(merCouponEditDto.getSendTimeType());
+        coupon.setSendTime(merCouponEditDto.getSendTime());
+        coupon.setMoneyThreshold(merCouponEditDto.getMoneyThreshold());
+        coupon.setDiscountMoney(merCouponEditDto.getDiscountMoney());
+        coupon.setDiscountPercent(merCouponEditDto.getDiscountPercent());
+        coupon.setUseScope(merCouponEditDto.getUseScope());
+        coupon.setValidTimeType(merCouponEditDto.getValidTimeType());
+        coupon.setValidStartTime(merCouponEditDto.getValidStartTime());
+        coupon.setValidEndTime(merCouponEditDto.getValidEndTime());
+        coupon.setValidDay(merCouponEditDto.getValidDay());
+        coupon.setUpdateTime(new Date());
+        coupon.setUpdateUserId(merCouponEditDto.getUserId());
+        coupon.setRelationType(1);
+        //判断是否指定商品
+        if(coupon.getUseScope()==2&&!merCouponEditDto.getRelGoodsIdList().isEmpty()){
+            List<String> relGoodsIdList = merCouponEditDto.getRelGoodsIdList();
+            List<CouponRelGoods> couponRelGoodsList = relGoodsIdList.stream()
+                    .map(str -> {
+                        CouponRelGoods couponRelGoods = new CouponRelGoods();
+                        couponRelGoods.setDelFlag(0);
+                        couponRelGoods.setCouponId(coupon.getCouponId());
+                        couponRelGoods.setGoodsId(str);
+                        return couponRelGoods;
+                    })
+                    .collect(Collectors.toList());
+            couponRelGoodsService.saveBatch(couponRelGoodsList);
+            String relGoodsIds = relGoodsIdList.stream().collect(Collectors.joining(","));
+            coupon.setRelGoodsIds(relGoodsIds);
+        }
+        //判断是否指定用户
+        List<Long> relUserIdList = null;
+        if(coupon.getSendType()==5&&coupon.getRelationType()==1&&!merCouponEditDto.getRelUserIdList().isEmpty()){
+            relUserIdList = merCouponEditDto.getRelUserIdList();
+            List<CouponRelUser> couponRelUserList = relUserIdList.stream()
+                    .map(str -> {
+                        CouponRelUser couponRelUser = new CouponRelUser();
+                        couponRelUser.setDelFlag(0);
+                        couponRelUser.setCouponId(coupon.getCouponId());
+                        couponRelUser.setUserId(str);
+                        return couponRelUser;
+                    })
+                    .collect(Collectors.toList());
+            couponRelUserService.saveBatch(couponRelUserList);
+        }
+        this.saveOrUpdate(coupon);
+    }
+
+    /**
+     * @description  商户删除优惠券
+     * @author  jqs
+     * @date    2023/7/3 15:04
+     * @param merBaseGetDto
+     * @return  void
+     */
+    @Override
+    public void deleteMerCoupon(MerBaseGetDto merBaseGetDto){
+        Coupon coupon = this.getById(merBaseGetDto.getId());
+        coupon.setCouponStatus(-1);
+        coupon.setDelFlag(1);
+        coupon.setUpdateUserId(merBaseGetDto.getUserId());
+        coupon.setUpdateTime(new Date());
+        this.saveOrUpdate(coupon);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
index 2f9d437..46ae84e 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -1002,9 +1002,9 @@
      * @date 2023/6/13 17:53
      */
     @Override
-    public List<Long> listIdBySendType(Integer sendType) {
+    public List<Long> listIdBySendType(Integer sendType,Long shopId) {
         //1.手动领取2.全部用户3.会员用户4非会员用户5自定义
-        return memberMapper.listIdBySendType(sendType);
+        return memberMapper.listIdBySendType(sendType,shopId);
     }
 
     /**
@@ -1360,4 +1360,130 @@
         }
         memberTotalService.saveOrUpdate(memberTotal);
     }
+
+    /**
+     * @description  商户获取会员统计
+     * @author  jqs
+     * @date    2023/7/3 17:16
+     * @param merTotalDto
+     * @return  MerMemberTotalVo
+     */
+    @Override
+    public MerMemberTotalVo getMerMemberTotal(MerTotalDto merTotalDto){
+        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
+            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
+            merTotalDto.setShopIdList(shopIdList);
+            merTotalDto.setShopId(null);
+        }
+        MerMemberTotalVo merMemberTotalVo = memberMapper.getMerMemberTotal(merTotalDto);
+        return merMemberTotalVo;
+    }
+
+    /**
+     * @description  商户获取会员固定统计
+     * @author  jqs
+     * @date    2023/7/3 18:34
+     * @param merTotalDto
+     * @return  MerMemberFixedTotalVo
+     */
+    @Override
+    public MerMemberFixedTotalVo getMerMemberFixedTotal(MerTotalDto merTotalDto){
+        MerMemberFixedTotalVo memberFixedTotalVo = new MerMemberFixedTotalVo();
+        Date nowDay = DateUtils.getNowDate();
+        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
+            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
+            merTotalDto.setShopIdList(shopIdList);
+            merTotalDto.setShopId(null);
+        }
+        MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getMerMemberTotalAge(merTotalDto);
+        // 年龄段数组
+        String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"};
+        // 不同年龄段的会员数数组
+        Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()};
+        // 设置年龄段数组和不同年龄段的会员数数组
+        memberFixedTotalVo.setAgeKey(ageKey);
+        memberFixedTotalVo.setAgeValue(ageValue);
+        // 获取不同护理类型的会员数
+        List<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getMerMemberTotalNurse(merTotalDto);
+        if (nurseTotalVos != null && nurseTotalVos.size() > 0) {
+            nurseTotalVos = listRemoveNull(nurseTotalVos);
+            memberFixedTotalVo.setNurseTotalVos(nurseTotalVos);
+        }
+        // 获取不同商品类型的会员数
+        List<MgtMapIntTotalVo> goodsTypeTotalVos = memberMapper.getMerMemberTotalGoodsType(merTotalDto);
+        if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) {
+            goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos);
+            memberFixedTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos);
+        }
+        // 获取不同活跃度的会员数
+        List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
+        if (activenessList != null && !activenessList.isEmpty()) {
+            Activeness activeness;
+            String actStartDate;
+            String actEndDate;
+            Integer count;
+            List<MgtMapIntTotalVo> MgtMapIntTotalVoList = new ArrayList<>();
+            MgtMapIntTotalVo MgtMapIntTotalVo;
+            // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
+            for (int i = 0; i < activenessList.size(); i++) {
+                activeness = activenessList.get(i);
+                actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getEndDay()));
+                actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getStartDay()));
+                merTotalDto.setStartDate(actStartDate);
+                merTotalDto.setEndDate(actEndDate);
+                count = memberMapper.getMerMemberTotalActiveness(merTotalDto);
+                MgtMapIntTotalVo = new MgtMapIntTotalVo();
+                MgtMapIntTotalVo.setMapKey(activeness.getActivenessName());
+                MgtMapIntTotalVo.setMapValue(count);
+                MgtMapIntTotalVoList.add(MgtMapIntTotalVo);
+            }
+            memberFixedTotalVo.setActivenessList(MgtMapIntTotalVoList);
+        }
+        //获取会员消费排名
+        List<MgtMapIntTotalVo> memberPayList = memberMapper.getMerMemberPayRank(merTotalDto);
+        if (memberPayList != null && memberPayList.size() > 0) {
+            memberPayList = listRemoveNull(memberPayList);
+            memberFixedTotalVo.setMemberPayList(memberPayList);
+        }
+        return memberFixedTotalVo;
+    }
+
+    /**
+     * @description  商会获取会员来源统计
+     * @author  jqs
+     * @date    2023/7/3 19:09
+     * @param merTotalDto
+     * @return  MerMemberSourceTotalVo
+     */
+    @Override
+    public MerMemberSourceTotalVo getMerMemberSourceTotal(MerTotalDto merTotalDto){
+        MerMemberSourceTotalVo memberSourceTotalVo = new MerMemberSourceTotalVo();
+        //获取来源渠道排名
+        List<MgtMapIntTotalVo> customerSourceList = memberMapper.getMerMemberCustomerSourceRank(merTotalDto);
+        if (customerSourceList != null && customerSourceList.size() > 0) {
+            customerSourceList = listRemoveNull(customerSourceList);
+            memberSourceTotalVo.setCustomerSourceList(customerSourceList);
+        }
+
+        return memberSourceTotalVo;
+    }
+
+    /**
+     * @description  商会获取会员推荐排名
+     * @author  jqs
+     * @date    2023/7/3 19:14
+     * @param merTotalDto
+     * @return  MerMemberRecommendTotalVo
+     */
+    @Override
+    public MerMemberRecommendTotalVo getMerMemberRecommendTotal(MerTotalDto merTotalDto){
+        MerMemberRecommendTotalVo memberRecommendTotalVo = new MerMemberRecommendTotalVo();
+        //获取会员推荐排名
+        List<MgtMapIntTotalVo> recommendList = memberMapper.getMerMemberRecommendRank(merTotalDto);
+        if (recommendList != null && recommendList.size() > 0) {
+            recommendList = listRemoveNull(recommendList);
+            memberRecommendTotalVo.setRecommendList(recommendList);
+        }
+        return memberRecommendTotalVo;
+    }
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
index 8f87bea..c09cce6 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
@@ -193,7 +193,7 @@
      * @param sendType
      * @return  List<Long>
      */
-    List<Long> listIdBySendType(Integer sendType);
+    List<Long> listIdBySendType(Integer sendType,Long shopId);
 
     /**
      * @description  通过ids获取用户简易返回
@@ -276,4 +276,40 @@
      * @return  void
      */
     void changeMemberTotal(MemberTotalChangeDto memberTotalChangeDto);
+
+    /**
+     * @description  商户获取会员统计
+     * @author  jqs
+     * @date    2023/7/3 17:16
+     * @param merTotalDto
+     * @return  MerMemberTotalVo
+     */
+    MerMemberTotalVo getMerMemberTotal(MerTotalDto merTotalDto);
+
+    /**
+     * @description  商户获取会员固定统计
+     * @author  jqs
+     * @date    2023/7/3 18:34
+     * @param merTotalDto
+     * @return  MerMemberFixedTotalVo
+     */
+    MerMemberFixedTotalVo getMerMemberFixedTotal(MerTotalDto merTotalDto);
+
+    /**
+     * @description  商会获取会员来源统计
+     * @author  jqs
+     * @date    2023/7/3 19:09
+     * @param merTotalDto
+     * @return  MerMemberSourceTotalVo
+     */
+    MerMemberSourceTotalVo getMerMemberSourceTotal(MerTotalDto merTotalDto);
+
+    /**
+     * @description  商会获取会员推荐排名
+     * @author  jqs
+     * @date    2023/7/3 19:14
+     * @param merTotalDto
+     * @return  MerMemberRecommendTotalVo
+     */
+    MerMemberRecommendTotalVo getMerMemberRecommendTotal(MerTotalDto merTotalDto);
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml
index 967928e..cba2106 100644
--- a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml
+++ b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml
@@ -330,10 +330,14 @@
             tc.money_threshold  moneyThreshold,
             tc.discount_money  discountMoney,
             tc.discount_percent  discountPercent,
-            tc.create_time  createTime
+            tc.create_time  createTime,
+            tc.audit_reason auditReason
         FROM t_coupon tc
                  LEFT JOIN t_coupon_total tct ON tc.coupon_id = tct.coupon_id
         WHERE tc.del_flag = 0 AND tc.coupon_status = 2 AND tc.coupon_from = 2 AND tc.shop_id = #{param.shopId}
+        <if test="param.auditStatus != null and param.auditStatus != ''">
+            AND tc.audit_status = #{param.auditStatus}
+        </if>
     </select>
 
 
diff --git a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
index 2c579eb..5bbea31 100644
--- a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
+++ b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -320,6 +320,9 @@
         <if test="sendType != null and sendType == 4">
             AND tm.binding_flag = 0
         </if>
+        <if test="shopId != null and shopId != ''">
+            AND tm.relation_shop_id = #{shopId}
+        </if>
     </select>
 
     <select id="listSimpleVoByIds" resultType="com.ruoyi.system.api.domain.vo.MgtSimpleMemberVo">
@@ -422,7 +425,7 @@
                 AND create_time &lt;= #{param.endDate}
             </if>
             ) x
-        WHERE member_nurse != ''
+        WHERE member_nurse IS NOT NULL OR member_nurse != ''
         GROUP BY member_nurse
     </select>
 
@@ -442,7 +445,7 @@
             AND create_time &lt;= #{param.endDate}
         </if>
         ) x
-        WHERE goods_type != ''
+        WHERE goods_type IS NOT NULL OR goods_type != ''
         GROUP BY goods_type
     </select>
 
@@ -578,7 +581,7 @@
             AND create_time &lt;= #{param.endDate}
         </if>
         ) x
-        WHERE member_nurse != ''
+        WHERE member_nurse IS NOT NULL OR member_nurse != ''
         GROUP BY member_nurse
     </select>
 
@@ -601,7 +604,7 @@
             AND create_time &lt;= #{param.endDate}
         </if>
         ) x
-        WHERE goods_type != ''
+        WHERE goods_type IS NOT NULL OR goods_type != ''
         GROUP BY goods_type
     </select>
 
@@ -701,4 +704,207 @@
             </foreach>
         </if>
     </select>
+
+    <select id="getMerMemberTotal" resultType="com.ruoyi.member.domain.vo.MerMemberTotalVo">
+        SELECT
+        COUNT(member_id) memberTotal,
+        SUM(CASE WHEN customer_source = "小程序" THEN 1 ELSE 0 END) onlineTotal,
+        SUM(CASE WHEN customer_source = "小程序" THEN 0 ELSE 1 END) offlineTotal,
+        0 introduceTotal,
+        SUM(CASE WHEN goods_type LIKE "%周期%" THEN 1 ELSE 0 END) cycleTotal,
+        SUM(CASE WHEN goods_type LIKE "%体验%" THEN 1 ELSE 0 END) experienceTotal,
+        SUM(CASE WHEN goods_type LIKE "%服务%" THEN 1 ELSE 0 END) serviceTotal
+        FROM t_member WHERE del_flag = 0 AND binding_flag = 1
+        <if test="param.shopId != null and param.shopId != ''">
+            AND relation_shop_id = #{param.shopId}
+        </if>
+        <if test="param.shopIdList != null and param.shopIdList.size() > 0">
+            AND relation_shop_id IN
+            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="param.startDate!=null and param.startDate!=''">
+            AND create_time &gt;= #{param.startDate}
+        </if>
+        <if test="param.endDate!=null and param.endDate!=''">
+            AND create_time &lt;= #{param.endDate}
+        </if>
+    </select>
+
+    <select id="getMerMemberTotalAge" resultType="com.ruoyi.member.domain.vo.MgtAgeTotalVo">
+        SELECT
+        SUM(CASE WHEN gender = 0 THEN 1 ELSE 0 END) manTotal,
+        SUM(CASE WHEN gender = 1 THEN 1 ELSE 0 END) womenTotal,
+        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 THEN 1 ELSE 0 END) AS tenAge,
+        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 30 THEN 1 ELSE 0 END) AS twentyAge,
+        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 31 AND 40 THEN 1 ELSE 0 END) AS ThirtyAge,
+        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 41 AND 50 THEN 1 ELSE 0 END) AS fortyAge,
+        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) &gt;= 51 THEN 1 ELSE 0 END) AS fiftyAge
+        FROM t_member WHERE del_flag = 0 AND binding_flag = 1
+        <if test="param.shopId != null and param.shopId != ''">
+            AND relation_shop_id = #{param.shopId}
+        </if>
+        <if test="param.shopIdList != null and param.shopIdList.size() > 0">
+            AND relation_shop_id IN
+            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="param.startDate!=null and param.startDate!=''">
+            AND create_time &gt;= #{param.startDate}
+        </if>
+        <if test="param.endDate!=null and param.endDate!=''">
+            AND create_time &lt;= #{param.endDate}
+        </if>
+    </select>
+
+    <select id="getMerMemberTotalNurse" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
+        SELECT member_nurse mapKey, COUNT(*) mapValue
+        FROM (
+        SELECT member_id, SUBSTRING_INDEX(SUBSTRING_INDEX(member_nurse, ',', numbers.n), ',', -1) member_nurse
+        FROM (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10) numbers
+        INNER JOIN t_member ON CHAR_LENGTH(member_nurse) - CHAR_LENGTH(REPLACE(member_nurse, ',', '')) >= numbers.n - 1
+        <if test="param.shopId != null and param.shopId != ''">
+            AND relation_shop_id = #{param.shopId}
+        </if>
+        <if test="param.shopIdList != null and param.shopIdList.size() > 0">
+            AND relation_shop_id IN
+            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="param.startDate!=null and param.startDate!=''">
+            AND create_time &gt;= #{param.startDate}
+        </if>
+        <if test="param.endDate!=null and param.endDate!=''">
+            AND create_time &lt;= #{param.endDate}
+        </if>
+        ) x
+        WHERE member_nurse IS NOT NULL OR member_nurse != ''
+        GROUP BY member_nurse
+    </select>
+
+    <select id="getMerMemberTotalGoodsType" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
+        SELECT goods_type mapKey, COUNT(*) mapValue
+        FROM (
+        SELECT member_id, SUBSTRING_INDEX(SUBSTRING_INDEX(goods_type, ',', numbers.n), ',', -1) goods_type
+        FROM (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) numbers
+        INNER JOIN t_member ON CHAR_LENGTH(goods_type) - CHAR_LENGTH(REPLACE(goods_type, ',', '')) >= numbers.n - 1
+        <if test="param.shopId != null and param.shopId != ''">
+            AND relation_shop_id = #{param.shopId}
+        </if>
+        <if test="param.shopIdList != null and param.shopIdList.size() > 0">
+            AND relation_shop_id IN
+            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="param.startDate!=null and param.startDate!=''">
+            AND create_time &gt;= #{param.startDate}
+        </if>
+        <if test="param.endDate!=null and param.endDate!=''">
+            AND create_time &lt;= #{param.endDate}
+        </if>
+        ) x
+        WHERE goods_type IS NOT NULL OR goods_type != ''
+        GROUP BY goods_type
+    </select>
+
+    <select id="getMerMemberTotalActiveness" resultType="java.lang.Integer">
+        SELECT
+        COUNT(tm.member_id)
+        FROM t_member tm
+        LEFT JOIN t_member_total tmt ON tm.member_id = tmt.member_id
+        WHERE tm.del_Flag = 0
+        <if test="param.shopId != null and param.shopId != ''">
+            AND tm.relation_shop_id = #{param.shopId}
+        </if>
+        <if test="param.shopIdList != null and param.shopIdList.size() > 0">
+            AND tm.relation_shop_id IN
+            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="param.startDate!=null and param.startDate!=''">
+            AND tmt.last_pay_time &gt;= #{actStartDate}
+        </if>
+        <if test="param.endDate!=null and param.endDate!=''">
+            AND tmt.last_pay_time &lt;= #{actEndDate}
+        </if>
+    </select>
+
+    <select id="getMerMemberPayRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
+        SELECT
+        tm.nick_name mapKey,
+        tmt.total_pay_count mapValue
+        FROM t_member tm
+        INNER JOIN t_member_total tmt ON tm.member_id = tmt.member_id
+        WHERE tm.del_flag = 0
+        <if test="param.shopId != null and param.shopId != ''">
+            AND tm.relation_shop_id = #{param.shopId}
+        </if>
+        <if test="param.shopIdList != null and param.shopIdList.size() > 0">
+            AND tm.relation_shop_id IN
+            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="param.startDate!=null and param.startDate!=''">
+            AND tm.create_time &gt;= #{param.startDate}
+        </if>
+        <if test="param.endDate!=null and param.endDate!=''">
+            AND tm.create_time &lt;= #{param.endDate}
+        </if>
+        ORDER BY tmt.total_pay_count DESC LIMIT 15
+    </select>
+
+    <select id="getMerMemberCustomerSourceRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
+        SELECT
+        tm.customer_source mapKey,
+        COUNT(tm.user_id) mapValue
+        FROM t_member tm WHERE tm.del_flag = 0
+        <if test="param.shopId != null and param.shopId != ''">
+            AND tm.relation_shop_id = #{param.shopId}
+        </if>
+        <if test="param.shopIdList != null and param.shopIdList.size() > 0">
+            AND tm.relation_shop_id IN
+            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="param.startDate!=null and param.startDate!=''">
+            AND tm.create_time &gt;= #{param.startDate}
+        </if>
+        <if test="param.endDate!=null and param.endDate!=''">
+            AND tm.create_time &lt;= #{param.endDate}
+        </if>
+        GROUP BY tm.customer_source
+        ORDER BY COUNT(tm.user_id) DESC LIMIT 15
+    </select>
+
+
+    <select id="getMerMemberRecommendRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
+        SELECT
+        tm.referrer mapKey,
+        COUNT(tm.user_id) mapValue
+        FROM t_member tm WHERE tm.del_flag = 0
+        <if test="param.shopId != null and param.shopId != ''">
+            AND tm.relation_shop_id = #{param.shopId}
+        </if>
+        <if test="param.shopIdList != null and param.shopIdList.size() > 0">
+            AND tm.relation_shop_id IN
+            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="param.startDate!=null and param.startDate!=''">
+            AND tm.create_time &gt;= #{param.startDate}
+        </if>
+        <if test="param.endDate!=null and param.endDate!=''">
+            AND tm.create_time &lt;= #{param.endDate}
+        </if>
+        GROUP BY tm.referrer
+        ORDER BY COUNT(tm.user_id) DESC LIMIT 15
+    </select>
 </mapper>
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderDistributionTotalVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderDistributionTotalVo.java
new file mode 100644
index 0000000..e41540e
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderDistributionTotalVo.java
@@ -0,0 +1,28 @@
+package com.ruoyi.order.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @ClassName MerOrderDistributionTotalVo
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 16:42
+ * @Version 1.0
+ */
+@Data
+public class MerOrderDistributionTotalVo {
+
+    @ApiModelProperty(value = "订单数量key")
+    private String[] orderTotalKey;
+
+    @ApiModelProperty(value = "订单数量value")
+    private Integer[] orderTotalValue;
+
+    @ApiModelProperty(value = "订单金额value")
+    private BigDecimal[] orderMoneyValue;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderFromRankVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderFromRankVo.java
new file mode 100644
index 0000000..4aa3c6c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderFromRankVo.java
@@ -0,0 +1,23 @@
+package com.ruoyi.order.domain.vo;
+
+import com.ruoyi.system.api.domain.vo.MgtMapBigTotalVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @ClassName MerOrderFromRankVo
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 16:46
+ * @Version 1.0
+ */
+@Data
+public class MerOrderFromRankVo {
+
+    @ApiModelProperty(value = "来源排行")
+    private List<MgtMapBigTotalVo> orderFromRankList;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderGoodsRankVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderGoodsRankVo.java
new file mode 100644
index 0000000..396b56a
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderGoodsRankVo.java
@@ -0,0 +1,21 @@
+package com.ruoyi.order.domain.vo;
+
+import com.ruoyi.system.api.domain.vo.MgtMapBigTotalVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @ClassName MerOrderGoodsRankVo
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 16:45
+ * @Version 1.0
+ */
+@Data
+public class MerOrderGoodsRankVo {
+
+    @ApiModelProperty(value = "商品排行")
+    private List<MgtMapBigTotalVo> goodsRankList;
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderTotalVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderTotalVo.java
new file mode 100644
index 0000000..cced7aa
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderTotalVo.java
@@ -0,0 +1,61 @@
+package com.ruoyi.order.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @ClassName MerOrderTotalVo
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 16:38
+ * @Version 1.0
+ */
+@Data
+public class MerOrderTotalVo {
+
+    @ApiModelProperty(value = "总订单数")
+    private Integer orderTotal;
+
+    @ApiModelProperty(value = "线上订单数")
+    private Integer onlineTotal;
+
+    @ApiModelProperty(value = "线下订单数")
+    private Integer offlineTotal;
+
+    @ApiModelProperty(value = "活动订单数")
+    private Integer activityTotal;
+
+    @ApiModelProperty(value = "周期订单数")
+    private Integer cycleTotal;
+
+    @ApiModelProperty(value = "体验订单数")
+    private Integer experienceTotal;
+
+    @ApiModelProperty(value = "服务订单数")
+    private Integer serviceTotal;
+
+    @ApiModelProperty(value = "总订单金额")
+    private BigDecimal orderMoney;
+
+    @ApiModelProperty(value = "线上订单金额")
+    private BigDecimal onlineMoney;
+
+    @ApiModelProperty(value = "线下订单金额")
+    private BigDecimal offlineMoney;
+
+    @ApiModelProperty(value = "活动订单金额")
+    private BigDecimal activityMoney;
+
+    @ApiModelProperty(value = "周期订单金额")
+    private BigDecimal cycleMoney;
+
+    @ApiModelProperty(value = "体验订单金额")
+    private BigDecimal experienceMoney;
+
+    @ApiModelProperty(value = "服务订单金额")
+    private BigDecimal serviceMoney;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderTypeTotalVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderTypeTotalVo.java
new file mode 100644
index 0000000..2b713e1
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderTypeTotalVo.java
@@ -0,0 +1,28 @@
+package com.ruoyi.order.domain.vo;
+
+import com.ruoyi.system.api.domain.vo.MgtMapBigTotalVo;
+import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @ClassName MerOrderTypeTotalVo
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/7/3 16:44
+ * @Version 1.0
+ */
+@Data
+public class MerOrderTypeTotalVo {
+
+    @ApiModelProperty(value = "商品类型数量")
+    private List<MgtMapIntTotalVo> goodsTypeTotalList;
+
+    @ApiModelProperty(value = "商品类型金额")
+    private List<MgtMapBigTotalVo> goodsTypeMoneyList;
+
+
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalOrderTotalVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalOrderTotalVo.java
index 9e4e072..8fa5562 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalOrderTotalVo.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalOrderTotalVo.java
@@ -39,7 +39,7 @@
     @ApiModelProperty(value = "服务订单数")
     private Integer serviceTotal;
 
-    @ApiModelProperty(value = "总订单数")
+    @ApiModelProperty(value = "总订单金额")
     private BigDecimal orderMoney;
 
     @ApiModelProperty(value = "线上订单金额")
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/business/MerShopController.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/business/MerShopController.java
index db66de5..ce90f1a 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/business/MerShopController.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/business/MerShopController.java
@@ -12,19 +12,14 @@
 import com.ruoyi.shop.domain.vo.MerShopCertificateListVo;
 import com.ruoyi.shop.domain.vo.MerShopSuggestVo;
 import com.ruoyi.shop.service.shop.*;
-import com.ruoyi.system.api.domain.dto.MerBaseDto;
-import com.ruoyi.system.api.domain.dto.MerBaseGetDto;
-import com.ruoyi.system.api.domain.dto.MerEditUserDto;
-import com.ruoyi.system.api.domain.dto.MerPageDto;
+import com.ruoyi.system.api.domain.dto.*;
 import com.ruoyi.system.api.domain.poji.shop.Shop;
 import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo;
 import com.ruoyi.system.api.domain.vo.MerStaffInfoVo;
+import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.util.List;
@@ -147,4 +142,14 @@
         shopSuggestService.suggest(merShopSuggestDto);
         return R.ok();
     }
+
+
+
+    @RequestMapping(value = "/listShopByShop", method = RequestMethod.POST)
+    @ApiOperation(value = "获取商户下属代理商")
+    public R<List<MgtSimpleShopVo>> listShopByShop(@RequestBody MerBaseDto merBaseDto)
+    {
+        List<MgtSimpleShopVo> mgtShopListSimpleVos = shopService.listShopByShop(merBaseDto.getShopId());
+        return R.ok(mgtShopListSimpleVos);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
index b875415..e75e7ca 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
@@ -220,4 +220,18 @@
         return R.ok(taskSimpleVo);
     }
 
+    /**
+     * @description  获取商户下属代理商
+     * @author  jqs
+     * @date    2023/7/3 17:26
+     * @return  R<List<Long>>
+     */
+    @PostMapping("/listShopIdByShopId")
+    public R<List<Long>> listShopIdByShopId(@RequestBody Long shopId)
+    {
+        List<Long> shopIdList = shopService.listShopIdByShopId(shopId);
+        return R.ok(shopIdList);
+    }
+
+
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
index 1bbf267..dfe1539 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -11,7 +11,6 @@
 import com.ruoyi.common.core.utils.uuid.IdUtils;
 import com.ruoyi.common.security.utils.CodeFactoryUtil;
 import com.ruoyi.shop.domain.dto.*;
-import com.ruoyi.shop.domain.pojo.shop.ShopTotal;
 import com.ruoyi.shop.domain.pojo.shop.*;
 import com.ruoyi.shop.domain.pojo.task.ShopFile;
 import com.ruoyi.shop.domain.vo.*;
@@ -960,4 +959,40 @@
         mgtShopAuthCodeVo.setLegalValidationUrl(shopAuthentication.getLegalValidationUrl());
         return mgtShopAuthCodeVo;
     }
+
+
+    /**
+     * @description  获取商户下属代理商
+     * @author  jqs
+     * @date    2023/7/3 17:27
+     * @param shopId
+     * @return  List<Long>
+     */
+    @Override
+    public List<Long> listShopIdByShopId(Long shopId){
+        List<Long> shopIds = shopMapper.selectList(
+                new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag, 0).eq(Shop::getBelongShopId, shopId)
+        ).stream().map(Shop::getShopId).collect(Collectors.toList());
+        return shopIds;
+    }
+
+    /**
+     * @description  获取商户下属代理商
+     * @author  jqs
+     * @date    2023/7/3 18:18
+     * @param shopId
+     * @return  List<MgtSimpleShopVo>
+     */
+    @Override
+    public List<MgtSimpleShopVo> listShopByShop(Long shopId){
+        List<MgtSimpleShopVo> simpleShopVoList = shopMapper.selectList(
+                new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag, 0).eq(Shop::getBelongShopId, shopId)).
+                stream().map(shop->{
+                    MgtSimpleShopVo simpleShopVo = new MgtSimpleShopVo();
+                    simpleShopVo.setShopId(shop.getShopId());
+                    simpleShopVo.setShopName(shop.getShopName());
+                    return simpleShopVo;
+                }).collect(Collectors.toList());
+        return simpleShopVoList;
+    }
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskServiceImpl.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskServiceImpl.java
index 0b04907..9b0874d 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskServiceImpl.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskServiceImpl.java
@@ -187,4 +187,6 @@
     public MemberTaskSimpleVo getLastMemberTask(Long userId){
         return memberTaskMapper.getLastMemberTask(userId);
     }
+
+
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java
index 4afb2d2..69c2fd7 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java
@@ -233,4 +233,22 @@
      * @return  MgtShopAuthCodeVo
      */
     MgtShopAuthCodeVo getMgtShopAuthCode(String authId);
+
+    /**
+     * @description  获取商户下属代理商
+     * @author  jqs
+     * @date    2023/7/3 17:27
+     * @param shopId
+     * @return  List<Long>
+     */
+    List<Long> listShopIdByShopId(Long shopId);
+
+    /**
+     * @description  获取商户下属代理商
+     * @author  jqs
+     * @date    2023/7/3 18:18
+     * @param shopId
+     * @return  List<MgtSimpleShopVo>
+     */
+    List<MgtSimpleShopVo> listShopByShop(Long shopId);
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskService.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskService.java
index 65fdfc7..eddad99 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskService.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskService.java
@@ -58,4 +58,6 @@
      * @return  MemberTaskSimpleVo
      */
     MemberTaskSimpleVo getLastMemberTask(Long userId);
+
+
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml b/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
index c145d84..d737425 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
+++ b/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
@@ -501,7 +501,7 @@
         ts.shop_name shopName,
         ts.shopowner_name shopownerName,
         ts.shopowner_phone shopownerPhone,
-        CASE tsa.main_mype
+        CASE tsa.main_type
             WHEN 1 THEN '个人'
             WHEN 2 THEN '企业'
             END mainType,
@@ -530,7 +530,7 @@
             AND ts.shopowner_phone LIKE CONCAT('%',#{param.shopownerPhone},'%')
         </if>
         <if test="param.mainType!=null and param.mainType!=''">
-            AND tsa.main_mype = #{param.mainType}
+            AND tsa.main_type = #{param.mainType}
         </if>
         <if test="param.auditStatus!=null">
             AND tsa.audit_status = #{param.auditStatus}

--
Gitblit v1.7.1