KlDiseaseFacade.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. package com.diagbot.facade;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.diagbot.client.UserServiceClient;
  5. import com.diagbot.dto.DiseaseAllDetailDTO;
  6. import com.diagbot.dto.DiseaseDetailDTO;
  7. import com.diagbot.dto.DiseasePageDTO;
  8. import com.diagbot.dto.DiseaseSubDetailDTO;
  9. import com.diagbot.dto.DiseaseTreeDetailDTO;
  10. import com.diagbot.dto.KlConceptAllDTO;
  11. import com.diagbot.dto.KlConceptSimDTO;
  12. import com.diagbot.dto.KlDiseaseDTO;
  13. import com.diagbot.dto.RespDTO;
  14. import com.diagbot.entity.CommonParam;
  15. import com.diagbot.entity.KlConcept;
  16. import com.diagbot.entity.KlDisease;
  17. import com.diagbot.entity.KlLexiconRelationship;
  18. import com.diagbot.enums.DiseaseRelationTypeEnum;
  19. import com.diagbot.enums.IsDeleteEnum;
  20. import com.diagbot.enums.LexiconEnum;
  21. import com.diagbot.enums.RelationLibTypeEnum;
  22. import com.diagbot.service.impl.KlDiseaseServiceImpl;
  23. import com.diagbot.util.BeanUtil;
  24. import com.diagbot.util.EntityUtil;
  25. import com.diagbot.util.ListUtil;
  26. import com.diagbot.util.RespDTOUtil;
  27. import com.diagbot.util.StringUtil;
  28. import com.diagbot.vo.ConceptRelationVO;
  29. import com.diagbot.vo.DiseaseDeleteVO;
  30. import com.diagbot.vo.DiseasePageVO;
  31. import com.diagbot.vo.GetDiseaseDetailVO;
  32. import com.diagbot.vo.KlDiseaseVO;
  33. import com.google.common.collect.Lists;
  34. import com.google.common.collect.Maps;
  35. import org.apache.commons.collections4.MapUtils;
  36. import org.springframework.beans.factory.annotation.Autowired;
  37. import org.springframework.stereotype.Component;
  38. import java.util.ArrayList;
  39. import java.util.Arrays;
  40. import java.util.List;
  41. import java.util.Map;
  42. import java.util.stream.Collectors;
  43. /**
  44. * @author wangfeng
  45. * @Description:
  46. * @date 2021-03-09 15:33
  47. */
  48. @Component
  49. public class KlDiseaseFacade extends KlDiseaseServiceImpl {
  50. @Autowired
  51. KlLexiconRelationshipFacade klLexiconRelationshipFacade;
  52. @Autowired
  53. KlConceptFacade klConceptFacade;
  54. @Autowired
  55. UserServiceClient userServiceClient;
  56. /**
  57. * 诊断依据分页查询
  58. *
  59. * @param klConceptInfoVO
  60. * @return
  61. */
  62. public IPage<DiseasePageDTO> getDiseasePageAll(DiseasePageVO klConceptInfoVO) {
  63. IPage<DiseasePageDTO> diseasePage = this.getDiseasePage(klConceptInfoVO);
  64. List<String> userIds = diseasePage.getRecords().stream()
  65. .map(i -> i.getModifier()).distinct().collect(Collectors.toList());
  66. RespDTO<Map<String, String>> respDTO = userServiceClient.getUserInfoByIds(userIds);
  67. RespDTOUtil.respNGDealCover(respDTO, "获取用户信息失败");
  68. diseasePage.getRecords().forEach(i -> {
  69. i.setModifierName(respDTO.data.get(i.getModifier()));
  70. });
  71. return diseasePage;
  72. }
  73. public List<KlConcept> getDiseaseAll(DiseaseDeleteVO diseaseDeleteVO) {
  74. List<KlConcept> klConceptss = new ArrayList<>();
  75. List<DiseasePageDTO> diseasePage = this.getDiseaseAlls(diseaseDeleteVO);
  76. List<String> diseases = diseasePage.stream().map(x -> x.getDisName()).collect(Collectors.toList());
  77. String disName = diseaseDeleteVO.getDisName();
  78. if (StringUtil.isNotEmpty(disName)) {
  79. List<KlConcept> klConcepts = klConceptFacade.list(new QueryWrapper<KlConcept>()
  80. .eq("is_deleted", IsDeleteEnum.N.getKey())
  81. .like("lib_name", disName.trim())
  82. .eq("lib_type", 100));
  83. Map<String, List<KlConcept>> libNameMap = EntityUtil.makeEntityListMap(klConcepts, "libName");
  84. if (MapUtils.isNotEmpty(libNameMap) && ListUtil.isNotEmpty(diseases)) {
  85. libNameMap.forEach((x, y) -> {
  86. if (!diseases.contains(x)) {
  87. klConceptss.addAll(y);
  88. }
  89. });
  90. }
  91. }
  92. return klConceptss;
  93. }
  94. /**
  95. * 某个诊断依据的具体数据
  96. *
  97. * @param getDiseaseDetailVO
  98. * @return
  99. */
  100. public DiseaseTreeDetailDTO getDetail(GetDiseaseDetailVO getDiseaseDetailVO) {
  101. List<Integer> relations = Arrays.asList(501, 502, 503, 504, 505, 506, 507, 508, 509,510);
  102. List<KlLexiconRelationship> klLexiconRelationships = klLexiconRelationshipFacade.list(new QueryWrapper<KlLexiconRelationship>()
  103. .eq("is_deleted", IsDeleteEnum.N.getKey())
  104. .in("code", relations)
  105. .orderByAsc("code"));
  106. Map<Integer, String> relation_name = klLexiconRelationships.stream().collect(Collectors.toMap(KlLexiconRelationship::getCode, KlLexiconRelationship::getName, (key1, key2) -> key2));
  107. DiseaseTreeDetailDTO diseaseTreeDetailDTO = new DiseaseTreeDetailDTO();
  108. DiseaseDetailDTO diseaseDetailDTO = new DiseaseDetailDTO();
  109. Map<Integer, DiseaseSubDetailDTO> disSubDetailMap = Maps.newHashMap();
  110. List<DiseaseAllDetailDTO> diseaseAllDetailDTOS = this.getDiseaseDetail(getDiseaseDetailVO);
  111. if (ListUtil.isNotEmpty(diseaseAllDetailDTOS)) {
  112. diseaseAllDetailDTOS.forEach(x -> {
  113. diseaseDetailDTO.setSid(x.getSid());
  114. diseaseDetailDTO.setDisName(x.getDisName());
  115. if (disSubDetailMap.containsKey(x.getRid())) {
  116. DiseaseSubDetailDTO diseaseSubDetailDTO = disSubDetailMap.get(x.getRid());
  117. diseaseSubDetailDTO.setRid(x.getRid());
  118. diseaseSubDetailDTO.setRname(x.getRname());
  119. List<KlConcept> details = diseaseSubDetailDTO.getDetails();
  120. diseaseSubDetailDTO.setDetails(details);
  121. KlConcept klConcept = new KlConcept();
  122. klConcept.setId(x.getEid());
  123. klConcept.setLibName(x.getItemName());
  124. details.add(klConcept);
  125. disSubDetailMap.put(x.getRid(), diseaseSubDetailDTO);
  126. } else {
  127. DiseaseSubDetailDTO diseaseSubDetailDTO = new DiseaseSubDetailDTO();
  128. diseaseSubDetailDTO.setRid(x.getRid());
  129. diseaseSubDetailDTO.setRname(x.getRname());
  130. List<KlConcept> details = Lists.newArrayList();
  131. diseaseSubDetailDTO.setDetails(details);
  132. KlConcept klConcept = new KlConcept();
  133. klConcept.setId(x.getEid());
  134. klConcept.setLibName(x.getItemName());
  135. details.add(klConcept);
  136. disSubDetailMap.put(x.getRid(), diseaseSubDetailDTO);
  137. }
  138. });
  139. }
  140. List<DiseaseSubDetailDTO> datas = Lists.newArrayList();
  141. List<List<String>> types = Lists.newArrayList();
  142. relation_name.forEach((x, y) -> {
  143. List<String> split = Arrays.asList(DiseaseRelationTypeEnum.getName(x).split("&"));
  144. List<Integer> collect = Arrays.stream(RelationLibTypeEnum.getName(x).split("&")).map(z -> Integer.parseInt(z)).collect(Collectors.toList());
  145. types.add(split);
  146. if (disSubDetailMap.containsKey(x)) {
  147. DiseaseSubDetailDTO diseaseSubDetailDTO = disSubDetailMap.get(x);
  148. diseaseSubDetailDTO.setLibType(collect);
  149. datas.add(diseaseSubDetailDTO);
  150. } else {
  151. DiseaseSubDetailDTO diseaseSubDetailDTO = new DiseaseSubDetailDTO();
  152. diseaseSubDetailDTO.setLibType(collect);
  153. diseaseSubDetailDTO.setRname(relation_name.get(x));
  154. diseaseSubDetailDTO.setRid(x);
  155. datas.add(diseaseSubDetailDTO);
  156. }
  157. });
  158. diseaseDetailDTO.setDatas(datas);
  159. diseaseTreeDetailDTO.setDiseaseDetailDTO(diseaseDetailDTO);
  160. diseaseTreeDetailDTO.setTypes(types);
  161. return diseaseTreeDetailDTO;
  162. }
  163. /**
  164. * 保存疾病扩展表
  165. *
  166. * @param commonParam
  167. * @param klDiseaseVO
  168. * @return
  169. */
  170. public boolean saveAll(CommonParam commonParam, KlDiseaseVO klDiseaseVO) {
  171. // 先删除疾病扩展表
  172. this.remove(new QueryWrapper<KlDisease>().eq("concept_id", commonParam.getConceptId()));
  173. // 重新插入扩展表
  174. KlDisease klDisease = new KlDisease();
  175. BeanUtil.copyProperties(klDiseaseVO, klDisease);
  176. klDisease.setConceptId(commonParam.getConceptId());
  177. klDisease.setGmtModified(commonParam.getNow());
  178. klDisease.setGmtCreate(commonParam.getNow());
  179. klDisease.setCreator(commonParam.getPerson());
  180. klDisease.setModifier(commonParam.getPerson());
  181. return this.save(klDisease);
  182. }
  183. /**
  184. * 疾病扩展获取
  185. *
  186. * @param conceptId
  187. * @param klConceptAllDTO
  188. */
  189. public void getKlDisease(Long conceptId, KlConceptAllDTO klConceptAllDTO) {
  190. KlDisease klDisease = this.getOne(new QueryWrapper<KlDisease>()
  191. .eq("is_deleted", IsDeleteEnum.N.getKey())
  192. .eq("concept_id", conceptId), false);
  193. if (klDisease == null) {
  194. return;
  195. }
  196. KlDiseaseDTO klDiseaseDTO = new KlDiseaseDTO();
  197. BeanUtil.copyProperties(klDisease, klDiseaseDTO);
  198. List<Integer> relationIdList = Lists.newArrayList(
  199. RelationLibTypeEnum.relationDept.getKey(),
  200. RelationLibTypeEnum.relationPart.getKey(),
  201. RelationLibTypeEnum.relationSystem.getKey()
  202. );
  203. ConceptRelationVO conceptRelationVO = new ConceptRelationVO();
  204. conceptRelationVO.setConceptId(conceptId);
  205. conceptRelationVO.setRelationList(relationIdList);
  206. Map<Integer, List<KlConceptSimDTO>> map = klConceptFacade.getRelationConceptFac(conceptRelationVO);
  207. if (map.get(LexiconEnum.Part.getKey()) != null) { // 关联部位
  208. klDiseaseDTO.setPartList(map.get(LexiconEnum.Part.getKey()));
  209. }
  210. if (map.get(LexiconEnum.Dept.getKey()) != null) { // 关联部位
  211. klDiseaseDTO.setDeptList(map.get(LexiconEnum.Dept.getKey()));
  212. }
  213. if (map.get(LexiconEnum.DisSysType.getKey()) != null) { // 关联诊断系统分类
  214. klDiseaseDTO.setSystemTypeList(map.get(LexiconEnum.DisSysType.getKey()));
  215. }
  216. klConceptAllDTO.setKlDiseaseDTO(klDiseaseDTO);
  217. }
  218. }