|
|
|
@ -49,8 +49,7 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
|
|
|
|
|
|
|
|
|
|
private final TreatmentPlanRecordService treatmentPlanRecordService;
|
|
|
|
|
|
|
|
|
|
private final DiseaseTreatmentPlanService diseaseTreatmentPlanService;
|
|
|
|
|
|
|
|
|
|
private final DiseaseTreatmentPlanService diseaseTreatmentPlanService;
|
|
|
|
|
|
|
|
|
|
private final DiseaseTreatmentPlanDrugService diseaseTreatmentPlanDrugService;
|
|
|
|
|
|
|
|
|
@ -63,9 +62,9 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
|
|
|
|
|
// 最终诊断结果,从初步诊断中获取
|
|
|
|
|
List<DiagnosisPrimary> list = diagnosisPrimaryService.lambdaQuery()
|
|
|
|
|
.eq(DiagnosisPrimary::getProcessId, reqVO.getProcessId())
|
|
|
|
|
.eq(DiagnosisPrimary::getExcludeFlag,0)
|
|
|
|
|
.eq(DiagnosisPrimary::getExcludeFlag, 0)
|
|
|
|
|
.list();
|
|
|
|
|
if (CollectionUtil.isEmpty(list)){
|
|
|
|
|
if (CollectionUtil.isEmpty(list)) {
|
|
|
|
|
throw new BusinessException("您还未进行有效的初步诊断!");
|
|
|
|
|
}
|
|
|
|
|
diagnosisResult.setFinalDiagnosis(list.stream().map(DiagnosisPrimary::getPrimaryDiagnosisId).collect(Collectors.toList()));
|
|
|
|
@ -73,7 +72,8 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
|
|
|
|
|
diagnosisResult.setTreatmentPlan(reqVO.getTreatmentPlan());
|
|
|
|
|
diagnosisResultService.save(diagnosisResult);
|
|
|
|
|
|
|
|
|
|
// todo:修改流程状态
|
|
|
|
|
// 修改流程状态
|
|
|
|
|
processService.lambdaUpdate().set(Process::getStatus, 2).eq(Process::getId, reqVO.getProcessId()).update();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@ -90,11 +90,11 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
|
|
|
|
|
// 1.生成预期诊断结果
|
|
|
|
|
diagnosisResultResVO.setExpertDiagnosisResult(creatExpertDiagnosisResult(medicalRec, diagnosisResult, diseasesList));
|
|
|
|
|
// 2.生成初步诊断依据
|
|
|
|
|
diagnosisResultResVO.setBasisPrimaryResultResVO(createBasisPrimaryResult(patient, processId, diseasesList));
|
|
|
|
|
diagnosisResultResVO.setBasisPrimaryResultResVO(createBasisPrimaryResult(patient, medicalRec, process));
|
|
|
|
|
// 3.生成证实诊断依据
|
|
|
|
|
diagnosisResultResVO.setBasisConfirmResultResVO(createBasisConfirmResult(processId, diseasesList));
|
|
|
|
|
diagnosisResultResVO.setBasisConfirmResultResVO(createBasisConfirmResult(medicalRec, processId, diseasesList));
|
|
|
|
|
// 4.生成鉴别诊断依据
|
|
|
|
|
diagnosisResultResVO.setBasisIdentificationResult(createBasisIdentificationResult(processId, diseasesList));
|
|
|
|
|
diagnosisResultResVO.setBasisIdentificationResult(createBasisIdentificationResult(medicalRec,processId));
|
|
|
|
|
// 5.全面检查-(暂无相关数据) 后面再看
|
|
|
|
|
diagnosisResultResVO.setFullCheck(null);
|
|
|
|
|
// 6.处置方案
|
|
|
|
@ -108,7 +108,7 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
|
|
|
|
|
|
|
|
|
|
// 1. 查询处置计划记录
|
|
|
|
|
List<TreatmentPlanRecord> treatmentPlanRecordList = treatmentPlanRecordService.lambdaQuery().eq(TreatmentPlanRecord::getProcessId, processId).list();
|
|
|
|
|
if (CollectionUtil.isEmpty(treatmentPlanRecordList)){
|
|
|
|
|
if (CollectionUtil.isEmpty(treatmentPlanRecordList)) {
|
|
|
|
|
return dealPlanResVO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -127,9 +127,9 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
|
|
|
|
|
DealPlanResVO.TreatmentPlanResult bean = BeanUtil.toBean(treatmentPlanRecord, DealPlanResVO.TreatmentPlanResult.class);
|
|
|
|
|
boolean flag = bean.getDisposalPlan().equals(1) ? drugIds.contains(bean.getDrugId()) : planIds.contains(bean.getTreatmentPlanId());
|
|
|
|
|
bean.setFlag(flag ? 1 : 0);
|
|
|
|
|
if (bean.getDisposalPlan().equals(1)){
|
|
|
|
|
if (bean.getDisposalPlan().equals(1)) {
|
|
|
|
|
drugTreatmentPlanResults.add(bean);
|
|
|
|
|
}else {
|
|
|
|
|
} else {
|
|
|
|
|
otherTreatmentPlanResults.add(bean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -142,80 +142,80 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private BasisIdentificationResultResVO createBasisIdentificationResult(String processId, List<Disease> diseasesList) {
|
|
|
|
|
private BasisIdentificationResultResVO createBasisIdentificationResult(MedicalRec medicalRec,String processId) {
|
|
|
|
|
BasisIdentificationResultResVO basisIdentificationResultResVO = new BasisIdentificationResultResVO();
|
|
|
|
|
// todo : 由于修改了表结构,导致证实依据字段不存在。。。
|
|
|
|
|
basisIdentificationResultResVO.setIdentificationDiagnosis(diseasesList.stream().map(e->"").collect(Collectors.toList()));
|
|
|
|
|
// 鉴别诊断依据,来自于medicalRec的DifferentialDiagnosisCriteria
|
|
|
|
|
basisIdentificationResultResVO.setIdentificationDiagnosis(medicalRec.getDifferentialDiagnosisCriteria());
|
|
|
|
|
// 2.2 获取体格检查
|
|
|
|
|
List<PhysicalRecordByResultDAO> physicalRecordList = diagnosisPhysicalRecordService.queryPhysicalResultByProcessId(processId);
|
|
|
|
|
List<BasisDiagnosisNodeResVO> nodeList = physicalRecordList.stream()
|
|
|
|
|
.filter(distinctPredicateNotNull(PhysicalRecordByResultDAO::getToolLocationName)).map(e -> {
|
|
|
|
|
BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
|
|
|
|
|
nodeResVO.setType(1);
|
|
|
|
|
nodeResVO.setRecordName(e.getToolLocationName());
|
|
|
|
|
nodeResVO.setRecordId(e.getRecordId());
|
|
|
|
|
// 如果是必做的,则是正确
|
|
|
|
|
nodeResVO.setCorrect(null == e.getBasisIdentification() ? Integer.valueOf(0) : e.getBasisIdentification());
|
|
|
|
|
return nodeResVO;
|
|
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
|
|
|
|
|
nodeResVO.setType(1);
|
|
|
|
|
nodeResVO.setRecordName(e.getToolLocationName());
|
|
|
|
|
nodeResVO.setRecordId(e.getRecordId());
|
|
|
|
|
// 如果是必做的,则是正确
|
|
|
|
|
nodeResVO.setCorrect(null == e.getBasisIdentification() ? Integer.valueOf(0) : e.getBasisIdentification());
|
|
|
|
|
return nodeResVO;
|
|
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
// 2.3 获取辅助检查
|
|
|
|
|
List<AncillaryRecordByResultDAO> ancillaryRecordList = diagnosisAncillaryRecordService.queryAncillaryResultByProcessId(processId);
|
|
|
|
|
List<BasisDiagnosisNodeResVO> collect = ancillaryRecordList.stream()
|
|
|
|
|
.filter(distinctPredicateNotNull(AncillaryRecordByResultDAO::getItemName)).map(e -> {
|
|
|
|
|
BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
|
|
|
|
|
nodeResVO.setCorrect(null == e.getBasisIdentification() ? Integer.valueOf(0) : e.getBasisIdentification());
|
|
|
|
|
nodeResVO.setRecordId(e.getRecordId());
|
|
|
|
|
nodeResVO.setRecordName(e.getItemName());
|
|
|
|
|
nodeResVO.setType(2);
|
|
|
|
|
return nodeResVO;
|
|
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
|
|
|
|
|
nodeResVO.setCorrect(null == e.getBasisIdentification() ? Integer.valueOf(0) : 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) {
|
|
|
|
|
private BasisConfirmResultResVO createBasisConfirmResult(MedicalRec medicalRec, String processId, List<Disease> diseasesList) {
|
|
|
|
|
BasisConfirmResultResVO basisConfirmResultResVO = new BasisConfirmResultResVO();
|
|
|
|
|
//todo: 由于修改了表结构,导致证实依据不存在....
|
|
|
|
|
basisConfirmResultResVO.setConfirmingDiagnosis(diseasesList.stream().map(e->"").collect(Collectors.toList()));
|
|
|
|
|
// 正式诊断依据,来自于medicalRec的ConfirmDiagnosisCriteria
|
|
|
|
|
basisConfirmResultResVO.setConfirmingDiagnosis(medicalRec.getConfirmDiagnosisCriteria());
|
|
|
|
|
// 2.2 获取体格检查
|
|
|
|
|
List<PhysicalRecordByResultDAO> physicalRecordList = diagnosisPhysicalRecordService.queryPhysicalResultByProcessId(processId);
|
|
|
|
|
List<BasisDiagnosisNodeResVO> nodeList = physicalRecordList.stream()
|
|
|
|
|
.filter(distinctPredicateNotNull(PhysicalRecordByResultDAO::getToolLocationName)).map(e -> {
|
|
|
|
|
BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
|
|
|
|
|
nodeResVO.setType(1);
|
|
|
|
|
nodeResVO.setRecordName(e.getToolLocationName());
|
|
|
|
|
nodeResVO.setRecordId(e.getRecordId());
|
|
|
|
|
// 如果是必做的,则是正确
|
|
|
|
|
nodeResVO.setCorrect(null == e.getBasisConfirm() ? Integer.valueOf(0) : e.getBasisConfirm());
|
|
|
|
|
return nodeResVO;
|
|
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
|
|
|
|
|
nodeResVO.setType(1);
|
|
|
|
|
nodeResVO.setRecordName(e.getToolLocationName());
|
|
|
|
|
nodeResVO.setRecordId(e.getRecordId());
|
|
|
|
|
// 如果是必做的,则是正确
|
|
|
|
|
nodeResVO.setCorrect(null == e.getBasisConfirm() ? Integer.valueOf(0) : e.getBasisConfirm());
|
|
|
|
|
return nodeResVO;
|
|
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
// 2.3 获取辅助检查
|
|
|
|
|
List<AncillaryRecordByResultDAO> ancillaryRecordList = diagnosisAncillaryRecordService.queryAncillaryResultByProcessId(processId);
|
|
|
|
|
List<BasisDiagnosisNodeResVO> collect = ancillaryRecordList.stream()
|
|
|
|
|
.filter(distinctPredicateNotNull(AncillaryRecordByResultDAO::getItemName)).map(e -> {
|
|
|
|
|
BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
|
|
|
|
|
nodeResVO.setCorrect(null == e.getBasisConfirm() ? Integer.valueOf(0) : e.getBasisConfirm());
|
|
|
|
|
nodeResVO.setRecordId(e.getRecordId());
|
|
|
|
|
nodeResVO.setRecordName(e.getItemName());
|
|
|
|
|
nodeResVO.setType(2);
|
|
|
|
|
return nodeResVO;
|
|
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
|
|
|
|
|
nodeResVO.setCorrect(null == e.getBasisConfirm() ? Integer.valueOf(0) : 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<Disease> diseasesList) {
|
|
|
|
|
private BasisPrimaryResultResVO createBasisPrimaryResult(Patient patient, MedicalRec medicalRec, Process process) {
|
|
|
|
|
BasisPrimaryResultResVO basisPrimaryResultResVO = new BasisPrimaryResultResVO();
|
|
|
|
|
//todo: 由于修改了表结构导致初步诊断不存在
|
|
|
|
|
basisPrimaryResultResVO.setPreliminaryDiagnosis(diseasesList.stream().map(e->"").collect(Collectors.toList()));
|
|
|
|
|
// 初步诊断依据 vp_medical_rec的primarily_diagnosis_criteria
|
|
|
|
|
basisPrimaryResultResVO.setPreliminaryDiagnosis(medicalRec.getPrimarilyDiagnosisCriteria());
|
|
|
|
|
// 根据record记录寻找符合初步诊断依据的项目
|
|
|
|
|
// 2.1 首先获取对话
|
|
|
|
|
List<BasisDiagnosisNodeResVO> basisDiagnosisNodeResVOS = new ArrayList<>();
|
|
|
|
|
List<DiagnosisQaRecord> qaRecordList = diagnosisQaRecordService.lambdaQuery().eq(DiagnosisQaRecord::getProcessId, processId).list();
|
|
|
|
|
List<DiagnosisQaRecord> qaRecordList = diagnosisQaRecordService.lambdaQuery().eq(DiagnosisQaRecord::getProcessId, process.getId()).list();
|
|
|
|
|
if (CollectionUtil.isNotEmpty(qaRecordList)) {
|
|
|
|
|
List<AskPatientAnswer> list = askPatientAnswerService.lambdaQuery()
|
|
|
|
|
.eq(AskPatientAnswer::getPatientId, patient.getId()).list();
|
|
|
|
@ -233,29 +233,29 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
|
|
|
|
|
basisDiagnosisNodeResVOS.addAll(qaList);
|
|
|
|
|
}
|
|
|
|
|
// 2.2 获取体格检查
|
|
|
|
|
List<PhysicalRecordByResultDAO> physicalRecordList = diagnosisPhysicalRecordService.queryPhysicalResultByProcessId(processId);
|
|
|
|
|
List<PhysicalRecordByResultDAO> physicalRecordList = diagnosisPhysicalRecordService.queryPhysicalResultByProcessId(process.getId());
|
|
|
|
|
List<BasisDiagnosisNodeResVO> physicalList = physicalRecordList.stream()
|
|
|
|
|
.filter(distinctPredicateNotNull(PhysicalRecordByResultDAO::getToolLocationName)).map(e -> {
|
|
|
|
|
BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
|
|
|
|
|
nodeResVO.setType(1);
|
|
|
|
|
nodeResVO.setRecordName(e.getToolLocationName());
|
|
|
|
|
nodeResVO.setRecordId(e.getRecordId());
|
|
|
|
|
// 如果是必做的,则是正确
|
|
|
|
|
nodeResVO.setCorrect(null == e.getRequireCheck() ? Integer.valueOf(0) : e.getRequireCheck());
|
|
|
|
|
return nodeResVO;
|
|
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
|
|
|
|
|
nodeResVO.setType(1);
|
|
|
|
|
nodeResVO.setRecordName(e.getToolLocationName());
|
|
|
|
|
nodeResVO.setRecordId(e.getRecordId());
|
|
|
|
|
// 如果是必做的,则是正确
|
|
|
|
|
nodeResVO.setCorrect(null == e.getRequireCheck() ? Integer.valueOf(0) : e.getRequireCheck());
|
|
|
|
|
return nodeResVO;
|
|
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
basisDiagnosisNodeResVOS.addAll(physicalList);
|
|
|
|
|
// 2.3 获取辅助检查
|
|
|
|
|
List<AncillaryRecordByResultDAO> ancillaryRecordList = diagnosisAncillaryRecordService.queryAncillaryResultByProcessId(processId);
|
|
|
|
|
List<AncillaryRecordByResultDAO> ancillaryRecordList = diagnosisAncillaryRecordService.queryAncillaryResultByProcessId(process.getId());
|
|
|
|
|
List<BasisDiagnosisNodeResVO> collect = ancillaryRecordList.stream()
|
|
|
|
|
.filter(distinctPredicateNotNull(AncillaryRecordByResultDAO::getItemName)).map(e -> {
|
|
|
|
|
BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
|
|
|
|
|
nodeResVO.setCorrect(null == e.getRequireCheck() ? Integer.valueOf(0) : e.getRequireCheck());
|
|
|
|
|
nodeResVO.setRecordId(e.getRecordId());
|
|
|
|
|
nodeResVO.setRecordName(e.getItemName());
|
|
|
|
|
nodeResVO.setType(2);
|
|
|
|
|
return nodeResVO;
|
|
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
BasisDiagnosisNodeResVO nodeResVO = new BasisDiagnosisNodeResVO();
|
|
|
|
|
nodeResVO.setCorrect(null == e.getRequireCheck() ? Integer.valueOf(0) : e.getRequireCheck());
|
|
|
|
|
nodeResVO.setRecordId(e.getRecordId());
|
|
|
|
|
nodeResVO.setRecordName(e.getItemName());
|
|
|
|
|
nodeResVO.setType(2);
|
|
|
|
|
return nodeResVO;
|
|
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
basisDiagnosisNodeResVOS.addAll(collect);
|
|
|
|
|
|
|
|
|
|
basisPrimaryResultResVO.setNodeList(basisDiagnosisNodeResVOS);
|
|
|
|
@ -268,7 +268,7 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
|
|
|
|
|
*/
|
|
|
|
|
private ExpertDiagnosisResultResVO creatExpertDiagnosisResult(MedicalRec medicalRec, DiagnosisResult diagnosisResult, List<Disease> diseasesList) {
|
|
|
|
|
ExpertDiagnosisResultResVO expertDiagnosisResultResVO = new ExpertDiagnosisResultResVO();
|
|
|
|
|
expertDiagnosisResultResVO.setDiagnosis(StrUtil.join(";",diseasesList.stream().map(Disease::getDiseaseName).collect(Collectors.toList())));
|
|
|
|
|
expertDiagnosisResultResVO.setDiagnosis(medicalRec.getSymptoms());
|
|
|
|
|
Set<String> expertDiseaseIdSet = diseasesList.stream().map(Disease::getId).collect(Collectors.toSet());
|
|
|
|
|
List<Disease> userDiagnosisDiseaseList = CollUtil.isEmpty(diagnosisResult.getFinalDiagnosis()) ? CollUtil.newArrayList()
|
|
|
|
|
: diseaseService.listByIds(diagnosisResult.getFinalDiagnosis());
|
|
|
|
@ -293,10 +293,10 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static <K> Predicate<K> distinctPredicateNotNull(Function<K,Object> function){
|
|
|
|
|
public static <K> Predicate<K> distinctPredicateNotNull(Function<K, Object> function) {
|
|
|
|
|
ConcurrentHashMap<Object, Boolean> map = new ConcurrentHashMap<>();
|
|
|
|
|
|
|
|
|
|
return t-> null != function.apply(t) && null == map.putIfAbsent(function.apply(t), true);
|
|
|
|
|
return t -> null != function.apply(t) && null == map.putIfAbsent(function.apply(t), true);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|