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.
virtual-patient/virtual-patient-web/src/main/java/com/supervision/service/impl/AskAncillaryServiceImpl.java

91 lines
3.8 KiB
Java

package com.supervision.service.impl;
import com.supervision.dto.DiseaseAncillaryDto;
import com.supervision.exception.BusinessException;
import com.supervision.model.*;
import com.supervision.model.Process;
import com.supervision.vo.ask.AncillaryItemReqVo;
import com.supervision.vo.ask.AskAncillaryHistoryResVO;
import com.supervision.pojo.vo.AskAncillaryResultReqVO;
import com.supervision.vo.ask.ConfigAncillaryItemResVO;
import com.supervision.service.*;
import com.supervision.util.UserUtil;
import com.supervision.vo.ask.DiagnosisAncillaryRecordVo;
import com.supervision.vo.result.ConfigAncillaryItemVo;
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 AskAncillaryServiceImpl implements AskAncillaryService {
private final ProcessService processService;
private final DiseaseAncillaryService diseaseAncillaryService;
private final ConfigAncillaryItemService ancillaryItemService;
private final DiagnosisAncillaryRecordService diagnosisAncillaryRecordService;
@Override
public List<ConfigAncillaryItemResVO> queryAncillaryItemList(AncillaryItemReqVo ancillaryItemReqVo) {
return ancillaryItemService.queryAncillaryItemList(ancillaryItemReqVo);
}
@Override
public DiagnosisAncillaryRecordVo execAskAncillaryResult(AskAncillaryResultReqVO reqVO) {
// 首先根据process_id查新到流程ID
Process process = Optional.ofNullable(processService.getById(reqVO.getProcessId())).orElseThrow(() -> new BusinessException("未找到流程ID"));
// 找到对应的项目的检查结果
DiseaseAncillary diseaseAncillaryQueryBean = new DiseaseAncillary();
diseaseAncillaryQueryBean.setItemId(reqVO.getItemId());
diseaseAncillaryQueryBean.setDiseaseId(process.getDiseaseId());
DiseaseAncillaryDto diseaseAncillary = diseaseAncillaryService.queryDiseaseAncillaryDtoOne(diseaseAncillaryQueryBean, () -> {
DiseaseAncillaryDto get = new DiseaseAncillaryDto();
get.setResult("无相关资讯");
return get;
});
DiagnosisAncillaryRecord record = new DiagnosisAncillaryRecord();
record.setProcessId(process.getId());
record.setItemId(reqVO.getItemId());
record.setPrimaryId(reqVO.getPrimaryId());
record.setAncillaryId(diseaseAncillary.getId());
record.setResult(diseaseAncillary.getResult());
record.setCreateUserId(UserUtil.getUser().getId());
record.setUpdateUserId(UserUtil.getUser().getId());
record.insert();
//重组返回结果
DiagnosisAncillaryRecordVo diagnosisAncillaryRecordVo = new DiagnosisAncillaryRecordVo();
diagnosisAncillaryRecordVo.setProcessId(record.getProcessId());
diagnosisAncillaryRecordVo.setItemId(record.getItemId());
diagnosisAncillaryRecordVo.setAncillaryId(record.getAncillaryId());
diagnosisAncillaryRecordVo.setResult(record.getResult());
diagnosisAncillaryRecordVo.setAncillaryName(diseaseAncillary.getItemName());
return diagnosisAncillaryRecordVo;
}
@Override
public List<AskAncillaryHistoryResVO> queryAskAncillaryHistory(String processId) {
return diagnosisAncillaryRecordService.queryAncillaryRecord(processId)
.stream().filter(distinctPredicateNotNull(AskAncillaryHistoryResVO::getItemId)).collect(Collectors.toList());
}
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);
}
}