Răsfoiți Sursa

fix(health): 修复编辑路径与读路径的菌群分类归一化缺口

- updateReportFromPayload: gutFlora 写回时加 normalizeFloraCategory/Level,
  防止编辑旧格式报告(菌X构成/中文level)时原样写回脏数据
- getReportDetail: 读回时加 normalizeGutFloraRead 后处理,
  一次性兼容归一化前入库的历史数据(无需迁移脚本)
- normalizeFloraLevel 的 category 参数保持传入以维持语义完整性

至此方案A覆盖完整主链路:
  上传/确认入库(write)✅
  编辑保存(write)✅
  再次查看展示(read)✅
E2E Test Bot 2 luni în urmă
părinte
comite
5a87ce735d

+ 18 - 2
cfc-backend/src/main/java/com/etotem/cfc/service/HealthReportService.java

@@ -533,6 +533,8 @@ public class HealthReportService {
             detail.put("indicators", indicators);
 
             List<HealthGutFlora> gutFlora = getGutFloraByReportId(reportId);
+            // 读回归一化:兼容历史数据(归一化前入库的 category='菌X构成' + level='门/纲/...')
+            normalizeGutFloraRead(gutFlora);
             detail.put("gutFlora", gutFlora);
 
             List<HealthDiseaseRisk> diseaseRisks = getDiseaseRisksByReportId(reportId);
@@ -1458,6 +1460,19 @@ public class HealthReportService {
         return normalized;
     }
 
+    /**
+     * 读回归一化:兼容历史数据(归一化前入库的 category='菌X构成' + level='门/纲/...')。
+     * 仅转换,不落库(避免读操作触发写)。
+     */
+    private void normalizeGutFloraRead(List<HealthGutFlora> gutFlora) {
+        if (gutFlora == null) return;
+        for (HealthGutFlora gf : gutFlora) {
+            String rawCategory = gf.getCategory();
+            gf.setCategory(normalizeFloraCategory(rawCategory));
+            gf.setLevel(normalizeFloraLevel(rawCategory, gf.getLevel()));
+        }
+    }
+
     List<HealthDiseaseRisk> buildDiseaseRisksFromPayload(ParsedReportPayload.Payload payload) {
         List<ParsedReportPayload.DiseaseRisk> list = payload.getDiseaseRisks();
         if (list == null || list.isEmpty()) return new ArrayList<>();
@@ -1611,10 +1626,11 @@ public class HealthReportService {
                         ? item.get("bacteriaValue").toString() : null);
                 flora.setNormalRange((String) item.get("normalRange"));
                 flora.setStatus((String) item.get("status"));
-                flora.setCategory((String) item.get("category"));
+                flora.setCategory(normalizeFloraCategory((String) item.get("category")));
                 flora.setPopulationLevel((String) item.get("populationLevel"));
                 flora.setDetectionRate((String) item.get("detectionRate"));
-                flora.setLevel((String) item.get("level"));
+                flora.setLevel(normalizeFloraLevel((String) item.get("category"),
+                        (String) item.get("level")));
                 flora.setSortOrder(i);
                 healthGutFloraMapper.insert(flora);
             }