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.StrUtil; import com.supervision.exception.BusinessException; import com.supervision.model.*; import com.supervision.model.Process; import com.supervision.pojo.vo.AskPhysicalResultReqVO; import com.supervision.vo.ask.ConfigPhysicalToolResVO; import com.supervision.service.*; import com.supervision.util.UserUtil; import com.supervision.vo.ask.DiagnosisPhysicalRecordVo; import com.supervision.vo.ask.AskPhysicalHistoryResVO; import com.supervision.vo.ask.DiagnosisPrimaryVO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class AskPhysicalServiceImpl implements AskPhysicalService { private final ConfigPhysicalLocationService locationService; private final ConfigPhysicalToolService toolService; private final DiseasePhysicalService diseasePhysicalService; private final DiagnosisPhysicalRecordService diagnosisPhysicalRecordService; private final ProcessService processService; private final DiagnosisPrimaryRelationService diagnosisPrimaryRelationService; private final DiagnosisPrimaryService diagnosisPrimaryService; @Override public List queryPhysicalToolList() { return toolService.queryPhysicalToolList(); } @Override public DiagnosisPhysicalRecordVo queryAskPhysicalResult(AskPhysicalResultReqVO reqVO) { // 首先根据process_id查新到流程ID Process process = Optional.ofNullable(processService.getById(reqVO.getProcessId())).orElseThrow(() -> new BusinessException("未找到流程ID")); ConfigPhysicalTool tool = Optional.ofNullable(toolService.getById(reqVO.getToolId())).orElseThrow(() -> new BusinessException("工具不支持")); // 是否需要具体的部位,0否1是 ConfigPhysicalLocation location = new ConfigPhysicalLocation(); DiseasePhysical result = new DiseasePhysical(); if (1 == tool.getRequireLocation() && StrUtil.isBlank(reqVO.getLocationCode())) { throw new BusinessException("请选择对应的位置"); } if (1 == tool.getRequireLocation()) { location = locationService.lambdaQuery().eq(ConfigPhysicalLocation::getCode, reqVO.getLocationCode()).last("limit 1") .oneOpt().orElseGet(ConfigPhysicalLocation::new); } if (1 == tool.getRequireLocation() && StrUtil.isEmpty(location.getId())) { result.setResult("无相关资讯"); } else { result = diseasePhysicalService.lambdaQuery().eq(DiseasePhysical::getDiseaseId, process.getMedicalRecId()) .eq(DiseasePhysical::getToolId, tool.getId()).eq(StrUtil.isNotBlank(location.getId()), DiseasePhysical::getLocationId, location.getId()).last("limit 1") .oneOpt() .orElseGet(() -> { DiseasePhysical diseasePhysical = new DiseasePhysical(); diseasePhysical.setResult("无相关资讯"); return diseasePhysical; }); } // 检查记录保存到数据库中 DiagnosisPhysicalRecord diagnosisPhysicalRecord = new DiagnosisPhysicalRecord(); diagnosisPhysicalRecord.setProcessId(process.getId()); diagnosisPhysicalRecord.setPhysicalId(result.getId()); diagnosisPhysicalRecord.setToolId(tool.getId()); diagnosisPhysicalRecord.setLocationId(location.getId()); diagnosisPhysicalRecord.setResult(result.getResult()); diagnosisPhysicalRecord.setCreateUserId(UserUtil.getUser().getCreateUserId()); diagnosisPhysicalRecord.setUpdateUserId(UserUtil.getUser().getCreateUserId()); diagnosisPhysicalRecord.insert(); // 保存初步诊断 for (String primaryId : reqVO.getPrimaryIdList()) { DiagnosisPrimaryRelation diagnosisPrimaryRelation = new DiagnosisPrimaryRelation(); diagnosisPrimaryRelation.setProcessId(process.getId()); diagnosisPrimaryRelation.setPrimaryId(primaryId); diagnosisPrimaryRelation.setType(2); diagnosisPrimaryRelation.setRelationId(diagnosisPhysicalRecord.getId()); diagnosisPrimaryRelation.insert(); } DiagnosisPhysicalRecordVo resVo = BeanUtil.toBean(diagnosisPhysicalRecord, DiagnosisPhysicalRecordVo.class); resVo.setLocationName(location.getLocationName()); resVo.setToolName(tool.getToolName()); return resVo; } @Override public List queryAskPhysicalHistory(String processId) { List res = diagnosisPhysicalRecordService.queryAskPhysicalHistory(processId); // 这里把初步诊断的疾病名称填充进去 List relationList = diagnosisPrimaryRelationService.lambdaQuery().eq(DiagnosisPrimaryRelation::getType, 2) .eq(DiagnosisPrimaryRelation::getProcessId, processId).list(); Map> relationMap = relationList.stream().collect(Collectors.groupingBy(DiagnosisPrimaryRelation::getRelationId)); // 找到process对应的所有的初步诊断 List diagnosisPrimaryVOS = diagnosisPrimaryService.queryAskPrimaryList(processId); Map diseaseNameMap = diagnosisPrimaryVOS.stream().collect(Collectors.toMap(DiagnosisPrimaryVO::getId, DiagnosisPrimaryVO::getPrimaryDiseaseName)); for (AskPhysicalHistoryResVO node : res) { List temp = relationMap.get(node.getId()); List diseaseNameList = new ArrayList<>(); if (CollUtil.isNotEmpty(temp)) { for (DiagnosisPrimaryRelation relation : temp) { String diseaseName = diseaseNameMap.get(relation.getPrimaryId()); diseaseNameList.add(diseaseName); } } node.setResult(StrUtil.join(";", diseaseNameList)); } return res; } }