package com.supervision.service.impl; import com.supervision.dto.DiseaseAncillaryDto; import com.supervision.exception.BusinessException; import com.supervision.mapper.DiseaseAncillaryMapper; 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.pojo.vo.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) { List list = ancillaryItemService.queryVoList(ancillaryItemReqVo); return list.stream().collect(Collectors.groupingBy(ConfigAncillaryItem::getType)).entrySet().stream().map(e -> { ConfigAncillaryItemResVO item = new ConfigAncillaryItemResVO(); item.setItemName(e.getKey()); item.setItemList(e.getValue()); return item; }).collect(Collectors.toList()); } @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.getMedicalRecId()); 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); } }