diff --git a/virtual-patient-web/src/main/java/com/supervision/controller/AskDiagnosisResultController.java b/virtual-patient-web/src/main/java/com/supervision/controller/AskDiagnosisResultController.java index 313e5b9e..e4245d1b 100644 --- a/virtual-patient-web/src/main/java/com/supervision/controller/AskDiagnosisResultController.java +++ b/virtual-patient-web/src/main/java/com/supervision/controller/AskDiagnosisResultController.java @@ -1,12 +1,14 @@ package com.supervision.controller; import com.supervision.pojo.vo.DiagnosisResultResVO; -import com.supervision.pojo.vo.FinishAskReqVO; +import com.supervision.pojo.vo.RadarChartResVO; import com.supervision.service.AskDiagnosisResultService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; @Api(tags = "评估详情") @RestController @@ -18,7 +20,13 @@ public class AskDiagnosisResultController { @ApiOperation("查询最终诊断结果") @GetMapping("queryDiagnosisResult") - public DiagnosisResultResVO queryDiagnosisResult(String processId){ + public DiagnosisResultResVO queryDiagnosisResult(String processId) { return askDiagnosisResultService.queryDiagnosisResult(processId); } + + @ApiOperation("查询诊断结果的雷达图") + @GetMapping("queryRadarChart") + public RadarChartResVO queryRadarChart(String processId) { + return askDiagnosisResultService.queryRadarChart(processId); + } } diff --git a/virtual-patient-web/src/main/java/com/supervision/pojo/vo/RadarChartResVO.java b/virtual-patient-web/src/main/java/com/supervision/pojo/vo/RadarChartResVO.java new file mode 100644 index 00000000..99d7cf2d --- /dev/null +++ b/virtual-patient-web/src/main/java/com/supervision/pojo/vo/RadarChartResVO.java @@ -0,0 +1,20 @@ +package com.supervision.pojo.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class RadarChartResVO { + + // 生成问诊雷达图 + private BigDecimal askChart; + // 生成体格检查雷达图 + private BigDecimal physicalChart; + // 生成辅助检查雷达图 + private BigDecimal ancillaryChart; + // 生成处置计划雷达图 + private BigDecimal treatmentPlanChart; + // 临床思维=前面几项平均值 + private BigDecimal clinicalThinking; +} diff --git a/virtual-patient-web/src/main/java/com/supervision/service/AskDiagnosisResultService.java b/virtual-patient-web/src/main/java/com/supervision/service/AskDiagnosisResultService.java index b76ce9e6..feb6da81 100644 --- a/virtual-patient-web/src/main/java/com/supervision/service/AskDiagnosisResultService.java +++ b/virtual-patient-web/src/main/java/com/supervision/service/AskDiagnosisResultService.java @@ -1,10 +1,11 @@ package com.supervision.service; import com.supervision.pojo.vo.DiagnosisResultResVO; -import com.supervision.pojo.vo.FinishAskReqVO; -import org.springframework.web.bind.annotation.RequestBody; +import com.supervision.pojo.vo.RadarChartResVO; public interface AskDiagnosisResultService { DiagnosisResultResVO queryDiagnosisResult(String processId); + + RadarChartResVO queryRadarChart(String processId); } diff --git a/virtual-patient-web/src/main/java/com/supervision/service/impl/AskDiagnosisResultServiceImpl.java b/virtual-patient-web/src/main/java/com/supervision/service/impl/AskDiagnosisResultServiceImpl.java index 1f3a5429..47feeb7b 100644 --- a/virtual-patient-web/src/main/java/com/supervision/service/impl/AskDiagnosisResultServiceImpl.java +++ b/virtual-patient-web/src/main/java/com/supervision/service/impl/AskDiagnosisResultServiceImpl.java @@ -4,10 +4,12 @@ package com.supervision.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import com.supervision.model.*; +import com.supervision.exception.BusinessException; import com.supervision.model.Process; +import com.supervision.model.*; import com.supervision.pojo.vo.*; import com.supervision.service.*; import com.supervision.vo.ask.TreatmentPlanRecordVo; @@ -17,6 +19,8 @@ import com.supervision.vo.result.PhysicalRecordByResultDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; @@ -49,6 +53,10 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService private final DiseaseTreatmentPlanDrugService diseaseTreatmentPlanDrugService; + private final DiseasePhysicalService diseasePhysicalService; + + private final DiseaseAncillaryService diseaseAncillaryService; + @Override public DiagnosisResultResVO queryDiagnosisResult(String processId) { @@ -284,4 +292,165 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService } + /** + * 生成雷达图 + *
+ * ( 用户命中病历配置问题数 / 病历问题总数 ) * (用户提问命中病历配置问题数 / 用户实际提问的数量 ) + *
+ * Q:是否要区分是否是正常的检查结果?
+ * A:雷达图 不管正常异常检查结果 只看该不该检查这个项目
+ * Q:该不该,指的是病历的配置项是吗?只要配置了,就是该检查的
+ * A:是的
+ *
+ * @param processId
+ */
+ @Override
+ public RadarChartResVO queryRadarChart(String processId) {
+ Process process = Optional.ofNullable(processService.getById(processId)).orElseThrow(() -> new BusinessException("未找到流程"));
+ // 生成问诊雷达图
+ BigDecimal askChart = computeAskChart(process);
+ // 生成体格检查雷达图
+ BigDecimal physicalChart = computePhysicalChart(process);
+ // 生成辅助检查雷达图
+ BigDecimal ancillaryChart = computeAncillaryChart(process);
+ // 生成处置计划雷达图
+ BigDecimal treatmentPlanChart = computeTreatmentPlanChart(process);
+ RadarChartResVO radarChartResVO = new RadarChartResVO();
+ radarChartResVO.setAskChart(askChart);
+ radarChartResVO.setPhysicalChart(physicalChart);
+ radarChartResVO.setAncillaryChart(ancillaryChart);
+ radarChartResVO.setTreatmentPlanChart(treatmentPlanChart);
+ BigDecimal clinicalThinking = NumberUtil.add(askChart, physicalChart, ancillaryChart, treatmentPlanChart).divide(BigDecimal.valueOf(4), 1, RoundingMode.HALF_UP);
+ radarChartResVO.setClinicalThinking(clinicalThinking);
+ return radarChartResVO;
+
+
+ }
+
+ /**
+ * 生成处置计划雷达图
+ * ( 用户命中病历治疗计划配置问题数 / 疾病配置的治疗计划总数 ) * (用户命中病历治疗计划配置问题数 / 用户实际填写的治疗计划的数量 )
+ */
+ private BigDecimal computeTreatmentPlanChart(Process process) {
+ // 查询用户填写的治疗计划
+ List