瀏覽代碼

静态知识检索

zhoutg 5 年之前
父節點
當前提交
f4ae930d75

+ 13 - 0
aipt-service/src/main/java/com/diagbot/facade/ConceptFacade.java

@@ -364,6 +364,19 @@ public class ConceptFacade extends ConceptServiceImpl {
     public List<RetrievalDTO> getStaticKnowledge(GetStaticKnowledgeVO getStaticKnowledgeVO) {
         RetrievalVO retrievalVO = new RetrievalVO();
         BeanUtil.copyProperties(getStaticKnowledgeVO, retrievalVO);
+        List<Integer> types = retrievalVO.getTypes();
+        if (types.contains(LexiconTypeEnum.LIS_PACKAGE.getKey())) {
+            retrievalVO.setHasLis(true);
+            List<Integer> typesNoLis = new ArrayList<>();
+            for (Integer type : types) {
+                if (LexiconTypeEnum.LIS_PACKAGE.getKey() != type.intValue()) {
+                    typesNoLis.add(type);
+                }
+            }
+            retrievalVO.setTypesNoLis(typesNoLis);
+        } else {
+            retrievalVO.setTypesNoLis(types);
+        }
         List<RetrievalDTO> staticRetrievalList = this.staticKnowledge(retrievalVO);
         for (RetrievalDTO retrievalDTO : staticRetrievalList) {
             retrievalDTO.setType(ParamConvertUtil.libConvert2Concept(retrievalDTO.getLibTypeId().intValue()));

+ 3 - 0
aipt-service/src/main/java/com/diagbot/vo/RetrievalVO.java

@@ -29,4 +29,7 @@ public class RetrievalVO {
     private Integer isStatic = 0;
     //是否显示子项(0.不显示,1.显示)
     private Integer isSonShow = 0;
+    private List<Integer> types; // 指定类型
+    private boolean hasLis = false; // 是否搜索化验
+    private List<Integer> typesNoLis; // 除去化验外的类型
 }

+ 59 - 11
aipt-service/src/main/resources/mapper/ConceptMapper.xml

@@ -416,12 +416,12 @@
     </select>
 
     <select id="staticKnowledge" resultType="com.diagbot.dto.RetrievalDTO">
-
         SELECT
             a1.*
         FROM
             (
                 -- 除化验外其他类型标签
+                <if test="typesNoLis != null and typesNoLis.size() > 0">
                 (
                     SELECT
                         b1.*, 0 uniqueId,
@@ -437,14 +437,24 @@
                                         10
                                     WHEN 10 THEN
                                         20
-                                    ELSE
+                                    WHEN 1 THEN
+                                        25
+                                    WHEN 16 THEN
                                         50
+                                    WHEN 25 THEN
+                                        60
+                                    ELSE
+                                        100
                                     END
                                 ) + 1 AS orderNo,
                                 t2.`name` retrievalName,
                                 t2.is_concept showType,
                                 t1.lib_type libTypeId,
-                                t6.`name` libTypeName
+                                CASE t6.`name`
+                                  when '药品通用名' then '药品'
+                                  when '辅检项目' then '辅检'
+                                  ELSE t6.`name`
+                                END libTypeName
                             FROM
                                 kl_concept t1
                             LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
@@ -457,7 +467,11 @@
                             AND t3.is_deleted = 'N'
                             AND t6.is_deleted = 'N'
                             AND t7.is_deleted = 'N'
-                            AND t1.lib_type IN (18, 10, 16)
+                            AND t1.lib_type IN
+                            <foreach collection="typesNoLis" item="item" open="(" close=")"
+                                     separator=",">
+                                #{item}
+                            </foreach>
                             AND (
                                 t2.spell = UPPER(#{InputStr})
                                 OR t2. NAME = (#{InputStr})
@@ -480,14 +494,24 @@
                                             10
                                         WHEN 10 THEN
                                             20
-                                        ELSE
+                                        WHEN 1 THEN
+                                            25
+                                        WHEN 16 THEN
                                             50
+                                        WHEN 25 THEN
+                                            60
+                                        ELSE
+                                            100
                                         END
                                     ) + 2 AS orderNo,
                                     t2.`name` retrievalName,
                                     t2.is_concept showType,
                                     t1.lib_type libTypeId,
-                                    t6.`name` libTypeName
+                                    CASE t6.`name`
+                                    when '药品通用名' then '药品'
+                                    when '辅检项目' then '辅检'
+                                    ELSE t6.`name`
+                                    END libTypeName
                                 FROM
                                     kl_concept t1
                                 LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
@@ -500,7 +524,11 @@
                                 AND t3.is_deleted = 'N'
                                 AND t6.is_deleted = 'N'
                                 AND t7.is_deleted = 'N'
-                                AND t1.lib_type IN (18, 10, 16)
+                                AND t1.lib_type IN
+                                <foreach collection="typesNoLis" item="item" open="(" close=")"
+                                         separator=",">
+                                    #{item}
+                                </foreach>
                                 AND (
                                     t2.spell LIKE CONCAT(UPPER(#{InputStr}), '%')
                                     OR t2. NAME LIKE CONCAT((#{InputStr}), '%')
@@ -523,14 +551,24 @@
                                             10
                                         WHEN 10 THEN
                                             20
-                                        ELSE
+                                        WHEN 1 THEN
+                                            25
+                                        WHEN 16 THEN
                                             50
+                                        WHEN 25 THEN
+                                            60
+                                        ELSE
+                                            100
                                         END
                                     ) + 3 AS orderNo,
                                     t2.`name` retrievalName,
                                     t2.is_concept showType,
                                     t1.lib_type libTypeId,
-                                    t6.`name` libTypeName
+                                    CASE t6.`name`
+                                    when '药品通用名' then '药品'
+                                    when '辅检项目' then '辅检'
+                                    ELSE t6.`name`
+                                    END libTypeName
                                 FROM
                                     kl_concept t1
                                 LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
@@ -543,14 +581,23 @@
                                 AND t3.is_deleted = 'N'
                                 AND t6.is_deleted = 'N'
                                 AND t7.is_deleted = 'N'
-                                AND t1.lib_type IN (18, 10, 16)
+                                AND t1.lib_type IN
+                                <foreach collection="typesNoLis" item="item" open="(" close=")"
+                                         separator=",">
+                                    #{item}
+                                </foreach>
                                 AND (
                                     t2.spell LIKE CONCAT('%', UPPER(#{InputStr}), '%')
                                     OR t2. NAME LIKE CONCAT('%',(#{InputStr}), '%')
                                 )
                             ) b1
-                    ) -- 化验本体标签公表项匹配静态知识
+                    )
+                </if>
+                -- 化验本体标签公表项匹配静态知识
+                <if test="typesNoLis != null and typesNoLis.size() > 0 and hasLis == true">
                 UNION
+                </if>
+                <if test="hasLis == true">
                     (
                         SELECT
                             b2.id conceptId,
@@ -1042,6 +1089,7 @@
                         AND b2.lib_type = 46
                         AND b2.id = b3.concept_id
                     )
+                </if>
             ) a1
         ORDER BY
             a1.orderNo ASC,

+ 54 - 0
data-service/src/main/java/com/diagbot/enums/StaticSearchTypeEnum.java

@@ -0,0 +1,54 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @Description: 静态知识搜索类型枚举
+ * @author: gaodm
+ * @time: 2019/5/6 13:58
+ */
+public enum StaticSearchTypeEnum implements KeyedNamed {
+    SYMPTOM(1, "症状"),
+    DRUGS(10, "药品"),
+    LIS_PACKAGE(12, "化验"),
+    PACS_ITEMS(16, "辅检"),
+    DIAGNOSIS(18, "诊断"),
+    OPERATION(25, "手术");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    StaticSearchTypeEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static StaticSearchTypeEnum getEnum(int key) {
+        for (StaticSearchTypeEnum item : StaticSearchTypeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        StaticSearchTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}
+

+ 12 - 0
data-service/src/main/java/com/diagbot/facade/SearchFacade.java

@@ -4,7 +4,9 @@ import com.diagbot.client.AiptServiceClient;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RetrievalDTO;
 import com.diagbot.dto.ScaleIndexDTO;
+import com.diagbot.enums.StaticSearchTypeEnum;
 import com.diagbot.util.BeanUtil;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
 import com.diagbot.vo.GetStaticKnowledgeVO;
 import com.diagbot.vo.GetStaticVO;
@@ -33,6 +35,16 @@ public class SearchFacade {
     public List<RetrievalDTO> getStaticKnowledge(GetStaticVO getStaticVO) {
         GetStaticKnowledgeVO getStaticKnowledgeVO = new GetStaticKnowledgeVO();
         BeanUtil.copyProperties(getStaticVO, getStaticKnowledgeVO);
+        List<Integer> types = getStaticKnowledgeVO.getTypes();
+        if (ListUtil.isEmpty(types)) {
+            // 添加词库搜索类型
+            types.add(StaticSearchTypeEnum.DIAGNOSIS.getKey());
+            types.add(StaticSearchTypeEnum.DRUGS.getKey());
+            types.add(StaticSearchTypeEnum.SYMPTOM.getKey());
+            types.add(StaticSearchTypeEnum.LIS_PACKAGE.getKey());
+            types.add(StaticSearchTypeEnum.PACS_ITEMS.getKey());
+            types.add(StaticSearchTypeEnum.OPERATION.getKey());
+        }
         RespDTO<List<RetrievalDTO>> res
                 = aiptServiceClient.getStaticKnowledge(getStaticKnowledgeVO);
         RespDTOUtil.respNGDeal(res, "获取静态知识失败");

+ 2 - 0
data-service/src/main/java/com/diagbot/vo/GetStaticVO.java

@@ -19,4 +19,6 @@ public class GetStaticVO {
     private String InputStr;
 //    //需要去重的id
 //    private List<Long> inputIds;
+    // 指定类型
+    private List<Integer> types;
 }

+ 2 - 1
data-service/src/main/java/com/diagbot/web/SearchController.java

@@ -41,7 +41,8 @@ public class SearchController {
      * @return
      */
     @ApiOperation(value = "静态知识检索[by:zhoutg]",
-            notes = "inputStr:检索内容,必填")
+            notes = "inputStr:检索内容,必填<br>" +
+                    "types:指定类型,1:症状,10:药品,12:化验,16:辅检,18:诊断,25:手术; 不指定:以上全部")
     @PostMapping("/getStaticKnowledge")
     @SysLogger("getStaticKnowledge")
     public RespDTO<List<RetrievalDTO>> getStaticKnowledge(@Valid @RequestBody GetStaticVO getStaticVO){

+ 54 - 0
icss-service/src/main/java/com/diagbot/enums/StaticSearchTypeEnum.java

@@ -0,0 +1,54 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @Description: 静态知识搜索类型枚举
+ * @author: gaodm
+ * @time: 2019/5/6 13:58
+ */
+public enum StaticSearchTypeEnum implements KeyedNamed {
+    SYMPTOM(1, "症状"),
+    DRUGS(10, "药品"),
+    LIS_PACKAGE(12, "化验"),
+    PACS_ITEMS(16, "辅检"),
+    DIAGNOSIS(18, "诊断"),
+    OPERATION(25, "手术");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    StaticSearchTypeEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static StaticSearchTypeEnum getEnum(int key) {
+        for (StaticSearchTypeEnum item : StaticSearchTypeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        StaticSearchTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}
+

+ 37 - 7
icss-service/src/main/java/com/diagbot/facade/RetrievalFacade.java

@@ -8,6 +8,7 @@ import com.diagbot.dto.RetrievalDTO;
 import com.diagbot.entity.QuestionInfo;
 import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.StaticSearchTypeEnum;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
@@ -126,13 +127,10 @@ public class RetrievalFacade {
     public List<RetrievalDTO> getStaticKnowledge(GetStaticVO getStaticVO) {
         GetStaticKnowledgeVO getStaticKnowledgeVO = new GetStaticKnowledgeVO();
         BeanUtil.copyProperties(getStaticVO, getStaticKnowledgeVO);
-        //标签类型
-        List<Integer> typeList = new ArrayList<>();//规定标签类型,只取诊断,化验,辅检,药品类型
-        typeList.add(ConceptTypeEnum.Disease.getKey());
-        typeList.add(ConceptTypeEnum.Drug.getKey());
-        typeList.add(ConceptTypeEnum.Lis.getKey());
-        typeList.add(ConceptTypeEnum.Pacs.getKey());
-        getStaticKnowledgeVO.setTypes(typeList);
+        //标签类型,只有症状和化验
+        List<Integer> typeList = new ArrayList<>();
+
+        searchTypeToTagType(typeList, getStaticKnowledgeVO);
         //调用aipt-service获取有静态知识的标签
         RespDTO<List<RetrievalDTO>> retrievalDTOList = aiptServiceClient.getStaticKnowledge(getStaticKnowledgeVO);
         RespDTOUtil.respNGDeal(retrievalDTOList, "获取静态知识失败");
@@ -163,4 +161,36 @@ public class RetrievalFacade {
         }
         return retrievalDTOList.data;
     }
+
+
+    /**
+     * 将词库搜索类型转换成标签类型;如果搜索词库类型为空,添加默认的搜索类型:诊断、药品、症状、化验、辅检、手术
+     *
+     * @param typeList 标签类型
+     * @param getStaticKnowledgeVO 词库搜索对象
+     */
+    public void searchTypeToTagType(List<Integer> typeList, GetStaticKnowledgeVO getStaticKnowledgeVO) {
+        List<Integer> types = getStaticKnowledgeVO.getTypes();
+        if (ListUtil.isEmpty(types)) {
+            // 添加标签类型
+            typeList.add(ConceptTypeEnum.Symptom.getKey());
+            typeList.add(ConceptTypeEnum.Lis.getKey());
+
+            // 添加词库搜索类型
+            types.add(StaticSearchTypeEnum.DIAGNOSIS.getKey());
+            types.add(StaticSearchTypeEnum.DRUGS.getKey());
+            types.add(StaticSearchTypeEnum.SYMPTOM.getKey());
+            types.add(StaticSearchTypeEnum.LIS_PACKAGE.getKey());
+            types.add(StaticSearchTypeEnum.PACS_ITEMS.getKey());
+            types.add(StaticSearchTypeEnum.OPERATION.getKey());
+            return ;
+        }
+        for (Integer t : types) {
+            if (StaticSearchTypeEnum.SYMPTOM.getKey() == t.intValue()) {
+                typeList.add(ConceptTypeEnum.Symptom.getKey());
+            } else if (StaticSearchTypeEnum.LIS_PACKAGE.getKey() == t.intValue()) {
+                typeList.add(ConceptTypeEnum.Lis.getKey());
+            }
+        }
+    }
 }

+ 2 - 0
icss-service/src/main/java/com/diagbot/vo/GetStaticVO.java

@@ -19,4 +19,6 @@ public class GetStaticVO {
     private String InputStr;
     //需要去重的id
     private List<Long> inputIds;
+    // 指定类型
+    private List<Integer> types;
 }

+ 2 - 1
icss-service/src/main/java/com/diagbot/web/RetrievalController.java

@@ -50,7 +50,8 @@ public class RetrievalController {
 
     @ApiOperation(value = "ICSS三期-静态知识-页面检索[by:wangyu]",
             notes = "inputStr:检索内容,必填<br>" +
-                    "inputIds:需要去重的id<br>")
+                    "inputIds:需要去重的id<br>" +
+                    "types:指定类型,1:症状,10:药品,12:化验,16:辅检,18:诊断,25:手术;不指定:以上全部")
     @PostMapping("/getStaticKnowledge")
     @SysLogger("getStaticKnowledge")
     public RespDTO<List<RetrievalDTO>> getStaticKnowledge(@Valid @RequestBody GetStaticVO getStaticVO) {