jiangqs
2023-07-04 9c6fd541f0aa8e384c26998597a6788bb77eca8d
商户端营销统计
20个文件已修改
2个文件已添加
610 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MerTotalDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MerOrderAgeUserVo.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerTotalController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerTotalController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtActivenessListVo.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtCustomConfigVo.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/ActivenessService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/CustomConfigService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/ActivenessServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/CustomConfigServiceImpl.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MerTotalDto.java
@@ -29,4 +29,7 @@
    @ApiModelProperty(value = "商户id集合",hidden = true)
    private List<Long> shopIdList;
    @ApiModelProperty(value = "年龄层",hidden = true)
    private Integer ageType;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MerOrderAgeUserVo.java
New file
@@ -0,0 +1,23 @@
package com.ruoyi.system.api.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @ClassName MerOrderAgeUserVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/7/4 9:47
 * @Version 1.0
 */
@Data
public class MerOrderAgeUserVo {
    @ApiModelProperty(value = "年龄层")
    private Integer ageType;
    @ApiModelProperty(value = "用户id列表")
    private List<Long> userIdList;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java
@@ -112,6 +112,11 @@
                return R.fail("更新会员统计失败:" + throwable.getMessage());
            }
            @Override
            public R<List<MerOrderAgeUserVo>> listOrderAgeUser(MerTotalDto merTotalDto) {
                return R.fail("获取年龄段userId失败:" + throwable.getMessage());
            }
        };
    }
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java
@@ -162,5 +162,13 @@
    public R changeMemberTotal(@RequestBody MemberTotalChangeDto memberTotalChangeDto);
    /**
     * @description  获取各年龄层userId
     * @author  jqs
     * @date    2023/7/4 9:49
     * @param merTotalDto
     * @return  R<MerOrderAgeUserVo>
     */
    @PostMapping("/listOrderAgeUser")
    public R<List<MerOrderAgeUserVo>> listOrderAgeUser(@RequestBody MerTotalDto merTotalDto);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerTotalController.java
