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 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 queryAskAncillaryHistory(String processId) { return diagnosisAncillaryRecordService.queryAncillaryRecord(processId) .stream().filter(distinctPredicateNotNull(AskAncillaryHistoryResVO::getItemId)).collect(Collectors.toList()); } public static Predicate distinctPredicateNotNull(Function function){ ConcurrentHashMap map = new ConcurrentHashMap<>(); return t-> null != function.apply(t) && null == map.putIfAbsent(function.apply(t), true); } }