CommonFacade.java 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598
  1. package com.diagbot.facade;
  2. import com.diagbot.biz.push.entity.Item;
  3. import com.diagbot.biz.push.entity.Lis;
  4. import com.diagbot.client.CRFServiceClient;
  5. import com.diagbot.dto.BillMsg;
  6. import com.diagbot.dto.WordCrfDTO;
  7. import com.diagbot.enums.StandConvertEnum;
  8. import com.diagbot.model.ai.AIAnalyze;
  9. import com.diagbot.model.entity.BodyPart;
  10. import com.diagbot.model.entity.Modification;
  11. import com.diagbot.model.entity.Pacs;
  12. import com.diagbot.model.label.ChiefLabel;
  13. import com.diagbot.model.label.DiagLabel;
  14. import com.diagbot.model.label.PacsLabel;
  15. import com.diagbot.model.label.PastLabel;
  16. import com.diagbot.model.label.PresentLabel;
  17. import com.diagbot.model.label.VitalLabel;
  18. import com.diagbot.util.CoreUtil;
  19. import com.diagbot.util.ListUtil;
  20. import com.diagbot.util.StringUtil;
  21. import com.diagbot.vo.NeoPushVO;
  22. import com.diagbot.vo.SearchData;
  23. import com.diagbot.vo.StandConvert;
  24. import com.diagbot.vo.neoPushEntity.ChiefPushVo;
  25. import com.diagbot.vo.neoPushEntity.Diag;
  26. import com.diagbot.vo.neoPushEntity.DiagVo;
  27. import com.diagbot.vo.neoPushEntity.Drug;
  28. import com.diagbot.vo.neoPushEntity.LisPushVo;
  29. import com.diagbot.vo.neoPushEntity.PresentPushVo;
  30. import com.diagbot.vo.neoPushEntity.Symptom;
  31. import org.apache.commons.lang3.StringUtils;
  32. import org.springframework.beans.factory.annotation.Autowired;
  33. import org.springframework.stereotype.Component;
  34. import java.util.ArrayList;
  35. import java.util.Iterator;
  36. import java.util.List;
  37. import java.util.Map;
  38. import java.util.stream.Collectors;
  39. /**
  40. * @Description: 通过业务facade
  41. * @author: zhoutg
  42. * @time: 2018/8/6 9:11
  43. */
  44. @Component
  45. public class CommonFacade {
  46. @Autowired
  47. CRFServiceClient crfServiceClient;
  48. @Autowired
  49. LisConfigFacade lisConfigFacade;
  50. @Autowired
  51. PacsConfigFacade pacsConfigFacade;
  52. //组装好的label
  53. public WordCrfDTO crf_process(SearchData searchData) {
  54. AIAnalyze aiAnalyze = new AIAnalyze(crfServiceClient);
  55. WordCrfDTO wordCrfDTO = new WordCrfDTO();
  56. wordCrfDTO.setHospitalId(searchData.getHospitalId());
  57. wordCrfDTO.setAge(searchData.getAge());
  58. wordCrfDTO.setSex(searchData.getSex());
  59. if (searchData.getDiseaseName() != null && StringUtils.isNotBlank(searchData.getDiseaseName().getName())) {
  60. wordCrfDTO.setDiseaseName(searchData.getDiseaseName());
  61. }
  62. if (searchData.getOperationName() != null && StringUtils.isNotBlank(searchData.getOperationName().getName())) {
  63. wordCrfDTO.setOperationName(searchData.getOperationName());
  64. }
  65. if (ListUtil.isNotEmpty(searchData.getLis())) {
  66. wordCrfDTO.setLis(searchData.getLis());
  67. }
  68. if (ListUtil.isNotEmpty(searchData.getPacs())) {
  69. wordCrfDTO.setPacs(searchData.getPacs());
  70. }
  71. if (ListUtil.isNotEmpty(searchData.getDrug())) {
  72. wordCrfDTO.setDrug(searchData.getDrug());
  73. }
  74. if (ListUtil.isNotEmpty(searchData.getOperation())) {
  75. wordCrfDTO.setOperation(searchData.getOperation());
  76. }
  77. if (ListUtil.isNotEmpty(searchData.getLisOrder())) {
  78. wordCrfDTO.setLisOrder(searchData.getLisOrder());
  79. }
  80. if (ListUtil.isNotEmpty(searchData.getPacsOrder())) {
  81. wordCrfDTO.setPacsOrder(searchData.getPacsOrder());
  82. }
  83. if (ListUtil.isNotEmpty(searchData.getDrugOrder())) {
  84. wordCrfDTO.setDrugOrder(searchData.getDrugOrder());
  85. }
  86. if (ListUtil.isNotEmpty(searchData.getOperationOrder())) {
  87. wordCrfDTO.setOperationOrder(searchData.getOperationOrder());
  88. }
  89. if (ListUtil.isNotEmpty(searchData.getDiagOrder())) {
  90. wordCrfDTO.setDiagOrder(searchData.getDiagOrder());
  91. }
  92. if (ListUtil.isNotEmpty(searchData.getDiag())) {
  93. wordCrfDTO.setDiag(searchData.getDiag());
  94. }
  95. if (ListUtil.isNotEmpty(searchData.getTransfusionOrder())) {
  96. wordCrfDTO.setTransfusionOrder(searchData.getTransfusionOrder());
  97. }
  98. if (StringUtil.isNotBlank(searchData.getSymptom())) {
  99. wordCrfDTO.setSymptom(searchData.getSymptom());
  100. }
  101. //模型处理数据
  102. aiAnalyze.aiProcess(searchData, wordCrfDTO);
  103. // 处理现病史中的化验和辅检,放入结构化
  104. processPresentLisPacs(wordCrfDTO);
  105. // 现病史中体征内容放入体征标签
  106. processPresentVital(wordCrfDTO);
  107. return wordCrfDTO;
  108. }
  109. //返回给图谱的词,这些词需要转换成标准词
  110. public StandConvert dataTypeGet(WordCrfDTO wordCrfDTO) {
  111. StandConvert standConvert = new StandConvert();
  112. //所有的症状(主诉、现病史)
  113. List<String> clinicalList = new ArrayList<>();
  114. ChiefLabel chiefLabel = wordCrfDTO.getChiefLabel();
  115. clinicalList.addAll(CoreUtil.getPropertyList(chiefLabel.getClinicals()));
  116. PresentLabel presentLabel = wordCrfDTO.getPresentLabel();
  117. clinicalList.addAll(CoreUtil.getPropertyList(presentLabel.getClinicals()));
  118. standConvert.setClinicalList(clinicalList);
  119. //所有的疾病(主诉、现病史,诊断,既往史,下的诊断)
  120. DiagLabel diagLabel = wordCrfDTO.getDiagLabel();
  121. PastLabel pastLabel = wordCrfDTO.getPastLabel();
  122. List<String> diagList = new ArrayList<>();
  123. diagList.addAll(CoreUtil.getPropertyList(chiefLabel.getDiags()));
  124. diagList.addAll(CoreUtil.getPropertyList(presentLabel.getDiags()));
  125. diagList.addAll(CoreUtil.getPropertyList(diagLabel.getDiags()));
  126. diagList.addAll(CoreUtil.getPropertyList(pastLabel.getDiags()));
  127. //下的诊断
  128. diagList.addAll(wordCrfDTO.getDiagOrder().stream().filter(x -> StringUtils.isBlank(x.getUniqueName()))
  129. .map(x -> x.getName()).collect(Collectors.toList()));
  130. //传的诊断
  131. diagList.addAll(wordCrfDTO.getDiag().stream().filter(x ->
  132. StringUtils.isBlank(x.getUniqueName()))
  133. .map(x -> x.getName()).collect(Collectors.toList()));
  134. //选中的诊断
  135. if(wordCrfDTO.getDiseaseName() != null && StringUtils.isBlank(wordCrfDTO.getDiseaseName().getUniqueName())){
  136. diagList.add(wordCrfDTO.getDiseaseName().getName());
  137. }
  138. standConvert.setDiaglList(diagList);
  139. //所有化验(结构化数据)
  140. List<String> allLis = new ArrayList<>();
  141. //普通化验
  142. List<Lis> lis = wordCrfDTO.getLis();
  143. if (ListUtil.isNotEmpty(lis)) {
  144. List<String> lis_unique = lis.stream().filter(x -> StringUtils.isBlank(x.getUniqueName()))
  145. .map(x -> x.getName() + x.getDetailName()).collect(Collectors.toList());
  146. allLis.addAll(lis_unique);
  147. }
  148. //开单化验
  149. List<Lis> lisOrder = wordCrfDTO.getLisOrder();
  150. if (ListUtil.isNotEmpty(lisOrder)) {
  151. List<String> lis_unique = lisOrder.stream().filter(x -> StringUtils.isBlank(x.getUniqueName()))
  152. .map(x -> x.getName() + x.getDetailName()).collect(Collectors.toList());
  153. allLis.addAll(lis_unique);
  154. }
  155. standConvert.setLisList(allLis);
  156. //所有辅助项目(结构化数据)
  157. List<String> allPacs = new ArrayList<>();
  158. List<Item> pacsList = wordCrfDTO.getPacsLabel().getItem();
  159. if (ListUtil.isNotEmpty(pacsList)) {
  160. List<String> pacss_unique = pacsList.stream().filter(x -> StringUtils.isBlank(x.getUniqueName()))
  161. .map(x -> x.getName()).collect(Collectors.toList());
  162. allPacs.addAll(pacss_unique);
  163. }
  164. // List<PacsNew> pacsNews = wordCrfDTO.getPacsLabel().getPacsNewList();
  165. // if (ListUtil.isNotEmpty(pacsNews)) {
  166. // List<String> pacss_unique = pacsNews.stream().filter(x -> StringUtils.isBlank(x.getUniqueName()))
  167. // .map(x -> x.getName()).collect(Collectors.toList());
  168. // allPacs.addAll(pacss_unique);
  169. // }
  170. allPacs.addAll(wordCrfDTO.getPacs().stream().filter(x -> StringUtils.isBlank(x.getUniqueName()))
  171. .map(x -> x.getName()).collect(Collectors.toList()));
  172. //开单检查
  173. allPacs.addAll(wordCrfDTO.getPacsOrder().stream().filter(z -> StringUtils.isBlank(z.getUniqueName())).map(x -> x.getName()).collect(Collectors.toList()));
  174. standConvert.setPacsList(allPacs);
  175. //所有药品(现病史、既往史)
  176. List<String> drugList = new ArrayList<>();
  177. //1、现病史中的药品
  178. drugList.addAll(CoreUtil.getPropertyList(presentLabel.getMedicines()));
  179. drugList.addAll(CoreUtil.getPropertyList(presentLabel.getTakeMedicine()));
  180. //2、既往史(药物过敏)
  181. drugList.addAll(CoreUtil.getPropertyList(pastLabel.getAllergyMedicines()));
  182. //3、开单药品
  183. drugList.addAll(wordCrfDTO.getDrugOrder().stream().filter(z ->StringUtils.isBlank(z.getUniqueName())).map(x ->x.getName()).collect(Collectors.toList()));
  184. standConvert.setDrugList(drugList);
  185. //4、医嘱药品
  186. drugList.addAll(wordCrfDTO.getDrug().stream().filter(z ->StringUtils.isBlank(z.getUniqueName())).map(x ->x.getName()).collect(Collectors.toList()));
  187. standConvert.setDrugList(drugList);
  188. //所有手术(现病史、既往史)
  189. List<String> operationList = new ArrayList<>();
  190. //1、现病史中的手术
  191. operationList.addAll(CoreUtil.getPropertyList(presentLabel.getOperations()));
  192. //2、既往史中的手术
  193. operationList.addAll(CoreUtil.getPropertyList(pastLabel.getOperations()));
  194. //3.开单手术
  195. operationList.addAll(wordCrfDTO.getOperationOrder().stream().filter(z -> StringUtils.isBlank(z.getUniqueName())).map(x ->x.getName()).collect(Collectors.toList()));
  196. standConvert.setOperationList(operationList);
  197. //4.手术及操作
  198. operationList.addAll(wordCrfDTO.getOperation().stream().filter(z -> StringUtils.isBlank(z.getUniqueName())).map(x ->x.getName()).collect(Collectors.toList()));
  199. //5.选中的诊断
  200. if(wordCrfDTO.getOperationName() != null && StringUtils.isBlank(wordCrfDTO.getOperationName().getUniqueName())){
  201. operationList.add(wordCrfDTO.getOperationName().getName());
  202. }
  203. standConvert.setOperationList(operationList);
  204. //所有体征
  205. List<String> vitalList = new ArrayList<>();
  206. VitalLabel vitalLabel = wordCrfDTO.getVitalLabel();
  207. vitalList.addAll(CoreUtil.getPropertyList(vitalLabel.getVitals()));
  208. vitalList.addAll(CoreUtil.getPropertyList(vitalLabel.getClinicals()));
  209. standConvert.setVitalList(vitalList);
  210. // 输血
  211. List<String> transfusionList = new ArrayList<>();
  212. if (ListUtil.isNotEmpty(wordCrfDTO.getTransfusionOrder())) {
  213. transfusionList.addAll(wordCrfDTO.getTransfusionOrder().stream().filter(z -> StringUtils.isBlank(z.getUniqueName())).map(x -> x.getName()).collect(Collectors.toList()));
  214. }
  215. standConvert.setTransfusionList(transfusionList);
  216. return standConvert;
  217. }
  218. //把图谱返回的标准词set到label中
  219. public void dataTypeSet(WordCrfDTO wordCrfDTO, Map<String, Map<String, String>> map) {
  220. ChiefLabel chiefLabel = wordCrfDTO.getChiefLabel();
  221. PresentLabel presentLabel = wordCrfDTO.getPresentLabel();
  222. PastLabel pastLabel = wordCrfDTO.getPastLabel();
  223. DiagLabel diagLabel = wordCrfDTO.getDiagLabel();
  224. List<Lis> lis = wordCrfDTO.getLis();
  225. List<Item> pacsList = wordCrfDTO.getPacsLabel().getItem();
  226. VitalLabel vitalLabel = wordCrfDTO.getVitalLabel();
  227. //症状回填
  228. CoreUtil.setPropertyList(chiefLabel.getClinicals(), map.get(StandConvertEnum.symptom.toString()));
  229. CoreUtil.setPropertyList(presentLabel.getClinicals(), map.get(StandConvertEnum.symptom.toString()));
  230. //诊断回填
  231. CoreUtil.setPropertyList(diagLabel.getDiags(), map.get(StandConvertEnum.disease.toString()));
  232. CoreUtil.setPropertyList(wordCrfDTO.getDiagOrder(),"name", "uniqueName", map.get(StandConvertEnum.disease.toString()));
  233. CoreUtil.setPropertyList(wordCrfDTO.getDiag(),"name", "uniqueName", map.get(StandConvertEnum.disease.toString()));
  234. CoreUtil.setPropertyList(wordCrfDTO.getDiseaseName(),"name", "uniqueName", map.get(StandConvertEnum.disease.toString()));
  235. //药品回填
  236. CoreUtil.setPropertyList(presentLabel.getMedicines(), map.get(StandConvertEnum.drug.toString()));
  237. CoreUtil.setPropertyList(presentLabel.getTakeMedicine(), map.get(StandConvertEnum.drug.toString()));
  238. CoreUtil.setPropertyList(pastLabel.getAllergyMedicines(), map.get(StandConvertEnum.drug.toString()));
  239. CoreUtil.setPropertyList(wordCrfDTO.getDrugOrder(),"name", "uniqueName", map.get(StandConvertEnum.drug.toString()));
  240. CoreUtil.setPropertyList(wordCrfDTO.getDrug(),"name", "uniqueName", map.get(StandConvertEnum.drug.toString()));
  241. //化验回填
  242. CoreUtil.setPropertyList(lis, "name", "detailName", "uniqueName", map.get(StandConvertEnum.lis.toString()));
  243. CoreUtil.setPropertyList(wordCrfDTO.getLisOrder(), "name", "detailName", "uniqueName", map.get(StandConvertEnum.lis.toString()));
  244. //辅助检查回填
  245. CoreUtil.setPropertyList(pacsList, "name", "uniqueName", map.get(StandConvertEnum.pacs.toString()));
  246. CoreUtil.setPropertyList(wordCrfDTO.getPacs(), "name", "uniqueName", map.get(StandConvertEnum.pacs.toString()));
  247. CoreUtil.setPropertyList(wordCrfDTO.getPacsOrder(), "name", "uniqueName", map.get(StandConvertEnum.pacs.toString()));
  248. //体征回填
  249. CoreUtil.setPropertyList(vitalLabel.getVitals(), map.get(StandConvertEnum.vital.toString()));
  250. CoreUtil.setPropertyList(vitalLabel.getClinicals(), map.get(StandConvertEnum.vital.toString()));
  251. //手术回填
  252. CoreUtil.setPropertyList(presentLabel.getOperations(), map.get(StandConvertEnum.operation.toString()));
  253. CoreUtil.setPropertyList(pastLabel.getOperations(), map.get(StandConvertEnum.operation.toString()));
  254. CoreUtil.setPropertyList(wordCrfDTO.getOperationOrder(), "name", "uniqueName",map.get(StandConvertEnum.operation.toString()));
  255. CoreUtil.setPropertyList(wordCrfDTO.getOperation(), "name", "uniqueName",map.get(StandConvertEnum.operation.toString()));
  256. CoreUtil.setPropertyList(wordCrfDTO.getOperationName(), "name", "uniqueName",map.get(StandConvertEnum.operation.toString()));
  257. //输血回填
  258. CoreUtil.setPropertyList(wordCrfDTO.getTransfusionOrder(), "name", "uniqueName",map.get(StandConvertEnum.transfusion.toString()));
  259. }
  260. /**
  261. * 生成给图谱的入参(推送)
  262. */
  263. public NeoPushVO generatePushInput(WordCrfDTO wordCrfDTO) {
  264. NeoPushVO pushVO = new NeoPushVO();
  265. ChiefLabel chiefLabel = wordCrfDTO.getChiefLabel();
  266. PresentLabel presentLabel = wordCrfDTO.getPresentLabel();
  267. List<Item> diags = wordCrfDTO.getDiag();
  268. Item diseaseName = wordCrfDTO.getDiseaseName();
  269. PastLabel pastLabel = wordCrfDTO.getPastLabel();
  270. List<Lis> lis = wordCrfDTO.getLis();
  271. // List<Pacs> pacs = wordCrfDTO.getPacs();
  272. // TODO 辅检
  273. // List<PacsNew> pacsNewList = wordCrfDTO.getPacsLabel().getPacsNewList();
  274. pushVO.setAge(wordCrfDTO.getAge());
  275. pushVO.setSex(wordCrfDTO.getSex());
  276. pushVO.setDiaeaseName(diseaseName);
  277. if (chiefLabel != null) {
  278. if(ListUtil.isNotEmpty(chiefLabel.getClinicals())){
  279. List<Symptom> cjiefClinicals = chiefLabel.getClinicals().stream().filter(x -> x.getNegative() == null).map(z ->
  280. {
  281. Symptom symptom = new Symptom();
  282. symptom.setName(z.getStandName());
  283. return symptom;
  284. }).collect(Collectors.toList());
  285. if (ListUtil.isNotEmpty(cjiefClinicals)) {
  286. ChiefPushVo chiefPushVo = new ChiefPushVo();
  287. chiefPushVo.setSymptoms(cjiefClinicals);
  288. pushVO.setChiefPushVo(chiefPushVo);
  289. }
  290. }
  291. }
  292. if(presentLabel != null){
  293. PresentPushVo presentPushVo = new PresentPushVo();
  294. if(ListUtil.isNotEmpty(presentLabel.getClinicals())){
  295. List<Symptom> presentClinicals = presentLabel.getClinicals().stream().filter(x -> x.getNegative() == null).map(z ->
  296. {
  297. Symptom symptom = new Symptom();
  298. symptom.setName(z.getStandName());
  299. return symptom;
  300. }).collect(Collectors.toList());
  301. presentPushVo.setSymptoms(presentClinicals);
  302. }
  303. if(ListUtil.isNotEmpty(presentLabel.getDiags())){
  304. List<Diag> presentdiags = presentLabel.getDiags().stream().filter(x -> x.getNegative() == null).map(z ->
  305. {
  306. Diag diag = new Diag();
  307. diag.setName(z.getStandName());
  308. return diag;
  309. }).collect(Collectors.toList());
  310. presentPushVo.setDiags(presentdiags);
  311. }
  312. if(ListUtil.isNotEmpty(presentLabel.getMedicines())){
  313. List<Drug> presentdrugs = presentLabel.getMedicines().stream().filter(x -> x.getNegative() == null).map(z ->
  314. {
  315. Drug drug = new Drug();
  316. drug.setName(z.getStandName());
  317. return drug;
  318. }).collect(Collectors.toList());
  319. presentPushVo.setDrugs(presentdrugs);
  320. }
  321. pushVO.setPresentPushVo(presentPushVo);
  322. }
  323. if(ListUtil.isNotEmpty(lis)){
  324. LisPushVo lisPushVo = new LisPushVo();
  325. lisPushVo.setLises(lis);
  326. pushVO.setLisPushVo(lisPushVo);
  327. }
  328. // TODO 辅检
  329. // if(ListUtil.isNotEmpty(pacsNewList)){
  330. // PacsPushVo pacsPushVo = new PacsPushVo();
  331. // pacsPushVo.setPacs(pacsNewList);
  332. // pushVO.setPacsPushVo(pacsPushVo);
  333. // }
  334. if(ListUtil.isNotEmpty(diags)){
  335. DiagVo diagVo = new DiagVo();
  336. List<Diag> diseases = diags.stream().map(x -> {
  337. Diag diag = new Diag();
  338. diag.setName(x.getUniqueName());
  339. return diag;
  340. }).collect(Collectors.toList());
  341. diagVo.setDiags(diseases);
  342. pushVO.setDiagVo(diagVo);
  343. }
  344. return pushVO;
  345. }
  346. /**
  347. * 将现病史中提取的体征内容放入体征标签中
  348. *
  349. * @param wordCrfDTO
  350. */
  351. public void processPresentVital(WordCrfDTO wordCrfDTO){
  352. PresentLabel presentLabel = wordCrfDTO.getPresentLabel();
  353. VitalLabel vitalLabel = wordCrfDTO.getVitalLabel();
  354. if (ListUtil.isNotEmpty(presentLabel.getVitals())) {
  355. vitalLabel.getVitals().addAll(presentLabel.getVitals());
  356. }
  357. if (ListUtil.isNotEmpty(presentLabel.getClinicals())) {
  358. vitalLabel.getClinicals().addAll(presentLabel.getClinicals());
  359. }
  360. }
  361. public void processPresentLisPacs(WordCrfDTO wordCrfDTO){
  362. PresentLabel presentLabel = wordCrfDTO.getPresentLabel();
  363. List<com.diagbot.model.entity.Lis> lises = presentLabel.getLises();
  364. List<Lis> lisList = new ArrayList<>();
  365. if(ListUtil.isNotEmpty(lises)){
  366. List<String> lisNames = lises.stream().map(x -> x.getBigItem().getName()).distinct().collect(Collectors.toList());
  367. Map<String, Map<String, Map<String, Long>>> configMap = lisConfigFacade.getConfigMap(wordCrfDTO.getHospitalId(), lisNames, null);
  368. if(configMap.size() > 0){
  369. lises.stream().forEach(x ->{
  370. String bigName = x.getBigItem().getName();//大项名
  371. String detailName = x.getName();//小项名
  372. String value = x.getPd().getValue();
  373. String unit = x.getPd().getUnit();
  374. if(configMap.containsKey(bigName)){
  375. Map<String, Map<String, Long>> uniqueDetailMap = configMap.get(bigName);
  376. if(uniqueDetailMap.containsKey(detailName)){
  377. List<String> uniques = uniqueDetailMap.get(detailName).keySet().stream().collect(Collectors.toList());//所有的公表项
  378. if(ListUtil.isNotEmpty(uniques)){
  379. List<Lis> lisStream = uniques.stream().map(z -> {
  380. return getLis(bigName, detailName, value, unit, z);
  381. }).collect(Collectors.toList());
  382. lisList.addAll(lisStream);
  383. }
  384. }else {
  385. Lis lis = getLis(bigName, detailName, value, unit, null);
  386. lisList.add(lis);
  387. }
  388. }else {
  389. Lis lis = getLis(bigName, detailName, value, unit, null);
  390. lisList.add(lis);
  391. }
  392. });
  393. }else {
  394. lises.stream().forEach(x ->{
  395. Lis lis = getLis(x.getBigItem().getName(), x.getName(), x.getPd().getValue(), x.getPd().getUnit(), null);
  396. lisList.add(lis);
  397. });
  398. }
  399. }
  400. wordCrfDTO.getLis().addAll(lisList);
  401. // 处理辅检信息,将现病史和结构化辅检统一放到pacsLable中
  402. PacsLabel pacsLabel = wordCrfDTO.getPacsLabel();
  403. List<Item> pacsResList = pacsLabel.getRes();
  404. PacsLabel pacsPresentLabel = wordCrfDTO.getPresentLabel().getPacsLabel();
  405. if (pacsPresentLabel != null) {
  406. // 添加辅检项目名称
  407. if (ListUtil.isNotEmpty(pacsPresentLabel.getItem())) {
  408. pacsLabel.getItem().addAll(pacsPresentLabel.getItem());
  409. }
  410. // 添加辅检的诊断
  411. if (ListUtil.isNotEmpty(pacsPresentLabel.getDisease())) {
  412. pacsLabel.getDisease().addAll(pacsPresentLabel.getDisease());
  413. }
  414. // 添加辅检的描述
  415. if (ListUtil.isNotEmpty(pacsPresentLabel.getPacsResults())) {
  416. pacsLabel.getPacsResults().addAll(pacsPresentLabel.getPacsResults());
  417. }
  418. }
  419. if (ListUtil.isNotEmpty(pacsLabel.getDisease())) {
  420. for (Pacs pacs : pacsLabel.getDisease()) {
  421. Item item = new Item();
  422. item.setName(pacs.getName());
  423. item.setUniqueName(pacs.getStandName());
  424. pacsResList.add(item);
  425. }
  426. }
  427. // 添加辅检的描述
  428. if (ListUtil.isNotEmpty(pacsLabel.getPacsResults())) {
  429. for (Pacs pacs : pacsLabel.getPacsResults()) {
  430. Item item = new Item();
  431. item.setName(pacs.getName());
  432. item.setUniqueName(pacs.getStandName());
  433. pacsResList.add(item);
  434. // 部位 + 描述循环放入
  435. for (BodyPart bodyPart : pacs.getBodyPartList()) {
  436. Item itemPart = new Item();
  437. itemPart.setName(bodyPart.getName() + pacs.getName());
  438. itemPart.setUniqueName(bodyPart.getStandName() + pacs.getStandName());
  439. pacsResList.add(itemPart);
  440. }
  441. // 描述 + 修饰、 修饰 + 描述 循环放入
  442. for (Modification modification : pacs.getModification()) {
  443. Item itemModification = new Item();
  444. itemModification.setName(pacs.getName() + modification.getName());
  445. itemModification.setUniqueName(pacs.getStandName() + modification.getStandName());
  446. pacsResList.add(itemModification);
  447. Item itemModificationRe = new Item();
  448. itemModificationRe.setName(modification.getName() + pacs.getName());
  449. itemModificationRe.setUniqueName(modification.getStandName() + pacs.getStandName());
  450. pacsResList.add(itemModificationRe);
  451. }
  452. }
  453. // 辅检项目去重
  454. if (ListUtil.isNotEmpty(pacsLabel.getRes())) {
  455. dealMsgWithItem(pacsLabel.getRes());
  456. }
  457. if (ListUtil.isNotEmpty(pacsLabel.getItem())) {
  458. dealMsgWithItem(pacsLabel.getItem());
  459. }
  460. }
  461. //处理辅检
  462. // List<com.diagbot.biz.push.entity.Pacs> pacs = new ArrayList<>();
  463. // List<PacsNew> packagePacs = new ArrayList<>();
  464. // List<PacsNew> pacsNewList = wordCrfDTO.getPresentLabel().getPacsNewList();
  465. // if(ListUtil.isNotEmpty(pacsNewList)){
  466. // List<String> pacsNames = pacsNewList.stream().map(x -> x.getName()).collect(Collectors.toList());
  467. // Map<String, Map<String, Long>> configMap = pacsConfigFacade.getConfigMap(wordCrfDTO.getHospitalId(), pacsNames, null);
  468. // if(configMap.size() > 0){
  469. // pacsNewList.stream().forEach(pacsNew ->{
  470. // String name = pacsNew.getName();
  471. // List<Pacs> disease = pacsNew.getDisease();
  472. // List<Pacs> pacsResults = pacsNew.getPacsResults();
  473. // if(configMap.containsKey(name)){
  474. // Map<String, Long> uinqueNameMap = configMap.get(name);
  475. // List<PacsNew> collect = uinqueNameMap.keySet().stream().map(x -> {
  476. // PacsNew pan = new PacsNew();
  477. // pan.setName(name);
  478. // pan.setUniqueName(x);
  479. // pan.setPacsResults(pacsResults);
  480. // pan.setDisease(disease);
  481. // return pan;
  482. // }).collect(Collectors.toList());
  483. // packagePacs.addAll(collect);
  484. // collect.forEach(x ->{
  485. // com.diagbot.biz.push.entity.Pacs p = new com.diagbot.biz.push.entity.Pacs();
  486. // p.setName(x.getName());
  487. // p.setUniqueName(x.getUniqueName());
  488. // pacs.add(p);
  489. // });
  490. // }else {
  491. // PacsNew pan = new PacsNew();
  492. // pan.setName(name);
  493. // pan.setPacsResults(pacsResults);
  494. // pan.setDisease(disease);
  495. // packagePacs.add(pan);
  496. // com.diagbot.biz.push.entity.Pacs p = new com.diagbot.biz.push.entity.Pacs();
  497. // p.setName(name);
  498. // pacs.add(p);
  499. // }
  500. // });
  501. // }else {
  502. // packagePacs.addAll(pacsNewList);
  503. // pacsNewList.forEach(x ->{
  504. // com.diagbot.biz.push.entity.Pacs p = new com.diagbot.biz.push.entity.Pacs();
  505. // p.setName(x.getName());
  506. // pacs.add(p);
  507. // });
  508. // }
  509. // }
  510. // if(ListUtil.isNotEmpty(pacs)){
  511. // wordCrfDTO.getPacs().addAll(pacs);
  512. // }
  513. // pacsLabel.getPacsNewList().addAll(packagePacs);
  514. }
  515. private Lis getLis(String bigName, String detailName, String value, String unit, String uniqueName) {
  516. Lis lis = new Lis();
  517. lis.setUnits(unit);
  518. if(StringUtils.isBlank(unit)){
  519. lis.setOtherValue(value);
  520. }else {
  521. lis.setValue(Double.parseDouble(value));
  522. }
  523. lis.setDetailName(detailName);
  524. lis.setName(bigName);
  525. lis.setUniqueName(uniqueName);
  526. return lis;
  527. }
  528. /**
  529. * 提示信息去重
  530. *
  531. * @param billMsgList
  532. */
  533. public void dealMsg(List<BillMsg> billMsgList) {
  534. if (ListUtil.isNotEmpty(billMsgList)) {
  535. List<String> msgList = new ArrayList<>();
  536. Iterator<BillMsg> it = billMsgList.iterator();
  537. while (it.hasNext()) {
  538. String msg = it.next().getMsg();
  539. if (msgList.contains(msg)) {
  540. it.remove();
  541. } else {
  542. msgList.add(msg);
  543. }
  544. }
  545. }
  546. }
  547. /**
  548. * 提示信息去重
  549. *
  550. * @param itemList
  551. */
  552. public void dealMsgWithItem(List<Item> itemList) {
  553. if (ListUtil.isNotEmpty(itemList)) {
  554. List<String> msgList = new ArrayList<>();
  555. Iterator<Item> it = itemList.iterator();
  556. while (it.hasNext()) {
  557. String msg = it.next().getName();
  558. if (msgList.contains(msg)) {
  559. it.remove();
  560. } else {
  561. msgList.add(msg);
  562. }
  563. }
  564. }
  565. }
  566. }