@@ -51,7 +51,7 @@
    }
    @RequestMapping(value = "/getMerMemberSourceTotal", method = RequestMethod.POST)
    @ApiOperation(value = "获取商户会员人数统计")
    @ApiOperation(value = "获取商户会员来源统计")
    public R<MerMemberSourceTotalVo> getMerMemberSourceTotal(@RequestBody MerTotalDto merTotalDto) {
        Long userId = SecurityUtils.getUserId();
        merTotalDto.setUserId(userId);
@@ -60,7 +60,7 @@
    }
    @RequestMapping(value = "/getMerMemberRecommendTotal", method = RequestMethod.POST)
    @ApiOperation(value = "获取商户会员人数统计")
    @ApiOperation(value = "获取商户会员推荐统计")
    public R<MerMemberRecommendTotalVo> getMerMemberRecommendTotal(@RequestBody MerTotalDto merTotalDto) {
        Long userId = SecurityUtils.getUserId();
        merTotalDto.setUserId(userId);
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
@@ -250,4 +250,18 @@
        memberService.changeMemberTotal(memberTotalChangeDto);
        return R.ok();
    }
    /**
     * @description  获取各年龄层userId
     * @author  jqs
     * @date    2023/7/4 9:49
     * @param merTotalDto
     * @return  R<MerOrderAgeUserVo>
     */
    @PostMapping("/listOrderAgeUser")
    public R<List<MerOrderAgeUserVo>> listOrderAgeUser(@RequestBody MerTotalDto merTotalDto)
    {
        List<MerOrderAgeUserVo> orderAgeUserVoList = memberService.listOrderAgeUser(merTotalDto);
        return R.ok(orderAgeUserVoList);
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java
@@ -365,6 +365,15 @@
     * @return  List<MgtMapIntTotalVo>
     */
    List<MgtMapIntTotalVo> getMerMemberRecommendRank(@Param("param") MerTotalDto merTotalDto);
    /**
     * @description  获取各年龄层用户
     * @author  jqs
     * @date    2023/7/4 9:55
     * @param ageType
     * @return  List<Long>
     */
    List<Long> listOrderAgeUser(@Param("param") MerTotalDto merTotalDto);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -1501,4 +1501,47 @@
        }
        return memberRecommendTotalVo;
    }
    /**
     * @description  获取各年龄层用户
     * @author  jqs
     * @date    2023/7/4 9:50
     * @param merTotalDto
     * @return  MerOrderAgeUserVo
     */
    @Override
    public List<MerOrderAgeUserVo> listOrderAgeUser(MerTotalDto merTotalDto){
        List<MerOrderAgeUserVo> orderAgeUserVoList = new ArrayList<>();
        MerOrderAgeUserVo merOrderAgeUserVo = new MerOrderAgeUserVo();
        merTotalDto.setAgeType(1);
        List<Long> userIdList = memberMapper.listOrderAgeUser(merTotalDto);
        merOrderAgeUserVo.setAgeType(1);
        merOrderAgeUserVo.setUserIdList(userIdList);
        orderAgeUserVoList.add(merOrderAgeUserVo);
        merOrderAgeUserVo = new MerOrderAgeUserVo();
        merTotalDto.setAgeType(2);
        userIdList = memberMapper.listOrderAgeUser(merTotalDto);
        merOrderAgeUserVo.setAgeType(2);
        merOrderAgeUserVo.setUserIdList(userIdList);
        orderAgeUserVoList.add(merOrderAgeUserVo);
        merOrderAgeUserVo = new MerOrderAgeUserVo();
        merTotalDto.setAgeType(3);
        userIdList = memberMapper.listOrderAgeUser(merTotalDto);
        merOrderAgeUserVo.setAgeType(3);
        merOrderAgeUserVo.setUserIdList(userIdList);
        orderAgeUserVoList.add(merOrderAgeUserVo);
        merOrderAgeUserVo = new MerOrderAgeUserVo();
        merTotalDto.setAgeType(4);
        userIdList = memberMapper.listOrderAgeUser(merTotalDto);
        merOrderAgeUserVo.setAgeType(4);
        merOrderAgeUserVo.setUserIdList(userIdList);
        orderAgeUserVoList.add(merOrderAgeUserVo);
        merOrderAgeUserVo = new MerOrderAgeUserVo();
        merTotalDto.setAgeType(5);
        userIdList = memberMapper.listOrderAgeUser(merTotalDto);
        merOrderAgeUserVo.setAgeType(4);
        merOrderAgeUserVo.setUserIdList(userIdList);
        orderAgeUserVoList.add(merOrderAgeUserVo);
        return orderAgeUserVoList;
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
@@ -312,4 +312,13 @@
     * @return  MerMemberRecommendTotalVo
     */
    MerMemberRecommendTotalVo getMerMemberRecommendTotal(MerTotalDto merTotalDto);
    /**
     * @description  获取各年龄层用户
     * @author  jqs
     * @date    2023/7/4 9:50
     * @param merTotalDto
     * @return  MerOrderAgeUserVo
     */
    List<MerOrderAgeUserVo> listOrderAgeUser(MerTotalDto merTotalDto);
}
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -907,4 +907,41 @@
        GROUP BY tm.referrer
        ORDER BY COUNT(tm.user_id) DESC LIMIT 15
    </select>
    <select id="listOrderAgeUser" resultType="java.lang.Long">
        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.ageType !=null and param.ageType == 1">
            AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20
        </if>
        <if test="param.ageType !=null and param.ageType == 2">
            AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 30
        </if>
        <if test="param.ageType !=null and param.ageType == 3">
            AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 31 AND 40
        </if>
        <if test="param.ageType !=null and param.ageType == 4">
            AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 41 AND 50
        </if>
        <if test="param.ageType !=null and param.ageType == 5">
            AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) &gt;= 51
        </if>
    </select>
