package com.supervision.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.supervision.exception.BusinessException; import com.supervision.model.*; import com.supervision.model.Process; import com.supervision.pojo.vo.*; import com.supervision.service.*; import com.supervision.vo.result.AncillaryRecordByResultDAO; import com.supervision.vo.result.PhysicalRecordByResultDAO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService { private final DiagnosisResultService diagnosisResultService; private final DiagnosisPrimaryService diagnosisPrimaryService; private final AskPatientAnswerService askPatientAnswerService; private final MedicalRecService medicalRecService; private final DiagnosisQaRecordService diagnosisQaRecordService; private final DiagnosisPhysicalRecordService diagnosisPhysicalRecordService; private final DiagnosisAncillaryRecordService diagnosisAncillaryRecordService; private final ProcessService processService; private final PatientService patientService; private final DiseaseService diseaseService; @Override @Transactional(rollbackFor = Exception.class) public void finishAsk(FinishAskReqVO reqVO) { // 首先保存诊断结果 DiagnosisResult diagnosisResult = new DiagnosisResult(); diagnosisResult.setProcessId(reqVO.getProcessId()); // 最终诊断结果,从初步诊断中获取 List list = diagnosisPrimaryService.lambdaQuery() .eq(DiagnosisPrimary::getProcessId, reqVO.getProcessId()) .eq(DiagnosisPrimary::getDeleteFlag, 0) .list(); diagnosisResult.setFinalDiagnosis(list.stream().map(DiagnosisPrimary::getPrimaryDiagnosisId).collect(Collectors.toList())); diagnosisResult.setTreatmentPlanType(reqVO.getTreatmentPlanType()); diagnosisResult.setTreatmentPlan(reqVO.getTreatmentPlan()); diagnosisResultService.save(diagnosisResult); } @Override public DiagnosisResultResVO queryDiagnosisResult(String processId) { // 首先查询到结果 DiagnosisResult diagnosisResult = diagnosisResultService.lambdaQuery() .eq(DiagnosisResult::getProcessId, processId).last("limit 1").oneOpt().orElseThrow(() -> new BusinessException("未找到评估结果")); DiagnosisResultResVO diagnosisResultResVO = new DiagnosisResultResVO(); diagnosisResultResVO.setId(processId); Process process = processService.getById(processId); Patient patient = patientService.getById(process.getPatientId()); MedicalRec medicalRec = medicalRecService.getById(process.getMedicalRecId()); List diseasesList = diseaseService.listByIds(medicalRec.getDiseaseList()); // 1.生成预期诊断结果 diagnosisResultResVO.setExpertDiagnosisResult(creatExpertDiagnosisResult(medicalRec, diagnosisResult, diseasesList)); // 2.生成初步诊断依据 diagnosisResultResVO.setBasisPrimaryResultResVO(createBasisPrimaryResult(patient, processId, diseasesList)); // 3.生成证实诊断依据 diagnosisResultResVO.setBasisConfirmResultResVO(createBasisConfirmResult(processId, diseasesList)); // 4.生成鉴别诊断依据 diagnosisResultResVO.setBasisIdentificationResult(createBasisIdentificationResult(processId, diseasesList)); // 5.全面检查-(暂无相关数据) 后面再看 diagnosisResultResVO.setFullCheck(null); // 6.处置方案 diagnosisResultResVO.setDealPlan(createDealPlan(medicalRec, diagnosisResult, patient)); return diagnosisResultResVO; } private DealPlanResVO createDealPlan(MedicalRec medicalRec, DiagnosisResult diagnosisResult, Patient patient) { DealPlanResVO dealPlanResVO = new DealPlanResVO(); dealPlanResVO.setUserTreatmentPlanType(diagnosisResult.getTreatmentPlanType()); dealPlanResVO.setUserTreatmentPlan(diagnosisResult.getTreatmentPlan()); dealPlanResVO.setRealTreatmentPlan(medicalRec.getExpectDiseaseTreatmentPlan()); return dealPlanResVO; } private BasisIdentificationResultResVO createBasisIdentificationResult(String processId, List diseasesList) { BasisIdentificationResultResVO basisIdentificationResultResVO = new BasisIdentificationResultResVO(); basisIdentificationResultResVO.setIdentificationDiagnosis(diseasesList.stream().map(Disease::getBasisIdentification).collect(Collectors.toList())); // 2.2 获取体格检查 List physicalRecordList = diagnosisPhysicalRecordService.queryPhysicalResultByProcessId(processId); List nodeList = physicalRecordList.stream().map(e -> { BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO(); nodeResVO.setType(1); nodeResVO.setRecordName(e.getToolLocationName()); nodeResVO.setRecordId(e.getRecordId()); // 如果是必做的,则是正确 nodeResVO.setCorrect(e.getBasisIdentification()); return nodeResVO; }).collect(Collectors.toList()); // 2.3 获取辅助检查 List ancillaryRecordList = diagnosisAncillaryRecordService.queryAncillaryResultByProcessId(processId); List collect = ancillaryRecordList.stream().map(e -> { BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO(); nodeResVO.setCorrect(e.getBasisIdentification()); nodeResVO.setRecordId(e.getRecordId()); nodeResVO.setRecordName(e.getItemName()); nodeResVO.setType(2); return nodeResVO; }).collect(Collectors.toList()); nodeList.addAll(collect); basisIdentificationResultResVO.setNodeList(nodeList); return basisIdentificationResultResVO; } private BasisConfirmResultResVO createBasisConfirmResult(String processId, List diseasesList) { BasisConfirmResultResVO basisConfirmResultResVO = new BasisConfirmResultResVO(); basisConfirmResultResVO.setConfirmingDiagnosis(diseasesList.stream().map(Disease::getConfirmingDiagnosis).collect(Collectors.toList())); // 2.2 获取体格检查 List physicalRecordList = diagnosisPhysicalRecordService.queryPhysicalResultByProcessId(processId); List nodeList = physicalRecordList.stream().map(e -> { BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO(); nodeResVO.setType(1); nodeResVO.setRecordName(e.getToolLocationName()); nodeResVO.setRecordId(e.getRecordId()); // 如果是必做的,则是正确 nodeResVO.setCorrect(e.getBasisConfirm()); return nodeResVO; }).collect(Collectors.toList()); // 2.3 获取辅助检查 List ancillaryRecordList = diagnosisAncillaryRecordService.queryAncillaryResultByProcessId(processId); List collect = ancillaryRecordList.stream().map(e -> { BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO(); nodeResVO.setCorrect(e.getBasisConfirm()); nodeResVO.setRecordId(e.getRecordId()); nodeResVO.setRecordName(e.getItemName()); nodeResVO.setType(2); return nodeResVO; }).collect(Collectors.toList()); nodeList.addAll(collect); basisConfirmResultResVO.setNodeList(nodeList); return basisConfirmResultResVO; } private BasisPrimaryResultResVO createBasisPrimaryResult(Patient patient, String processId, List diseasesList) { BasisPrimaryResultResVO basisPrimaryResultResVO = new BasisPrimaryResultResVO(); basisPrimaryResultResVO.setPreliminaryDiagnosis(diseasesList.stream().map(Disease::getPreliminaryDiagnosis).collect(Collectors.toList())); // 根据record记录寻找符合初步诊断依据的项目 // 2.1 首先获取对话 List basisDiagnosisNodeResVOS = new ArrayList<>(); List qaRecordList = diagnosisQaRecordService.lambdaQuery().eq(DiagnosisQaRecord::getProcessId, processId).list(); if (CollectionUtil.isNotEmpty(qaRecordList)) { List list = askPatientAnswerService.lambdaQuery() .eq(AskPatientAnswer::getPatientId, patient.getId()) .eq(AskPatientAnswer::getRequireCheck, 1).list(); // 获取必问的项目 Set requireCheckIdSet = list.stream().map(AskPatientAnswer::getId).collect(Collectors.toSet()); List qaList = qaRecordList.stream().map(e -> { BasisDiagnosisNodeResVO node = new BasisDiagnosisNodeResVO(); node.setType(0); node.setRecordName(e.getQuestion()); node.setRecordId(e.getId()); node.setCorrect(requireCheckIdSet.contains(e.getAnswerId()) ? 1 : 0); return node; }).collect(Collectors.toList()); basisDiagnosisNodeResVOS.addAll(qaList); } // 2.2 获取体格检查 List physicalRecordList = diagnosisPhysicalRecordService.queryPhysicalResultByProcessId(processId); List physicalList = physicalRecordList.stream().map(e -> { BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO(); nodeResVO.setType(1); nodeResVO.setRecordName(e.getToolLocationName()); nodeResVO.setRecordId(e.getRecordId()); // 如果是必做的,则是正确 nodeResVO.setCorrect(e.getRequireCheck()); return nodeResVO; }).collect(Collectors.toList()); basisDiagnosisNodeResVOS.addAll(physicalList); // 2.3 获取辅助检查 List ancillaryRecordList = diagnosisAncillaryRecordService.queryAncillaryResultByProcessId(processId); List collect = ancillaryRecordList.stream().map(e -> { BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO(); nodeResVO.setCorrect(e.getRequireCheck()); nodeResVO.setRecordId(e.getRecordId()); nodeResVO.setRecordName(e.getItemName()); nodeResVO.setType(2); return nodeResVO; }).collect(Collectors.toList()); basisDiagnosisNodeResVOS.addAll(collect); basisPrimaryResultResVO.setNodeList(basisDiagnosisNodeResVOS); return basisPrimaryResultResVO; } /** * 预期诊断结果 */ private ExpertDiagnosisResultResVO creatExpertDiagnosisResult(MedicalRec medicalRec, DiagnosisResult diagnosisResult, List diseasesList) { ExpertDiagnosisResultResVO expertDiagnosisResultResVO = new ExpertDiagnosisResultResVO(); expertDiagnosisResultResVO.setDiagnosis(medicalRec.getExpectDiagnosisResult()); Set expertDiseaseIdSet = diseasesList.stream().map(Disease::getId).collect(Collectors.toSet()); List userDiagnosisDiseaseList = diseaseService.listByIds(diagnosisResult.getFinalDiagnosis()); // 用户的诊断 expertDiagnosisResultResVO.setUserDiagnosisResult(userDiagnosisDiseaseList.stream().map(e -> { DiagnosisDiseaseResultNodeVO userNode = new DiagnosisDiseaseResultNodeVO(); userNode.setDiseaseName(e.getDiseaseName()); // 如果用户诊断在预期诊断里面,则正确,否则错误 userNode.setCorrect(expertDiseaseIdSet.contains(e.getId()) ? 1 : 0); userNode.setDiseaseId(e.getId()); return userNode; }).collect(Collectors.toList())); // 预期诊断 expertDiagnosisResultResVO.setExpertDiagnosisResult(diseasesList.stream().map(e -> { DiagnosisDiseaseResultNodeVO node = new DiagnosisDiseaseResultNodeVO(); node.setDiseaseName(e.getDiseaseName()); node.setDiseaseId(e.getId()); return node; }).collect(Collectors.toList())); return expertDiagnosisResultResVO; } }