From f0acb97e91f456c9b402977416e73951b708a157 Mon Sep 17 00:00:00 2001
From: jiangqs <343695869@qq.com>
Date: 星期一, 19 六月 2023 23:23:23 +0800
Subject: [PATCH] 营销统计

---
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtTotalMemberTotalVo.java        |   30 ++
 ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml                             |  121 ++++++++++
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java  |   87 ++++++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalOrderTotalVo.java           |   89 +++++++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java               |   10 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java      |   84 +++++++
 ruoyi-modules/ruoyi-system/src/main/resources/mapper/sys/SysUserMapper.xml                            |    2 
 ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml                          |   80 ++++++
 /dev/null                                                                                             |   22 -
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtTotalController.java |   41 +++
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtMapTotalVo.java                |   22 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java                 |   56 ++++
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java             |   44 +++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtMapTotalVo.java                  |   27 ++
 14 files changed, 684 insertions(+), 31 deletions(-)

diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtMapTotalVo.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtMapTotalVo.java
new file mode 100644
index 0000000..5690d81
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtMapTotalVo.java
@@ -0,0 +1,22 @@
+package com.ruoyi.member.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @ClassName MgtNurseTotalVo
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/6/19 18:06
+ * @Version 1.0
+ */
+@Data
+public class MgtMapTotalVo {
+
+    @ApiModelProperty(value = "mapKey")
+    private String mapKey;
+
+    @ApiModelProperty(value = "mapValue")
+    private Integer mapValue;
+
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtNurseTotalVo.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtNurseTotalVo.java
deleted file mode 100644
index 57f7816..0000000
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtNurseTotalVo.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.ruoyi.member.domain.vo;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-/**
- * @ClassName MgtNurseTotalVo
- * @Description TODO
- * @Author jqs
- * @Date 2023/6/19 18:06
- * @Version 1.0
- */
-@Data
-public class MgtNurseTotalVo {
-
-    @ApiModelProperty(value = "调理问题")
-    private String nurse;
-
-    @ApiModelProperty(value = "人数")
-    private Integer userCount;
-
-}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtTotalMemberTotalVo.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtTotalMemberTotalVo.java
index a227cbd..c818cc4 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtTotalMemberTotalVo.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtTotalMemberTotalVo.java
@@ -45,4 +45,34 @@
 
     @ApiModelProperty(value = "会员年龄value")
     private Integer[] ageValue;
+
+    @ApiModelProperty(value = "会员年龄key")
+    private String[] nurseKey;
+
+    @ApiModelProperty(value = "会员年龄value")
+    private Integer[] nurseValue;
+
+    @ApiModelProperty(value = "商品类型key")
+    private String[] goodsTypeKey;
+
+    @ApiModelProperty(value = "商品类型value")
+    private Integer[] goodsTypeValue;
+
+    @ApiModelProperty(value = "活跃度key")
+    private String[] activenessKey;
+
+    @ApiModelProperty(value = "活跃度value")
+    private Integer[] activenessValue;
+
+    @ApiModelProperty(value = "消费排行key")
+    private String[] orderRankKey;
+
+    @ApiModelProperty(value = "消费排行value")
+    private Integer[] orderRankValue;
+
+    @ApiModelProperty(value = "来源排行key")
+    private String[] customerSourceKey;
+
+    @ApiModelProperty(value = "来源排行value")
+    private Integer[] customerSourceValue;
 }
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 be6d804..25b131b 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
@@ -156,7 +156,49 @@
      * @param
      * @return  MgtTotalMemberTotalVo
      */