</mapper>
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerTotalController.java
@@ -2,7 +2,7 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.domain.vo.MerOrderTotalVo;
import com.ruoyi.order.domain.vo.*;
import com.ruoyi.order.service.order.OrderService;
import com.ruoyi.system.api.domain.dto.MerTotalDto;
import io.swagger.annotations.Api;
@@ -38,6 +38,39 @@
        return R.ok(orderTotalVo);
    }
    @RequestMapping(value = "/getMerOrderDistributionTotal", method = RequestMethod.POST)
    @ApiOperation(value = "商户获取订单分布统计")
    public R<MerOrderDistributionTotalVo> getMerOrderDistributionTotal(@RequestBody MerTotalDto merTotalDto) {
        Long userId = SecurityUtils.getUserId();
        merTotalDto.setUserId(userId);
        MerOrderDistributionTotalVo orderTotalVo = orderService.MerOrderDistributionTotalVo(merTotalDto);
        return R.ok(orderTotalVo);
    }
    @RequestMapping(value = "/getMerOrderTypeTotal", method = RequestMethod.POST)
    @ApiOperation(value = "商户获取销售占比统计")
    public R<MerOrderTypeTotalVo> getMerOrderTypeTotal(@RequestBody MerTotalDto merTotalDto) {
        Long userId = SecurityUtils.getUserId();
        merTotalDto.setUserId(userId);
        MerOrderTypeTotalVo orderTotalVo = orderService.getMerOrderTypeTotal(merTotalDto);
        return R.ok(orderTotalVo);
    }
    @RequestMapping(value = "/getMerOrderGoodsRank", method = RequestMethod.POST)
    @ApiOperation(value = "商户获取销售排行")
    public R<MerOrderGoodsRankVo> getMerOrderGoodsRank(@RequestBody MerTotalDto merTotalDto) {
        Long userId = SecurityUtils.getUserId();
        merTotalDto.setUserId(userId);
        MerOrderGoodsRankVo orderTotalVo = orderService.getMerOrderGoodsRank(merTotalDto);
        return R.ok(orderTotalVo);
    }
    @RequestMapping(value = "/getMerOrderFromRank", method = RequestMethod.POST)
    @ApiOperation(value = "商户获取渠道排行")
    public R<MerOrderFromRankVo> getMerOrderFromRank(@RequestBody MerTotalDto merTotalDto) {
        Long userId = SecurityUtils.getUserId();
        merTotalDto.setUserId(userId);
        MerOrderFromRankVo orderTotalVo = orderService.getMerOrderFromRank(merTotalDto);
        return R.ok(orderTotalVo);
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
@@ -442,10 +442,47 @@
    /**
     * @description getTotalOrderTotalOrderFrom
     * @param mgtBaseShopDto
     * @param merTotalDto
     * @return MgtTotalOrderTotalVo
     * @author jqs34
     * @date 2023/6/19 22:24
     */
    MerOrderTotalVo getMerOrderTotalOrderFrom(@Param("param") MgtBaseShopDto mgtBaseShopDto);
    MerOrderTotalVo getMerOrderTotalOrderFrom(@Param("param")MerTotalDto merTotalDto);
    /**
     * @description 获取各年龄层统计
     * @author  jqs
     * @date    2023/7/4 10:27
     * @param userIdList
     * @return  MgtMapTotalPlusVo
     */
    MgtMapTotalPlusVo listMerOrderDistributionTotal(@Param("userIdList")List<Long> userIdList);
    /**
     * @description 商户获取销售占比统计
     * @param merTotalDto
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
    List<MgtMapTotalPlusVo> listMerOrderTotalGoodsType(@Param("param")MerTotalDto merTotalDto);
    /**
     * @description 商户获取销售排名
     * @param merTotalDto
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
    List<MgtMapBigTotalVo> listMerOrderTotalGoodsRank(@Param("param")MerTotalDto merTotalDto);
    /**
     * @description listTotalOrderTotalOrderFrom
     * @param merTotalDto
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
    List<MgtMapBigTotalVo> listMerOrderTotalOrderFrom(@Param("param")MerTotalDto merTotalDto);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -2053,8 +2053,181 @@
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
        }
        MerOrderTotalVo orderTotalVo = new MerOrderTotalVo();
        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
        }
        MerOrderTotalVo orderTotalVo = orderMapper.getMerOrderTotalOrderFrom(merTotalDto);
        return orderTotalVo;
    }
    /**
     * @description
     * @author  jqs
     * @date    2023/7/4 9:29
     * @param merTotalDto
     * @return  MerOrderDistributionTotalVo
     */
    @Override
    public MerOrderDistributionTotalVo MerOrderDistributionTotalVo(MerTotalDto merTotalDto){
        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
        }
        MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo();
        // 获取订单年龄用户列表
        List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData();
        // 如果订单年龄用户列表不为空
        if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) {
            // 定义变量
            Integer ageType;
            List<Long> userIdList;
            MerOrderAgeUserVo orderAgeUserVo;
            MgtMapTotalPlusVo mgtMapTotalPlusVo;
            String[] orderTotalKey = new String[5];
            Integer[] orderTotalValue = new Integer[5];
            BigDecimal[] orderMoneyValue = new BigDecimal[5];
            // 遍历订单年龄用户列表
            for (int i = 0; i < orderAgeUserVoList.size(); i++) {
                orderAgeUserVo = orderAgeUserVoList.get(i);
                ageType = orderAgeUserVo.getAgeType();
                userIdList = orderAgeUserVo.getUserIdList();
                // 根据年龄类型设置订单总数键
                switch (ageType) {
                    case 1:
                        orderTotalKey[i] = "<20";
                        break;
                    case 2:
                        orderTotalKey[i] = "21-30";
                        break;
                    case 3:
                        orderTotalKey[i] = "31-40";
                        break;
                    case 4:
                        orderTotalKey[i] = "41-50";
                        break;
                    case 5:
                        orderTotalKey[i] = ">50";
                        break;
                }
                // 如果用户ID列表不为空
                if (userIdList != null && !userIdList.isEmpty()) {
                    mgtMapTotalPlusVo = orderMapper.listMerOrderDistributionTotal(userIdList);
                    orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst();
                    orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
                } else {
                    orderTotalValue[i] = 0;
                    orderMoneyValue[i] = BigDecimal.ZERO;
                }
            }
            // 设置订单分布总数对象的属性值
            orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
            orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
            orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
        }
        // 返回订单分布总数对象
        return orderDistributionTotalVo;
    }
    /**
     * @description  商户获取销售占比统计
     * @author  jqs
     * @date    2023/7/4 13:58
     * @param merTotalDto
     * @return  MerOrderTypeTotalVo
     */
    @Override
    public MerOrderTypeTotalVo getMerOrderTypeTotal(MerTotalDto merTotalDto){
        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
        }
        MerOrderTypeTotalVo orderTypeTotalVo = new MerOrderTypeTotalVo();
        //获取商品分类销售数据
        List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listMerOrderTotalGoodsType(merTotalDto);
        List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
        List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>();
        if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) {
            MgtMapIntTotalVo MgtMapIntTotalVo;
            MgtMapBigTotalVo mgtMapBigTotalVo;
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) {
                MgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
                if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                    MgtMapIntTotalVo.setMapKey("周期");
                    mgtMapBigTotalVo.setMapKey("周期");
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    MgtMapIntTotalVo.setMapKey("服务");
                    mgtMapBigTotalVo.setMapKey("服务");
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    MgtMapIntTotalVo.setMapKey("体验");
                    mgtMapBigTotalVo.setMapKey("体验");
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    MgtMapIntTotalVo.setMapKey("单品");
                    mgtMapBigTotalVo.setMapKey("单品");
                }
                goodsTypeTotalList.add(MgtMapIntTotalVo);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
            orderTypeTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
        }
        return orderTypeTotalVo;
    }
    /**
     * @description  商户端获取销售排行
     * @author  jqs
     * @date    2023/7/4 14:23
     * @param merTotalDto
     * @return  MerOrderGoodsRankVo
     */
    @Override
    public MerOrderGoodsRankVo getMerOrderGoodsRank(MerTotalDto merTotalDto){
        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
        }
        MerOrderGoodsRankVo orderGoodsRankVo = new MerOrderGoodsRankVo();
        List<MgtMapBigTotalVo> goodsRankList = orderMapper.listMerOrderTotalGoodsRank(merTotalDto);
        if (goodsRankList != null && goodsRankList.size() > 0) {
            goodsRankList = bigListRemoveNull(goodsRankList);
            orderGoodsRankVo.setGoodsRankList(goodsRankList);
        }
        return orderGoodsRankVo;
    }
    /**
     * @description  商户端获取渠道排行
     * @author  jqs
     * @date    2023/7/4 14:51
     * @param merTotalDto
     * @return  MerOrderFromRankVo
     */
    @Override
    public MerOrderFromRankVo getMerOrderFromRank(MerTotalDto merTotalDto){
        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
        }
        MerOrderFromRankVo merOrderFromRankVo = new MerOrderFromRankVo();
        //获取来源销售排名
        List<MgtMapBigTotalVo> orderFromList = orderMapper.listMerOrderTotalOrderFrom(merTotalDto);
        if (orderFromList != null && orderFromList.size() > 0) {
            orderFromList = bigListRemoveNull(orderFromList);
            merOrderFromRankVo.setOrderFromRankList(orderFromList);
        }
        return merOrderFromRankVo;
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -298,11 +298,47 @@
    BigDecimal getMemberUnpaidOrder(MerBaseDto merBaseDto);
    /**
     * @description  商户获取订单统计
     * @description  商户端获取订单统计
     * @author  jqs
     * @date    2023/7/3 19:29
     * @param merTotalDto
     * @return  MerOrderTotalVo
     */
    MerOrderTotalVo getMerOrderTotal(MerTotalDto merTotalDto);
    /**
     * @description  商户端获取订单分布统计
     * @author  jqs
     * @date    2023/7/4 9:29
     * @param merTotalDto
     * @return  MerOrderDistributionTotalVo
     */
    MerOrderDistributionTotalVo MerOrderDistributionTotalVo(MerTotalDto merTotalDto);
    /**
     * @description  商户端获取销售占比统计
     * @author  jqs
     * @date    2023/7/4 13:58
     * @param merTotalDto
     * @return  MerOrderTypeTotalVo
     */
    MerOrderTypeTotalVo getMerOrderTypeTotal(MerTotalDto merTotalDto);
    /**
     * @description  商户端获取销售排行
     * @author  jqs
     * @date    2023/7/4 14:23
     * @param merTotalDto
     * @return  MerOrderGoodsRankVo
     */
    MerOrderGoodsRankVo getMerOrderGoodsRank(MerTotalDto merTotalDto);
    /**
     * @description  商户端获取渠道排行
     * @author  jqs
     * @date    2023/7/4 14:51
     * @param merTotalDto
     * @return  MerOrderFromRankVo
     */
    MerOrderFromRankVo getMerOrderFromRank(MerTotalDto merTotalDto);
}
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -735,7 +735,7 @@
            AND toc.create_time &lt;= #{param.endDate}
        </if>
        GROUP BY toc.order_from
        ORDER BY SUM(toc.order_money) DESC LIMIT 10
        ORDER BY SUM(toc.order_money) DESC LIMIT 15
    </select>
    <select id="getTotalActivityTotal" resultType="com.ruoyi.order.domain.vo.MgtTotalActivityTotalVo">
