|
|
@@ -4,12 +4,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.etotem.cfc.common.Result;
|
|
|
import com.etotem.cfc.dto.BeijingNutritionDTO.*;
|
|
|
import com.etotem.cfc.dto.IngredientRecommendation;
|
|
|
+import com.etotem.cfc.entity.FamilyMember;
|
|
|
import com.etotem.cfc.entity.Food;
|
|
|
import com.etotem.cfc.entity.HealthGutFlora;
|
|
|
import com.etotem.cfc.entity.HealthReport;
|
|
|
import com.etotem.cfc.entity.MealConfig;
|
|
|
import com.etotem.cfc.kb.BacteriaFoodMapping;
|
|
|
import com.etotem.cfc.mapper.DietPreferencesMapper;
|
|
|
+import com.etotem.cfc.mapper.FamilyMemberMapper;
|
|
|
import com.etotem.cfc.mapper.FoodMapper;
|
|
|
import com.etotem.cfc.mapper.HealthGutFloraMapper;
|
|
|
import com.etotem.cfc.mapper.HealthReportMapper;
|
|
|
@@ -48,6 +50,9 @@ public class BeijingNutritionService {
|
|
|
@Resource
|
|
|
private MealConfigMapper mealConfigMapper;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private FamilyMemberMapper familyMemberMapper;
|
|
|
+
|
|
|
// ============================================================
|
|
|
// 核心推荐引擎
|
|
|
// ============================================================
|
|
|
@@ -247,34 +252,42 @@ public class BeijingNutritionService {
|
|
|
List<IngredientRecommendation> result = new ArrayList<>();
|
|
|
|
|
|
// 1. 查 meal_configs → participant_member_ids
|
|
|
- LambdaQueryWrapper<com.etotem.cfc.entity.MealConfig> configWrapper = new LambdaQueryWrapper<>();
|
|
|
- configWrapper.eq(com.etotem.cfc.entity.MealConfig::getFamilyId, familyId);
|
|
|
- configWrapper.eq(com.etotem.cfc.entity.MealConfig::getConfigDateType, isWeekend(date) ? "weekend" : "weekday");
|
|
|
- List<com.etotem.cfc.entity.MealConfig> mealConfigs = mealConfigMapper.selectList(configWrapper);
|
|
|
-
|
|
|
- if (mealConfigs.isEmpty()) {
|
|
|
- log.warn("家庭 {} 未配置共餐信息", familyId);
|
|
|
- return result;
|
|
|
- }
|
|
|
+ LambdaQueryWrapper<MealConfig> configWrapper = new LambdaQueryWrapper<>();
|
|
|
+ configWrapper.eq(MealConfig::getFamilyId, familyId);
|
|
|
+ configWrapper.eq(MealConfig::getConfigDateType, isWeekend(date) ? "weekend" : "weekday");
|
|
|
+ List<MealConfig> mealConfigs = mealConfigMapper.selectList(configWrapper);
|
|
|
|
|
|
- // 2. 收集所有参与成员
|
|
|
+ // 2. 收集参与成员
|
|
|
Set<Long> participantIds = new HashSet<>();
|
|
|
- for (MealConfig config : mealConfigs) {
|
|
|
- // 解析 participantMemberIds JSON
|
|
|
- try {
|
|
|
- com.fasterxml.jackson.databind.JsonNode nodes = new com.fasterxml.jackson.databind.ObjectMapper().readTree(config.getParticipantMemberIds());
|
|
|
- if (nodes.isArray()) {
|
|
|
- for (com.fasterxml.jackson.databind.JsonNode node : nodes) {
|
|
|
- participantIds.add(node.asLong());
|
|
|
+ if (!mealConfigs.isEmpty()) {
|
|
|
+ for (MealConfig config : mealConfigs) {
|
|
|
+ // 解析 participantMemberIds JSON
|
|
|
+ try {
|
|
|
+ com.fasterxml.jackson.databind.JsonNode nodes = new com.fasterxml.jackson.databind.ObjectMapper().readTree(config.getParticipantMemberIds());
|
|
|
+ if (nodes.isArray()) {
|
|
|
+ for (com.fasterxml.jackson.databind.JsonNode node : nodes) {
|
|
|
+ participantIds.add(node.asLong());
|
|
|
+ }
|
|
|
}
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("解析 participantMemberIds 失败: {}", e.getMessage());
|
|
|
}
|
|
|
- } catch (Exception e) {
|
|
|
- log.warn("解析 participantMemberIds 失败: {}", e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 未配置共餐时,降级为查询该家庭全部成员
|
|
|
if (participantIds.isEmpty()) {
|
|
|
- return result;
|
|
|
+ LambdaQueryWrapper<FamilyMember> memberWrapper = new LambdaQueryWrapper<>();
|
|
|
+ memberWrapper.eq(FamilyMember::getFamilyId, familyId);
|
|
|
+ List<FamilyMember> allMembers = familyMemberMapper.selectList(memberWrapper);
|
|
|
+ for (FamilyMember m : allMembers) {
|
|
|
+ participantIds.add(m.getId());
|
|
|
+ }
|
|
|
+ if (participantIds.isEmpty()) {
|
|
|
+ log.warn("家庭 {} 无任何家庭成员", familyId);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ log.info("家庭 {} 未配置共餐,降级为使用全部 {} 个家庭成员", familyId, allMembers.size());
|
|
|
}
|
|
|
|
|
|
// 3. 查每个 member 的 diet_preferences + health_gut_flora
|