diff --git a/virtual-patient-web/src/main/java/com/supervision/pojo/vo/ChartNodeVO.java b/virtual-patient-web/src/main/java/com/supervision/pojo/vo/ChartNodeVO.java new file mode 100644 index 00000000..20961858 --- /dev/null +++ b/virtual-patient-web/src/main/java/com/supervision/pojo/vo/ChartNodeVO.java @@ -0,0 +1,34 @@ +package com.supervision.pojo.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class ChartNodeVO { + + /** + * 属性占比 + */ + private BigDecimal nodePer; + + /** + * 总数=其他三项之和 + */ + private Integer total; + + /** + * 用户命中的数量 + */ + private Integer correct; + + /** + * 不正确,用户未命中的数量=病例库中的总数-用户命中的数量 + */ + private Integer unCorrect; + + /** + * 标准,病例库中配置的数量 + */ + private Integer standard; +} 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 index 99d7cf2d..16a2c59d 100644 --- 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 @@ -2,19 +2,17 @@ package com.supervision.pojo.vo; import lombok.Data; -import java.math.BigDecimal; - @Data public class RadarChartResVO { // 生成问诊雷达图 - private BigDecimal askChart; + private ChartNodeVO askChart; // 生成体格检查雷达图 - private BigDecimal physicalChart; + private ChartNodeVO physicalChart; // 生成辅助检查雷达图 - private BigDecimal ancillaryChart; + private ChartNodeVO ancillaryChart; // 生成处置计划雷达图 - private BigDecimal treatmentPlanChart; - // 临床思维=前面几项平均值 - private BigDecimal clinicalThinking; + private ChartNodeVO treatmentPlanChart; + // 临床思维=前面几项和或平均值 + private ChartNodeVO clinicalThinking; } 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 47feeb7b..2cab9fd9 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 @@ -308,20 +308,26 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService public RadarChartResVO queryRadarChart(String processId) { Process process = Optional.ofNullable(processService.getById(processId)).orElseThrow(() -> new BusinessException("未找到流程")); // 生成问诊雷达图 - BigDecimal askChart = computeAskChart(process); + ChartNodeVO askChart = computeAskChart(process); // 生成体格检查雷达图 - BigDecimal physicalChart = computePhysicalChart(process); + ChartNodeVO physicalChart = computePhysicalChart(process); // 生成辅助检查雷达图 - BigDecimal ancillaryChart = computeAncillaryChart(process); + ChartNodeVO ancillaryChart = computeAncillaryChart(process); // 生成处置计划雷达图 - BigDecimal treatmentPlanChart = computeTreatmentPlanChart(process); + ChartNodeVO 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); + BigDecimal clinicalThinking = NumberUtil.add(askChart.getNodePer(), physicalChart.getNodePer(), ancillaryChart.getNodePer(), treatmentPlanChart.getNodePer()).divide(BigDecimal.valueOf(4), 1, RoundingMode.HALF_UP); + ChartNodeVO chartNodeVO = new ChartNodeVO(); + chartNodeVO.setNodePer(clinicalThinking); + chartNodeVO.setTotal(askChart.getTotal() + physicalChart.getTotal() + ancillaryChart.getTotal() + treatmentPlanChart.getTotal()); + chartNodeVO.setCorrect(askChart.getCorrect() + physicalChart.getCorrect() + ancillaryChart.getCorrect() + treatmentPlanChart.getCorrect()); + chartNodeVO.setUnCorrect(askChart.getUnCorrect() + physicalChart.getUnCorrect() + ancillaryChart.getUnCorrect() + treatmentPlanChart.getUnCorrect()); + chartNodeVO.setStandard(askChart.getStandard() + physicalChart.getStandard() + ancillaryChart.getStandard() + treatmentPlanChart.getStandard()); + radarChartResVO.setClinicalThinking(chartNodeVO); return radarChartResVO; @@ -331,7 +337,7 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService * 生成处置计划雷达图 * ( 用户命中病历治疗计划配置问题数 / 疾病配置的治疗计划总数 ) * (用户命中病历治疗计划配置问题数 / 用户实际填写的治疗计划的数量 ) */ - private BigDecimal computeTreatmentPlanChart(Process process) { + private ChartNodeVO computeTreatmentPlanChart(Process process) { // 查询用户填写的治疗计划 List userTreatmentPlanRecordList = treatmentPlanRecordService.lambdaQuery().eq(TreatmentPlanRecord::getProcessId, process.getId()).list(); int userTreatmentPlanCount = userTreatmentPlanRecordList.size(); @@ -363,7 +369,15 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService if (medicalCount > 0) { num2 = BigDecimal.valueOf(hitPlanCount).divide(BigDecimal.valueOf(medicalCount), 1, RoundingMode.HALF_UP); } - return num2.multiply(num3); + ChartNodeVO chartNodeVO = new ChartNodeVO(); + chartNodeVO.setNodePer(num2.multiply(num3)); + + chartNodeVO.setCorrect(hitPlanCount); + chartNodeVO.setUnCorrect(medicalCount - hitPlanCount); + chartNodeVO.setStandard(medicalCount); + chartNodeVO.setTotal(chartNodeVO.getUnCorrect() + chartNodeVO.getStandard() + chartNodeVO.getCorrect()); + + return chartNodeVO; } @@ -371,7 +385,7 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService * 生成辅助检查雷达图 * ( 用户命中病历配置问题数 / 病历问题总数 ) * (用户提问命中病历配置问题数 / 用户实际提问的数量 ) */ - private BigDecimal computeAncillaryChart(Process process) { + private ChartNodeVO computeAncillaryChart(Process process) { Integer userHitCount = diagnosisAncillaryRecordService.lambdaQuery().isNotNull(DiagnosisAncillaryRecord::getAncillaryId) .eq(DiagnosisAncillaryRecord::getProcessId, process.getId()).count(); Integer userCount = diagnosisAncillaryRecordService.lambdaQuery().eq(DiagnosisAncillaryRecord::getProcessId, process.getId()).count(); @@ -386,14 +400,23 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService if (medicalCount > 0) { num2 = BigDecimal.valueOf(userHitCount).divide(BigDecimal.valueOf(medicalCount), 1, RoundingMode.HALF_UP); } - return num2.multiply(num3); + + ChartNodeVO chartNodeVO = new ChartNodeVO(); + chartNodeVO.setNodePer(num2.multiply(num3)); + + chartNodeVO.setCorrect(userHitCount); + chartNodeVO.setUnCorrect(medicalCount - userHitCount); + chartNodeVO.setStandard(medicalCount); + chartNodeVO.setTotal(chartNodeVO.getUnCorrect() + chartNodeVO.getStandard() + chartNodeVO.getCorrect()); + + return chartNodeVO; } /** * 计算体格检查雷达图 * 2. 体格检查:( 用户命中病历配置问题数 / 病历问题总数 ) * (用户提问命中病历配置问题数 / 用户实际提问的数量 ) */ - private BigDecimal computePhysicalChart(Process process) { + private ChartNodeVO computePhysicalChart(Process process) { // 查询用户命中病历配置问题数 Integer userHitCount = diagnosisPhysicalRecordService.lambdaQuery().isNotNull(DiagnosisPhysicalRecord::getPhysicalId) .eq(DiagnosisPhysicalRecord::getProcessId, process.getId()).count(); @@ -411,7 +434,15 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService if (medicalCount > 0) { num2 = BigDecimal.valueOf(userHitCount).divide(BigDecimal.valueOf(medicalCount), 1, RoundingMode.HALF_UP); } - return num2.multiply(num3); + ChartNodeVO chartNodeVO = new ChartNodeVO(); + chartNodeVO.setNodePer(num2.multiply(num3)); + + chartNodeVO.setCorrect(userHitCount); + chartNodeVO.setUnCorrect(medicalCount - userHitCount); + chartNodeVO.setStandard(medicalCount); + chartNodeVO.setTotal(chartNodeVO.getUnCorrect() + chartNodeVO.getStandard() + chartNodeVO.getCorrect()); + + return chartNodeVO; } @@ -422,7 +453,7 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService * 上面的数量都是去重的,未识别出来的问题,不包含在用户提问的数据里面 * 默认语句不参与统计 */ - public BigDecimal computeAskChart(Process process) { + public ChartNodeVO computeAskChart(Process process) { // 首先查询用户提问的病历问题(这里questionId不为null,即为识别出来的用户问题) List qaRecordList = diagnosisQaRecordService.lambdaQuery().isNotNull(DiagnosisQaRecord::getQuestionLibraryId) .eq(DiagnosisQaRecord::getProcessId, process.getId()).list(); @@ -450,7 +481,13 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService if (medicalQuestionCount > 0) { num2 = BigDecimal.valueOf(userHitQuestionCount).divide(BigDecimal.valueOf(medicalQuestionCount), 1, RoundingMode.HALF_UP); } - - return num2.multiply(num3); + ChartNodeVO chartNodeVO = new ChartNodeVO(); + chartNodeVO.setNodePer(num2.multiply(num3)); + chartNodeVO.setCorrect(userHitQuestionCount); + chartNodeVO.setStandard(Integer.parseInt(String.valueOf(medicalQuestionCount))); + chartNodeVO.setUnCorrect(chartNodeVO.getStandard() - chartNodeVO.getCorrect()); + chartNodeVO.setTotal(chartNodeVO.getUnCorrect() + chartNodeVO.getStandard() + chartNodeVO.getCorrect()); + + return chartNodeVO; } }