@@ -1258,4 +1258,98 @@
            AND create_time &lt;= #{param.endDate}
        </if>
    </select>
    <select id="listMerOrderDistributionTotal" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo">
        SELECT
        COUNT(order_id) AS mapValueFirst,
        IFNULL(SUM(order_money),0) AS mapValueSecond
        FROM t_order
        WHERE del_flag = 0 AND user_id IN
        <foreach collection="userIdList" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>
    <select id="listMerOrderTotalGoodsType" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo">
        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>
        <if test="param.shopIdList != null and param.shopIdList.size() > 0">
            AND toc.shop_id IN
            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </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_type
    </select>
    <select id="listMerOrderTotalGoodsRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapBigTotalVo">
        SELECT
        tog.goods_name mapKey,
        IFNULL(SUM(tog.goods_total_money),0) mapValue
        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.shopIdList != null and param.shopIdList.size() > 0">
            AND toc.shop_id IN
            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </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="listMerOrderTotalOrderFrom" resultType="com.ruoyi.system.api.domain.vo.MgtMapBigTotalVo">
        SELECT
        CASE toc.order_from
        WHEN 1 THEN "商城订单"
        WHEN 2 THEN "秒杀活动订单"
        WHEN 3 THEN "线下创建订单"
        END mapKey,
        IFNULL(SUM(toc.order_money),0) mapValue
        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.shopIdList != null and param.shopIdList.size() > 0">
            AND toc.shop_id IN
            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </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 15
    </select>
