瀏覽代碼

智能预问诊检索

wangyu 6 年之前
父節點
當前提交
bc6ebabcf7

+ 11 - 0
prec-service/src/main/java/com/diagbot/client/AiptServiceClient.java

@@ -3,11 +3,13 @@ package com.diagbot.client;
 import com.diagbot.client.bean.SearchData;
 import com.diagbot.client.hystrix.AiptServiceHystrix;
 import com.diagbot.dto.ConceptBaseDTO;
+import com.diagbot.dto.ConceptRetrievalDTO;
 import com.diagbot.dto.GetTopPatientInfoDTO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.vo.ConceptUsualVO;
 import com.diagbot.vo.GetTopPatientInfoVO;
+import com.diagbot.vo.RetrievalVO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -48,4 +50,13 @@ public interface AiptServiceClient {
      */
     @PostMapping(value = "/concept/getConceptUsual")
     RespDTO<List<ConceptBaseDTO>> getConceptUsual(@RequestBody @Valid ConceptUsualVO conceptUsualVO);
+
+    /**
+     * 标签检索
+     *
+     * @param retrievalVO
+     * @return
+     */
+    @PostMapping("/concept/retrivelConceptInfo")
+    RespDTO<List<ConceptRetrievalDTO>> retrivelConceptInfo(@RequestBody @Valid RetrievalVO retrievalVO);
 }

+ 8 - 0
prec-service/src/main/java/com/diagbot/client/hystrix/AiptServiceHystrix.java

@@ -3,12 +3,14 @@ package com.diagbot.client.hystrix;
 import com.diagbot.client.AiptServiceClient;
 import com.diagbot.client.bean.SearchData;
 import com.diagbot.dto.ConceptBaseDTO;
+import com.diagbot.dto.ConceptRetrievalDTO;
 import com.diagbot.dto.GetTopPatientInfoDTO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.vo.ConceptUsualVO;
 import com.diagbot.vo.GetTopPatientInfoVO;
 
+import com.diagbot.vo.RetrievalVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -47,4 +49,10 @@ public class AiptServiceHystrix implements AiptServiceClient {
         log.error("【hystrix】调用{}异常", "getConceptUsual");
         return null;
     }
+
+    @Override
+    public RespDTO<List<ConceptRetrievalDTO>> retrivelConceptInfo(@Valid RetrievalVO retrievalVO) {
+        log.error("【hystrix】调用{}异常", "retrivelConceptInfo");
+        return null;
+    }
 }

+ 23 - 0
prec-service/src/main/java/com/diagbot/dto/ConceptRetrievalDTO.java

@@ -0,0 +1,23 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2019/5/10 10:20
+ */
+@Getter
+@Setter
+public class ConceptRetrievalDTO {
+    private Long selfId;//本身概念id
+    private String selfName;//本身名称
+    private Long parentId;//父级id
+    private String parentName;//父级名称
+    private String sameName;//同义词名称
+    private Long showType;//显示类型(1本体,0同义词)
+    private Long libTypeId;//标签类型id
+    private String libTypeName;//标签类型名称
+    private Integer type;//questionType
+}

+ 30 - 0
prec-service/src/main/java/com/diagbot/dto/RetrievalDTO.java

@@ -0,0 +1,30 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2018/11/27 14:58
+ */
+@Getter
+@Setter
+public class RetrievalDTO {
+    //标签名称
+    private String name;
+    //标签id
+    private Long questionId;
+    //显示类型
+    private Long showType;
+    //Tag名称
+    private String retrievalName;
+    //概念id
+    private Long conceptId;
+    //标签类型id
+    private Long libTypeId;
+    //标签类型名称
+    private String libTypeName;
+    //icss标签type
+    private Integer type;
+}

+ 111 - 0
prec-service/src/main/java/com/diagbot/facade/RetrievalFacade.java