-    List<MgtNurseTotalVo> getTotalMemberTotalNurse(@Param("param") MgtBaseShopDto mgtBaseShopDto);
+    List<MgtMapTotalVo> getTotalMemberTotalNurse(@Param("param") MgtBaseShopDto mgtBaseShopDto);
+
+
+    /**
+     * @description  会员人数统计
+     * @author  jqs
+     * @date    2023/6/19 15:26
+     * @param
+     * @return  MgtTotalMemberTotalVo
+     */
+    List<MgtMapTotalVo> getTotalMemberTotalGoodsType(@Param("param") MgtBaseShopDto mgtBaseShopDto);
+
+    /**
+    * @description getTotalMemberTotalActiveness
+    * @param shopId
+    * @param actStartDate
+    * @param actEndDate
+    * @return Integer
+    * @author jqs34
+    * @date 2023/6/19 21:24
+    */
+    Integer getTotalMemberTotalActiveness(@Param("shopId") Long shopId,@Param("actStartDate") String actStartDate,@Param("actEndDate") String actEndDate);
+
+    /**
+     * @description  会员人数统计
+     * @author  jqs
+     * @date    2023/6/19 15:26
+     * @param
+     * @return  MgtTotalMemberTotalVo
+     */
+    List<MgtMapTotalVo> getTotalMemberRankPay(@Param("param") MgtBaseShopDto mgtBaseShopDto);
+
+
+    /**
+     * @description  会员人数统计
+     * @author  jqs
+     * @date    2023/6/19 15:26
+     * @param
+     * @return  MgtTotalMemberTotalVo
+     */
+    List<MgtMapTotalVo> getTotalMemberRankCustomerSource(@Param("param") MgtBaseShopDto mgtBaseShopDto);
+
+
 }
 
 
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 302bf90..15affd3 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
@@ -955,14 +955,93 @@
      */
     @Override
     public MgtTotalMemberTotalVo getTotalMemberTotal(MgtBaseShopDto mgtBaseShopDto){
+        Date nowDay = DateUtils.getNowDate();
+        // 获取店铺ID
+        Long shopId = mgtBaseShopDto.getShopId();
+        // 获取总会员数和不同年龄段的会员数
         MgtTotalMemberTotalVo mgtTotalMemberTotalVo = memberMapper.getTotalMemberTotal(mgtBaseShopDto);
         MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getTotalMemberTotalAge(mgtBaseShopDto);
-        String[] ageKey = {"<20","21-30","31-40","41-50",">50"};
-        Integer[] ageValue = {mgtAgeTotalVo.getTenAge(),mgtAgeTotalVo.getTwentyAge(),mgtAgeTotalVo.getThirtyAge(),mgtAgeTotalVo.getFortyAge(),mgtAgeTotalVo.getFiftyAge()};
+        // 年龄段数组
+        String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"};
+        // 不同年龄段的会员数数组
+        Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()};
+        // 设置年龄段数组和不同年龄段的会员数数组
         mgtTotalMemberTotalVo.setAgeKey(ageKey);
         mgtTotalMemberTotalVo.setAgeValue(ageValue);
