123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- package com.diagbot.facade;
- import com.diagbot.biz.push.entity.Item;
- import com.diagbot.biz.push.entity.Lis;
- import com.diagbot.biz.push.entity.Pacs;
- import com.diagbot.client.CRFServiceClient;
- import com.diagbot.dto.WordCrfDTO;
- import com.diagbot.enums.StandConvertEnum;
- import com.diagbot.model.ai.AIAnalyze;
- import com.diagbot.model.entity.PacsNew;
- import com.diagbot.model.label.ChiefLabel;
- import com.diagbot.model.label.DiagLabel;
- import com.diagbot.model.label.PastLabel;
- import com.diagbot.model.label.PresentLabel;
- import com.diagbot.model.label.VitalLabel;
- import com.diagbot.util.CoreUtil;
- import com.diagbot.util.ListUtil;
- import com.diagbot.vo.NeoPushVO;
- import com.diagbot.vo.SearchData;
- import com.diagbot.vo.StandConvert;
- import com.diagbot.vo.neoPushEntity.ChiefPushVo;
- import com.diagbot.vo.neoPushEntity.Diag;
- import com.diagbot.vo.neoPushEntity.DiagVo;
- import com.diagbot.vo.neoPushEntity.Drug;
- import com.diagbot.vo.neoPushEntity.LisPushVo;
- import com.diagbot.vo.neoPushEntity.PacsPushVo;
- import com.diagbot.vo.neoPushEntity.PresentPushVo;
- import com.diagbot.vo.neoPushEntity.Symptom;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
- /**
- * @Description: 通过业务facade
- * @author: zhoutg
- * @time: 2018/8/6 9:11
- */
- @Component
- public class CommonFacade {
- @Autowired
- CRFServiceClient crfServiceClient;
- //组装好的label
- public WordCrfDTO crf_process(SearchData searchData) {
- AIAnalyze aiAnalyze = new AIAnalyze(crfServiceClient);
- WordCrfDTO wordCrfDTO = new WordCrfDTO();
- wordCrfDTO.setAge(searchData.getAge());
- wordCrfDTO.setSex(searchData.getSex());
- wordCrfDTO.setLis(searchData.getLis());
- wordCrfDTO.setPacs(searchData.getPacs());
- wordCrfDTO.setLisOrder(searchData.getLisOrder());
- wordCrfDTO.setPacsOrder(searchData.getPacsOrder());
- wordCrfDTO.setDrugOrder(searchData.getDrugOrder());
- wordCrfDTO.setOperationOrder(searchData.getOperationOrder());
- wordCrfDTO.setDiagOrder(searchData.getDiagOrder());
- aiAnalyze.aiProcess(searchData, wordCrfDTO);
- return wordCrfDTO;
- }
- //返回给图谱的词,这些词需要转换成标准词
- public StandConvert dataTypeGet(WordCrfDTO wordCrfDTO) {
- StandConvert standConvert = new StandConvert();
- //所有的症状(主诉、现病史)
- List<String> clinicalList = new ArrayList<>();
- ChiefLabel chiefLabel = wordCrfDTO.getChiefLabel();
- clinicalList.addAll(CoreUtil.getPropertyList(chiefLabel.getClinicals()));
- PresentLabel presentLabel = wordCrfDTO.getPresentLabel();
- clinicalList.addAll(CoreUtil.getPropertyList(presentLabel.getClinicals()));
- //所有的疾病(主诉、现病史,诊断,既往史,下的诊断)
- DiagLabel diagLabel = wordCrfDTO.getDiagLabel();
- PastLabel pastLabel = wordCrfDTO.getPastLabel();
- List<String> diagList = new ArrayList<>();
- diagList.addAll(CoreUtil.getPropertyList(chiefLabel.getDiags()));
- diagList.addAll(CoreUtil.getPropertyList(presentLabel.getDiags()));
- diagList.addAll(CoreUtil.getPropertyList(diagLabel.getDiags()));
- diagList.addAll(CoreUtil.getPropertyList(pastLabel.getDiags()));
- //下的诊断
- diagList.addAll(wordCrfDTO.getDiagOrder().stream().filter(x -> StringUtils.isBlank(x.getUniqueName()))
- .map(x -> x.getName()).collect(Collectors.toList()));
- //所有化验(结构化数据)
- List<String> allLis = new ArrayList<>();
- //普通化验
- List<Lis> lis = wordCrfDTO.getLis();
- if (ListUtil.isNotEmpty(lis)) {
- List<String> lis_unique = lis.stream().filter(x -> StringUtils.isBlank(x.getUniqueName()))
- .map(x -> x.getName() + x.getDetailName()).collect(Collectors.toList());
- allLis.addAll(lis_unique);
- }
- //开单化验
- List<Lis> lisOrder = wordCrfDTO.getLisOrder();
- if (ListUtil.isNotEmpty(lisOrder)) {
- List<String> lis_unique = lisOrder.stream().filter(x -> StringUtils.isBlank(x.getUniqueName()))
- .map(x -> x.getName() + x.getDetailName()).collect(Collectors.toList());
- allLis.addAll(lis_unique);
- }
- standConvert.setLisList(allLis);
- //所有辅助检查(结构化数据)
- List<String> allPacs = new ArrayList<>();
- List<PacsNew> pacsNews = wordCrfDTO.getPacsLabel().getPacsNewList();
- if (ListUtil.isNotEmpty(pacsNews)) {
- List<String> pacss_unique = pacsNews.stream().filter(x -> StringUtils.isBlank(x.getUniqueName()))
- .map(x -> x.getName()).collect(Collectors.toList());
- allPacs.addAll(pacss_unique);
- }
- //开单检查
- allPacs.addAll(wordCrfDTO.getPacsOrder().stream().filter(z -> StringUtils.isBlank(z.getUniqueName())).map(x -> x.getName()).collect(Collectors.toList()));
- standConvert.setPacsList(allPacs);
- //所有药品(现病史、既往史)
- List<String> drugList = new ArrayList<>();
- //1、现病史中的药品
- drugList.addAll(CoreUtil.getPropertyList(presentLabel.getMedicines()));
- //2、既往史(药物过敏)
- drugList.addAll(CoreUtil.getPropertyList(pastLabel.getAllergyMedicines()));
- //3、开单药品
- drugList.addAll(wordCrfDTO.getDrugOrder().stream().filter(z ->StringUtils.isBlank(z.getUniqueName())).map(x ->x.getName()).collect(Collectors.toList()));
- standConvert.setDrugList(drugList);
- //所有手术(现病史、既往史)
- List<String> operationList = new ArrayList<>();
- //1、现病史中的手术
- operationList.addAll(CoreUtil.getPropertyList(presentLabel.getOperations()));
- //2、既往史中的手术
- operationList.addAll(CoreUtil.getPropertyList(pastLabel.getOperations()));
- //3.开单手术
- operationList.addAll(wordCrfDTO.getOperationOrder().stream().filter(z -> StringUtils.isBlank(z.getUniqueName())).map(x ->x.getName()).collect(Collectors.toList()));
- standConvert.setOperationList(operationList);
- //所有体征
- List<String> vitalList = new ArrayList<>();
- VitalLabel vitalLabel = wordCrfDTO.getVitalLabel();
- vitalList.addAll(CoreUtil.getPropertyList(vitalLabel.getVitals()));
- standConvert.setVitalList(vitalList);
- standConvert.setClinicalList(clinicalList);
- standConvert.setDiaglList(diagList);
- return standConvert;
- }
- //把图谱返回的标准词set到label中
- public void dataTypeSet(WordCrfDTO wordCrfDTO, Map<String, Map<String, String>> map) {
- ChiefLabel chiefLabel = wordCrfDTO.getChiefLabel();
- PresentLabel presentLabel = wordCrfDTO.getPresentLabel();
- PastLabel pastLabel = wordCrfDTO.getPastLabel();
- DiagLabel diagLabel = wordCrfDTO.getDiagLabel();
- List<Lis> lis = wordCrfDTO.getLis();
- List<PacsNew> pacsNews = wordCrfDTO.getPacsLabel().getPacsNewList();
- VitalLabel vitalLabel = wordCrfDTO.getVitalLabel();
- //症状回填
- CoreUtil.setPropertyList(chiefLabel.getClinicals(), map.get(StandConvertEnum.clinical.getName()));
- CoreUtil.setPropertyList(presentLabel.getClinicals(), map.get(StandConvertEnum.clinical.getName()));
- //诊断回填
- CoreUtil.setPropertyList(diagLabel.getDiags(), map.get(StandConvertEnum.disease.getName()));
- CoreUtil.setPropertyList(wordCrfDTO.getDiagOrder(),"name", "uniqueName", map.get(StandConvertEnum.disease.getName()));
- //药品回填
- CoreUtil.setPropertyList(presentLabel.getMedicines(), map.get(StandConvertEnum.drug.getName()));
- CoreUtil.setPropertyList(pastLabel.getAllergyMedicines(), map.get(StandConvertEnum.drug.getName()));
- CoreUtil.setPropertyList(wordCrfDTO.getDrugOrder(),"name", "uniqueName", map.get(StandConvertEnum.drug.getName()));
- // TODO: 2020/8/5 化验回填
- CoreUtil.setPropertyList(lis, "name", "detailName", "uniqueName", map.get(StandConvertEnum.lis.getName()));
- CoreUtil.setPropertyList(wordCrfDTO.getLisOrder(), "name", "detailName", "uniqueName", map.get(StandConvertEnum.lis.getName()));
- // TODO: 2020/8/5 辅助检查回填
- CoreUtil.setPropertyList(pacsNews, "name", "uniqueName", map.get(StandConvertEnum.pacs.getName()));
- CoreUtil.setPropertyList(wordCrfDTO.getPacsOrder(), "name", "uniqueName", map.get(StandConvertEnum.pacs.getName()));
- //体征回填
- CoreUtil.setPropertyList(vitalLabel.getVitals(), map.get(StandConvertEnum.vital.getName()));
- //手术回填
- CoreUtil.setPropertyList(presentLabel.getOperations(), map.get(StandConvertEnum.operation.getName()));
- CoreUtil.setPropertyList(pastLabel.getOperations(), map.get(StandConvertEnum.operation.getName()));
- CoreUtil.setPropertyList(wordCrfDTO.getOperationOrder(), "name", "uniqueName",map.get(StandConvertEnum.operation.getName()));
- }
- /**
- * 生成给图谱的入参(推送)
- */
- public NeoPushVO generatePushInput(WordCrfDTO wordCrfDTO) {
- NeoPushVO pushVO = new NeoPushVO();
- ChiefLabel chiefLabel = wordCrfDTO.getChiefLabel();
- PresentLabel presentLabel = wordCrfDTO.getPresentLabel();
- List<Item> diagOrder = wordCrfDTO.getDiagOrder();
- PastLabel pastLabel = wordCrfDTO.getPastLabel();
- List<Lis> lis = wordCrfDTO.getLis();
- List<Pacs> pacs = wordCrfDTO.getPacs();
- pushVO.setAge(wordCrfDTO.getAge());
- pushVO.setSex(wordCrfDTO.getSex());
- if (chiefLabel != null) {
- List<Symptom> cjiefClinicals = chiefLabel.getClinicals().stream().filter(x -> x.getNegative() == null).map(z ->
- {
- Symptom symptom = new Symptom();
- symptom.setName(z.getStandName());
- return symptom;
- }).collect(Collectors.toList());
- if (ListUtil.isNotEmpty(cjiefClinicals)) {
- ChiefPushVo chiefPushVo = new ChiefPushVo();
- chiefPushVo.setSymptoms(cjiefClinicals);
- pushVO.setChiefPushVo(chiefPushVo);
- }
- }
- if(presentLabel != null){
- PresentPushVo presentPushVo = new PresentPushVo();
- List<Symptom> presentClinicals = presentLabel.getClinicals().stream().filter(x -> x.getNegative() == null).map(z ->
- {
- Symptom symptom = new Symptom();
- symptom.setName(z.getStandName());
- return symptom;
- }).collect(Collectors.toList());
- presentPushVo.setSymptoms(presentClinicals);
- List<Diag> presentdiags = presentLabel.getDiags().stream().filter(x -> x.getNegative() == null).map(z ->
- {
- Diag diag = new Diag();
- diag.setName(z.getStandName());
- return diag;
- }).collect(Collectors.toList());
- presentPushVo.setDiags(presentdiags);
- List<Drug> presentdrugs = presentLabel.getMedicines().stream().filter(x -> x.getNegative() == null).map(z ->
- {
- Drug drug = new Drug();
- drug.setName(z.getStandName());
- return drug;
- }).collect(Collectors.toList());
- presentPushVo.setDrugs(presentdrugs);
- pushVO.setPresentPushVo(presentPushVo);
- }
- if(ListUtil.isNotEmpty(lis)){
- LisPushVo lisPushVo = new LisPushVo();
- lisPushVo.setLises(lis);
- pushVO.setLisPushVo(lisPushVo);
- }
- if(ListUtil.isNotEmpty(pacs)){
- PacsPushVo pacsPushVo = new PacsPushVo();
- pacsPushVo.setPacs(pacs);
- pushVO.setPacsPushVo(pacsPushVo);
- }
- if(ListUtil.isNotEmpty(diagOrder)){
- DiagVo diagVo = new DiagVo();
- List<Diag> diags = diagOrder.stream().map(x -> {
- Diag diag = new Diag();
- diag.setName(x.getUniqueName());
- return diag;
- }).collect(Collectors.toList());
- diagVo.setDiags(diags);
- pushVO.setDiagVo(diagVo);
- }
- return pushVO;
- }
- }
|