@@ -0,0 +1,111 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.client.AiptServiceClient;
+import com.diagbot.dto.ConceptRetrievalDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.RetrievalDTO;
+import com.diagbot.entity.QuestionInfo;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.QuestionTypeEnum;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.RespDTOUtil;
+import com.diagbot.util.StringUtil;
+import com.diagbot.vo.RetrievalVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2018/11/27 14:54
+ */
+@Component
+public class RetrievalFacade {
+
+    @Autowired
+    QuestionFacade questionFacade;
+    @Autowired
+    AiptServiceClient aiptServiceClient;
+
+    /**
+     * 获取标签信息
+     *
+     * @param retrievalVO
+     * @return
+     */
+    public List<RetrievalDTO> getTagInfos(RetrievalVO retrievalVO) {
+        retrievalVO.setType(QuestionTypeEnum.Symptom.getKey());
+        List<RetrievalDTO> retrievalDTOS = new ArrayList<>();
+        //调用aipt-服务
+        RespDTO<List<ConceptRetrievalDTO>> conceptInfos = aiptServiceClient.retrivelConceptInfo(retrievalVO);
+        RespDTOUtil.respNGDeal(conceptInfos, "获取检索信息失败");
+        //获取questionId
+        List<String> questionNames = new ArrayList<>();
+        if (ListUtil.isNotEmpty(conceptInfos.data)) {
+            for (ConceptRetrievalDTO conceptRetrievalDTO : conceptInfos.data) {
+                if (!questionNames.contains(conceptRetrievalDTO.getSameName())
+                        && conceptRetrievalDTO.getSelfName() != null) {
+                    questionNames.add(conceptRetrievalDTO.getSelfName());
+                }
+                if (!questionNames.contains(conceptRetrievalDTO.getParentName())
+                        && conceptRetrievalDTO.getParentName() != null) {
+                    questionNames.add(conceptRetrievalDTO.getParentName());
+                }
+            }
+            QueryWrapper<QuestionInfo> questionInfoQueryWrapper = new QueryWrapper<>();
+            questionInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .in("tag_name", questionNames)
+                    .eq("type", retrievalVO.getType())
+                    .ne("tag_type", 8)
+                    .eq("item_type", 0);
+            List<QuestionInfo> questionInfoList = questionFacade.list(questionInfoQueryWrapper);
+            Map<String, QuestionInfo> questionInfoMap = questionInfoList.stream().collect(Collectors.toMap(QuestionInfo::getTagName, questionInfo -> questionInfo));
+            RetrievalDTO retrievalDTO = new RetrievalDTO();
+            //封装
+            for (ConceptRetrievalDTO conceptRetrievalDTO : conceptInfos.data) {
+                retrievalDTO = new RetrievalDTO();
+                retrievalDTO.setConceptId(conceptRetrievalDTO.getSelfId());
+                retrievalDTO.setName(conceptRetrievalDTO.getSelfName());
+                if (StringUtil.isNotEmpty(conceptRetrievalDTO.getParentName())) {//parent不为空时说明有子项,返回父级id
+                    if(null != questionInfoMap.get(conceptRetrievalDTO.getParentName())){//如果匹配到就添加questionId
+                        retrievalDTO.setQuestionId(questionInfoMap.get(conceptRetrievalDTO.getParentName()).getId());
+                    }
+                    retrievalDTO.setConceptId(conceptRetrievalDTO.getParentId());
+                    retrievalDTO.setName(conceptRetrievalDTO.getParentName());
+                    retrievalDTO.setRetrievalName(conceptRetrievalDTO.getSelfName());
+                } else {//parent为空时说明没有子项返回本体id
+                    if(null != questionInfoMap.get(conceptRetrievalDTO.getSelfName())){//如果匹配到就添加questionId
+                        retrievalDTO.setQuestionId(questionInfoMap.get(conceptRetrievalDTO.getSelfName()).getId());
+                    }
+                }
+                if (StringUtil.isNotEmpty(conceptRetrievalDTO.getSameName())) {//同义词
+                    retrievalDTO.setRetrievalName(conceptRetrievalDTO.getSameName());
+                }
+                retrievalDTO.setLibTypeId(conceptRetrievalDTO.getLibTypeId());
+                retrievalDTO.setLibTypeName(conceptRetrievalDTO.getLibTypeName());
+                retrievalDTO.setType(conceptRetrievalDTO.getType());
+                retrievalDTO.setShowType(conceptRetrievalDTO.getShowType());
+                retrievalDTOS.add(retrievalDTO);
+            }
+        }
+        //如何没有匹配到questionId就移除
+        Iterator<RetrievalDTO> retrievalDTOIterator = retrievalDTOS.iterator();
+        while (retrievalDTOIterator.hasNext()){
+            RetrievalDTO retrievalDTO = new RetrievalDTO();
+            retrievalDTO = retrievalDTOIterator.next();
+                if(retrievalDTO.getQuestionId() == null
+                        && retrievalDTO.getType().intValue() != QuestionTypeEnum.Pacs.getKey()
+                        && retrievalDTO.getType().intValue() != QuestionTypeEnum.Disease.getKey()){
+                        retrievalDTOIterator.remove();
+                }
+        }
+        return retrievalDTOS;
+    }
+}

+ 27 - 0
prec-service/src/main/java/com/diagbot/vo/RetrievalVO.java

@@ -0,0 +1,27 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2018/11/27 14:58
+ */
+@Getter
+@Setter
+public class RetrievalVO {
+
+    private Integer type;
+    @NotNull(message = "请输入病人年龄")
+    private Integer age;
+    @NotNull(message = "请输入症状")
+    private String InputStr;
+    @NotNull(message = "请输入病人性别")
+    private Integer sexType;
+    //需要去重的id
+    private List<Long> inputIds;
+}

+ 50 - 0
prec-service/src/main/java/com/diagbot/web/RetrievalController.java

@@ -0,0 +1,50 @@
+package com.diagbot.web;
+
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.RetrievalDTO;
+import com.diagbot.facade.RetrievalFacade;
+import com.diagbot.vo.RetrievalVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * <p>
+ * 同义词检索检索表 前端控制器
+ * </p>
+ *
+ * @author wangyu
+ * @since 2018-11-16
+ */
+@RestController
+@RequestMapping("/retrieval")
+@Api(value = "页面检索API", tags = { "智能预问诊-页面检索API" })
+@SuppressWarnings("unchecked")
+public class RetrievalController {
+    @Autowired
+    private RetrievalFacade retrievalFacade;
+
+    @ApiOperation(value = "知识库标准化-页面检索——查询[by:wangyu]",
+            notes = "type:不用传<br>" +
+                    "age:年龄,必填<br>" +
+                    "inputStr:检索内容,必填<br>" +
+                    "sexType:性别,必填<br>" +
+                    "inputIds:需要去重的conceptId<br>" +
+                    "<br>" +
+                    "<br>")
+    @PostMapping("/getTagInfos")
+    @SysLogger("getTagInfos")
+    public RespDTO<List<RetrievalDTO>> getTagInfos(@Valid @RequestBody RetrievalVO retrievalVO) {
+        List<RetrievalDTO> data = retrievalFacade.getTagInfos(retrievalVO);
+        return RespDTO.onSuc(data);
+    }
+}