TreatmentFacade.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  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.PositionTypeEnum;
  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(PositionTypeEnum.T3.getKey());
  70. List<ConceptDetail> commonTreatmentDetailList = conceptDetailFacade.getConceptDetailList(conceptIntroduceVO);
  71. if (ListUtil.isNotEmpty(commonTreatmentDetailList)) {
  72. ConceptDetailDTO commonDetailDTO = new ConceptDetailDTO();
  73. BeanUtil.copyProperties(commonTreatmentDetailList.get(0), commonDetailDTO);
  74. retMap.put("commonTreatment", commonDetailDTO);
  75. } else {
  76. retMap.put("commonTreatment", null);
  77. }
  78. //手术治疗
  79. conceptIntroduceVO.setPosition(PositionTypeEnum.T4.getKey());
  80. List<ConceptDetail> surgeryTreatmentDetailList = conceptDetailFacade.getConceptDetailList(conceptIntroduceVO);
  81. if (ListUtil.isNotEmpty(surgeryTreatmentDetailList)) {
  82. ConceptDetailDTO surgeryDetailDTO = new ConceptDetailDTO();
  83. BeanUtil.copyProperties(surgeryTreatmentDetailList.get(0), surgeryDetailDTO);
  84. retMap.put("surgeryTreatment", surgeryDetailDTO);
  85. } else {
  86. retMap.put("surgeryTreatment", null);
  87. }
  88. //获取知识图谱治疗方案
  89. JSONObject treatmentJson = treatmentMap.get(diseaseName);
  90. if (treatmentJson == null || treatmentJson.isEmpty()) {
  91. return retMap;
  92. }
  93. List<MedicitionClass> drugsList = FastJsonUtils.getJsonToListByKey(treatmentJson.toString(), "treatment", MedicitionClass.class);
  94. List<String> cateBigNameList = drugsList.stream().map(drugs -> drugs.getBigdrugsName()).collect(Collectors.toList());
  95. List<Concept> cateBigConceptList = conceptFacade.getListByNamesAndType(cateBigNameList, LexiconTypeEnum.DRUG_CATEGORY_BIG.getKey());
  96. Map<String, Concept> cateBigConceptMap = EntityUtil.makeEntityMap(cateBigConceptList, "libName");
  97. List<String> cateSmallNameList = drugsList.stream().map(drugs -> drugs.getSubdrugsName()).collect(Collectors.toList());
  98. List<Concept> cateSmallConceptList = conceptFacade.getListByNamesAndType(cateSmallNameList, LexiconTypeEnum.DRUG_CATEGORY_SMALL.getKey());
  99. Map<String, Concept> cateSmallConceptMap = EntityUtil.makeEntityMap(cateSmallConceptList, "libName");
  100. for (MedicitionClass medicitionClass : drugsList) {
  101. Concept cateBigConcept = cateBigConceptMap.get(medicitionClass.getBigdrugsName());
  102. if (cateBigConcept != null) {
  103. medicitionClass.setBigdrugsConceptId(cateBigConcept.getId());
  104. }
  105. medicitionClass.setBigdrgusLibType(ConceptTypeEnum.Drug_Category_Big.getKey());
  106. Concept cateSmallConcept = cateSmallConceptMap.get(medicitionClass.getSubdrugsName());
  107. if (cateSmallConcept != null) {
  108. medicitionClass.setSubdrugsConceptId(cateSmallConcept.getId());
  109. }
  110. medicitionClass.setSubdrugsLibType(ConceptTypeEnum.Drug_Category_Small.getKey());
  111. if (cateBigConcept != null) {
  112. conceptBaseVO.setLibType(LexiconTypeEnum.DRUG_CATEGORY_BIG.getKey());
  113. conceptBaseVO.setName(cateBigConcept.getLibName());
  114. if (conceptDetailFacade.exist(conceptBaseVO)) {
  115. medicitionClass.setShowInfo("1");
  116. } else {
  117. medicitionClass.setShowInfo("0");
  118. }
  119. }
  120. LinkedList<Medicition> medicitionList = medicitionClass.getMedicitionsList();
  121. List<String> drugNameList = medicitionList.stream().map(medicition -> medicition.getMedicitionName()).collect(Collectors.toList());
  122. List<Concept> drugList = conceptFacade.getListByNamesAndType(drugNameList, LexiconTypeEnum.DRUGS.getKey());
  123. Map<String, Concept> drugMap = EntityUtil.makeEntityMap(drugList, "libName");
  124. Map<String, Concept> drugDetailMap = conceptDetailFacade.existList(drugNameList, LexiconTypeEnum.DRUGS.getKey());
  125. for (Medicition medicition : medicitionList) {
  126. Concept drugConcept = drugMap.get(medicition.getMedicitionName());
  127. if (drugConcept != null) {
  128. medicition.setConceptId(drugConcept.getId());
  129. }
  130. medicition.setLibType(ConceptTypeEnum.Drug.getKey());
  131. if (drugDetailMap != null && drugDetailMap.containsKey(medicition.getMedicitionName())) {
  132. medicition.setShowInfo("1");
  133. } else {
  134. medicition.setShowInfo("0");
  135. }
  136. }
  137. medicitionClass.setMedicitionsList(medicitionList);
  138. }
  139. retMap.put("treatment", drugsList);
  140. //判断是否慢病,慢病增加回访时间,上次用药,不良反应
  141. if (disType != null && disType.equals(DisTypeEnum.CHRONIC.getKey())) {
  142. //验证是否慢病
  143. conceptBaseVO.setName("慢病");
  144. conceptBaseVO.setLibType(LexiconTypeEnum.TYPES_OF_DISEASE.getKey());
  145. Concept chronicConcept = conceptFacade.exist(conceptBaseVO);
  146. ConceptWrapper conceptWrapper = new ConceptWrapper();
  147. conceptWrapper.setStartId(disease.getId());
  148. conceptWrapper.setStartName(diseaseName);
  149. conceptWrapper.setStartType(LexiconTypeEnum.DIAGNOSIS.getKey());
  150. conceptWrapper.setEndId(chronicConcept.getId());
  151. conceptWrapper.setEndName(chronicConcept.getLibName());
  152. conceptWrapper.setEndType(LexiconTypeEnum.TYPES_OF_DISEASE.getKey());
  153. conceptWrapper.setRelationType(LexiconRSTypeEnum.BELONG_TO.getKey());
  154. List<ConceptRes> conceptResList = conceptFacade.getConcept(conceptWrapper);
  155. Boolean isChronic = ListUtil.isNotEmpty(conceptResList);
  156. if (isChronic) {
  157. //慢病,增加回访时间,暂时前端写死, 以后由只是图谱返回
  158. retMap.put("followUp", null);
  159. //上次用药-icss层处理
  160. retMap.put("drugHistory", null);
  161. //不良反应
  162. List<AdverseReaction> adverseReactionList = FastJsonUtils.getJsonToListByKey(treatmentJson.toString(), "adverseEvent", AdverseReaction.class);
  163. List<String> adNameList = adverseReactionList.stream().map(adverseReaction -> adverseReaction.getName()).collect(Collectors.toList());
  164. List<Concept> adConceptList = conceptFacade.getListByNamesAndType(adNameList, LexiconTypeEnum.SIDE_EFFECTS.getKey());
  165. Map<String, Concept> adConceptMap = EntityUtil.makeEntityMap(adConceptList, "libName");
  166. Map<String, Concept> adConceptDetailMap = conceptDetailFacade.existList(adNameList, LexiconTypeEnum.SIDE_EFFECTS.getKey());
  167. for (AdverseReaction adverseReaction : adverseReactionList) {
  168. Concept adConcept = adConceptMap.get(adverseReaction.getName());
  169. if (adConcept != null) {
  170. adverseReaction.setConceptId(adConcept.getId());
  171. }
  172. adverseReaction.setLibType(ConceptTypeEnum.SIDE_EFFECTS.getKey());
  173. if (adConceptDetailMap != null && adConceptDetailMap.containsKey(adverseReaction.getName())) {
  174. adverseReaction.setShowInfo("1");
  175. } else {
  176. adverseReaction.setShowInfo("0");
  177. }
  178. }
  179. retMap.put("adverseReactions", adverseReactionList);
  180. }
  181. }
  182. return retMap;
  183. }
  184. }