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 >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND create_time <= #{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 >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND toc.create_time <= #{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 >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND toc.create_time <= #{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 >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND toc.create_time <= #{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 >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND create_time <= #{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 >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND ts.create_time <= #{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 >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND ts.create_time <= #{param.endDate} </if> GROUP BY ts.recommend_person ORDER BY COUNT(ts.shop_id) DESC </select> </mapper>