Pārlūkot izejas kodu

fix: 七维健康图无个人数据时返回默认值 65

当成员无记录或生日为空时,仍返回 7 维默认分数

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
User 2 mēneši atpakaļ
vecāks
revīzija
aac600f93a

+ 84 - 0
cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminPromotionTierController.java

@@ -0,0 +1,84 @@
+package com.etotem.cfc.controller.admin;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.common.Result;
+import com.etotem.cfc.entity.PromotionTier;
+import com.etotem.cfc.entity.PromotionTierConfig;
+import com.etotem.cfc.mapper.PromotionTierConfigMapper;
+import com.etotem.cfc.service.PromotionTierEvalService;
+import com.etotem.cfc.service.PromotionTierService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/admin/promotion-tier")
+public class AdminPromotionTierController {
+
+    @Resource
+    private PromotionTierConfigMapper configMapper;
+
+    @Resource
+    private PromotionTierEvalService evalService;
+
+    @Resource
+    private PromotionTierService promotionTierService;
+
+    @PostMapping("/list")
+    public Result<List<PromotionTierConfig>> list() {
+        return Result.success(configMapper.selectList(
+                new LambdaQueryWrapper<PromotionTierConfig>().orderByAsc(PromotionTierConfig::getSortOrder)
+        ));
+    }
+
+    @PostMapping("/get")
+    public Result<PromotionTierConfig> get(@RequestBody Map<String, Object> params) {
+        Long id = Long.valueOf(params.get("id").toString());
+        return Result.success(configMapper.selectById(id));
+    }
+
+    @PostMapping("/save")
+    public Result<String> save(@RequestBody PromotionTierConfig config) {
+        if (config.getId() != null) {
+            config.setUpdatedAt(new Date());
+            configMapper.updateById(config);
+        } else {
+            config.setCreatedAt(new Date());
+            config.setUpdatedAt(new Date());
+            if (config.getEnabled() == null) {
+                config.setEnabled(1);
+            }
+            configMapper.insert(config);
+        }
+        return Result.success("已保存");
+    }
+
+    @PostMapping("/delete")
+    public Result<String> delete(@RequestBody Map<String, Object> params) {
+        Long id = Long.valueOf(params.get("id").toString());
+        configMapper.deleteById(id);
+        return Result.success("已删除");
+    }
+
+    @PostMapping("/evaluate-all")
+    public Result<String> evaluateAll() {
+        int changed = evalService.evaluateAllUsers();
+        return Result.success("评估完成,共变更" + changed + "个用户等级");
+    }
+
+    @PostMapping("/user-tier")
+    public Result<Map<String, Object>> getUserTier(@RequestBody Map<String, Object> params) {
+        Long userId = Long.valueOf(params.get("userId").toString());
+        PromotionTier tier = promotionTierService.getCurrentTier(userId);
+        String evaluatedTier = evalService.evaluateTier(userId);
+        Map<String, Object> result = new HashMap<>();
+        result.put("currentTier", tier);
+        result.put("evaluatedTier", evaluatedTier);
+        result.put("matched", tier != null && evaluatedTier.equals(tier.getTier()));
+        return Result.success(result);
+    }
+}

+ 10 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/impl/DimensionScoreServiceImpl.java

@@ -144,6 +144,16 @@ public class DimensionScoreServiceImpl implements DimensionScoreService {
                     }
                 }
                 validCount = items.size();
+            } else {
+                // 无成员记录或生日时使用默认值 65
+                for (HealthDimensionVO.DimensionItem item : items) {
+                    item.setScore(BigDecimal.valueOf(65));
+                    item.setLevel(calcLevel(65));
+                    item.setPercentile(null);
+                    item.setDataSource("AVERAGE");
+                    totalScore = totalScore.add(BigDecimal.valueOf(65));
+                }
+                validCount = items.size();
             }
         }
 

+ 7 - 0
cfc-frontend/components/HealthDimensionsSection.vue

@@ -37,6 +37,13 @@
 
 <script>
 var DIM_ICONS = {
+  growth: '\u{1F4AA}',
+  sleep: '\u{1F634}',
+  vision: '\u{1F441}',
+  immunity: '\u{1F6E1}',
+  nutrition: '\u{1F966}',
+  gut: '\u{1F9A9}',
+  exercise: '\u{1F3C3}',
   body: '\u{1F3C3}',
   mind: '\u{1F9E0}',
   wisdom: '\u{1F4D6}',