jiangqs
2023-06-19 f0acb97e91f456c9b402977416e73951b708a157
营销统计
1个文件已删除
9个文件已修改
4个文件已添加
709 ■■■■■ 已修改文件
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtMapTotalVo.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtNurseTotalVo.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtTotalMemberTotalVo.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtTotalController.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtMapTotalVo.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalOrderTotalVo.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/mapper/sys/SysUserMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtMapTotalVo.java
New file
@@ -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;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtNurseTotalVo.java
File was deleted
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;
}
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);
}
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()};
        // 设置年龄段数组和不同年龄段的会员数数组
        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;
    }
}
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>
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtTotalController.java
New file
@@ -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);
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtMapTotalVo.java
New file
@@ -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;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalOrderTotalVo.java
New file
@@ -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;
}
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);
}
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;
    }
}
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);
}
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>
ruoyi-modules/ruoyi-system/src/main/resources/mapper/sys/SysUserMapper.xml