You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
6.3 KiB
Java
134 lines
6.3 KiB
Java
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<ConfigPhysicalToolResVO> 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<AskPhysicalHistoryResVO> queryAskPhysicalHistory(String processId) {
|
|
List<AskPhysicalHistoryResVO> res = diagnosisPhysicalRecordService.queryAskPhysicalHistory(processId);
|
|
// 这里把初步诊断的疾病名称填充进去
|
|
List<DiagnosisPrimaryRelation> relationList = diagnosisPrimaryRelationService.lambdaQuery().eq(DiagnosisPrimaryRelation::getType, 2)
|
|
.eq(DiagnosisPrimaryRelation::getProcessId, processId).list();
|
|
Map<String, List<DiagnosisPrimaryRelation>> relationMap = relationList.stream().collect(Collectors.groupingBy(DiagnosisPrimaryRelation::getRelationId));
|
|
|
|
// 找到process对应的所有的初步诊断
|
|
List<DiagnosisPrimaryVO> diagnosisPrimaryVOS = diagnosisPrimaryService.queryAskPrimaryList(processId);
|
|
Map<String, String> diseaseNameMap = diagnosisPrimaryVOS.stream().collect(Collectors.toMap(DiagnosisPrimaryVO::getId, DiagnosisPrimaryVO::getPrimaryDiseaseName));
|
|
for (AskPhysicalHistoryResVO node : res) {
|
|
List<DiagnosisPrimaryRelation> temp = relationMap.get(node.getId());
|
|
List<String> 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;
|
|
}
|
|
|
|
|
|
}
|