HealthReportController.java 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. package com.etotem.cfc.controller;
  2. import com.etotem.cfc.common.Result;
  3. import com.etotem.cfc.entity.HealthIndicator;
  4. import com.etotem.cfc.entity.HealthReport;
  5. import com.etotem.cfc.service.HealthReportService;
  6. import io.swagger.v3.oas.annotations.Operation;
  7. import io.swagger.v3.oas.annotations.tags.Tag;
  8. import org.springframework.web.bind.annotation.*;
  9. import javax.annotation.Resource;
  10. import java.util.List;
  11. import java.util.Map;
  12. /**
  13. * 健康检测报告接口 — 体检报告/菌群检测报告的录入与查询
  14. */
  15. @Tag(name = "健康检测报告", description = "健康报告上传、查询、指标明细")
  16. @RestController
  17. @RequestMapping("/api/health")
  18. public class HealthReportController {
  19. @Resource
  20. private HealthReportService healthReportService;
  21. /**
  22. * 创建健康报告(含指标明细)
  23. */
  24. @Operation(summary = "创建健康报告")
  25. @PostMapping("/report/create")
  26. public Result<HealthReport> createReport(
  27. @RequestBody Map<String, Object> params,
  28. @RequestAttribute("userId") Long userId) {
  29. Long childId = params.get("childId") != null
  30. ? Long.valueOf(params.get("childId").toString()) : null;
  31. if (childId == null) {
  32. return Result.error("childId不能为空");
  33. }
  34. String reportType = (String) params.get("reportType");
  35. if (reportType == null) {
  36. return Result.error("reportType不能为空: physical_exam / gut_flora");
  37. }
  38. // 构建报告主体
  39. HealthReport report = new HealthReport();
  40. report.setUserId(childId);
  41. report.setReportType(reportType);
  42. report.setOverallScore(params.get("overallScore") != null
  43. ? Integer.valueOf(params.get("overallScore").toString()) : null);
  44. report.setGutHealthScore(params.get("gutHealthScore") != null
  45. ? Integer.valueOf(params.get("gutHealthScore").toString()) : null);
  46. report.setChronicDiseaseScore(params.get("chronicDiseaseScore") != null
  47. ? Integer.valueOf(params.get("chronicDiseaseScore").toString()) : null);
  48. report.setNutritionScore(params.get("nutritionScore") != null
  49. ? Integer.valueOf(params.get("nutritionScore").toString()) : null);
  50. report.setGutAge((String) params.get("gutAge"));
  51. report.setGutType((String) params.get("gutType"));
  52. report.setFileUrl((String) params.get("fileUrl"));
  53. report.setRemark((String) params.get("remark"));
  54. // 报告日期(默认当天)
  55. report.setReportDate(new java.util.Date());
  56. // 指标明细(可选)
  57. @SuppressWarnings("unchecked")
  58. List<Map<String, Object>> indicatorList =
  59. (List<Map<String, Object>>) params.get("indicators");
  60. List<HealthIndicator> indicators = null;
  61. if (indicatorList != null) {
  62. indicators = new java.util.ArrayList<>();
  63. for (int i = 0; i < indicatorList.size(); i++) {
  64. Map<String, Object> item = indicatorList.get(i);
  65. HealthIndicator ind = new HealthIndicator();
  66. ind.setCategory((String) item.get("category"));
  67. ind.setIndicatorName((String) item.get("indicatorName"));
  68. ind.setIndicatorValue(item.get("indicatorValue") != null
  69. ? item.get("indicatorValue").toString() : null);
  70. ind.setUnit((String) item.get("unit"));
  71. ind.setRefRange((String) item.get("refRange"));
  72. ind.setStatus((String) item.get("status"));
  73. ind.setSortOrder(i);
  74. indicators.add(ind);
  75. }
  76. }
  77. HealthReport created = healthReportService.createReport(report, indicators);
  78. return Result.success(created);
  79. }
  80. /**
  81. * 获取孩子的最新健康报告
  82. */
  83. @Operation(summary = "获取最新健康报告")
  84. @PostMapping("/report/latest")
  85. public Result<HealthReport> getLatestReport(
  86. @RequestBody Map<String, Object> params) {
  87. Long childId = params.get("childId") != null
  88. ? Long.valueOf(params.get("childId").toString()) : null;
  89. if (childId == null) {
  90. return Result.error("childId不能为空");
  91. }
  92. HealthReport report = healthReportService.getLatestReport(childId);
  93. return Result.success(report);
  94. }
  95. /**
  96. * 获取孩子的所有健康报告列表
  97. */
  98. @Operation(summary = "获取健康报告列表")
  99. @PostMapping("/report/list")
  100. public Result<List<HealthReport>> listReports(
  101. @RequestBody Map<String, Object> params) {
  102. Long childId = params.get("childId") != null
  103. ? Long.valueOf(params.get("childId").toString()) : null;
  104. if (childId == null) {
  105. return Result.error("childId不能为空");
  106. }
  107. List<HealthReport> reports = healthReportService.getUserReports(childId);
  108. return Result.success(reports);
  109. }
  110. /**
  111. * 获取某份报告的所有指标明细
  112. */
  113. @Operation(summary = "获取报告指标明细")
  114. @PostMapping("/indicator/list")
  115. public Result<List<HealthIndicator>> listIndicators(
  116. @RequestBody Map<String, Object> params) {
  117. Long reportId = params.get("reportId") != null
  118. ? Long.valueOf(params.get("reportId").toString()) : null;
  119. if (reportId == null) {
  120. return Result.error("reportId不能为空");
  121. }
  122. List<HealthIndicator> indicators = healthReportService.getReportIndicators(reportId);
  123. return Result.success(indicators);
  124. }
  125. /**
  126. * 获取孩子身体维度数据详情(健康指标解读)
  127. */
  128. @Operation(summary = "获取身体维度数据详情")
  129. @PostMapping("/body/detail")
  130. public Result<List<HealthIndicator>> getBodyDetail(
  131. @RequestBody Map<String, Object> params) {
  132. Long childId = params.get("childId") != null
  133. ? Long.valueOf(params.get("childId").toString()) : null;
  134. if (childId == null) {
  135. return Result.error("childId不能为空");
  136. }
  137. List<HealthIndicator> detail = healthReportService.getBodyDetail(childId);
  138. return Result.success(detail);
  139. }
  140. /**
  141. * 获取报告完整详情(含指标明细 + 菌群数据 + 疾病风险评估)
  142. */
  143. @Operation(summary = "获取报告完整详情")
  144. @PostMapping("/report/detail")
  145. public Result<Map<String, Object>> getReportDetail(
  146. @RequestBody Map<String, Object> params) {
  147. Long reportId = params.get("reportId") != null
  148. ? Long.valueOf(params.get("reportId").toString()) : null;
  149. if (reportId == null) {
  150. return Result.error("reportId不能为空");
  151. }
  152. Map<String, Object> detail = healthReportService.getReportDetail(reportId);
  153. return Result.success(detail);
  154. }
  155. /**
  156. * 归档报告
  157. */
  158. @Operation(summary = "归档健康报告")
  159. @PostMapping("/report/archive")
  160. public Result<String> archiveReport(
  161. @RequestBody Map<String, Object> params) {
  162. Long reportId = params.get("reportId") != null
  163. ? Long.valueOf(params.get("reportId").toString()) : null;
  164. if (reportId == null) {
  165. return Result.error("reportId不能为空");
  166. }
  167. healthReportService.archiveReport(reportId);
  168. return Result.success("报告已归档");
  169. }
  170. }