-        List<MgtNurseTotalVo> nurseTotalVos = memberMapper.getTotalMemberTotalNurse(mgtBaseShopDto);
-
+        // 获取不同护理类型的会员数
+        List<MgtMapTotalVo> nurseTotalVos = memberMapper.getTotalMemberTotalNurse(mgtBaseShopDto);
+        if (nurseTotalVos != null && nurseTotalVos.size() > 0) {
+            String[] nurseKey = new String[nurseTotalVos.size()];
+            Integer[] nurseValue = new Integer[nurseTotalVos.size()];
+            // 遍历不同护理类型的会员数列表,设置护理类型数组和对应的会员数数组
+            for (int i = 0; i < nurseTotalVos.size(); i++) {
+                nurseKey[i] = nurseTotalVos.get(i).getMapKey();
+                nurseValue[i] = nurseTotalVos.get(i).getMapValue();
+            }
+            mgtTotalMemberTotalVo.setNurseKey(nurseKey);
+            mgtTotalMemberTotalVo.setNurseValue(nurseValue);
+        }
+        // 获取不同商品类型的会员数
+        List<MgtMapTotalVo> goodsTypeTotalVos = memberMapper.getTotalMemberTotalGoodsType(mgtBaseShopDto);
+        if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) {
+            String[] goodsTypeKey = new String[goodsTypeTotalVos.size()];
+            Integer[] goodsTypeValue = new Integer[goodsTypeTotalVos.size()];
+            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
+            for (int i = 0; i < goodsTypeTotalVos.size(); i++) {
+                goodsTypeKey[i] = goodsTypeTotalVos.get(i).getMapKey();
+                goodsTypeValue[i] = goodsTypeTotalVos.get(i).getMapValue();
+            }
+            mgtTotalMemberTotalVo.setGoodsTypeKey(goodsTypeKey);
+            mgtTotalMemberTotalVo.setGoodsTypeValue(goodsTypeValue);
+        }
+        // 获取不同活跃度的会员数
+        List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
+        if (activenessList != null && !activenessList.isEmpty()) {
+            String[] activenessKey = new String[activenessList.size()];
+            Integer[] activenessValue = new Integer[activenessList.size()];
+            Activeness activeness;
+            String actStartDate;
+            String actEndDate;
+            Integer count;
+            // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
+            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()));
+                count = memberMapper.getTotalMemberTotalActiveness(shopId, actStartDate, actEndDate);
+                activenessKey[i] = activeness.getActivenessName();
+                activenessValue[i] = count;
+            }
+            mgtTotalMemberTotalVo.setActivenessKey(activenessKey);
+            mgtTotalMemberTotalVo.setActivenessValue(activenessValue);
+        }
+        //获取会员消费排名
+        List<MgtMapTotalVo> memberPayList = memberMapper.getTotalMemberRankPay(mgtBaseShopDto);
+        if (memberPayList != null && memberPayList.size() > 0) {
+            String[] memberPayKey = new String[memberPayList.size()];
+            Integer[] memberPayValue = new Integer[memberPayList.size()];
+            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
+            for (int i = 0; i < memberPayList.size(); i++) {
+                memberPayKey[i] = memberPayList.get(i).getMapKey();
+                memberPayValue[i] = memberPayList.get(i).getMapValue();
+            }
+            mgtTotalMemberTotalVo.setOrderRankKey(memberPayKey);
+            mgtTotalMemberTotalVo.setOrderRankValue(memberPayValue);
+        }
+        //获取来源渠道排名
+        List<MgtMapTotalVo> customerSourceList = memberMapper.getTotalMemberRankCustomerSource(mgtBaseShopDto);
+        if (customerSourceList != null && customerSourceList.size() > 0) {
+            String[] customerSourceKey = new String[customerSourceList.size()];
+            Integer[] customerSourceValue = new Integer[customerSourceList.size()];
+            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
+            for (int i = 0; i < customerSourceList.size(); i++) {
+                customerSourceKey[i] = customerSourceList.get(i).getMapKey();
+                customerSourceValue[i] = customerSourceList.get(i).getMapValue();
+            }
+            mgtTotalMemberTotalVo.setCustomerSourceKey(customerSourceKey);
+            mgtTotalMemberTotalVo.setCustomerSourceValue(customerSourceValue);
+        }
+        // 返回总会员数和不同类型会员数的统计结果
         return mgtTotalMemberTotalVo;
     }
 }
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 3f67897..97a85f3 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
@@ -381,10 +381,10 @@
         </if>
     </select>
 
