|
|
|
@ -1,11 +1,15 @@
|
|
|
|
|
package com.supervision.service.impl;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
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;
|
|
|
|
@ -24,6 +28,14 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
|
|
|
|
|
|
|
|
|
|
private final DiagnosisPrimaryService diagnosisPrimaryService;
|
|
|
|
|
|
|
|
|
|
private final AskDiseaseQuestionAnswerService askDiseaseQuestionAnswerService;
|
|
|
|
|
|
|
|
|
|
private final DiagnosisQaRecordService diagnosisQaRecordService;
|
|
|
|
|
|
|
|
|
|
private final DiagnosisPhysicalRecordService diagnosisPhysicalRecordService;
|
|
|
|
|
|
|
|
|
|
private final DiagnosisAncillaryRecordService diagnosisAncillaryRecordService;
|
|
|
|
|
|
|
|
|
|
private final ProcessService processService;
|
|
|
|
|
|
|
|
|
|
private final PatientService patientService;
|
|
|
|
@ -58,24 +70,141 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
|
|
|
|
|
Patient patient = patientService.getById(process.getPatientId());
|
|
|
|
|
List<Disease> diseasesList = diseaseService.listByIds(patient.getDiseaseList());
|
|
|
|
|
// 1.生成预期诊断结果
|
|
|
|
|
ExpertDiagnosisResultResVO expertDiagnosisResultResVO = creatExpertDiagnosisResult(diagnosisResult, patient, diseasesList);
|
|
|
|
|
diagnosisResultResVO.setExpertDiagnosisResult(expertDiagnosisResultResVO);
|
|
|
|
|
diagnosisResultResVO.setExpertDiagnosisResult(creatExpertDiagnosisResult(diagnosisResult, patient, diseasesList));
|
|
|
|
|
// 2.生成初步诊断依据
|
|
|
|
|
BasisPrimaryResultResVO basisPrimaryResultResVO = new BasisPrimaryResultResVO();
|
|
|
|
|
diagnosisResultResVO.setBasisPrimaryResultResVO(createBasisPrimaryResult(processId, diseasesList));
|
|
|
|
|
// 3.生成证实诊断依据
|
|
|
|
|
diagnosisResultResVO.setBasisConfirmResultResVO(createBasisConfirmResult(processId, diseasesList));
|
|
|
|
|
// 4.生成鉴别诊断依据
|
|
|
|
|
diagnosisResultResVO.setBasisIdentificationResult(createBasisIdentificationResult(processId, diseasesList));
|
|
|
|
|
// 5.全面检查-(暂无相关数据) 后面再看
|
|
|
|
|
diagnosisResultResVO.setFullCheck(null);
|
|
|
|
|
// 6.处置方案
|
|
|
|
|
diagnosisResultResVO.setDealPlan(createDealPlan(diagnosisResult, patient));
|
|
|
|
|
return diagnosisResultResVO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private DealPlanResVO createDealPlan(DiagnosisResult diagnosisResult, Patient patient) {
|
|
|
|
|
DealPlanResVO dealPlanResVO = new DealPlanResVO();
|
|
|
|
|
dealPlanResVO.setUserTreatmentPlanType(diagnosisResult.getTreatmentPlanType());
|
|
|
|
|
dealPlanResVO.setUserTreatmentPlan(diagnosisResult.getTreatmentPlan());
|
|
|
|
|
dealPlanResVO.setRealTreatmentPlan(patient.getDiseaseTreatmentPlan());
|
|
|
|
|
return dealPlanResVO;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private BasisIdentificationResultResVO createBasisIdentificationResult(String processId, List<Disease> diseasesList) {
|
|
|
|
|
BasisIdentificationResultResVO basisIdentificationResultResVO = new BasisIdentificationResultResVO();
|
|
|
|
|
basisIdentificationResultResVO.setIdentificationDiagnosis(diseasesList.stream().map(Disease::getBasisIdentification).collect(Collectors.toList()));
|
|
|
|
|
// 2.2 获取体格检查
|
|
|
|
|
List<PhysicalRecordByResultDAO> physicalRecordList = diagnosisPhysicalRecordService.queryPhysicalResultByProcessId(processId);
|
|
|
|
|
List<BasisDiagnosisNodeResVO> 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<AncillaryRecordByResultDAO> ancillaryRecordList = diagnosisAncillaryRecordService.queryAncillaryResultByProcessId(processId);
|
|
|
|
|
List<BasisDiagnosisNodeResVO> 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<Disease> diseasesList) {
|
|
|
|
|
BasisConfirmResultResVO basisConfirmResultResVO = new BasisConfirmResultResVO();
|
|
|
|
|
basisConfirmResultResVO.setConfirmingDiagnosis(diseasesList.stream().map(Disease::getConfirmingDiagnosis).collect(Collectors.toList()));
|
|
|
|
|
// 2.2 获取体格检查
|
|
|
|
|
List<PhysicalRecordByResultDAO> physicalRecordList = diagnosisPhysicalRecordService.queryPhysicalResultByProcessId(processId);
|
|
|
|
|
List<BasisDiagnosisNodeResVO> 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<AncillaryRecordByResultDAO> ancillaryRecordList = diagnosisAncillaryRecordService.queryAncillaryResultByProcessId(processId);
|
|
|
|
|
List<BasisDiagnosisNodeResVO> 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(String processId, List<Disease> diseasesList) {
|
|
|
|
|
BasisPrimaryResultResVO basisPrimaryResultResVO = new BasisPrimaryResultResVO();
|
|
|
|
|
basisPrimaryResultResVO.setPreliminaryDiagnosis(diseasesList.stream().map(Disease::getPreliminaryDiagnosis).collect(Collectors.toList()));
|
|
|
|
|
// 根据record记录寻找符合初步诊断依据的项目
|
|
|
|
|
// basisPrimaryResultResVO.setNodeList();
|
|
|
|
|
//
|
|
|
|
|
//
|
|
|
|
|
// diagnosisResultResVO.setBasisPrimaryResultResVO();
|
|
|
|
|
// diagnosisResultResVO.setBasisConfirmResultResVO();
|
|
|
|
|
// diagnosisResultResVO.setBasisIdentificationResult();
|
|
|
|
|
// diagnosisResultResVO.setFullCheck();
|
|
|
|
|
// diagnosisResultResVO.setDealPlan();
|
|
|
|
|
|
|
|
|
|
// 2.1 首先获取对话
|
|
|
|
|
List<BasisDiagnosisNodeResVO> basisDiagnosisNodeResVOS = new ArrayList<>();
|
|
|
|
|
List<DiagnosisQaRecord> qaRecordList = diagnosisQaRecordService.lambdaQuery().eq(DiagnosisQaRecord::getProcessId, processId).list();
|
|
|
|
|
if (CollectionUtil.isNotEmpty(qaRecordList)) {
|
|
|
|
|
Set<String> questionAnswerIdSet = qaRecordList.stream().map(DiagnosisQaRecord::getQuestionAnswerId).collect(Collectors.toSet());
|
|
|
|
|
List<AskDiseaseQuestionAnswer> list = askDiseaseQuestionAnswerService.lambdaQuery()
|
|
|
|
|
.in(AskDiseaseQuestionAnswer::getId, questionAnswerIdSet)
|
|
|
|
|
.eq(AskDiseaseQuestionAnswer::getRequireCheck, 1)
|
|
|
|
|
.select(AskDiseaseQuestionAnswer::getId).list();
|
|
|
|
|
// 获取必问的项目
|
|
|
|
|
Set<String> requireCheckIdSet = list.stream().map(AskDiseaseQuestionAnswer::getId).collect(Collectors.toSet());
|
|
|
|
|
List<BasisDiagnosisNodeResVO> 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.getQuestionAnswerId()) ? 1 : 0);
|
|
|
|
|
return node;
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
basisDiagnosisNodeResVOS.addAll(qaList);
|
|
|
|
|
}
|
|
|
|
|
// 2.2 获取体格检查
|
|
|
|
|
List<PhysicalRecordByResultDAO> physicalRecordList = diagnosisPhysicalRecordService.queryPhysicalResultByProcessId(processId);
|
|
|
|
|
List<BasisDiagnosisNodeResVO> 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<AncillaryRecordByResultDAO> ancillaryRecordList = diagnosisAncillaryRecordService.queryAncillaryResultByProcessId(processId);
|
|
|
|
|
List<BasisDiagnosisNodeResVO> 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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|