</mapper>
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java
@@ -80,17 +80,17 @@
    @RequestMapping(value = "/getCustomConfig", method = RequestMethod.POST)
    @ApiOperation(value = "获取单个配置")
    public R<MgtCustomConfigVo> getCustomConfig(@RequestBody MgtCustomConfigDto mgtCustomConfigDto) {
    public R<List<String>> getCustomConfig(@RequestBody MgtCustomConfigDto mgtCustomConfigDto) {
        Long userId = SecurityUtils.getUserId();
        mgtCustomConfigDto.setUserId(userId);
        MgtCustomConfigVo mgtCustomConfigVo = customConfigService.getCustomConfig(mgtCustomConfigDto);
        List<String> mgtCustomConfigVo = customConfigService.getCustomConfig(mgtCustomConfigDto);
        return R.ok(mgtCustomConfigVo);
    }
    @RequestMapping(value = "/getActivenessList", method = RequestMethod.POST)
    @ApiOperation(value = "获取活跃度")
    public R<List<String>> getActivenessList() {
        List<String> activenessList = activenessService.getActivenessList();
    public R<List<MgtActivenessListVo>> getActivenessList() {
        List<MgtActivenessListVo> activenessList = activenessService.getActivenessList();
        return R.ok(activenessList);
    }
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtActivenessListVo.java
New file
@@ -0,0 +1,22 @@
package com.ruoyi.system.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName MgtActivnessListVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/7/4 14:32
 * @Version 1.0
 */
@Data
public class MgtActivenessListVo {
    @ApiModelProperty(value = "活跃度id")
    private Long activenessId;
    @ApiModelProperty(value = "活跃度")
    private String activenessName;
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtCustomConfigVo.java
@@ -3,6 +3,8 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @ClassName MgtCustomConfigVo
 * @Description TODO
@@ -27,7 +29,7 @@
    private String configType;
    @ApiModelProperty(value = "自定义配置")
    private String customConfig;
    private List<String> customConfigList;
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/ActivenessService.java
@@ -4,6 +4,7 @@
import com.ruoyi.system.api.domain.dto.MgtBaseGetDto;
import com.ruoyi.system.api.domain.poji.config.Activeness;
import com.ruoyi.system.domain.dto.MgtActivenessEditDto;
import com.ruoyi.system.domain.vo.MgtActivenessListVo;
import java.util.List;
@@ -49,7 +50,7 @@
     * @param
     * @return  List<String>
     */
    List<String> getActivenessList();
    List<MgtActivenessListVo> getActivenessList();
    /**
     * @description  通过名称获取活跃度
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/CustomConfigService.java
@@ -6,7 +6,6 @@
import com.ruoyi.system.domain.dto.*;
import com.ruoyi.system.domain.pojo.config.CustomConfig;
import com.ruoyi.system.domain.vo.MgtAllCustomConfigVo;
import com.ruoyi.system.domain.vo.MgtCustomConfigVo;
import com.ruoyi.system.domain.vo.MgtOperLogPageVo;
import java.util.List;
@@ -93,7 +92,7 @@
     * @param mgtCustomConfigDto
     * @return  MgtCustomConfigVo
     */
    MgtCustomConfigVo getCustomConfig(MgtCustomConfigDto mgtCustomConfigDto);
    List<String> getCustomConfig(MgtCustomConfigDto mgtCustomConfigDto);
    /**
    * @description getBulletinBoard
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/ActivenessServiceImpl.java
@@ -1,12 +1,13 @@
package com.ruoyi.system.service.impl.config;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.system.api.domain.dto.MgtBaseGetDto;
import com.ruoyi.system.api.domain.poji.config.Activeness;
import com.ruoyi.system.domain.dto.MgtActivenessEditDto;
import com.ruoyi.system.domain.vo.MgtActivenessListVo;
import com.ruoyi.system.mapper.config.ActivenessMapper;
import com.ruoyi.system.service.config.ActivenessService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -89,11 +90,13 @@
     * @return  List<String>
     */
    @Override
    public List<String> getActivenessList(){
    public List<MgtActivenessListVo> getActivenessList(){
        List<Activeness> activenessList = activenessMapper.selectList(new LambdaQueryWrapper<Activeness>().eq(Activeness::getDelFlag, 0));
        List<String> nameList = activenessList.stream().map(activeness ->{
                    String name = activeness.getActivenessName();
                    return name;
        List<MgtActivenessListVo> nameList = activenessList.stream().map(activeness ->{
                    MgtActivenessListVo mgtActivenessListVo = new MgtActivenessListVo();
                    mgtActivenessListVo.setActivenessId(activeness.getActivenessId());
                    mgtActivenessListVo.setActivenessName(activeness.getActivenessName());
                    return mgtActivenessListVo;
                }).collect(Collectors.toList());
        return nameList;
    }
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/CustomConfigServiceImpl.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.system.api.constant.ConfigEnum;
import com.ruoyi.system.api.domain.poji.config.Activeness;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
@@ -15,7 +16,6 @@
import com.ruoyi.system.domain.pojo.config.CustomConfig;
import com.ruoyi.system.domain.vo.MgtActivenessVo;
import com.ruoyi.system.domain.vo.MgtAllCustomConfigVo;
import com.ruoyi.system.domain.vo.MgtCustomConfigVo;
import com.ruoyi.system.domain.vo.MgtOperLogPageVo;
import com.ruoyi.system.mapper.config.CustomConfigMapper;
import com.ruoyi.system.service.config.ActivenessService;
@@ -485,14 +485,13 @@
     * @return  MgtCustomConfigVo
     */
    @Override
    public MgtCustomConfigVo getCustomConfig(MgtCustomConfigDto mgtCustomConfigDto){
    public List<String> getCustomConfig(MgtCustomConfigDto mgtCustomConfigDto){
        CustomConfig customConfig = this.getByKey(mgtCustomConfigDto.getConfigType());
        MgtCustomConfigVo mgtCustomConfigVo = new MgtCustomConfigVo();
        if(customConfig!=null){
            mgtCustomConfigVo.setCustomConfig(customConfig.getConfigValue());
            mgtCustomConfigVo.setConfigType(mgtCustomConfigDto.getConfigType());
        List<String> list = new ArrayList<>();
        if(customConfig!=null&&StringUtils.isNotBlank(customConfig.getConfigValue())){
            list = Arrays.asList(customConfig.getConfigValue().split(","));
        }
        return mgtCustomConfigVo;
        return list;
    }
    /**