Bläddra i källkod

feat(backend): 三个落库挂点写入 report_blocks(confirmDraft/confirmUpload/编辑)

Xiaogang Liao 1 månad sedan
förälder
incheckning
7b56666754

+ 16 - 0
cfc-backend/src/main/java/com/etotem/cfc/controller/HealthReportController.java

@@ -34,6 +34,8 @@ import com.etotem.cfc.service.HealthReportDraftService;
 import com.etotem.cfc.service.HealthReportService;
 import com.etotem.cfc.service.NutritionDeficiencyService;
 import com.etotem.cfc.service.PdfParseService;
+import com.etotem.cfc.service.ReportBlockAssembler;
+import com.etotem.cfc.service.ReportBlockService;
 import com.etotem.cfc.service.TongueDiagnosisService;
 import com.etotem.cfc.service.api.WechatServiceInterface;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -137,6 +139,12 @@ public class HealthReportController {
     @Resource
     private UserMapper userMapper;
 
+    @Resource
+    private ReportBlockService reportBlockService;
+
+    @Resource
+    private ReportBlockAssembler reportBlockAssembler;
+
     /**
      * 创建健康报告(含指标明细)
      */
@@ -940,6 +948,14 @@ public class HealthReportController {
 
             healthReportDraftService.markConfirmed(draftId, created.getId());
 
+            // 落库通用展示块(blocks 组装失败不阻断确认)
+            try {
+                reportBlockService.save("gut_flora", created.getId(),
+                        reportBlockAssembler.assembleGutFlora(payload));
+            } catch (Exception e) {
+                log.warn("保存gut_flora展示块失败 reportId={}: {}", created.getId(), e.getMessage());
+            }
+
             Map<String, Object> detail = healthReportService.getReportDetail(created.getId());
             if (subjectId != null) {
                 detail.put("subjectId", subjectId);

+ 18 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/DanReportUploadService.java

@@ -48,6 +48,12 @@ public class DanReportUploadService {
     @Resource
     private DimensionScoreService dimensionScoreService;
 
+    @Resource
+    private ReportBlockService reportBlockService;
+
+    @Resource
+    private ReportBlockAssembler reportBlockAssembler;
+
     private final ObjectMapper objectMapper = new ObjectMapper();
 
     // Phase 1: 上传并预览 PDF
@@ -197,6 +203,18 @@ if (!DanReportUpload.DIM_MIND.equals(dimension) && !DanReportUpload.DIM_WISDOM.e
         upload.setUpdatedAt(new Date());
         uploadMapper.updateById(upload);
 
+        // 落库 DAN 展示块(优先 edited_*,否则 parsed_*,与创建 result 同源)
+        try {
+            String itemsJson = upload.getEditedItems() != null ? upload.getEditedItems() : upload.getParsedItems();
+            String summary = upload.getEditedSummary() != null ? upload.getEditedSummary() : upload.getParsedSummary();
+            String suggestions = upload.getEditedSuggestions() != null
+                    ? upload.getEditedSuggestions() : upload.getParsedSuggestions();
+            reportBlockService.save("dan", upload.getId(),
+                    reportBlockAssembler.assembleDanFromJson(itemsJson, summary, suggestions));
+        } catch (Exception e) {
+            log.warn("保存dan展示块失败 uploadId={}: {}", uploadId, e.getMessage());
+        }
+
         try {
             upload.setLinkedResultId(result.getId());
             reportSummaryService.syncFromDanReport(upload);

+ 15 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/HealthReportService.java

@@ -70,6 +70,12 @@ public class HealthReportService {
     @Resource
     private DimensionScoreService dimensionScoreService;
 
+    @Resource
+    private ReportBlockService reportBlockService;
+
+    @Resource
+    private ReportBlockAssembler reportBlockAssembler;
+
     /**
      * 创建健康报告(含指标列表)
      */
@@ -1252,6 +1258,15 @@ public class HealthReportService {
         } catch (Exception e) {
             log.warn("刷新7维健康评分失败: {}", e.getMessage());
         }
+
+        // 编辑后重新组装展示块(第一套键 Map → 标准 Payload → blocks)
+        try {
+            ParsedReportPayload.Payload editedPayload = reportBlockAssembler.fromMap(payload);
+            reportBlockService.save("gut_flora", reportId,
+                    reportBlockAssembler.assembleGutFlora(editedPayload));
+        } catch (Exception e) {
+            log.warn("编辑后刷新展示块失败 reportId={}: {}", reportId, e.getMessage());
+        }
     }
 
     /**