RetrievalFacade.java 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. package com.diagbot.facade;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.diagbot.client.AiptServiceClient;
  4. import com.diagbot.dto.ConceptRetrievalDTO;
  5. import com.diagbot.dto.RespDTO;
  6. import com.diagbot.dto.RetrievalDTO;
  7. import com.diagbot.entity.QuestionInfo;
  8. import com.diagbot.enums.ConceptTypeEnum;
  9. import com.diagbot.enums.IsDeleteEnum;
  10. import com.diagbot.util.BeanUtil;
  11. import com.diagbot.util.ListUtil;
  12. import com.diagbot.util.RespDTOUtil;
  13. import com.diagbot.util.StringUtil;
  14. import com.diagbot.vo.GetStaticKnowledgeVO;
  15. import com.diagbot.vo.GetStaticVO;
  16. import com.diagbot.vo.RetrievalVO;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Component;
  19. import java.util.ArrayList;
  20. import java.util.HashMap;
  21. import java.util.Iterator;
  22. import java.util.List;
  23. import java.util.Map;
  24. import java.util.stream.Collectors;
  25. /**
  26. * @Description:
  27. * @author: wangyu
  28. * @time: 2018/11/27 14:54
  29. */
  30. @Component
  31. public class RetrievalFacade {
  32. @Autowired
  33. QuestionFacade questionFacade;
  34. @Autowired
  35. AiptServiceClient aiptServiceClient;
  36. /**
  37. * 获取标签信息
  38. *
  39. * @param retrievalVO
  40. * @return
  41. */
  42. public List<RetrievalDTO> getTagInfos(RetrievalVO retrievalVO) {
  43. List<RetrievalDTO> retrievalDTOS = new ArrayList<>();
  44. //调用aipt-服务
  45. RespDTO<List<ConceptRetrievalDTO>> conceptInfos = aiptServiceClient.retrivelConceptInfo(retrievalVO);
  46. RespDTOUtil.respNGDeal(conceptInfos, "获取检索信息失败");
  47. //获取questionId
  48. List<String> questionNames = new ArrayList<>();
  49. if (ListUtil.isNotEmpty(conceptInfos.data)) {
  50. for (ConceptRetrievalDTO conceptRetrievalDTO : conceptInfos.data) {
  51. if (!questionNames.contains(conceptRetrievalDTO.getSameName())
  52. && conceptRetrievalDTO.getSelfName() != null) {
  53. questionNames.add(conceptRetrievalDTO.getSelfName());
  54. }
  55. if (!questionNames.contains(conceptRetrievalDTO.getParentName())
  56. && conceptRetrievalDTO.getParentName() != null) {
  57. questionNames.add(conceptRetrievalDTO.getParentName());
  58. }
  59. }
  60. Map<String, QuestionInfo> questionInfoMap = new HashMap<>();
  61. if (ListUtil.isNotEmpty(questionNames)){
  62. QueryWrapper<QuestionInfo> questionInfoQueryWrapper = new QueryWrapper<>();
  63. questionInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
  64. .in("tag_name", questionNames)
  65. .eq("type", retrievalVO.getType())
  66. .ne("tag_type", 8)
  67. .eq("item_type", 0);
  68. List<QuestionInfo> questionInfoList = questionFacade.list(questionInfoQueryWrapper);
  69. questionInfoMap = questionInfoList.stream()
  70. .collect(Collectors.toMap(QuestionInfo::getTagName, questionInfo -> questionInfo));
  71. }
  72. RetrievalDTO retrievalDTO = new RetrievalDTO();
  73. //封装
  74. for (ConceptRetrievalDTO conceptRetrievalDTO : conceptInfos.data) {
  75. retrievalDTO = new RetrievalDTO();
  76. retrievalDTO.setConceptId(conceptRetrievalDTO.getSelfId());
  77. retrievalDTO.setName(conceptRetrievalDTO.getSelfName());
  78. if (StringUtil.isNotEmpty(conceptRetrievalDTO.getParentName())) {//parent不为空时说明有子项,返回父级id
  79. if (null != questionInfoMap.get(conceptRetrievalDTO.getParentName())) {//如果匹配到就添加questionId
  80. retrievalDTO.setQuestionId(questionInfoMap.get(conceptRetrievalDTO.getParentName()).getId());
  81. }
  82. retrievalDTO.setConceptId(conceptRetrievalDTO.getParentId());
  83. retrievalDTO.setName(conceptRetrievalDTO.getParentName());
  84. retrievalDTO.setRetrievalName(conceptRetrievalDTO.getSelfName());
  85. } else {//parent为空时说明没有子项返回本体id
  86. if (null != questionInfoMap.get(conceptRetrievalDTO.getSelfName())) {//如果匹配到就添加questionId
  87. retrievalDTO.setQuestionId(questionInfoMap.get(conceptRetrievalDTO.getSelfName()).getId());
  88. }
  89. }
  90. if (StringUtil.isNotEmpty(conceptRetrievalDTO.getSameName())) {//同义词
  91. retrievalDTO.setRetrievalName(conceptRetrievalDTO.getSameName());
  92. }
  93. retrievalDTO.setLibTypeId(conceptRetrievalDTO.getLibTypeId());
  94. retrievalDTO.setLibTypeName(conceptRetrievalDTO.getLibTypeName());
  95. retrievalDTO.setType(conceptRetrievalDTO.getType());
  96. retrievalDTO.setShowType(conceptRetrievalDTO.getShowType());
  97. retrievalDTOS.add(retrievalDTO);
  98. }
  99. }
  100. //如何没有匹配到questionId就移除
  101. Iterator<RetrievalDTO> retrievalDTOIterator = retrievalDTOS.iterator();
  102. while (retrievalDTOIterator.hasNext()) {
  103. RetrievalDTO retrievalDTO = new RetrievalDTO();
  104. retrievalDTO = retrievalDTOIterator.next();
  105. if (retrievalDTO.getQuestionId() == null
  106. && retrievalDTO.getType().intValue() != ConceptTypeEnum.Pacs.getKey()
  107. && retrievalDTO.getType().intValue() != ConceptTypeEnum.Disease.getKey()) {
  108. retrievalDTOIterator.remove();
  109. }
  110. }
  111. return retrievalDTOS;
  112. }
  113. /**
  114. * 静态知识标签检索
  115. *
  116. * @param getStaticVO
  117. * @return
  118. */
  119. public List<RetrievalDTO> getStaticKnowledge(GetStaticVO getStaticVO) {
  120. GetStaticKnowledgeVO getStaticKnowledgeVO = new GetStaticKnowledgeVO();
  121. BeanUtil.copyProperties(getStaticVO, getStaticKnowledgeVO);
  122. //标签类型
  123. List<Integer> typeList = new ArrayList<>();//规定标签类型,只取诊断,化验,辅检,药品类型
  124. typeList.add(ConceptTypeEnum.Disease.getKey());
  125. typeList.add(ConceptTypeEnum.Drug.getKey());
  126. typeList.add(ConceptTypeEnum.Lis.getKey());
  127. typeList.add(ConceptTypeEnum.Pacs.getKey());
  128. getStaticKnowledgeVO.setTypes(typeList);
  129. //调用aipt-service获取有静态知识的标签
  130. RespDTO<List<RetrievalDTO>> retrievalDTOList = aiptServiceClient.getStaticKnowledge(getStaticKnowledgeVO);
  131. RespDTOUtil.respNGDeal(retrievalDTOList, "获取静态知识失败");
  132. if (ListUtil.isNotEmpty(retrievalDTOList.data)) {
  133. List<String> questionNames = new ArrayList<>();
  134. for (RetrievalDTO retrievalDTOInfo : retrievalDTOList.data) {
  135. if (typeList.contains(retrievalDTOInfo.getType())) {
  136. questionNames.add(retrievalDTOInfo.getName());
  137. }
  138. }
  139. //获取questionId
  140. QueryWrapper<QuestionInfo> questionInfoQueryWrapper = new QueryWrapper<>();
  141. questionInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
  142. .in("tag_name", questionNames)
  143. .eq("item_type", 0)
  144. .ne("tag_type", 8)
  145. .in("type", typeList);
  146. List<QuestionInfo> questionInfoList = questionFacade.list(questionInfoQueryWrapper);
  147. Map<String, QuestionInfo> questionInfoMap = questionInfoList.stream()
  148. .collect(Collectors.toMap(QuestionInfo::getTagName, questionInfo -> questionInfo));
  149. for (RetrievalDTO retrievalDTOInfo : retrievalDTOList.data) {
  150. if (null != questionInfoMap.get(retrievalDTOInfo.getName())) {//设置questionId
  151. retrievalDTOInfo.setQuestionId(questionInfoMap.get(retrievalDTOInfo.getName()).getId());
  152. }
  153. }
  154. }
  155. return retrievalDTOList.data;
  156. }
  157. }