Просмотр исходного кода

feat(backend): ReportCollectService 与 LangGraphReportParseService 映射 gutStatusLevel 与 relatedBacteria,实现 P0+P1 完整链路

Ultraworked with [Sisyphus](https://github.com/obra/sisyphus) - Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
E2E Test Bot 11 часов назад
Родитель
Сommit
ccaa2f1ceb

+ 19 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/LangGraphReportParseService.java

@@ -255,6 +255,7 @@ public class LangGraphReportParseService {
             summary.setCoreGenusScore(toInteger(overview.get("coreGenusScore")));
             summary.setCoreGenusScore(toInteger(overview.get("coreGenusScore")));
             summary.setGutAge(objectToString(overview.get("gutAge")));
             summary.setGutAge(objectToString(overview.get("gutAge")));
             summary.setGutType(objectToString(overview.get("gutType")));
             summary.setGutType(objectToString(overview.get("gutType")));
+            summary.setGutStatusLevel(objectToString(overview.get("gutStatusLevel")));
             summary.setShannonIndex(objectToString(overview.get("shannonIndex")));
             summary.setShannonIndex(objectToString(overview.get("shannonIndex")));
             summary.setReportNumber(objectToString(overview.get("report_number")));
             summary.setReportNumber(objectToString(overview.get("report_number")));
             summary.setReportDate(objectToString(overview.get("report_date")));
             summary.setReportDate(objectToString(overview.get("report_date")));
@@ -270,6 +271,24 @@ public class LangGraphReportParseService {
                 risk.setDiseaseName(objectToString(dr.get("name")));
                 risk.setDiseaseName(objectToString(dr.get("name")));
                 risk.setRiskValue(objectToString(dr.get("value")));
                 risk.setRiskValue(objectToString(dr.get("value")));
                 risk.setRiskLevel(objectToString(dr.get("status")));
                 risk.setRiskLevel(objectToString(dr.get("status")));
+                Object rb = dr.get("related_bacteria");
+                if (rb instanceof List && !((List<?>) rb).isEmpty()) {
+                    List<ParsedReportPayload.RelatedBacterium> bacteria = new ArrayList<>();
+                    for (Object o : (List<?>) rb) {
+                        if (o instanceof Map) {
+                            Map<String, Object> bm = (Map<String, Object>) o;
+                            ParsedReportPayload.RelatedBacterium b = new ParsedReportPayload.RelatedBacterium();
+                            b.setBacteria(objectToString(bm.get("bacteria")));
+                            b.setCorrelation(objectToString(bm.get("correlation")));
+                            b.setValue(objectToString(bm.get("value")));
+                            b.setStatus(objectToString(bm.get("status")));
+                            bacteria.add(b);
+                        }
+                    }
+                    if (!bacteria.isEmpty()) {
+                        risk.setRelatedBacteria(bacteria);
+                    }
+                }
                 risks.add(risk);
                 risks.add(risk);
             }
             }
             payload.setDiseaseRisks(risks);
             payload.setDiseaseRisks(risks);

+ 9 - 1
cfc-backend/src/main/java/com/etotem/cfc/service/ReportCollectService.java

@@ -431,7 +431,7 @@ public class ReportCollectService {
 
 
         JsonNode sr = opencodeSection(pdfText, fileName,
         JsonNode sr = opencodeSection(pdfText, fileName,
                 "只提取 summary 和 diseaseRisks 两部分,其余字段不返回",
                 "只提取 summary 和 diseaseRisks 两部分,其余字段不返回",
-                "{\"summary\":{\"overallScore\":0,\"gutHealthScore\":0,\"chronicDiseaseScore\":0,\"nutritionScore\":0,\"balanceScore\":0,\"diversityScore\":0,\"beneficialScore\":0,\"harmfulScore\":0,\"coreGenusScore\":0,\"gutAge\":\"\",\"gutType\":\"\",\"shannonIndex\":\"\",\"reportNumber\":\"\",\"reportDate\":\"yyyy-MM-dd\",\"personName\":\"\",\"gender\":\"\",\"age\":0,\"birthday\":\"\"},\"diseaseRisks\":[{\"diseaseName\":\"\",\"riskValue\":\"\",\"riskLevel\":\"\"}]}");
+                "{\"summary\":{\"overallScore\":0,\"gutHealthScore\":0,\"chronicDiseaseScore\":0,\"nutritionScore\":0,\"balanceScore\":0,\"diversityScore\":0,\"beneficialScore\":0,\"harmfulScore\":0,\"coreGenusScore\":0,\"gutAge\":\"\",\"gutType\":\"\",\"gutStatusLevel\":\"\",\"shannonIndex\":\"\",\"reportNumber\":\"\",\"reportDate\":\"yyyy-MM-dd\",\"personName\":\"\",\"gender\":\"\",\"age\":0,\"birthday\":\"\"},\"diseaseRisks\":[{\"diseaseName\":\"\",\"riskValue\":\"\",\"riskLevel\":\"\",\"relatedBacteria\":[{\"bacteria\":\"\",\"correlation\":\"\",\"value\":\"\",\"status\":\"\"}]}]}");
         if (sr != null) {
         if (sr != null) {
             if (sr.has("summary") && !sr.get("summary").isNull()) {
             if (sr.has("summary") && !sr.get("summary").isNull()) {
                 payload.setSummary(objectMapper.convertValue(sr.get("summary"), ParsedReportPayload.Summary.class));
                 payload.setSummary(objectMapper.convertValue(sr.get("summary"), ParsedReportPayload.Summary.class));
@@ -701,6 +701,7 @@ public class ReportCollectService {
             report.setCoreGenusScore(s.getCoreGenusScore());
             report.setCoreGenusScore(s.getCoreGenusScore());
             report.setGutAge(s.getGutAge());
             report.setGutAge(s.getGutAge());
             report.setGutType(s.getGutType());
             report.setGutType(s.getGutType());
+            report.setGutStatusLevel(s.getGutStatusLevel());
             report.setShannonIndex(s.getShannonIndex());
             report.setShannonIndex(s.getShannonIndex());
             report.setReportNumber(s.getReportNumber());
             report.setReportNumber(s.getReportNumber());
             report.setPersonName(s.getPersonName());
             report.setPersonName(s.getPersonName());
@@ -816,6 +817,13 @@ public class ReportCollectService {
             dr.setDiseaseName(pr.getDiseaseName());
             dr.setDiseaseName(pr.getDiseaseName());
             dr.setRiskValue(pr.getRiskValue());
             dr.setRiskValue(pr.getRiskValue());
             dr.setRiskLevel(pr.getRiskLevel());
             dr.setRiskLevel(pr.getRiskLevel());
+            if (pr.getRelatedBacteria() != null && !pr.getRelatedBacteria().isEmpty()) {
+                try {
+                    dr.setRelatedBacteria(objectMapper.writeValueAsString(pr.getRelatedBacteria()));
+                } catch (Exception e) {
+                    log.warn("序列化相关菌失败: {}", e.getMessage());
+                }
+            }
             risks.add(dr);
             risks.add(dr);
         }
         }
         return risks;
         return risks;