diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/panel/PanelProductDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/panel/PanelProductDto.java index 0d3345f6c..8994bb334 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/panel/PanelProductDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/panel/PanelProductDto.java @@ -23,6 +23,8 @@ public class PanelProductDto { private List classifyIds; + private List excludeClassifyIds; + private String hourTypeIsNull; private String hourType; diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/panel/HardPanelSettingShare.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/panel/HardPanelSettingShare.java index e38e18fd5..3e7fb47ae 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/panel/HardPanelSettingShare.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/panel/HardPanelSettingShare.java @@ -39,6 +39,11 @@ public class HardPanelSettingShare { */ private List zsCategoryIds; + /** + * 复购排行需要排除的菜品分类 + */ + private List repurchaseTopExcludeCategoryIds; + } } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/panel/PanelCanteenController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/panel/PanelCanteenController.java index f9f51c083..2c9a13927 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/panel/PanelCanteenController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/panel/PanelCanteenController.java @@ -73,6 +73,7 @@ public class PanelCanteenController { dto.setTotalTimeList(DateRangeTool.transitionDateTypeToDateTimeList(dto.getDateRangeType())); } dto.setMchTypeCodes(List.of(MerchantTypeEnum.CANTEEN.getType())); + dto.setLimit(5L); return R.ok(panelCanteenService.mchPayPersonCount(dto)); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/panel/PanelNutritionController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/panel/PanelNutritionController.java index 34c1f68a5..73ed0436e 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/panel/PanelNutritionController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/panel/PanelNutritionController.java @@ -1,6 +1,7 @@ package com.bsd.pjcloud.hard.controller.panel; import cn.hutool.core.util.ObjectUtil; +import com.bsd.pjcloud.common.core.constant.enums.DateRangeTypeEnum; import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; import com.bsd.pjcloud.common.core.util.DateRangeTool; import com.bsd.pjcloud.common.core.util.R; @@ -83,10 +84,12 @@ public class PanelNutritionController { @PostMapping(value = "/repurchase") @Operation(summary = "复购排行榜") public R> repurchase(@RequestBody PanelProductDto dto) { + dto.setDateRangeType(DateRangeTypeEnum.THIS_YEAR); if (ObjectUtil.isNotEmpty(dto.getDateRangeType()) && ObjectUtil.isEmpty(dto.getTotalTimeList())) { dto.setTotalTimeList(DateRangeTool.transitionDateTypeToDateTimeList(dto.getDateRangeType())); } dto.setMchTypeCodes(List.of(MerchantTypeEnum.CANTEEN.getType())); + dto.setLimit(5L); return R.ok(panelNutritionService.repurchase(dto)); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java index 1c4472a2f..ac43e58ee 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java @@ -153,4 +153,9 @@ public interface HardOrderMapper extends PjcloudBaseMapper { * 用餐数据统计(根据商户统计) */ List groupByMch(@Param("dto") PanelProductDto dto); + + /** + * 复购排行榜 + */ + List repurchase(@Param("dto") PanelProductDto dto); } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/panel/PanelCanteenServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/panel/PanelCanteenServiceImpl.java index 420f8260d..df0b7874a 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/panel/PanelCanteenServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/panel/PanelCanteenServiceImpl.java @@ -47,7 +47,7 @@ public class PanelCanteenServiceImpl implements PanelCanteenService { PanelProductDto queryDto = BeanUtil.toBean(dto, PanelProductDto.class); queryDto.setHourType(hourType.getType()); List sqlList = new ArrayList<>(); - if (ObjectUtil.equals(dto.getDateRangeType(), DateRangeTypeEnum.THIS_YEAR.getType())) { + if (ObjectUtil.equals(dto.getDateRangeType(), DateRangeTypeEnum.THIS_YEAR)) { sqlList = hardOrderMapper.groupByMonthAndHourType(queryDto); } else { sqlList = hardOrderMapper.groupByTimeAndHourType(queryDto); diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/panel/PanelNutritionServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/panel/PanelNutritionServiceImpl.java index bf81c1b69..69208b4bb 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/panel/PanelNutritionServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/panel/PanelNutritionServiceImpl.java @@ -2,6 +2,8 @@ package com.bsd.pjcloud.hard.service.impl.panel; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; +import com.bsd.pjcloud.canteen.api.feign.RemoteCanteenCategoryService; +import com.bsd.pjcloud.canteen.entity.CanteenCategoryEntity; import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductByClassifyDto; import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductLikeTopDto; import com.bsd.pjcloud.hard.api.dto.panel.PanelProductDto; @@ -28,6 +30,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; @Validated @Slf4j @@ -41,6 +44,7 @@ public class PanelNutritionServiceImpl implements PanelNutritionService { private final HardPanelSettingService panelSettingService; private final RemoteMchService remoteMchService; + private final RemoteCanteenCategoryService canteenCategoryService; /** * 食堂用餐分类统计 @@ -83,6 +87,8 @@ public class PanelNutritionServiceImpl implements PanelNutritionService { PanelPorductVo entity = new PanelPorductVo(); entity.setProductName(item.getProductName()); entity.setProductId(item.getProductId()); + entity.setClassifyId(item.getClassifyId()); + entity.setClassifyName(item.getClassifyName()); entity.setBuyProductCount(item.getPayCount()); return entity; }).toList(); @@ -186,8 +192,39 @@ public class PanelNutritionServiceImpl implements PanelNutritionService { */ @Override public List repurchase(PanelProductDto dto) { - PanelPorductVo panelPorductVo = hardOrderMapper.groupCount(dto); - return List.of(); + // 查询配置 + HardPanelSettingEntity setting = panelSettingService.getSetting(); + if (ObjectUtil.isNotEmpty(setting) && ObjectUtil.isNotEmpty(setting.getNutritionSetting())) { + HardPanelSettingShare.NutritionSetting nutritionSetting = setting.getNutritionSetting(); + if (ObjectUtil.isNotEmpty(nutritionSetting.getRepurchaseTopExcludeCategoryIds())) { + dto.setExcludeClassifyIds(nutritionSetting.getRepurchaseTopExcludeCategoryIds()); + } + } + + List list = hardOrderMapper.repurchase(dto); + // 处理查询出来的数据 + disposeRepurchaseList(list, dto); + return list; + } + + private void disposeRepurchaseList(List list, PanelProductDto dto) { + if (ObjectUtil.isEmpty(list)) return; + // 处理菜品分类 + List classifyList = list.stream().map(PanelPorductVo::getClassifyId).filter(ObjectUtil::isNotEmpty).distinct().toList(); + if (ObjectUtil.isNotEmpty(classifyList)) { + List categoryList = canteenCategoryService.getAllSimple(null, null).getData(); + if (ObjectUtil.isNotEmpty(categoryList)) { + Map categoryMap = categoryList.stream().collect(Collectors.toMap(CanteenCategoryEntity::getId, v -> v)); + if (ObjectUtil.isNotEmpty(categoryMap)) { + for (PanelPorductVo i : list) { + CanteenCategoryEntity category = categoryMap.get(i.getClassifyId()); + if (ObjectUtil.isNotEmpty(category)) { + i.setClassifyName(category.getName()); + } + } + } + } + } } private List> nutritionSetting() { diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml index e835b8002..245a299b8 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml @@ -318,7 +318,7 @@ group by s.category_id - order by s.category_id + order by SUM(a.product_count) desc limit 5 diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml index 13147c267..91866ecc7 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml @@ -802,4 +802,55 @@ limit #{dto.limit} + + + \ No newline at end of file