소스 검색

Merge remote-tracking branch 'origin/dev/staticKnowledge20210407' into dev/evaluation_20210412

# Conflicts:
#	src/main/java/com/diagbot/facade/KlConceptStaticFacade.java
zhaops 4 년 전
부모
커밋
13fbc6faaa

+ 79 - 1
src/main/java/com/diagbot/facade/KlConceptStaticFacade.java

@@ -88,8 +88,29 @@ public class KlConceptStaticFacade extends KlConceptStaticServiceImpl {
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("lib_name", staticKnowledgeVO.getName())
                 .eq("lib_type", type), false);
+        Integer sameType = null;
         if (concept == null) {
-            throw new CommonException(CommonErrorCode.NOT_EXISTS, "标准词不存在");
+            //同名静态知识互取
+            if (type.equals(LexiconEnum.LisName.getKey())) {
+                sameType = LexiconEnum.LisSubName.getKey();
+            } else if (type.equals(LexiconEnum.LisSubName.getKey())) {
+                sameType = LexiconEnum.LisName.getKey();
+            } else if (type.equals(LexiconEnum.PacsName.getKey())) {
+                sameType = LexiconEnum.PacsSubName.getKey();
+            } else if (type.equals(LexiconEnum.PacsSubName.getKey())) {
+                sameType = LexiconEnum.PacsName.getKey();
+            }
+            if (sameType != null) {
+                concept = klConceptFacade.getOne(new QueryWrapper<KlConcept>()
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .eq("lib_name", staticKnowledgeVO.getName())
+                        .eq("lib_type", sameType), false);
+                if (concept == null) {
+                    throw new CommonException(CommonErrorCode.NOT_EXISTS, "标准词不存在");
+                } else {
+                    staticKnowledgeVO.setType(sameType);
+                }
+            }
         }
 
         KlConceptStatic staticInfo = this.getOne(new QueryWrapper<KlConceptStatic>()
@@ -97,6 +118,35 @@ public class KlConceptStaticFacade extends KlConceptStaticServiceImpl {
                 .eq("concept_id", concept.getId())
                 .eq("status", StatusEnum.Enable.getKey()), false);
 
+        //未取到静态知识
+        if (staticInfo == null && sameType == null) {
+            //同名静态知识互取
+            if (type.equals(LexiconEnum.LisName.getKey())) {
+                sameType = LexiconEnum.LisSubName.getKey();
+            } else if (type.equals(LexiconEnum.LisSubName.getKey())) {
+                sameType = LexiconEnum.LisName.getKey();
+            } else if (type.equals(LexiconEnum.PacsName.getKey())) {
+                sameType = LexiconEnum.PacsSubName.getKey();
+            } else if (type.equals(LexiconEnum.PacsSubName.getKey())) {
+                sameType = LexiconEnum.PacsName.getKey();
+            }
+            if (sameType != null) {
+                KlConcept sameConcept = klConceptFacade.getOne(new QueryWrapper<KlConcept>()
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .eq("lib_name", staticKnowledgeVO.getName())
+                        .eq("lib_type", sameType), false);
+                if (sameConcept != null) {
+                    staticKnowledgeVO.setType(sameType);
+                    //存在同名的项,替换原来的项
+                    BeanUtil.copyProperties(sameConcept, concept);
+                    staticInfo = this.getOne(new QueryWrapper<KlConceptStatic>()
+                            .eq("is_deleted", IsDeleteEnum.N.getKey())
+                            .eq("concept_id", sameConcept.getId())
+                            .eq("status", StatusEnum.Enable.getKey()), false);
+                }
+            }
+        }
+
         if (staticInfo == null) {
             //检验子项或检查子项向上级取静态知识
             if (type.equals(LexiconEnum.LisSubName.getKey())
@@ -255,6 +305,10 @@ public class KlConceptStaticFacade extends KlConceptStaticServiceImpl {
      */
     @Override
     public IPage<StaticKnowledgeIndexPageDTO> staticIndexPage(StaticKnowledgeIndexPageVO staticKnowledgeIndexPageVO) {
+        //默认查找全部
+        if (ListUtil.isEmpty(staticKnowledgeIndexPageVO.getTypes())) {
+            staticKnowledgeIndexPageVO.setTypeIds(Arrays.asList(new Integer[] { 0 }));
+        }
         staticKnowledgeIndexPageVO.setTypeIds(new ArrayList<>());
 
         List<Integer> types = staticKnowledgeIndexPageVO.getTypes();
@@ -296,15 +350,39 @@ public class KlConceptStaticFacade extends KlConceptStaticServiceImpl {
                 staticKnowledgeIndexPageVO.getTypeIds().add(LexiconEnum.Scale.getKey());
             }
         }
+        if (ListUtil.isEmpty(staticKnowledgeIndexPageVO.getTypeIds())) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "请输入正确的检索类型(多选):0-全部、1-诊断、2-药品、3-检验、4-检查、5-手术和操作");
+        }
         IPage<StaticKnowledgeIndexPageDTO> page = super.staticIndexPage(staticKnowledgeIndexPageVO);
 
         List<StaticKnowledgeIndexPageDTO> records = page.getRecords();
 
+        if (ListUtil.isEmpty(records)) {
+            return page;
+        }
+        List<Long> conceptIds = records.stream().map(StaticKnowledgeIndexPageDTO::getId).collect(Collectors.toList());
+        List<KlConceptDetail> details = klConceptDetailFacade.list(new QueryWrapper<KlConceptDetail>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .in("concept_id", conceptIds)
+                .orderByAsc("concept_id", "order_no"));
+        Map<Long, List<KlConceptDetail>> detailMap = details.stream()
+                .collect(Collectors.groupingBy(KlConceptDetail::getConceptId));
+
         records.forEach(i -> {
             i.setTypeName(medRetrievalFacade.convertTypeName(i.getTypeName(), 2, dicTypeName));
             if (dicTypeMap.containsKey(i.getTypeName())) {
                 i.setType(Integer.valueOf(dicTypeMap.get(i.getTypeName())));
             }
+            i.setHasInfo(1);
+            i.setHasStaticKnowledge(detailMap.get(i.getId()).stream()
+                    .filter(x -> x.getContentType().contains("1")).count() > 0 ? 1 : 0);
+            i.setHasNotice(detailMap.get(i.getId()).stream()
+                    .filter(x -> x.getContentType().contains("2")).count() > 0 ? 1 : 0);
+            i.setHasClinicalPathway(detailMap.get(i.getId()).stream()
+                    .filter(x -> x.getContentType().contains("3")).count() > 0 ? 1 : 0);
+            i.setHasTreatInfo(detailMap.get(i.getId()).stream()
+                    .filter(x -> x.getContentType().contains("4")).count() > 0 ? 1 : 0);
+            i.setAbstractContent(detailMap.get(i.getId()).get(0).getContent());
         });
 
         page.setRecords(records);

+ 2 - 0
src/main/java/com/diagbot/service/impl/KlConceptStaticServiceImpl.java

@@ -23,10 +23,12 @@ import org.springframework.stereotype.Service;
 @Service
 public class KlConceptStaticServiceImpl extends ServiceImpl<KlConceptStaticMapper, KlConceptStatic> implements KlConceptStaticService {
 
+    @Override
     public IPage<KlConceptStaticDTO> getPage(@Param("klConceptStaticPageVO") KlConceptStaticPageVO klConceptStaticPageVO) {
         return baseMapper.getPage(klConceptStaticPageVO);
     }
 
+    @Override
     public IPage<StaticKnowledgeIndexPageDTO> staticIndexPage(@Param("staticKnowledgeIndexPageVO") StaticKnowledgeIndexPageVO staticKnowledgeIndexPageVO) {
         return baseMapper.staticIndexPage(staticKnowledgeIndexPageVO);
     }

+ 136 - 32
src/main/resources/mapper/KlConceptStaticMapper.xml

@@ -69,18 +69,17 @@
         FROM
         (
         SELECT
-        distinct
-        s.*,
+        s.id,
+        s.name,
+        s.retrievalName,
+        s.isConcept,
+        s.type,
+        s.typeName,
+        group_concat(distinct s.code SEPARATOR '') as code,
         s1.concept_id AS conceptId,
         s1.clinical_pathway_name AS clinicalPathwayName,
         s1.notice_name AS noticeName,
-        s1.`status` AS status,
-        IF( count( s2.id )> 0, 1, 0 ) AS hasInfo ,
-        IF( sum( IF ( FIND_IN_SET( 1, s2.content_type )> 0, 1, 0 ))> 0, 1, 0 ) AS hasStaticKnowledge,
-        IF( sum( IF ( FIND_IN_SET( 2, s2.content_type )> 0, 1, 0 ))> 0, 1, 0 ) AS hasNotice,
-        IF( sum( IF ( FIND_IN_SET( 3, s2.content_type )> 0, 1, 0 ))> 0, 1, 0 ) AS hasClinicalPathway,
-        IF( sum( IF ( FIND_IN_SET( 4, s2.content_type )> 0, 1, 0 ))> 0, 1, 0 ) AS hasTreatInfo,
-        s2.content as abstractContent
+        s1.`status` AS status
         FROM
         (
         SELECT
@@ -90,7 +89,7 @@
         t.isConcept,
         t.type,
         t.typeName,
-        l1.icd10_code AS code
+        '' AS code
         FROM
         (
         SELECT
@@ -118,14 +117,11 @@
             </foreach>
         </if>
         ) t
-        LEFT JOIN kl_disease l1 ON t.id = l1.concept_id
-        AND l1.is_deleted = 'N'
         WHERE
         1=1
         <if test="staticKnowledgeIndexPageVO.inputStr!=null and staticKnowledgeIndexPageVO.inputStr!=''">
             AND ( t.retrievalName = #{staticKnowledgeIndexPageVO.inputStr}
-            OR LOWER(t.spell) = LOWER(#{staticKnowledgeIndexPageVO.inputStr})
-            OR LOWER(l1.icd10_code) = LOWER(#{staticKnowledgeIndexPageVO.inputStr}))
+            OR LOWER(t.spell) = LOWER(#{staticKnowledgeIndexPageVO.inputStr}))
         </if>
         UNION
         SELECT
@@ -135,7 +131,7 @@
         t.isConcept,
         t.type,
         t.typeName,
-        l1.icd10_code AS code
+        '' AS code
         FROM
         (
         SELECT
@@ -163,14 +159,11 @@
             </foreach>
         </if>
         ) t
-        LEFT JOIN kl_disease l1 ON t.id = l1.concept_id
-        AND l1.is_deleted = 'N'
         WHERE
         1=1
         <if test="staticKnowledgeIndexPageVO.inputStr!=null and staticKnowledgeIndexPageVO.inputStr!=''">
             AND ( t.retrievalName LIKE concat(#{staticKnowledgeIndexPageVO.inputStr},'%')
-            OR LOWER(t.spell) LIKE LOWER( concat(#{staticKnowledgeIndexPageVO.inputStr},'%'))
-            OR LOWER(l1.icd10_code) LIKE LOWER( concat(#{staticKnowledgeIndexPageVO.inputStr},'%')))
+            OR LOWER(t.spell) LIKE LOWER( concat(#{staticKnowledgeIndexPageVO.inputStr},'%')))
         </if>
         UNION
         SELECT
@@ -180,7 +173,7 @@
         t.isConcept,
         t.type,
         t.typeName,
-        l1.icd10_code AS code
+        '' AS code
         FROM
         (
         SELECT
@@ -208,16 +201,13 @@
             </foreach>
         </if>
         ) t
-        LEFT JOIN kl_disease l1 ON t.id = l1.concept_id
-        AND l1.is_deleted = 'N'
         WHERE
         1=1
         <if test="staticKnowledgeIndexPageVO.inputStr!=null and staticKnowledgeIndexPageVO.inputStr!=''">
             AND ( t.retrievalName LIKE concat('%',#{staticKnowledgeIndexPageVO.inputStr},'%')
-            OR LOWER(t.spell) LIKE LOWER( concat('%',#{staticKnowledgeIndexPageVO.inputStr},'%'))
-            OR LOWER(l1.icd10_code) LIKE LOWER( concat('%',#{staticKnowledgeIndexPageVO.inputStr},'%')))
+            OR LOWER(t.spell) LIKE LOWER( concat('%',#{staticKnowledgeIndexPageVO.inputStr},'%')))
         </if>
-        <if test="(staticKnowledgeIndexPageVO.types != null and staticKnowledgeIndexPageVO.types.size > 0 and (staticKnowledgeIndexPageVO.types.contains(0) or staticKnowledgeIndexPageVO.types.contains(3))) or staticKnowledgeIndexPageVO.types==null or staticKnowledgeIndexPageVO.types.size==0">
+        <if test="staticKnowledgeIndexPageVO.typeIds.contains(107) or staticKnowledgeIndexPageVO.typeIds.contains(108)">
             UNION
             SELECT DISTINCT
             e.id AS id,
@@ -315,18 +305,132 @@
                 AND ( a.name LIKE concat('%',#{staticKnowledgeIndexPageVO.inputStr},'%') OR LOWER(a.spell) LIKE LOWER( concat('%',#{staticKnowledgeIndexPageVO.inputStr},'%')))
             </if>
         </if>
+        <if test="staticKnowledgeIndexPageVO.typeIds.contains(100) ">
+            UNION
+            SELECT
+            t.id,
+            t.NAME,
+            IF ( t.isConcept = 0, t.retrievalName, '' ) AS retrievalName,
+            t.isConcept,
+            t.type,
+            t.typeName,
+            l1.icd10_code AS code
+            FROM
+            (
+            SELECT
+            a.NAME AS retrievalName,
+            a.spell AS spell,
+            a.is_concept AS isConcept,
+            b.id AS id,
+            b.lib_name AS NAME,
+            b.lib_type AS type,
+            c.NAME AS typeName
+            FROM
+            kl_library_info a,
+            kl_concept b,
+            kl_lexicon c
+            WHERE
+            a.is_deleted = 'N'
+            AND b.is_deleted = 'N'
+            AND c.is_deleted = 'N'
+            AND a.concept_id = b.id
+            AND b.lib_type = c.code
+            AND b.`status` = 1
+            AND a.type_id =100
+            ) t
+            LEFT JOIN kl_disease l1 ON t.id = l1.concept_id
+            AND l1.is_deleted = 'N'
+            WHERE
+            1=1
+            <if test="staticKnowledgeIndexPageVO.inputStr!=null and staticKnowledgeIndexPageVO.inputStr!=''">
+                AND  LOWER(l1.icd10_code) = LOWER(#{staticKnowledgeIndexPageVO.inputStr})
+            </if>
+            UNION
+            SELECT
+            t.id,
+            t.NAME,
+            IF ( t.isConcept = 0, t.retrievalName, '' ) AS retrievalName,
+            t.isConcept,
+            t.type,
+            t.typeName,
+            l1.icd10_code AS code
+            FROM
+            (
+            SELECT
+            a.NAME AS retrievalName,
+            a.spell AS spell,
+            a.is_concept AS isConcept,
+            b.id AS id,
+            b.lib_name AS NAME,
+            b.lib_type AS type,
+            c.NAME AS typeName
+            FROM
+            kl_library_info a,
+            kl_concept b,
+            kl_lexicon c
+            WHERE
+            a.is_deleted = 'N'
+            AND b.is_deleted = 'N'
+            AND c.is_deleted = 'N'
+            AND a.concept_id = b.id
+            AND b.lib_type = c.code
+            AND b.`status` = 1
+            AND a.type_id =100
+            ) t
+            LEFT JOIN kl_disease l1 ON t.id = l1.concept_id
+            AND l1.is_deleted = 'N'
+            WHERE
+            1=1
+            <if test="staticKnowledgeIndexPageVO.inputStr!=null and staticKnowledgeIndexPageVO.inputStr!=''">
+                AND LOWER(l1.icd10_code) LIKE LOWER( concat(#{staticKnowledgeIndexPageVO.inputStr},'%'))
+            </if>
+            UNION
+            SELECT
+            t.id,
+            t.NAME,
+            IF ( t.isConcept = 0, t.retrievalName, '' ) AS retrievalName,
+            t.isConcept,
+            t.type,
+            t.typeName,
+            l1.icd10_code AS code
+            FROM
+            (
+            SELECT
+            a.NAME AS retrievalName,
+            a.spell AS spell,
+            a.is_concept AS isConcept,
+            b.id AS id,
+            b.lib_name AS NAME,
+            b.lib_type AS type,
+            c.NAME AS typeName
+            FROM
+            kl_library_info a,
+            kl_concept b,
+            kl_lexicon c
+            WHERE
+            a.is_deleted = 'N'
+            AND b.is_deleted = 'N'
+            AND c.is_deleted = 'N'
+            AND a.concept_id = b.id
+            AND b.lib_type = c.code
+            AND b.`status` = 1
+            AND a.type_id =100
+            ) t
+            LEFT JOIN kl_disease l1 ON t.id = l1.concept_id
+            AND l1.is_deleted = 'N'
+            WHERE
+            1=1
+            <if test="staticKnowledgeIndexPageVO.inputStr!=null and staticKnowledgeIndexPageVO.inputStr!=''">
+                AND LOWER(l1.icd10_code) LIKE LOWER( concat('%',#{staticKnowledgeIndexPageVO.inputStr},'%'))
+            </if>
+        </if>
         ) s,
-        kl_concept_static s1,
-        kl_concept_detail s2
+        kl_concept_static s1
         WHERE s.id = s1.concept_id
-        AND s.id = s2.concept_id
         AND s1.is_deleted = 'N'
-        AND s2.is_deleted = 'N'
-        AND (FIND_IN_SET( 1, s2.content_type ) OR FIND_IN_SET( 2, s2.content_type ) OR FIND_IN_SET( 3, s2.content_type ))
         GROUP BY s.id
         ORDER BY s.type ASC,
-        s.isConcept DESC,
-        s2.order_no ASC
+        s.isConcept DESC
         ) f
     </select>
 </mapper>