jiangqs
2023-06-23 454f73537f9bcc27c50400f9197b771c83fd5900
营销统计
14个文件已修改
2个文件已添加
1202 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MgtPlActivityAgeDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtTotalController.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtPlTotalActivityTotalVo.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalActivityTotalVo.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java 295 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml 328 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/management/MgtTotalController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopMapper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MgtPlActivityAgeDto.java
New file
@@ -0,0 +1,23 @@
package com.ruoyi.system.api.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @author jqs34
 * @version 1.0
 * @classname MgtPlActivityAgeDto
 * @description: TODO
 * @date 2023 2023/6/23 15:31
 */
@Data
public class MgtPlActivityAgeDto extends MgtBasePlatformDto{
    @ApiModelProperty(value = "年龄分布1.<20 2.21-30 3.31-40 4.41-50 5.>50")
    private Integer ageType;
    @ApiModelProperty(value = "userIds",hidden = true)
    private List<Long> userIds;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java
@@ -2,6 +2,7 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.dto.MgtBaseBathDto;
import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
import com.ruoyi.system.api.domain.dto.MgtShopIdByCodeDto;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
import com.ruoyi.system.api.domain.vo.MgtShopIdByCodeVo;
@@ -74,6 +75,12 @@
                return null;
            }
            @Override
            public R<List<Long>> listShopIdByPlTotal(MgtBasePlatformDto mgtBasePlatformDto) {
                return R.fail("获取商户列表失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java
@@ -3,6 +3,7 @@
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.dto.MgtBaseBathDto;
import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
import com.ruoyi.system.api.domain.dto.MgtShopIdByCodeDto;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
@@ -79,4 +80,14 @@
     */
    @PostMapping("/shop/boardShopTotal")
    public R<MgtBulletinBoardVo> boardShopTotal();
    /**
     * @description 获取平台统计shopId
     * @param mgtBasePlatformDto
     * @return R<List<Long>>
     * @author jqs34
     * @date 2023/6/23 14:12
     */
    @PostMapping("/listShopIdByPlTotal")
    public R<List<Long>> listShopIdByPlTotal(@RequestBody MgtBasePlatformDto mgtBasePlatformDto);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtTotalController.java
@@ -2,12 +2,15 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.domain.vo.MgtPlTotalActivityTotalVo;
import com.ruoyi.order.domain.vo.MgtTotalActivityTotalVo;
import com.ruoyi.order.domain.vo.MgtTotalDataTotalVo;
import com.ruoyi.order.domain.vo.MgtTotalOrderTotalVo;
import com.ruoyi.order.service.order.OrderService;
import com.ruoyi.system.api.domain.dto.MgtActivityAgeDto;
import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
import com.ruoyi.system.api.domain.dto.MgtBaseShopDto;
import com.ruoyi.system.api.domain.dto.MgtPlActivityAgeDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestBody;
@@ -16,6 +19,7 @@
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
 * @author jqs34
@@ -67,4 +71,40 @@
        MgtTotalDataTotalVo totalDataTotalVo = orderService.getTotalDataTotal(mgtBaseShopDto);
        return R.ok(totalDataTotalVo);
    }
    @RequestMapping(value = "/getPlTotalDataTotal", method = RequestMethod.POST)
    @ApiOperation(value = "获取平台商户数据统计")
    public R<List<MgtTotalDataTotalVo>> getPlTotalDataTotal(@RequestBody MgtBasePlatformDto mgtBasePlatformDto) {
        Long userId = SecurityUtils.getUserId();
        mgtBasePlatformDto.setUserId(userId);
        List<MgtTotalDataTotalVo> totalDataTotalVoList = orderService.getPlTotalDataTotal(mgtBasePlatformDto);
        return R.ok(totalDataTotalVoList);
    }
    @RequestMapping(value = "/getPlTotalOrderTotal", method = RequestMethod.POST)
    @ApiOperation(value = "获取商户订单统计")
    public R<MgtTotalOrderTotalVo> getPlTotalOrderTotal(@RequestBody MgtBasePlatformDto mgtBasePlatformDto) {
        Long userId = SecurityUtils.getUserId();
        mgtBasePlatformDto.setUserId(userId);
        MgtTotalOrderTotalVo totalOrderTotalVo = orderService.getPlTotalOrderTotal(mgtBasePlatformDto);
        return R.ok(totalOrderTotalVo);
    }
    @RequestMapping(value = "/getPlTotalActivityTotal", method = RequestMethod.POST)
    @ApiOperation(value = "获取商户活动统计")
    public R<MgtPlTotalActivityTotalVo> getPlTotalActivityTotal(@RequestBody MgtBasePlatformDto mgtBasePlatformDto) {
        Long userId = SecurityUtils.getUserId();
        mgtBasePlatformDto.setUserId(userId);
        MgtPlTotalActivityTotalVo totalActivityTotal = orderService.getPlTotalActivityTotal(mgtBasePlatformDto);
        return R.ok(totalActivityTotal);
    }
    @RequestMapping(value = "/getPlTotalActivityAgeRank", method = RequestMethod.POST)
    @ApiOperation(value = "获取商户活动年龄分布")
    public R<MgtPlTotalActivityTotalVo> getPlTotalActivityAgeRank(@RequestBody MgtPlActivityAgeDto mgtPlActivityAgeDto) {
        Long userId = SecurityUtils.getUserId();
        mgtPlActivityAgeDto.setUserId(userId);
        MgtPlTotalActivityTotalVo totalActivityTotal = orderService.getPlTotalActivityAgeRank(mgtPlActivityAgeDto);
        return R.ok(totalActivityTotal);
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtPlTotalActivityTotalVo.java
New file
@@ -0,0 +1,90 @@
package com.ruoyi.order.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @ClassName MgtTotalActivityTotalVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/6/20 9:22
 * @Version 1.0
 */
@Data
public class MgtPlTotalActivityTotalVo {
    @ApiModelProperty(value = "总订单数")
    private Integer orderTotal;
    @ApiModelProperty(value = "周期订单数")
    private Integer cycleTotal;
    @ApiModelProperty(value = "体验订单数")
    private Integer experienceTotal;
    @ApiModelProperty(value = "服务订单数")
    private Integer serviceTotal;
    @ApiModelProperty(value = "总订单金额")
    private BigDecimal orderMoney;
    @ApiModelProperty(value = "周期订单金额")
    private BigDecimal cycleMoney;
    @ApiModelProperty(value = "体验订单金额")
    private BigDecimal experienceMoney;
    @ApiModelProperty(value = "服务订单金额")
    private BigDecimal serviceMoney;
    @ApiModelProperty(value = "总人数")
    private Integer orderPerson;
    @ApiModelProperty(value = "周期人数")
    private Integer cyclePerson;
    @ApiModelProperty(value = "体验人数")
    private Integer experiencePerson;
    @ApiModelProperty(value = "服务人数")
    private Integer servicePerson;
    @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[] activityRankKey;
    @ApiModelProperty(value = "活动次数value")
    private Integer[] activityRankValue;
    @ApiModelProperty(value = "店铺销售排行key")
    private String[] shopSalesRankKey;
    @ApiModelProperty(value = "店铺销售value")
    private BigDecimal[] shopSalesRankValue;
    @ApiModelProperty(value = "活动销售排行key")
    private String[] activitySalesRankKey;
    @ApiModelProperty(value = "活动销售value")
    private BigDecimal[] activitySalesRankValue;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalActivityTotalVo.java
@@ -57,7 +57,7 @@
    @ApiModelProperty(value = "订单数量value")
    private Integer[] orderTotalValue;
    @ApiModelProperty(value = "订单数量value")
    @ApiModelProperty(value = "订单金额value")
    private BigDecimal[] orderMoneyValue;
    @ApiModelProperty(value = "商品类型数量key")
@@ -68,11 +68,5 @@
    @ApiModelProperty(value = "商品类型金额value")
    private BigDecimal[] goodsTypeMoneyValue;
    @ApiModelProperty(value = "来源排行key")
    private String[] orderAgeKey;
    @ApiModelProperty(value = "来源排行value")
    private BigDecimal[] orderAgeValue;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
@@ -8,6 +8,7 @@
import com.ruoyi.system.api.domain.dto.MgtActivityAgeDto;
import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
import com.ruoyi.system.api.domain.dto.MgtBaseShopDto;
import com.ruoyi.system.api.domain.dto.MgtPlActivityAgeDto;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
import com.ruoyi.system.api.domain.vo.MgtMapTotalVo;
import org.apache.ibatis.annotations.Param;
@@ -279,4 +280,134 @@
     * @return  List<MgtMapTotalVo>
     */
    List<MgtMapTotalVo> listMemberGoodsRank(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description getTotalOrderTotalOrderFrom
     * @param mgtBasePlatformDto
     * @return MgtTotalOrderTotalVo
     * @author jqs34
     * @date 2023/6/19 22:24
     */
    MgtTotalOrderTotalVo getPlTotalOrderTotalOrderFrom(@Param("param") MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description getTotalOrderTotalGoodsType
     * @param mgtBasePlatformDto
     * @return MgtTotalOrderTotalVo
     * @author jqs34
     * @date 2023/6/19 22:24
     */
    MgtTotalOrderTotalVo getPlTotalOrderTotalGoodsType(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description listTotalOrderTotal
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
    List<MgtMapTotalPlusVo> listPlTotalOrderTotal(@Param("param") MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description listTotalOrderTotalGoodsType
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
    List<MgtMapTotalPlusVo> listPlTotalOrderTotalGoodsType(@Param("param") MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description listTotalOrderTotalGoodsRank
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
    List<MgtMapTotalPlusVo> listPlTotalOrderTotalGoodsRank(@Param("param") MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description listTotalOrderTotalOrderFrom
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
    List<MgtMapTotalPlusVo> listPlTotalOrderTotalOrderFrom(@Param("param") MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description getTotalActivityTotal
     * @author  jqs
     * @date    2023/6/20 9:28
     * @param mgtBasePlatformDto
     * @return  MgtTotalActivityTotalVo
     */
    MgtPlTotalActivityTotalVo getPlTotalActivityTotal(@Param("param") MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description listTotalActivityTotalGoodsType
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
    List<MgtMapTotalPlusVo> listPlTotalActivityTotalGoodsType(@Param("param") MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description listTotalActivityTotal
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
    List<MgtMapTotalPlusVo> listPlTotalActivityTotal(@Param("param") MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description
     * @author  jqs
     * @date    2023/6/20 11:37
     * @param mgtActivityAgeDto
     * @return  List<Long>
     */
    List<Long> getPlUserIdAgeRank(@Param("param") MgtPlActivityAgeDto mgtActivityAgeDto);
    /**
     * @description
     * @author  jqs
     * @date    2023/6/20 9:57
     * @param mgtActivityAgeDto
     * @return  MgtTotalActivityTotalVo
     */
    MgtPlTotalActivityTotalVo getPlTotalActivityAgeRank(@Param("param")MgtPlActivityAgeDto mgtActivityAgeDto);
    /**
     * @description listPlTotalShopActivityRank
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
    List<MgtMapTotalPlusVo> listPlTotalShopActivityRank(@Param("param") MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description listTotalActivityTotal
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
    List<MgtMapTotalPlusVo> listPlTotalShopActivitySalesRank(@Param("param") MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description listTotalActivityTotal
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
    List<MgtMapTotalPlusVo> listPlTotalActivitySalesRank(@Param("param") MgtBasePlatformDto mgtBasePlatformDto);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -73,7 +73,8 @@
    @Resource
    private RemoteShoppingCartService remoteShoppingCartService;
    @Resource
    private RemoteConfigService remoteConfigService;
    /**
@@ -1480,6 +1481,296 @@
     */
    @Override
    public List<MgtMapTotalVo> listMemberGoodsRank(MgtBasePlatformDto mgtBasePlatformDto){
        return listMemberGoodsRank(mgtBasePlatformDto);
        return orderMapper.listMemberGoodsRank(mgtBasePlatformDto);
    }
    /**
     * @description 获取平台商户数据统计
     * @param mgtBasePlatformDto
     * @return List<MgtTotalDataTotalVo>
     * @author jqs34
     * @date 2023/6/23 14:01
     */
    @Override
    public List<MgtTotalDataTotalVo> getPlTotalDataTotal(MgtBasePlatformDto mgtBasePlatformDto){
        //获取需要关联的用户id集合
        if (mgtBasePlatformDto.getDeptId() != null) {
            List<Long> userIdList = new ArrayList<>();
            if (mgtBasePlatformDto.getUserId() != null) {
                userIdList.add(mgtBasePlatformDto.getUserId());
            } else {
                MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept();
                mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getUserId());
                mgtUserIdByDept = remoteConfigService.getUserIdByDept(mgtUserIdByDept).getData();
                userIdList = mgtUserIdByDept.getUserIdList();
            }
            if (!userIdList.isEmpty()) {
                mgtBasePlatformDto.setUserIdList(userIdList);
            }
        }
        List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData();
        List<MgtTotalDataTotalVo> mgtTotalDataTotalVoList = new ArrayList<>();
        MgtBaseShopDto mgtBaseShopDto;
        MgtTotalDataTotalVo mgtTotalDataTotalVo;
        if(shopIdList!=null&&!shopIdList.isEmpty()){
            for(Long shopId : shopIdList){
                mgtBaseShopDto = new MgtBaseShopDto();
                mgtBaseShopDto.setStartDate(mgtBasePlatformDto.getStartDate());
                mgtBaseShopDto.setEndDate(mgtBasePlatformDto.getEndDate());
                mgtBaseShopDto.setShopId(shopId);
                mgtTotalDataTotalVo = this.getTotalDataTotal(mgtBaseShopDto);
                mgtTotalDataTotalVoList.add(mgtTotalDataTotalVo);
            }
        }
        return mgtTotalDataTotalVoList;
    }
    /**
     * @description 获取平台商户订单统计
     * @param mgtBasePlatformDto
     * @return MgtTotalOrderTotalVo
     * @author jqs34
     * @date 2023/6/19 22:23
     */
    @Override
    public MgtTotalOrderTotalVo getPlTotalOrderTotal(MgtBasePlatformDto mgtBasePlatformDto){
        //获取需要关联的用户id集合
        if (mgtBasePlatformDto.getDeptId() != null) {
            List<Long> userIdList = new ArrayList<>();
            if (mgtBasePlatformDto.getUserId() != null) {
                userIdList.add(mgtBasePlatformDto.getUserId());
            } else {
                MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept();
                mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getUserId());
                mgtUserIdByDept = remoteConfigService.getUserIdByDept(mgtUserIdByDept).getData();
                userIdList = mgtUserIdByDept.getUserIdList();
            }
            if (!userIdList.isEmpty()) {
                mgtBasePlatformDto.setUserIdList(userIdList);
            }
        }
        List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData();
        mgtBasePlatformDto.setShopIdList(shopIdList);
        //获取基础统计
        MgtTotalOrderTotalVo mgtTotalOrderTotalVo = orderMapper.getPlTotalOrderTotalOrderFrom(mgtBasePlatformDto);
        List<MgtMapTotalPlusVo> mgtMapTotalVos = orderMapper.listPlTotalOrderTotal(mgtBasePlatformDto);
        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<MgtMapTotalPlusVo> mgtMapTotalVoGoodsType = orderMapper.listPlTotalOrderTotalGoodsType(mgtBasePlatformDto);
        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<MgtMapTotalPlusVo> goodsRankList = orderMapper.listPlTotalOrderTotalGoodsRank(mgtBasePlatformDto);
        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<MgtMapTotalPlusVo> orderFromList = orderMapper.listPlTotalOrderTotalOrderFrom(mgtBasePlatformDto);
        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;
    }
    /**
     * @description
     * @author  jqs
     * @date    2023/6/20 9:27
     * @param mgtBasePlatformDto
     * @return  MgtTotalActivityTotalVo
     */
    @Override
    public MgtPlTotalActivityTotalVo getPlTotalActivityTotal(MgtBasePlatformDto mgtBasePlatformDto){
        //获取需要关联的用户id集合
        if (mgtBasePlatformDto.getDeptId() != null) {
            List<Long> userIdList = new ArrayList<>();
            if (mgtBasePlatformDto.getUserId() != null) {
                userIdList.add(mgtBasePlatformDto.getUserId());
            } else {
                MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept();
                mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getUserId());
                mgtUserIdByDept = remoteConfigService.getUserIdByDept(mgtUserIdByDept).getData();
                userIdList = mgtUserIdByDept.getUserIdList();
            }
            if (!userIdList.isEmpty()) {
                mgtBasePlatformDto.setUserIdList(userIdList);
            }
        }
        List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData();
        mgtBasePlatformDto.setShopIdList(shopIdList);
        //获取基础统计
        MgtPlTotalActivityTotalVo totalActivityTotalVo = orderMapper.getPlTotalActivityTotal(mgtBasePlatformDto);
        //获取商品分类销售数据
        List<MgtMapTotalPlusVo> mgtMapTotalVoGoodsType = orderMapper.listPlTotalActivityTotalGoodsType(mgtBasePlatformDto);
        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] = "周期";
                    totalActivityTotalVo.setCycleTotal(mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setCycleMoney(mgtMapTotalVoGoodsType.get(i).getMapValueSecond());
                    totalActivityTotalVo.setCyclePerson(mgtMapTotalVoGoodsType.get(i).getMapValueThird());
                }else if(mgtMapTotalVoGoodsType.get(i).getMapKey().equals("2")){
                    goodsTypeKey[i] = "服务";
                    totalActivityTotalVo.setServiceTotal(mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setServiceMoney(mgtMapTotalVoGoodsType.get(i).getMapValueSecond());
                    totalActivityTotalVo.setServicePerson(mgtMapTotalVoGoodsType.get(i).getMapValueThird());
                }else if(mgtMapTotalVoGoodsType.get(i).getMapKey().equals("3")){
                    goodsTypeKey[i] = "体验";
                    totalActivityTotalVo.setExperienceTotal(mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setExperienceMoney(mgtMapTotalVoGoodsType.get(i).getMapValueSecond());
                    totalActivityTotalVo.setExperiencePerson(mgtMapTotalVoGoodsType.get(i).getMapValueThird());
                }else if(mgtMapTotalVoGoodsType.get(i).getMapKey().equals("4")){
                    goodsTypeKey[i] = "单品";
                }
            }
            totalActivityTotalVo.setGoodsTypeKey(goodsTypeKey);
            totalActivityTotalVo.setGoodsTypeTotalValue(goodsTypeTotalValue);
            totalActivityTotalVo.setGoodsTypeMoneyValue(goodsTypeMoneyValue);
        }
        //获取订单分布
        List<MgtMapTotalPlusVo> mgtMapTotalVos = orderMapper.listPlTotalActivityTotal(mgtBasePlatformDto);
        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();
            }
            totalActivityTotalVo.setOrderTotalKey(orderTotalKey);
            totalActivityTotalVo.setOrderTotalValue(orderTotalValue);
            totalActivityTotalVo.setOrderMoneyValue(orderMoneyValue);
        }
        HashSet<String> set = new HashSet<>();
        // 遍历MgtMemberOrderPageVoList,获取shopId并添加到set中
        for (Long shopId : mgtBasePlatformDto.getShopIdList()) {
            set.add(shopId.toString());
        }
        // 将set中的shopId转换为逗号分隔的字符串
        String joinedString = String.join(",", set);
        // 通过remoteShopService获取MgtSimpleShopVoList
        MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto();
        mgtBaseBathDto.setIds(joinedString);
        List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData();
        // 将MgtSimpleShopVoList转换为Map<Long, MgtSimpleShopVo>,以便后续根据shopId获取对应的MgtSimpleShopVo
        Map<Long, MgtSimpleShopVo> map = simpleShopVoList.stream()
                .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity()));
        //商户活动次数排名
        List<MgtMapTotalPlusVo> shopActivityRank = orderMapper.listPlTotalShopActivityRank(mgtBasePlatformDto);
        if (shopActivityRank != null && shopActivityRank.size() > 0) {
            String[] shopActivityRankKey = new String[shopActivityRank.size()];
            Integer[] shopActivityRankValue = new Integer[shopActivityRank.size()];
            for (int i = 0; i < shopActivityRank.size(); i++) {
                shopActivityRankKey[i] = map.get(Long.valueOf(shopActivityRank.get(i).getMapKey())).getShopName();
                shopActivityRankValue[i] = shopActivityRank.get(i).getMapValueFirst();
            }
            totalActivityTotalVo.setActivityRankKey(shopActivityRankKey);
            totalActivityTotalVo.setActivityRankValue(shopActivityRankValue);
        }
        //商户活动销售额排名
        List<MgtMapTotalPlusVo> shopActivitySalesRank = orderMapper.listPlTotalShopActivitySalesRank(mgtBasePlatformDto);
        if (shopActivitySalesRank != null && shopActivitySalesRank.size() > 0) {
            String[] shopActivitySalesRankKey = new String[shopActivitySalesRank.size()];
            BigDecimal[] shopActivitySalesRankValue = new BigDecimal[shopActivitySalesRank.size()];
            for (int i = 0; i < shopActivitySalesRank.size(); i++) {
                shopActivitySalesRankKey[i] = map.get(Long.valueOf(shopActivityRank.get(i).getMapKey())).getShopName();
                shopActivitySalesRankValue[i] = shopActivitySalesRank.get(i).getMapValueSecond();
            }
            totalActivityTotalVo.setShopSalesRankKey(shopActivitySalesRankKey);
            totalActivityTotalVo.setShopSalesRankValue(shopActivitySalesRankValue);
        }
        //活动销售额排名
        List<MgtMapTotalPlusVo> activitySalesRank = orderMapper.listPlTotalActivitySalesRank(mgtBasePlatformDto);
        if (activitySalesRank != null && activitySalesRank.size() > 0) {
            String[] activitySalesRankKey = new String[activitySalesRank.size()];
            BigDecimal[] activitySalesRankValue = new BigDecimal[activitySalesRank.size()];
            for (int i = 0; i < activitySalesRank.size(); i++) {
                activitySalesRankKey[i] = activitySalesRank.get(i).getMapKey();
                activitySalesRankValue[i] = activitySalesRank.get(i).getMapValueSecond();
            }
            totalActivityTotalVo.setActivitySalesRankKey(activitySalesRankKey);
            totalActivityTotalVo.setActivitySalesRankValue(activitySalesRankValue);
        }
        return totalActivityTotalVo;
    }
    /**
     * @description
     * @author  jqs
     * @date    2023/6/20 9:56
     * @param mgtPlActivityAgeDto
     * @return  MgtTotalActivityTotalVo
     */
    @Override
    public MgtPlTotalActivityTotalVo getPlTotalActivityAgeRank(MgtPlActivityAgeDto mgtPlActivityAgeDto){
        List<Long> userIds = orderMapper.getPlUserIdAgeRank(mgtPlActivityAgeDto);
        MgtActivityAgeDto mgtActivityAgeDto = new MgtActivityAgeDto();
        mgtActivityAgeDto.setUserIds(userIds);
        mgtActivityAgeDto.setAgeType(mgtPlActivityAgeDto.getAgeType());
        userIds = remoteMemberService.listUserIdByAge(mgtActivityAgeDto).getData();
        mgtPlActivityAgeDto.setUserIds(userIds);
        MgtPlTotalActivityTotalVo totalActivityTotalVo = orderMapper.getPlTotalActivityAgeRank(mgtPlActivityAgeDto);
        return totalActivityTotalVo;
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -5,10 +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.AppBaseGetDto;
import com.ruoyi.system.api.domain.dto.MgtActivityAgeDto;
import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
import com.ruoyi.system.api.domain.dto.MgtBaseShopDto;
import com.ruoyi.system.api.domain.dto.*;
import com.ruoyi.system.api.domain.vo.AppOrderTotalVo;
import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
@@ -191,7 +188,7 @@
    MgtBulletinBoardVo boardOrderTotal();
    /**
    * @description getTotalOrderTotal
    * @description 获取商户订单统计
    * @param mgtBaseShopDto
    * @return MgtTotalOrderTotalVo
    * @author jqs34
@@ -201,7 +198,7 @@
    /**
     * @description
     * @description 获取商户活动统计
     * @author  jqs
     * @date    2023/6/20 9:28
     * @param mgtBaseShopDto
@@ -210,7 +207,7 @@
    MgtTotalActivityTotalVo getTotalActivityTotal(MgtBaseShopDto mgtBaseShopDto);
    /**
     * @description
     * @description 获取商户活动年龄分布
     * @author  jqs
     * @date    2023/6/20 9:57
     * @param mgtActivityAgeDto
@@ -219,7 +216,7 @@
    MgtTotalActivityTotalVo getTotalActivityAgeRank(MgtActivityAgeDto mgtActivityAgeDto);
    /**
     * @description
     * @description 获取商户数据统计
     * @author  jqs
     * @date    2023/6/20 15:50
     * @param mgtBaseShopDto
@@ -236,6 +233,39 @@
     */
    List<MgtMapTotalVo> listMemberGoodsRank(MgtBasePlatformDto mgtBasePlatformDto);
    /**
    * @description 获取平台商户数据统计
    * @param mgtBasePlatformDto
    * @return List<MgtTotalDataTotalVo>
    * @author jqs34
    * @date 2023/6/23 14:01
    */
    List<MgtTotalDataTotalVo> getPlTotalDataTotal(MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description 获取平台商户订单统计
     * @param mgtBasePlatformDto
     * @return MgtTotalOrderTotalVo
     * @author jqs34
     * @date 2023/6/19 22:23
     */
    MgtTotalOrderTotalVo getPlTotalOrderTotal(MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description 获取商户活动统计
     * @author  jqs
     * @date    2023/6/20 9:28
     * @param mgtBasePlatformDto
     * @return  MgtTotalActivityTotalVo
     */
    MgtPlTotalActivityTotalVo getPlTotalActivityTotal(MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description 获取商户活动年龄分布
     * @author  jqs
     * @date    2023/6/20 9:57
     * @param mgtPLActivityAgeDto
     * @return  MgtTotalActivityTotalVo
     */
    MgtPlTotalActivityTotalVo getPlTotalActivityAgeRank(MgtPlActivityAgeDto mgtPLActivityAgeDto);
}
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -774,6 +774,38 @@
    <select id="listTotalActivityTotal" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo">
        SELECT
        DATE_FORMAT(create_time, '%Y-%m-%d') AS mapKey,
        COUNT(DISTINCT toc.order_id) AS mapValueFirst,
        SUM(toc.order_money) AS mapValueSecond,
        FROM
        t_order
        WHERE
        del_flag = 0 AND order_from = 2
        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="getUserIdAgeRank" resultType="java.lang.Long">
        SELECT
        DISTINCT user_id
        FROM
        t_order
        WHERE
        del_flag = 0 AND order_from = 2
        AND create_time >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
        <if test="param.shopId != null and param.shopId != ''">
            AND shop_id = #{param.shopId}
        </if>
    </select>
    <select id="getTotalActivityAgeRank" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo">
        SELECT
        DATE_FORMAT(create_time, '%Y-%m-%d') AS mapKey,
        COUNT(DISTINCT toc.user_id) AS mapValueFirst
        FROM
        t_order
@@ -793,19 +825,6 @@
        order_date
        ORDER BY
        order_date ASC
    </select>
    <select id="getUserIdAgeRank" resultType="java.lang.Long">
        SELECT
        DISTINCT user_id
        FROM
        t_order
        WHERE
        del_flag = 0 AND order_from = 2
        AND create_time >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
        <if test="param.shopId != null and param.shopId != ''">
            AND shop_id = #{param.shopId}
        </if>
    </select>
    <select id="getTotalDataTotal" resultType="com.ruoyi.order.domain.vo.MgtTotalDataTotalVo">
@@ -896,4 +915,287 @@
        GROUP BY tog.goods_name
        ORDER BY COUNT(DISTINCT toc.userId) DESC LIMIT 15
    </select>
    <select id="getPlTotalOrderTotalOrderFrom" 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.shopIdList != null and param.shopIdList != ''">
            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 create_time &gt;= #{param.startDate}
        </if>
        <if test="param.endDate!=null and param.endDate!=''">
            AND create_time &lt;= #{param.endDate}
        </if>
    </select>
    <select id="getPlTotalOrderTotalGoodsType" 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.shopIdList != null and param.shopIdList != ''">
            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>
    </select>
    <select id="listPlTotalOrderTotal" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo">
        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.shopIdList != null and param.shopIdList != ''">
            AND toc.shop_id IN
            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        GROUP BY
        order_date
        ORDER BY
        order_date ASC
    </select>
    <select id="listPlTotalOrderTotalGoodsType" 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.shopIdList != null and param.shopIdList != ''">
            AND toc.shop_id IN
            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        GROUP BY tog.goods_type
    </select>
    <select id="listPlTotalOrderTotalGoodsRank" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo">
        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.shopIdList != null and param.shopIdList != ''">
            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="listPlTotalOrderTotalOrderFrom" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo">
        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.shopIdList != null and param.shopIdList != ''">
            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 10
    </select>
    <select id="getPlTotalActivityTotal" resultType="com.ruoyi.order.domain.vo.MgtPlTotalActivityTotalVo">
        SELECT
        COUNT(order_id) orderTotal,
        IFNULL(SUM(order_money),0) orderMoney,
        COUNT(DISTINCT user_id) orderPerson
        FROM t_order WHERE del_flag = 0 AND order_from = 2
        <if test="param.shopIdList != null and param.shopIdList != ''">
            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 create_time &gt;= #{param.startDate}
        </if>
        <if test="param.endDate!=null and param.endDate!=''">
            AND create_time &lt;= #{param.endDate}
        </if>
    </select>
    <select id="listPlTotalActivityTotalGoodsType" 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,
        COUNT(DISTINCT toc.user_id) AS mapValueThird,
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0 AND order_from = 2
        <if test="param.shopIdList != null and param.shopIdList != ''">
            AND toc.shop_id IN
            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        GROUP BY tog.goods_type
    </select>
    <select id="listPlTotalActivityTotal" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo">
        SELECT
        DATE_FORMAT(create_time, '%Y-%m-%d') AS mapKey,
        COUNT(DISTINCT toc.order_id) AS mapValueFirst,
        IFNULL(SUM(toc.order_money),0) AS mapValueSecond,
        FROM t_order
        WHERE del_flag = 0 AND order_from = 2
        AND create_time >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
        <if test="param.shopIdList != null and param.shopIdList != ''">
            AND toc.shop_id IN
            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        GROUP BY
        order_date
        ORDER BY
        order_date ASC
    </select>
    <select id="getPlUserIdAgeRank" resultType="java.lang.Long">
        SELECT
        DISTINCT user_id
        FROM t_order
        WHERE del_flag = 0 AND order_from = 2
        AND create_time >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
        <if test="param.shopIdList != null and param.shopIdList != ''">
            AND toc.shop_id IN
            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
    </select>
    <select id="getPlTotalActivityAgeRank" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo">
        SELECT
        DATE_FORMAT(create_time, '%Y-%m-%d') AS mapKey,
        COUNT(DISTINCT toc.user_id) AS mapValueFirst
        FROM t_order
        WHERE del_flag = 0 AND order_from = 2
        AND create_time >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
        <if test="param.shopIdList != null and param.shopIdList != ''">
            AND toc.shop_id IN
            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="param.userIds != null">
            AND user_id IN
            <foreach collection="param.userIds" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        GROUP BY rder_date
        ORDER BY order_date ASC
    </select>
    <select id="listPlTotalShopActivityRank" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo">
        SELECT
            shop_id AS mapKey,
            COUNT(order_id) AS mapValueFirst
        FROM t_order
        WHERE del_flag = 0 AND order_from = 2
        <if test="param.shopIdList != null and param.shopIdList != ''">
            AND shop_id IN
            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        GROUP BY shop_id
        ORDER BY COUNT(toc.order_id) DESC LIMIT 15
    </select>
    <select id="listPlTotalShopActivitySalesRank" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo">
        SELECT
            shop_id AS mapKey,
            IFNULL(SUM(order_money),0) AS mapValueSecond
        FROM t_order
        WHERE del_flag = 0 AND order_from = 2
        <if test="param.shopIdList != null and param.shopIdList != ''">
            AND shop_id IN
            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        GROUP BY shop_id
        ORDER BY SUM(order_money) DESC LIMIT 15
    </select>
    <select id="listPlTotalActivitySalesRank" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo">
        SELECT
        activity_name AS mapKey,
        IFNULL(SUM(order_money),0) AS mapValueSecond
        FROM t_order
        WHERE del_flag = 0 AND order_from = 2
        <if test="param.shopIdList != null and param.shopIdList != ''">
            AND shop_id IN
            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        GROUP BY activity_name
        ORDER BY SUM(order_money) DESC LIMIT 15
    </select>
</mapper>
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
@@ -10,6 +10,7 @@
import com.ruoyi.shop.service.shop.ShopSuggestService;
import com.ruoyi.shop.service.task.ShopTaskService;
import com.ruoyi.system.api.domain.dto.MgtBaseBathDto;
import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
import com.ruoyi.system.api.domain.dto.MgtShopIdByCodeDto;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.system.api.domain.poji.sys.SysUser;
@@ -174,4 +175,18 @@
        bulletinBoardVo.setFollowShopToday(bulletinBoardVoTask.getFollowShopToday());
        return R.ok(bulletinBoardVo);
    }
    /**
    * @description 获取平台统计shopId
    * @param mgtBasePlatformDto
    * @return R<List<Long>>
    * @author jqs34
    * @date 2023/6/23 14:14
    */
    @PostMapping("/listShopIdByPlTotal")
    public R<List<Long>> listShopIdByPlTotal(@RequestBody MgtBasePlatformDto mgtBasePlatformDto)
    {
        List<Long> shopIdList = shopService.listShopIdByPlTotal(mgtBasePlatformDto);
        return R.ok(shopIdList);
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/management/MgtTotalController.java
@@ -39,4 +39,5 @@
        return R.ok(totalShopTotalVo);
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopMapper.java
@@ -140,6 +140,15 @@
    List<Long> listShopIdByTotal(MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description  获取统计关联shopId
     * @author  jqs
     * @date    2023/6/21 16:45
     * @param mgtBasePlatformDto
     * @return  List<Long>
     */
    List<Long> listShopIdByPlTotal(MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description  商户类型统计
     * @author  jqs
     * @date    2023/6/21 17:40
@@ -166,4 +175,21 @@
     */
    List<MgtMapTotalVo> listShopAreaRank(MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description  商户类型统计
     * @author  jqs
     * @date    2023/6/21 17:40
     * @param
     * @return  List<MgtMapTotalVo>
     */
    List<MgtMapTotalVo> listShopSalesRank(MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description  商户类型统计
     * @author  jqs
     * @date    2023/6/21 17:40
     * @param
     * @return  List<MgtMapTotalVo>
     */
    List<MgtMapTotalVo> listShopRecommendRank(MgtBasePlatformDto mgtBasePlatformDto);
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -668,26 +668,27 @@
     * @return  MgtPlTotalShopTotalVo
     */
    @Override
    public MgtPlTotalShopTotalVo getPlTotalShopTotal(MgtBasePlatformDto mgtBasePlatformDto){
    public MgtPlTotalShopTotalVo getPlTotalShopTotal(MgtBasePlatformDto mgtBasePlatformDto) {
        //获取需要关联的用户id集合
        if(mgtBasePlatformDto.getDeptId()!=null){
        if (mgtBasePlatformDto.getDeptId() != null) {
            List<Long> userIdList = new ArrayList<>();
            if(mgtBasePlatformDto.getUserId()!=null){
            if (mgtBasePlatformDto.getUserId() != null) {
                userIdList.add(mgtBasePlatformDto.getUserId());
            }else{
            } else {
                MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept();
                mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getUserId());
                mgtUserIdByDept = configService.getUserIdByDept(mgtUserIdByDept).getData();
                userIdList = mgtUserIdByDept.getUserIdList();
            }
            if(!userIdList.isEmpty()){
            if (!userIdList.isEmpty()) {
                mgtBasePlatformDto.setUserIdList(userIdList);
            }
        }
        //获取基础统计
        MgtPlTotalShopTotalVo plTotalShopTotalVo = shopMapper.getPlTotalShopTotal();
        plTotalShopTotalVo.setSignTotal(0);
        List<Long> shopIdList = shopMapper.listShopIdByTotal(mgtBasePlatformDto);
        if(!shopIdList.isEmpty()){
        if (!shopIdList.isEmpty()) {
            MgtShopTotalMemberVo shopTotalMemberVo = remoteMemberService.getUserTotalByShopId(shopIdList).getData();
            plTotalShopTotalVo.setManTotal(shopTotalMemberVo.getManTotal());
            plTotalShopTotalVo.setWomenTotal(shopTotalMemberVo.getWomenTotal());
@@ -701,9 +702,9 @@
            Integer[] shopTypeValue = new Integer[shopTypeTotal.size()];
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < shopTypeTotal.size(); i++) {
                if(shopTypeTotal.get(i).getMapKey().equals("1")){
                if (shopTypeTotal.get(i).getMapKey().equals("1")) {
                    shopTypeKey[i] = "经销商";
                }else if(shopTypeTotal.get(i).getMapKey().equals("2")){
                } else if (shopTypeTotal.get(i).getMapKey().equals("2")) {
                    shopTypeKey[i] = "代理商";
                }
                shopTypeValue[i] = shopTypeTotal.get(i).getMapValue();
@@ -712,33 +713,70 @@
            plTotalShopTotalVo.setShopTypeValue(shopTypeValue);
        }
        //获取商户状态
        List<MgtMapTotalVo> shopStatusTotal = shopMapper.listShopTypeTotal(mgtBasePlatformDto);
        List<MgtMapTotalVo> shopStatusTotal = shopMapper.listShopStatusTotal(mgtBasePlatformDto);
        if (shopStatusTotal != null && shopStatusTotal.size() > 0) {
            String[] shopStatusKey = new String[shopStatusTotal.size()];
            Integer[] shopStatusValue = new Integer[shopStatusTotal.size()];
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < shopStatusTotal.size(); i++) {
                if(shopStatusTotal.get(i).getMapKey().equals("1")){
                    shopStatusKey[i] = "经销商";
                }else if(shopStatusTotal.get(i).getMapKey().equals("2")){
                    shopStatusKey[i] = "代理商";
                }
                shopStatusKey[i] = shopStatusTotal.get(i).getMapKey();
                shopStatusValue[i] = shopStatusTotal.get(i).getMapValue();
            }
            plTotalShopTotalVo.setShopStatusKey(shopStatusKey);
            plTotalShopTotalVo.setShopStatusValue(shopStatusValue);
        }
        /*plTotalShopTotalVo.setAreaRankKey();
        plTotalShopTotalVo.setAreaRankValue();
        plTotalShopTotalVo.setShopSalesRankKey();
        plTotalShopTotalVo.setShopSalesRankValue();
        plTotalShopTotalVo.setShopRecommendKey();
        plTotalShopTotalVo.setShopRecommendValue();*/
        //获取区域排名
        List<MgtMapTotalVo> shopAreaRank = shopMapper.listShopAreaRank(mgtBasePlatformDto);
        if (shopAreaRank != null && shopAreaRank.size() > 0) {
            String[] shopRankKey = new String[shopAreaRank.size()];
            Integer[] shopRankValue = new Integer[shopAreaRank.size()];
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < shopAreaRank.size(); i++) {
                shopRankKey[i] = shopAreaRank.get(i).getMapKey();
                shopRankValue[i] = shopAreaRank.get(i).getMapValue();
            }
            plTotalShopTotalVo.setAreaRankKey(shopRankKey);
            plTotalShopTotalVo.setAreaRankValue(shopRankValue);
        }
        //获取销售排名
        List<MgtMapTotalVo> shopSalesRank = shopMapper.listShopSalesRank(mgtBasePlatformDto);
        if (shopSalesRank != null && shopSalesRank.size() > 0) {
            String[] shopSalesKey = new String[shopSalesRank.size()];
            Integer[] shopSalesValue = new Integer[shopSalesRank.size()];
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < shopSalesRank.size(); i++) {
                shopSalesKey[i] = shopSalesRank.get(i).getMapKey();
                shopSalesValue[i] = shopSalesRank.get(i).getMapValue();
            }
            plTotalShopTotalVo.setShopSalesRankKey(shopSalesKey);
            plTotalShopTotalVo.setShopSalesRankValue(shopSalesValue);
        }
        //获取推荐
        List<MgtMapTotalVo> shopRecommendRank = shopMapper.listShopRecommendRank(mgtBasePlatformDto);
        if (shopRecommendRank != null && shopRecommendRank.size() > 0) {
            String[] shopRecommendKey = new String[shopRecommendRank.size()];
            Integer[] shopRecommendValue = new Integer[shopRecommendRank.size()];
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < shopRecommendRank.size(); i++) {
                shopRecommendKey[i] = shopRecommendRank.get(i).getMapKey();
                shopRecommendValue[i] = shopRecommendRank.get(i).getMapValue();
            }
            plTotalShopTotalVo.setShopRecommendKey(shopRecommendKey);
            plTotalShopTotalVo.setShopRecommendValue(shopRecommendValue);
        }
        return plTotalShopTotalVo;
    }
    /**
     * @description 获取平台统计shopId
     * @param mgtBasePlatformDto
     * @return List<Long>
     * @author jqs34
     * @date 2023/6/23 14:12
     */
    @Override
    public List<Long> listShopIdByPlTotal(MgtBasePlatformDto mgtBasePlatformDto){
        List<Long> shopIdList = shopMapper.listShopIdByPlTotal(mgtBasePlatformDto);
        return shopIdList;
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java
@@ -197,4 +197,13 @@
     * @return  MgtPlTotalShopTotalVo
     */
    MgtPlTotalShopTotalVo getPlTotalShopTotal(MgtBasePlatformDto mgtBasePlatformDto);
    /**
    * @description 获取平台统计shopId
    * @param mgtBasePlatformDto
    * @return List<Long>
    * @author jqs34
    * @date 2023/6/23 14:13
    */
    List<Long> listShopIdByPlTotal(MgtBasePlatformDto mgtBasePlatformDto);
}
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
@@ -585,6 +585,29 @@
        </if>
    </select>
    <select id="listShopIdByPlTotal" resultType="java.lang.Long">
        SELECT
        ts.shop_id
        FROM t_shop ts
        WHERE ts.del_flag = 0
        <if test="param.userIdList!=null and param.userIdList!=''">
            AND ts.belong_user_id IN
            <foreach collection="param.userIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="param.shopProvinceCode!=null and param.shopProvinceCode!=''">
            AND ts.shop_province_code = #{param.shopProvinceCode}
        </if>
        <if test="param.shopCityCode!=null and param.shopCityCode!=''">
            AND ts.shop_city_code = #{param.shopCityCode}
        </if>
        <if test="param.shopAreaCode!=null and param.shopAreaCode!=''">
            AND ts.shop_area_code = #{param.shopAreaCode}
        </if>
    </select>
    <select id="listShopTypeTotal" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
        SELECT
        ts.shop_type mapKey,
@@ -676,4 +699,65 @@
        ORDER BY COUNT(ts.shop_id) DESC LIMIT 15
    </select>
    <select id="listShopSalesRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
        SELECT
        ts.shop_name mapKey,
        tst.total_order_money mapValue
        FROM t_shop ts
        INNER JOIN t_shopp_total tst ON ts.shop_id = tst.shop_id
        WHERE ts.del_flag = 0
        <if test="param.userIdList!=null and param.userIdList!=''">
            AND ts.belong_user_id IN
            <foreach collection="param.userIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="param.shopProvinceCode!=null and param.shopProvinceCode!=''">
            AND ts.shop_province_code = #{param.shopProvinceCode}
        </if>
        <if test="param.shopCityCode!=null and param.shopCityCode!=''">
            AND ts.shop_city_code = #{param.shopCityCode}
        </if>
        <if test="param.shopAreaCode!=null and param.shopAreaCode!=''">
            AND ts.shop_area_code = #{param.shopAreaCode}
        </if>
        <if test="param.startDate!=null and param.startDate!=''">
            AND ts.create_time &gt;= #{param.startDate}
        </if>
        <if test="param.endDate!=null and param.endDate!=''">
            AND ts.create_time &lt;= #{param.endDate}
        </if>
        ORDER BY tst.total_order_money DESC LMIMIT 15
    </select>
    <select id="listShopRecommendRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
        SELECT
        ts.recommend_person mapKey,
        COUNT(ts.shop_id) mapValue
        FROM t_shop ts
        WHERE ts.del_flag = 0
        <if test="param.userIdList!=null and param.userIdList!=''">
            AND ts.belong_user_id IN
            <foreach collection="param.userIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="param.shopProvinceCode!=null and param.shopProvinceCode!=''">
            AND ts.shop_province_code = #{param.shopProvinceCode}
        </if>
        <if test="param.shopCityCode!=null and param.shopCityCode!=''">
            AND ts.shop_city_code = #{param.shopCityCode}
        </if>
        <if test="param.shopAreaCode!=null and param.shopAreaCode!=''">
            AND ts.shop_area_code = #{param.shopAreaCode}
        </if>
        <if test="param.startDate!=null and param.startDate!=''">
            AND ts.create_time &gt;= #{param.startDate}
        </if>
        <if test="param.endDate!=null and param.endDate!=''">
            AND ts.create_time &lt;= #{param.endDate}
        </if>
        GROUP BY ts.recommend_person
        ORDER BY COUNT(ts.shop_id) DESC
    </select>
</mapper>