TreatmentFacade.java 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. package com.diagbot.facade;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.diagbot.client.bean.AdverseReaction;
  5. import com.diagbot.client.bean.Medicition;
  6. import com.diagbot.client.bean.MedicitionClass;
  7. import com.diagbot.dto.ConceptDetailDTO;
  8. import com.diagbot.dto.ConceptRes;
  9. import com.diagbot.entity.Concept;
  10. import com.diagbot.entity.ConceptDetail;
  11. import com.diagbot.entity.wrapper.ConceptWrapper;
  12. import com.diagbot.enums.ConceptTypeEnum;
  13. import com.diagbot.enums.DisTypeEnum;
  14. import com.diagbot.enums.IntroducePositionEnum;
  15. import com.diagbot.enums.LexiconRSTypeEnum;
  16. import com.diagbot.enums.LexiconTypeEnum;
  17. import com.diagbot.exception.CommonErrorCode;
  18. import com.diagbot.exception.CommonException;
  19. import com.diagbot.util.BeanUtil;
  20. import com.diagbot.util.EntityUtil;
  21. import com.diagbot.util.FastJsonUtils;
  22. import com.diagbot.util.ListUtil;
  23. import com.diagbot.vo.ConceptBaseVO;
  24. import com.diagbot.vo.ConceptIntroduceVO;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.stereotype.Component;
  27. import java.util.LinkedHashMap;
  28. import java.util.LinkedList;
  29. import java.util.List;
  30. import java.util.Map;
  31. import java.util.stream.Collectors;
  32. /**
  33. * @Description:治疗方案业务处理
  34. * @Author:zhaops
  35. * @time: 2019/5/8 17:16
  36. */
  37. @Component
  38. public class TreatmentFacade {
  39. @Autowired
  40. ConceptFacade conceptFacade;
  41. @Autowired
  42. ConceptDetailFacade conceptDetailFacade;
  43. /**
  44. * 获取治疗方案
  45. *
  46. * @param
  47. * @return
  48. */
  49. public Map<String, Object> getTreatment(Map<String, JSONObject> treatmentMap, String diseaseName, Integer disType) {
  50. Map<String, Object> retMap = new LinkedHashMap<>();
  51. QueryWrapper<Concept> conceptQueryWrapper = new QueryWrapper<>();
  52. ConceptBaseVO conceptBaseVO = new ConceptBaseVO();
  53. conceptBaseVO.setName(diseaseName);
  54. conceptBaseVO.setLibType(LexiconTypeEnum.DIAGNOSIS.getKey());
  55. Concept disease = conceptFacade.exist(conceptBaseVO);
  56. if (disease == null) {
  57. throw new CommonException(CommonErrorCode.NOT_EXISTS, "诊断不存在");
  58. }
  59. if (treatmentMap == null || treatmentMap.size() == 0) {
  60. throw new CommonException(CommonErrorCode.NOT_EXISTS, "未找到治疗方案");
  61. }
  62. if (!treatmentMap.containsKey(diseaseName)) {
  63. throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "诊断名不在诊断列表中");
  64. }
  65. //一般治疗
  66. ConceptIntroduceVO conceptIntroduceVO = new ConceptIntroduceVO();
  67. conceptIntroduceVO.setName(diseaseName);
  68. conceptIntroduceVO.setLibType(LexiconTypeEnum.DIAGNOSIS.getKey());
  69. conceptIntroduceVO.setPosition(IntroducePositionEnum.CommonTreatment.getKey());
  70. List<ConceptDetail> commonTreatmentDetailList = conceptDetailFacade.getConceptDetailList(conceptIntroduceVO);
  71. ConceptDetailDTO commonDetailDTO = new ConceptDetailDTO();
  72. if (ListUtil.isNotEmpty(commonTreatmentDetailList)) {
  73. BeanUtil.copyProperties(commonTreatmentDetailList.get(0), commonDetailDTO);
  74. }
  75. retMap.put("commonTreatment", commonDetailDTO);
  76. //手术治疗
  77. conceptIntroduceVO.setPosition(IntroducePositionEnum.SurgeryTreatment.getKey());
  78. List<ConceptDetail> surgeryTreatmentDetailList = conceptDetailFacade.getConceptDetailList(conceptIntroduceVO);
  79. ConceptDetailDTO surgeryDetailDTO = new ConceptDetailDTO();
  80. if (ListUtil.isNotEmpty(surgeryTreatmentDetailList)) {
  81. BeanUtil.copyProperties(surgeryTreatmentDetailList.get(0), surgeryDetailDTO);
  82. }
  83. retMap.put("surgeryTreatment", surgeryDetailDTO);
  84. //获取知识图谱治疗方案
  85. JSONObject treatmentJson = treatmentMap.get(diseaseName);
  86. if (treatmentJson == null || treatmentJson.isEmpty()) {
  87. return retMap;
  88. }
  89. List<MedicitionClass> drugsList = FastJsonUtils.getJsonToListByKey(treatmentJson.toString(), "treatment", MedicitionClass.class);
  90. List<String> cateBigNameList = drugsList.stream().map(drugs -> drugs.getBigdrugsName()).collect(Collectors.toList());
  91. List<Concept> cateBigConceptList = conceptFacade.getListByNamesAndType(cateBigNameList, LexiconTypeEnum.DRUG_CATEGORY_BIG.getKey());
  92. Map<String, Concept> cateBigConceptMap = EntityUtil.makeEntityMap(cateBigConceptList, "libName");
  93. List<String> cateSmallNameList = drugsList.stream().map(drugs -> drugs.getSubdrugsName()).collect(Collectors.toList());
  94. List<Concept> cateSmallConceptList = conceptFacade.getListByNamesAndType(cateSmallNameList, LexiconTypeEnum.DRUG_CATEGORY_SMALL.getKey());
  95. Map<String, Concept> cateSmallConceptMap = EntityUtil.makeEntityMap(cateSmallConceptList, "libName");
  96. for (MedicitionClass medicitionClass : drugsList) {
  97. Concept cateBigConcept = cateBigConceptMap.get(medicitionClass.getBigdrugsName());
  98. medicitionClass.setBigdrugsConceptId(cateBigConcept.getId());
  99. medicitionClass.setBigdrgusLibType(ConceptTypeEnum.Drug_Category_Big.getKey());
  100. Concept cateSmallConcept = cateSmallConceptMap.get(medicitionClass.getSubdrugsName());
  101. medicitionClass.setSubdrugsConceptId(cateSmallConcept.getId());
  102. medicitionClass.setSubdrugsLibType(ConceptTypeEnum.Drug_Category_Small.getKey());
  103. if (cateBigConcept != null) {
  104. conceptBaseVO.setLibType(LexiconTypeEnum.DRUG_CATEGORY_BIG.getKey());
  105. conceptBaseVO.setName(cateBigConcept.getLibName());
  106. if (conceptDetailFacade.exist(conceptBaseVO)) {
  107. medicitionClass.setShowInfo("1");
  108. }
  109. }
  110. LinkedList<Medicition> medicitionList = medicitionClass.getMedicitionsList();
  111. List<String> drugNameList = medicitionList.stream().map(medicition -> medicition.getMedicitionName()).collect(Collectors.toList());
  112. List<Concept> drugList = conceptFacade.getListByNamesAndType(drugNameList, LexiconTypeEnum.DRUGS.getKey());
  113. Map<String, Concept> drugMap = EntityUtil.makeEntityMap(drugList, "libName");
  114. Map<String, Concept> drugDetailMap = conceptDetailFacade.existList(drugNameList, LexiconTypeEnum.DRUGS.getKey());
  115. for (Medicition medicition : medicitionList) {
  116. Concept drugConcept = drugMap.get(medicition.getMedicitionName());
  117. if (drugConcept != null) {
  118. medicition.setConceptId(drugConcept.getId());
  119. }
  120. if (drugDetailMap != null && drugDetailMap.containsKey(medicition.getMedicitionName())) {
  121. medicition.setShowInfo("1");
  122. }
  123. }
  124. medicitionClass.setMedicitionsList(medicitionList);
  125. }
  126. retMap.put("treatment", drugsList);
  127. //判断是否慢病,慢病增加回访时间,上次用药,不良反应
  128. if (disType.equals(DisTypeEnum.CHRONIC.getKey())) {
  129. //验证是否慢病
  130. conceptBaseVO.setName("慢病");
  131. conceptBaseVO.setLibType(LexiconTypeEnum.TYPES_OF_DISEASE.getKey());
  132. Concept chronicConcept = conceptFacade.exist(conceptBaseVO);
  133. ConceptWrapper conceptWrapper = new ConceptWrapper();
  134. conceptWrapper.setStartId(disease.getId());
  135. conceptWrapper.setStartName(diseaseName);
  136. conceptWrapper.setStartType(LexiconTypeEnum.DIAGNOSIS.getKey());
  137. conceptWrapper.setEndId(chronicConcept.getId());
  138. conceptWrapper.setEndName(chronicConcept.getLibName());
  139. conceptWrapper.setEndType(LexiconTypeEnum.TYPES_OF_DISEASE.getKey());
  140. conceptWrapper.setRelationType(LexiconRSTypeEnum.BELONG_TO.getKey());
  141. List<ConceptRes> conceptResList = conceptFacade.getConcept(conceptWrapper);
  142. Boolean isChronic = ListUtil.isNotEmpty(conceptResList);
  143. if (isChronic) {
  144. //慢病,增加回访时间,暂时前端写死, 以后由只是图谱返回
  145. retMap.put("followUp", null);
  146. //上次用药-icss层处理
  147. retMap.put("drugHistory", null);
  148. //不良反应
  149. List<AdverseReaction> adverseReactionList = FastJsonUtils.getJsonToListByKey(treatmentJson.toString(), "adverseEvent", AdverseReaction.class);
  150. List<String> adNameList = adverseReactionList.stream().map(adverseReaction -> adverseReaction.getName()).collect(Collectors.toList());
  151. List<Concept> adConceptList = conceptFacade.getListByNamesAndType(adNameList, LexiconTypeEnum.SIDE_EFFECTS.getKey());
  152. Map<String, Concept> adConceptMap = EntityUtil.makeEntityMap(adConceptList, "libName");
  153. Map<String, Concept> adConceptDetailMap = conceptDetailFacade.existList(adNameList, LexiconTypeEnum.SIDE_EFFECTS.getKey());
  154. for (AdverseReaction adverseReaction : adverseReactionList) {
  155. Concept adConcept = adConceptMap.get(adverseReaction.getName());
  156. adverseReaction.setConceptId(adConcept.getId());
  157. if (adConceptDetailMap != null && adConceptDetailMap.containsKey(adverseReaction.getName())) {
  158. adverseReaction.setShowInfo("1");
  159. }
  160. }
  161. retMap.put("adverseReactions", adverseReactionList);
  162. }
  163. }
  164. return retMap;
  165. }
  166. }