-    <select id="getTotalMemberTotalNurse" resultType="com.ruoyi.member.domain.vo.MgtNurseTotalVo">
-        SELECT member_nurse nurse, COUNT(*) AS userCount
+    <select id="getTotalMemberTotalNurse" resultType="com.ruoyi.member.domain.vo.MgtMapTotalVo">
+        SELECT member_nurse mapKey, COUNT(*) mapValue
         FROM (
-            SELECT member_id, SUBSTRING_INDEX(SUBSTRING_INDEX(member_nurse, ',', numbers.n), ',', -1) user_tag
+            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 != ''">
@@ -401,4 +401,78 @@
         GROUP BY member_nurse
         ORDER BY count DESC;
     </select>
+
+    <select id="getTotalMemberTotalGoodsType" resultType="com.ruoyi.member.domain.vo.MgtMapTotalVo">
+        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.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 != ''
+        GROUP BY goods_type
+        ORDER BY count DESC;
+    </select>
+
+    <select id="getTotalMemberTotalActiveness" 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 del_Flag = 0
+        <if test="shopId != null and shopId != ''">
+            AND relation_shop_id = #{shopId}
+        </if>
+        <if test="actStartDate != null and actStartDate != ''">
+            AND tmt.last_pay_time &gt;= #{actStartDate}
+        </if>
+        <if test="actEndDate != null and actEndDate != ''">
+            AND tmt.last_pay_time &lt;= #{actEndDate}
+        </if>
+    </select>
+
+    <select id="getTotalMemberRankPay" resultType="com.ruoyi.member.domain.vo.MgtMapTotalVo">
+        SELECT
+        tm.nick_name mapKey,
+        tmt.total_pay_count mapValue
+        FROM t_member tm WHERE del_flag = 0
+        INNER JOIN t_member_total tmt ON tm.member_id = tmt.member_id
+        <if test="param.shopId != null and param.shopId != ''">
+            AND tm.relation_shop_id = #{param.shopId}
+        </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 10
+    </select>
+
+    <select id="getTotalMemberRankCustomerSource" resultType="com.ruoyi.member.domain.vo.MgtMapTotalVo">
+        SELECT
+        tm.customer_source mapKey,
+        SUM(tm.customer_source) mapValue
+        FROM t_member tm WHERE del_flag = 0
+        <if test="param.shopId != null and param.shopId != ''">
+            AND tm.relation_shop_id = #{param.shopId}
+        </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 SUM(tm.customer_source) DESC LIMIT 10
+    </select>
 </mapper>
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtTotalController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtTotalController.java
new file mode 100644
index 0000000..2fc39ae
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtTotalController.java
@@ -0,0 +1,41 @@
+package com.ruoyi.order.controller.management;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.order.domain.vo.MgtTotalOrderTotalVo;
+import com.ruoyi.order.service.order.OrderService;
+import com.ruoyi.system.api.domain.dto.MgtBaseShopDto;
+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;
+
+/**
+ * @author jqs34
+ * @version 1.0
+ * @classname MgtTotalController
+ * @description: TODO
+ * @date 2023 2023/6/19 22:18
+ */
+@Api(value = "管理台订单统计相关接口", tags = "管理台订单统计相关接口", description = "管理台订单统计相关接口")
+@RestController
+@RequestMapping("/mgt/total")
+public class MgtTotalController {
+
+    @Resource
+    private OrderService orderService;
+
+    @RequestMapping(value = "/getTotalOrderTotal", method = RequestMethod.POST)
+    @ApiOperation(value = "获取会员人数统计")
+    public R<MgtTotalOrderTotalVo> getTotalOrderTotal(@RequestBody MgtBaseShopDto mgtBaseShopDto) {
+        Long userId = SecurityUtils.getUserId();
+        mgtBaseShopDto.setUserId(userId);
+        MgtTotalOrderTotalVo totalOrderTotalVo = orderService.getTotalOrderTotal(mgtBaseShopDto);
+        return R.ok(totalOrderTotalVo);
+    }
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtMapTotalVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtMapTotalVo.java
new file mode 100644
index 0000000..c454cd6
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtMapTotalVo.java
@@ -0,0 +1,27 @@
+package com.ruoyi.order.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @ClassName MgtNurseTotalVo
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/6/19 18:06
+ * @Version 1.0
+ */
+@Data
+public class MgtMapTotalVo {
+
+    @ApiModelProperty(value = "mapKey")
+    private String mapKey;
+
+    @ApiModelProperty(value = "mapValueFirst")
+    private Integer mapValueFirst;
+
+    @ApiModelProperty(value = "mapValueSecond")
+    private BigDecimal mapValueSecond;
+
+}
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
new file mode 100644
index 0000000..9395786
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalOrderTotalVo.java
@@ -0,0 +1,89 @@
+package com.ruoyi.order.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author jqs34
+ * @version 1.0
+ * @classname MgtTotalOrderTotalVo
+ * @description: TODO
+ * @date 2023 2023/6/19 21:56
+ */
+@Data
+public class MgtTotalOrderTotalVo {
+
+    @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;
+
+    @ApiModelProperty(value = "订单数量key")
+    private String[] orderTotalKey;
+
+    @ApiModelProperty(value = "订单数量value")
+    private Integer[] orderTotalValue;
+
+    @ApiModelProperty(value = "订单数量value")
+    private BigDecimal[] orderMoneyValue;
+
+    @ApiModelProperty(value = "商品类型数量key")
+    private String[] goodsTypeKey;
+
+    @ApiModelProperty(value = "商品类型数量value")
+    private Integer[] goodsTypeTotalValue;
+
+    @ApiModelProperty(value = "商品类型金额value")
+    private BigDecimal[] goodsTypeMoneyValue;
+
+    @ApiModelProperty(value = "商品排行key")
+    private String[] goodsRankKey;
+
+    @ApiModelProperty(value = "商品排行value")
+    private BigDecimal[] goodsRankValue;
+
+    @ApiModelProperty(value = "来源排行key")
+    private String[] orderFromRankKey;
+
+    @ApiModelProperty(value = "来源排行value")
+    private BigDecimal[] orderFromRankValue;
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
index f494453..8f7ae89 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
@@ -5,6 +5,7 @@
 import com.ruoyi.order.domain.dto.*;
 import com.ruoyi.order.domain.pojo.order.Order;
 import com.ruoyi.order.domain.vo.*;
+import com.ruoyi.system.api.domain.dto.MgtBaseShopDto;
 import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -136,4 +137,59 @@
      * @date 2023/6/18 17:20
      */
     MgtBulletinBoardVo boardOrderTotal();
+
+    /**
+    * @description getTotalOrderTotal
+    * @param mgtBaseShopDto
+    * @return MgtTotalOrderTotalVo
+    * @author jqs34
+    * @date 2023/6/19 22:24
+    */
+    MgtTotalOrderTotalVo getTotalOrderTotalOrderFrom(@Param("param") MgtBaseShopDto mgtBaseShopDto);
+
+    /**
+     * @description getTotalOrderTotal
+     * @param mgtBaseShopDto
+     * @return MgtTotalOrderTotalVo
+     * @author jqs34
+     * @date 2023/6/19 22:24
+     */
+    MgtTotalOrderTotalVo getTotalOrderTotalGoodsType(@Param("param") MgtBaseShopDto mgtBaseShopDto);
+
+    /**
+    * @description getTotalOrderTotal
+    * @param mgtBaseShopDto
+    * @return List<MgtMapTotalVo>
+    * @author jqs34
+    * @date 2023/6/19 22:48
+    */
+    List<MgtMapTotalVo> listTotalOrderTotal(@Param("param") MgtBaseShopDto mgtBaseShopDto);
+
+    /**
+     * @description getTotalOrderTotal
+     * @param mgtBaseShopDto
+     * @return List<MgtMapTotalVo>
+     * @author jqs34
+     * @date 2023/6/19 22:48
+     */
+    List<MgtMapTotalVo> listTotalOrderTotalGoodsType(@Param("param") MgtBaseShopDto mgtBaseShopDto);
+
+
+    /**
+     * @description getTotalOrderTotal
+     * @param mgtBaseShopDto
+     * @return List<MgtMapTotalVo>
+     * @author jqs34
+     * @date 2023/6/19 22:48
+     */
+    List<MgtMapTotalVo> listTotalOrderTotalGoodsRank(@Param("param") MgtBaseShopDto mgtBaseShopDto);
+
+    /**
+     * @description getTotalOrderTotal
+     * @param mgtBaseShopDto
+     * @return List<MgtMapTotalVo>
+     * @author jqs34
+     * @date 2023/6/19 22:48
+     */
+    List<MgtMapTotalVo> listTotalOrderTotalOrderFrom(@Param("param") MgtBaseShopDto mgtBaseShopDto);
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
index 9189131..cf27bba 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -1264,4 +1264,88 @@
         MgtBulletinBoardVo mgtBulletinBoardVo = orderMapper.boardOrderTotal();
         return mgtBulletinBoardVo;
     }
+
+    /**
+     * @description getTotalOrderTotal
+     * @param mgtBaseShopDto
+     * @return MgtTotalOrderTotalVo
+     * @author jqs34
+     * @date 2023/6/19 22:23
+     */
+    @Override
+    public MgtTotalOrderTotalVo getTotalOrderTotal(MgtBaseShopDto mgtBaseShopDto){
+        MgtTotalOrderTotalVo mgtTotalOrderTotalVo = orderMapper.getTotalOrderTotalOrderFrom(mgtBaseShopDto);
+        //MgtTotalOrderTotalVo mgtTotalOrderTotalVoGoodsType = orderMapper.getTotalOrderTotalGoodsType(mgtBaseShopDto);
+        List<MgtMapTotalVo> mgtMapTotalVos = orderMapper.listTotalOrderTotal(mgtBaseShopDto);
+        if (mgtMapTotalVos != null && mgtMapTotalVos.size() > 0) {
+            String[] orderTotalKey = new String[mgtMapTotalVos.size()];
+            Integer[] orderTotalValue = new Integer[mgtMapTotalVos.size()];
+            BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalVos.size()];
+            for (int i = 0; i < mgtMapTotalVos.size(); i++) {
+                orderTotalKey[i] = mgtMapTotalVos.get(i).getMapKey();
+                orderTotalValue[i] = mgtMapTotalVos.get(i).getMapValueFirst();
+                orderMoneyValue[i] = mgtMapTotalVos.get(i).getMapValueSecond();
+            }
+            mgtTotalOrderTotalVo.setOrderTotalKey(orderTotalKey);
+            mgtTotalOrderTotalVo.setOrderTotalValue(orderTotalValue);
+            mgtTotalOrderTotalVo.setOrderMoneyValue(orderMoneyValue);
+        }
+        //获取商品分类销售数据
+        List<MgtMapTotalVo> mgtMapTotalVoGoodsType = orderMapper.listTotalOrderTotalGoodsType(mgtBaseShopDto);
+        if (mgtMapTotalVoGoodsType != null && mgtMapTotalVoGoodsType.size() > 0) {
+            String[] goodsTypeKey = new String[mgtMapTotalVoGoodsType.size()];
+            Integer[] goodsTypeTotalValue = new Integer[mgtMapTotalVoGoodsType.size()];
+            BigDecimal[] goodsTypeMoneyValue = new BigDecimal[mgtMapTotalVoGoodsType.size()];
+            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
+            for (int i = 0; i < mgtMapTotalVoGoodsType.size(); i++) {
+                goodsTypeTotalValue[i] = mgtMapTotalVoGoodsType.get(i).getMapValueFirst();
+                goodsTypeMoneyValue[i] = mgtMapTotalVoGoodsType.get(i).getMapValueSecond();
+                if(mgtMapTotalVoGoodsType.get(i).getMapKey().equals("1")){
+                    goodsTypeKey[i] = "周期";
+                    mgtTotalOrderTotalVo.setCycleTotal(mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
+                    mgtTotalOrderTotalVo.setCycleMoney(mgtMapTotalVoGoodsType.get(i).getMapValueSecond());
+                }else if(mgtMapTotalVoGoodsType.get(i).getMapKey().equals("2")){
+                    goodsTypeKey[i] = "服务";
+                    mgtTotalOrderTotalVo.setServiceTotal(mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
+                    mgtTotalOrderTotalVo.setServiceMoney(mgtMapTotalVoGoodsType.get(i).getMapValueSecond());
+                }else if(mgtMapTotalVoGoodsType.get(i).getMapKey().equals("3")){
+                    goodsTypeKey[i] = "体验";
+                    mgtTotalOrderTotalVo.setExperienceTotal(mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
+                    mgtTotalOrderTotalVo.setExperienceMoney(mgtMapTotalVoGoodsType.get(i).getMapValueSecond());
+                }else if(mgtMapTotalVoGoodsType.get(i).getMapKey().equals("4")){
+                    goodsTypeKey[i] = "单品";
+                }
+            }
+            mgtTotalOrderTotalVo.setGoodsTypeKey(goodsTypeKey);
+            mgtTotalOrderTotalVo.setGoodsTypeTotalValue(goodsTypeTotalValue);
+            mgtTotalOrderTotalVo.setGoodsTypeMoneyValue(goodsTypeMoneyValue);
+        }
+        //获取商品销售排名
+        List<MgtMapTotalVo> goodsRankList = orderMapper.listTotalOrderTotalGoodsRank(mgtBaseShopDto);
+        if (goodsRankList != null && goodsRankList.size() > 0) {
+            String[] goodsRankKey = new String[goodsRankList.size()];
+            BigDecimal[] goodsRankValue = new BigDecimal[goodsRankList.size()];
+            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
+            for (int i = 0; i < goodsRankList.size(); i++) {
+                goodsRankKey[i] = goodsRankList.get(i).getMapKey();
+                goodsRankValue[i] = goodsRankList.get(i).getMapValueSecond();
+            }
+            mgtTotalOrderTotalVo.setGoodsRankKey(goodsRankKey);
+            mgtTotalOrderTotalVo.setGoodsRankValue(goodsRankValue);
+        }
+        //获取来源销售排名
+        List<MgtMapTotalVo> orderFromList = orderMapper.listTotalOrderTotalOrderFrom(mgtBaseShopDto);
+        if (orderFromList != null && orderFromList.size() > 0) {
+            String[] orderFromKey = new String[orderFromList.size()];
+            BigDecimal[] orderFromValue = new BigDecimal[orderFromList.size()];
+            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
+            for (int i = 0; i < orderFromList.size(); i++) {
+                orderFromKey[i] = orderFromList.get(i).getMapKey();
+                orderFromValue[i] = orderFromList.get(i).getMapValueSecond();
+            }
+            mgtTotalOrderTotalVo.setOrderFromRankKey(orderFromKey);
+            mgtTotalOrderTotalVo.setOrderFromRankValue(orderFromValue);
+        }
+        return mgtTotalOrderTotalVo;
+    }
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
index 0685248..a20206a 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -6,6 +6,7 @@
 import com.ruoyi.order.domain.pojo.order.Order;
 import com.ruoyi.order.domain.vo.*;
 import com.ruoyi.system.api.domain.dto.AppBaseGetDto;
+import com.ruoyi.system.api.domain.dto.MgtBaseShopDto;
 import com.ruoyi.system.api.domain.vo.AppOrderTotalVo;
 import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo;
 import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
@@ -185,4 +186,13 @@
     * @date 2023/6/18 17:20
     */
     MgtBulletinBoardVo boardOrderTotal();
+
+    /**
+    * @description getTotalOrderTotal
+    * @param mgtBaseShopDto
+    * @return MgtTotalOrderTotalVo
+    * @author jqs34
+    * @date 2023/6/19 22:23
+    */
+    MgtTotalOrderTotalVo getTotalOrderTotal(MgtBaseShopDto mgtBaseShopDto);
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
index 1276082..69e80e2 100644
--- a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
+++ b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -615,4 +615,125 @@
         FROM t_order
         WHERE del_flag = 0
     </select>
+
+    <select id="getTotalOrderTotalOrderFrom" resultType="com.ruoyi.order.domain.vo.MgtTotalOrderTotalVo">
+        SELECT
+        COUNT(order_id) orderTotal,
+        SUM(CASE WHEN order_from = 1 THEN 1 ELSE 0 END) onlineTotal,
+        SUM(CASE WHEN order_from = 3 THEN 1 ELSE 0 END) offlineTotal,
+        SUM(CASE WHEN order_from = 2 THEN 1 ELSE 0 END) activityTotal,
+        IFNULL(SUM(order_money),0) orderMoney,
+        SUM(CASE WHEN order_from = 1 THEN order_money ELSE 0 END) onlineMoney,
+        SUM(CASE WHEN order_from = 3 THEN order_money ELSE 0 END) offlineMoney,
+        SUM(CASE WHEN order_from = 2 THEN order_money ELSE 0 END) activityMoney
+        FROM t_order WHERE del_flag = 0
+        <if test="param.shopId != null and param.shopId != ''">
+            AND shop_id = #{param.shopId}
+        </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="getTotalOrderTotalGoodsType" resultType="com.ruoyi.order.domain.vo.MgtTotalOrderTotalVo">
+        SELECT
+        SUM(CASE WHEN tog.goods_type = 1 THEN 1 ELSE 0 END) cycleTotal,
+        SUM(CASE WHEN tog.goods_type = 3 THEN 1 ELSE 0 END) experienceTotal,
+        SUM(CASE WHEN tog.goods_type = 2 THEN 1 ELSE 0 END) serviceTotal,
+        SUM(CASE WHEN tog.goods_type = 1 THEN tog.goods_total_money ELSE 0 END) cycleMoney,
+        SUM(CASE WHEN tog.goods_type = 3 THEN tog.goods_total_money ELSE 0 END) experienceMoney,
+        SUM(CASE WHEN tog.goods_type = 2 THEN tog.goods_total_money ELSE 0 END) serviceMoney
+        FROM t_order toc
+        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
+        WHERE toc.del_flag = 0
+        <if test="param.shopId != null and param.shopId != ''">
+            AND toc.shop_id = #{param.shopId}
+        </if>
+        <if test="param.startDate!=null and param.startDate!=''">
+            AND toc.create_time &gt;= #{param.startDate}
+        </if>
+        <if test="param.endDate!=null and param.endDate!=''">
+            AND toc.create_time &lt;= #{param.endDate}
+        </if>
+    </select>
+
+    <select id="listTotalOrderTotal" resultType="com.ruoyi.order.domain.vo.MgtMapTotalVo">
+        SELECT
+            DATE_FORMAT(create_time, '%Y-%m-%d') AS mapKey,
+            COUNT(order_id) AS mapValueFirst,
+            IFNULL(SUM(order_money),0) AS mapValueSecond
+        FROM
+            t_order
+        WHERE
+            del_flag = 0
+          AND create_time >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
+        <if test="param.shopId != null and param.shopId != ''">
+            AND shop_id = #{param.shopId}
+        </if>
+        GROUP BY
+            order_date
+        ORDER BY
+            order_date ASC
+    </select>
+
+    <select id="listTotalOrderTotalGoodsType" resultType="com.ruoyi.order.domain.vo.MgtMapTotalVo">
+        SELECT
+        tog.goods_type mapKey,
+        COUNT(DISTINCT toc.order_id) AS mapValueFirst,
+        IFNULL(SUM(tog.goods_total_money),0) AS mapValueSecond
+        FROM
+        t_order toc
+        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
+        WHERE toc.del_flag = 0
+        <if test="param.shopId != null and param.shopId != ''">
+            AND toc.shop_id = #{param.shopId}
+        </if>
+        GROUP BY tog.goods_type
+    </select>
+
+    <select id="listTotalOrderTotalGoodsRank" resultType="com.ruoyi.order.domain.vo.MgtMapTotalVo">
+        SELECT
+        tog.goods_name mapKey,
+        IFNULL(SUM(tog.goods_total_money),0) mapValueSecond
+        FROM t_order toc
+        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
+        WHERE toc.del_flag = 0
+        <if test="param.shopId != null and param.shopId != ''">
+            AND toc.shop_id = #{param.shopId}
+        </if>
+        <if test="param.startDate!=null and param.startDate!=''">
+            AND toc.create_time &gt;= #{param.startDate}
+        </if>
+        <if test="param.endDate!=null and param.endDate!=''">
+            AND toc.create_time &lt;= #{param.endDate}
+        </if>
+        GROUP BY tog.goods_name
+        ORDER BY SUM(tog.goods_total_money) DESC LIMIT 10
+    </select>
+
+    <select id="listTotalOrderTotalOrderFrom" resultType="com.ruoyi.order.domain.vo.MgtMapTotalVo">
+        SELECT
+        CASE toc.order_from
+        WHEN 1 THEN "商城订单"
+        WHEN 2 THEN "秒杀活动订单"
+        WHEN 3 THEN "线下创建订单"
+        END mapKey,
+        IFNULL(SUM(toc.order_money),0) mapValueSecond
+        FROM t_order toc
+        WHERE toc.del_flag = 0
+        <if test="param.shopId != null and param.shopId != ''">
+            AND toc.shop_id = #{param.shopId}
+        </if>
+        <if test="param.startDate!=null and param.startDate!=''">
+            AND toc.create_time &gt;= #{param.startDate}
+        </if>
+        <if test="param.endDate!=null and param.endDate!=''">
+            AND toc.create_time &lt;= #{param.endDate}
+        </if>
+        GROUP BY toc.order_from
+        ORDER BY SUM(toc.order_money) DESC LIMIT 10
+    </select>
 </mapper>
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/sys/SysUserMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/sys/SysUserMapper.xml
index a9827e6..65875e2 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/sys/SysUserMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/sys/SysUserMapper.xml
@@ -11,7 +11,7 @@
         <result property="nickName"     column="nick_name"    />
         <result property="email"        column="email"        />
         <result property="phonenumber"  column="phonenumber"  />
-		<result property="userType"     column="user_type"          />
+		<result property="userType"     column="user_type"    />
         <result property="sex"          column="sex"          />
         <result property="avatar"       column="avatar"       />
         <result property="password"     column="password"     />

--
Gitblit v1.7.1