feat:菜品喜好排行

This commit is contained in:
dzc committed 2025-10-15 11:12:34 +08:00
1 parent 85c58c8303
commit ab3cffc35d
8 files changed
+63 -18

No files matched your search

@@ -3,6 +3,7 @@ package com.bsd.pjcloud.hard.api.dto.order.app;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* 个人菜品喜好排行
@@ -12,6 +13,8 @@ public class HardAppProductLikeTopDto {
private Long userId;
private List<Long> classifyIds;
private LocalDateTime[] payTimeList;
}
@@ -21,6 +21,8 @@ public class PanelProductDto {
private List<String> mchTypeCodes;
private List<Long> classifyIds;
private String hourTypeIsNull;
private String hourType;
@@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.api.entity.panel;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -14,12 +15,11 @@ import java.time.LocalDateTime;
*/
@Data
@TenantTable
@TableName("hard_panel_setting")
@TableName(value = "hard_panel_setting", autoResultMap = true)
@EqualsAndHashCode(callSuper = true)
@Schema(description = "大屏配置表")
public class HardPanelSettingEntity extends Model<HardPanelSettingEntity> {
/**
* 主键ID
*/
@@ -28,10 +28,11 @@ public class HardPanelSettingEntity extends Model<HardPanelSettingEntity> {
private Long id;
/**
* 营养分析-菜品排行-排除菜品分类
* 营养分析json配置
*/
@Schema(description = "营养分析-菜品排行-排除菜品分类")
private String nutritionTopExcludeClassify;
@Schema(description = "营养分析json配置")
@TableField(typeHandler = JacksonTypeHandler.class)
private HardPanelSettingShare.NutritionSetting nutritionSetting;
/**
* 创建者
@@ -0,0 +1,29 @@
package com.bsd.pjcloud.hard.api.entity.panel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
public class HardPanelSettingShare {
/**
* 营养分析配置
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
static public class NutritionSetting {
/**
* 喜爱菜品排行需要排除的菜品分类
*/
private List<Long> topExcludeCategoryIds;
}
}
@@ -1,28 +1,16 @@
package com.bsd.pjcloud.hard.controller.panel;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.log.annotation.SysLog;
import com.bsd.pjcloud.hard.api.dto.panel.HardPanelSettingDto;
import com.bsd.pjcloud.hard.api.entity.panel.HardPanelSettingEntity;
import com.bsd.pjcloud.hard.service.HardPanelSettingService;
import org.springframework.security.access.prepost.PreAuthorize;
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.http.HttpHeaders;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Objects;
/**
* 大屏配置表
*/
@@ -36,7 +24,7 @@ public class HardPanelSettingController {
private final HardPanelSettingService hardPanelSettingService;
@Operation(summary = "查询配置", description = "查询配置")
@GetMapping("/")
@GetMapping("/setting")
public R getSetting() {
return R.ok(hardPanelSettingService.getSetting());
}
@@ -1,6 +1,7 @@
package com.bsd.pjcloud.hard.service.impl.panel;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.hard.api.dto.panel.HardPanelSettingDto;
@@ -1,13 +1,17 @@
package com.bsd.pjcloud.hard.service.impl.panel;
import cn.hutool.core.util.ObjectUtil;
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;
import com.bsd.pjcloud.hard.api.entity.panel.HardPanelSettingEntity;
import com.bsd.pjcloud.hard.api.entity.panel.HardPanelSettingShare;
import com.bsd.pjcloud.hard.api.vo.hard.PanelPorductVo;
import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductByClassifyVo;
import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductLikeTopVo;
import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper;
import com.bsd.pjcloud.hard.service.HardCanteenTotalService;
import com.bsd.pjcloud.hard.service.HardPanelSettingService;
import com.bsd.pjcloud.hard.service.PanelNutritionService;
import com.bsd.pjcloud.wallet.api.feign.RemoteMchService;
import lombok.RequiredArgsConstructor;
@@ -26,6 +30,7 @@ public class PanelNutritionServiceImpl implements PanelNutritionService {
private final HardOrderMapper hardOrderMapper;
private final HardCanteenTotalService canteenTotalService;
private final HardPanelSettingService panelSettingService;
private final RemoteMchService remoteMchService;
@@ -54,6 +59,16 @@ public class PanelNutritionServiceImpl implements PanelNutritionService {
@Override
public List<PanelPorductVo> cuisineTop(PanelProductDto dto) {
HardAppProductLikeTopDto likeQuery = new HardAppProductLikeTopDto();
// 查询配置
HardPanelSettingEntity setting = panelSettingService.getSetting();
if (ObjectUtil.isNotEmpty(setting) && ObjectUtil.isNotEmpty(setting.getNutritionSetting())) {
HardPanelSettingShare.NutritionSetting nutritionSetting = setting.getNutritionSetting();
if (ObjectUtil.isNotEmpty(nutritionSetting.getTopExcludeCategoryIds())) {
likeQuery.setClassifyIds(nutritionSetting.getTopExcludeCategoryIds());
}
}
likeQuery.setPayTimeList(dto.getTotalTimeList());
List<HardAppProductLikeTopVo> list = canteenTotalService.productLikeTop(likeQuery);
return list.stream().map((item) -> {
@@ -378,6 +378,12 @@
<if test="dto.payTimeList != null and dto.payTimeList.length == 2">
and o.pay_time between #{dto.payTimeList[0]} and #{dto.payTimeList[1]}
</if>
<if test="dto.classifyIds != null and dto.classifyIds.size() != 0">
and s.category_id not in
<foreach collection="dto.classifyIds" item="v" open="(" close=")" separator=",">
#{v}
</foreach>
</if>
</where>
group by a.product_id
order by SUM(a.product_count) desc