소스 검색

ICD10编码查询接口添加

wangsy 7 달 전
부모
커밋
4c9e862008

+ 15 - 0
src/main/java/com/diagbot/dto/DiseaseIndexDTO.java

@@ -0,0 +1,15 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2022/4/8 13:52
+ */
+@Data
+public class DiseaseIndexDTO {
+    private Long id;
+    private String name;
+    private String code;
+}

+ 6 - 0
src/main/java/com/diagbot/mapper/KlConceptMapper.java

@@ -1,9 +1,11 @@
 package com.diagbot.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.*;
 import com.diagbot.entity.KlConcept;
 import com.diagbot.vo.*;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -32,4 +34,8 @@ public interface KlConceptMapper extends BaseMapper<KlConcept> {
     List<GetAllForRelationDTO> searchByTypeAndNameAdd(SearchConceptVO searchConceptVO);
 
     List<GetAllForRelationDTO> searchCollectionConcept(SearchCollectionConceptVO searchCollectionConceptVO);
+
+    IPage<DiseaseIndexDTO> findDiseaeByCode(@Param("diseaseIndexPageVO") DiseaseIndexPageVO diseaseIndexPageVO);
+
+    IPage<DiseaseIndexDTO> diseaseIndex(@Param("diseaseIndexPageVO") DiseaseIndexPageVO diseaseIndexPageVO);
 }

+ 8 - 0
src/main/java/com/diagbot/service/KlConceptService.java

@@ -1,9 +1,11 @@
 package com.diagbot.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.dto.*;
 import com.diagbot.entity.KlConcept;
 import com.diagbot.vo.*;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -36,4 +38,10 @@ public interface KlConceptService extends IService<KlConcept> {
     //查找(集合模块术语)
     List<GetAllForRelationDTO> searchCollectionConcept(SearchCollectionConceptVO searchCollectionConceptVO);
 
+    //通过编码查询疾病
+    IPage<DiseaseIndexDTO> findDiseaeByCode(@Param("diseaseIndexPageVO") DiseaseIndexPageVO diseaseIndexPageVO);
+
+    //通过编码查询疾病
+    IPage<DiseaseIndexDTO> diseaseIndex(@Param("diseaseIndexPageVO") DiseaseIndexPageVO diseaseIndexPageVO);
+
 }

+ 14 - 0
src/main/java/com/diagbot/service/impl/KlConceptServiceImpl.java

@@ -1,6 +1,7 @@
 package com.diagbot.service.impl;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.dto.*;
 import com.diagbot.entity.KlConcept;
@@ -8,6 +9,7 @@ import com.diagbot.mapper.KlConceptMapper;
 import com.diagbot.service.KlConceptService;
 import com.diagbot.vo.*;
 import org.springframework.stereotype.Service;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -63,4 +65,16 @@ public class KlConceptServiceImpl extends ServiceImpl<KlConceptMapper, KlConcept
         return baseMapper.searchCollectionConcept(searchCollectionConceptVO);
     }
 
+    //通过编码查询疾病
+    @Override
+    public IPage<DiseaseIndexDTO> findDiseaeByCode(@Param("diseaseIndexPageVO") DiseaseIndexPageVO diseaseIndexPageVO) {
+        return baseMapper.findDiseaeByCode(diseaseIndexPageVO);
+    }
+
+    //通过编码查询疾病
+    @Override
+    public IPage<DiseaseIndexDTO> diseaseIndex(@Param("diseaseIndexPageVO") DiseaseIndexPageVO diseaseIndexPageVO) {
+        return baseMapper.diseaseIndex(diseaseIndexPageVO);
+    }
+
 }

+ 29 - 0
src/main/java/com/diagbot/vo/DiseaseIndexPageVO.java

@@ -0,0 +1,29 @@
+package com.diagbot.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2022/4/8 13:49
+ */
+@Getter
+@Setter
+public class DiseaseIndexPageVO {
+    /**
+     * 类型:1-Icd10编码,2-国临编码
+     */
+    @NotNull(message = "请输入检索类型")
+    public Integer type;
+    /**
+     * 检索内容
+     */
+    @NotBlank(message = "请输入检索内容")
+    public String inputStr;
+}

+ 16 - 6
src/main/java/com/diagbot/web/RetrievalController.java

@@ -1,14 +1,12 @@
 package com.diagbot.web;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.diagbot.dto.*;
 import com.diagbot.facade.KlConceptFacade;
 import com.diagbot.facade.MedRetrievalFacade;
-import com.diagbot.vo.ConceptVO;
-import com.diagbot.vo.FilterVO;
-import com.diagbot.vo.IndexByApprovalVO;
-import com.diagbot.vo.KllisDetailVO;
-import com.diagbot.vo.RetrievalVO;
-import com.diagbot.vo.StaticKnowledgeIndexVO;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -104,4 +102,16 @@ public class RetrievalController {
         List<IndexBatchDTO> data = klConceptFacade.indexByApproval(indexByApprovalVO);
         return RespDTO.onSuc(data);
     }
+
+
+    @ApiOperation(value = "通过编码查询疾病[zhaops]",
+            notes = "type: 1-医保编码查询、2-国临编码查询<br>" +
+                    "inputStr: 检索内容<br>")
+    @PostMapping("/diseaseIndex")
+    public RespDTO<Page<DiseaseIndexDTO>> diseaseIndex(@Valid @RequestBody DiseaseIndexPageVO diseaseIndexPageVO) {
+        IPage<DiseaseIndexDTO> data = klConceptFacade.diseaseIndex(diseaseIndexPageVO);
+        Page<KlConceptStaticDTO> page = new Page<>();
+        BeanUtil.copyProperties(data, page);
+        return RespDTO.onSuc(data);
+    }
 }

+ 244 - 0
src/main/resources/mapper/KlConceptMapper.xml

@@ -1026,4 +1026,248 @@
         t1.approval-->
     </select>
 
+    <!--ICD编码查询-->
+    <select id="findDiseaeByCode" resultType="com.diagbot.dto.DiseaseIndexDTO">
+        SELECT
+        t.id,
+        <if test="diseaseIndexPageVO.type != null">
+            <choose>
+                <when test="diseaseIndexPageVO.type == 1">
+                    t.lib_name AS NAME,
+                    t.icd10_code AS CODE,
+                </when>
+                <when test="diseaseIndexPageVO.type == 2">
+                    t.guoname AS NAME,
+                    t.guocode AS CODE,
+                </when>
+                <otherwise>
+                </otherwise>
+            </choose>
+        </if>
+        t.partId
+        FROM
+        (
+        SELECT
+        a.id,
+        a.lib_name,
+        b.spell,
+        c.icd10_code,
+        c.guoname,
+        c.guocode,
+        c.guospell,
+        CONCAT( '1', a.lib_type ) AS partId
+        FROM
+        kl_concept a,
+        kl_library_info b,
+        kl_disease c
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND a.id = b.concept_id
+        AND a.id = c.concept_id
+        AND b.is_concept = 1
+        AND a.lib_type = 100
+        AND a.`status` = 1
+        <if test="diseaseIndexPageVO.inputStr != null and diseaseIndexPageVO.inputStr != '' and diseaseIndexPageVO.type != null">
+            <choose>
+                <when test="diseaseIndexPageVO.type == 1">
+                    AND c.icd10_code != ''
+                    AND ( a.lib_name = #{diseaseIndexPageVO.inputStr}
+                    OR b.spell = #{diseaseIndexPageVO.inputStr}
+                    OR c.icd10_code = #{diseaseIndexPageVO.inputStr} )
+                </when>
+                <when test="diseaseIndexPageVO.type == 2">
+                    AND c.guocode != ''
+                    AND ( c.guoname = #{diseaseIndexPageVO.inputStr}
+                    OR c.guospell = #{diseaseIndexPageVO.inputStr}
+                    OR c.guocode = #{diseaseIndexPageVO.inputStr} )
+                </when>
+                <otherwise></otherwise>
+            </choose>
+        </if>
+        UNION
+        SELECT
+        a.id,
+        a.lib_name,
+        b.spell,
+        c.icd10_code,
+        c.guoname,
+        c.guocode,
+        c.guospell,
+        CONCAT( '2', a.lib_type ) AS partId
+        FROM
+        kl_concept a,
+        kl_library_info b,
+        kl_disease c
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND a.id = b.concept_id
+        AND a.id = c.concept_id
+        AND b.is_concept = 1
+        AND a.lib_type = 100
+        AND a.`status` = 1
+        <if test="diseaseIndexPageVO.inputStr != null and diseaseIndexPageVO.inputStr != '' and diseaseIndexPageVO.type != null">
+            <choose>
+                <when test="diseaseIndexPageVO.type == 1">
+                    AND c.icd10_code != ''
+                    AND ( a.lib_name LIKE  CONCAT( #{diseaseIndexPageVO.inputStr}, '%' )
+                    OR b.spell LIKE  CONCAT( #{diseaseIndexPageVO.inputStr}, '%' )
+                    OR c.icd10_code LIKE  CONCAT( #{diseaseIndexPageVO.inputStr}, '%' ) )
+                </when>
+                <when test="diseaseIndexPageVO.type == 2">
+                    AND c.guocode != ''
+                    AND ( c.guoname LIKE  CONCAT( #{diseaseIndexPageVO.inputStr}, '%' )
+                    OR c.guospell LIKE CONCAT( #{diseaseIndexPageVO.inputStr}, '%' )
+                    OR c.guocode LIKE  CONCAT( #{diseaseIndexPageVO.inputStr}, '%' ) )
+                </when>
+                <otherwise></otherwise>
+            </choose>
+        </if>
+        UNION
+        SELECT
+        a.id,
+        a.lib_name,
+        b.spell,
+        c.icd10_code,
+        c.guoname,
+        c.guocode,
+        c.guospell,
+        CONCAT( '3', a.lib_type ) AS partId
+        FROM
+        kl_concept a,
+        kl_library_info b,
+        kl_disease c
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND a.id = b.concept_id
+        AND a.id = c.concept_id
+        AND b.is_concept = 1
+        AND a.lib_type = 100
+        AND a.`status` = 1
+        <if test="diseaseIndexPageVO.inputStr != null and diseaseIndexPageVO.inputStr != '' and diseaseIndexPageVO.type != null">
+            <choose>
+                <when test="diseaseIndexPageVO.type == 1">
+                    AND c.icd10_code != ''
+                    AND ( a.lib_name LIKE  CONCAT( '%', #{diseaseIndexPageVO.inputStr}, '%' )
+                    OR b.spell LIKE  CONCAT( '%', #{diseaseIndexPageVO.inputStr}, '%' )
+                    OR c.icd10_code LIKE  CONCAT( '%', #{diseaseIndexPageVO.inputStr}, '%' ) )
+                    AND (
+                    a.lib_name NOT LIKE CONCAT(  #{diseaseIndexPageVO.inputStr}, '%' )
+                    AND b.spell NOT LIKE CONCAT(  #{diseaseIndexPageVO.inputStr}, '%' )
+                    AND c.icd10_code NOT LIKE CONCAT(  #{diseaseIndexPageVO.inputStr}, '%' )
+                    )
+                </when>
+                <when test="diseaseIndexPageVO.type == 2">
+                    AND c.guocode != ''
+                    AND ( c.guoname LIKE  CONCAT( '%', #{diseaseIndexPageVO.inputStr}, '%' )
+                    OR c.guospell LIKE CONCAT( '%', #{diseaseIndexPageVO.inputStr}, '%' )
+                    OR c.guocode LIKE  CONCAT( '%', #{diseaseIndexPageVO.inputStr}, '%' ) )
+                    AND (
+                    c.guoname NOT LIKE CONCAT(  #{diseaseIndexPageVO.inputStr}, '%' )
+                    AND c.guospell NOT LIKE CONCAT(  #{diseaseIndexPageVO.inputStr}, '%' )
+                    AND c.guocode NOT LIKE CONCAT(  #{diseaseIndexPageVO.inputStr}, '%' )
+                    )
+                </when>
+                <otherwise></otherwise>
+            </choose>
+        </if>
+        ) t
+        ORDER BY
+        t.partId
+    </select>
+
+    <!--ICD编码查询-->
+    <select id="diseaseIndex"  resultType="com.diagbot.dto.DiseaseIndexDTO">
+        SELECT
+        k.id,
+        k.name,
+        k.code,
+        k.spell,
+        k.pos,
+        least( k.nameLen, k.spellLen, k.codeLen ) AS len
+        FROM
+        (
+        SELECT
+        t.*,
+        LEAST( t.namePos, t.spellPos, t.codePos ) AS pos,
+        IF( LEAST( t.namePos, t.spellPos, t.codePos )= namePos, CHAR_LENGTH( t.name ), 999 ) AS nameLen,
+        IF( LEAST( t.namePos, t.spellPos, t.codePos )= spellPos, CHAR_LENGTH( t.spell ), 999 ) AS spellLen,
+        IF( LEAST( t.namePos, t.spellPos, t.codePos )= codePos, CHAR_LENGTH( t.code ), 999 ) AS codeLen
+        FROM
+        (
+        SELECT
+        <if test="diseaseIndexPageVO.inputStr != null and diseaseIndexPageVO.inputStr != '' and diseaseIndexPageVO.type != null">
+            <choose>
+                <when test="diseaseIndexPageVO.type == 1">
+                    IF( POSITION( #{diseaseIndexPageVO.inputStr} IN a.lib_name )> 0, POSITION( #{diseaseIndexPageVO.inputStr} IN a.lib_name ), 999 ) AS namePos,
+                    IF( POSITION( #{diseaseIndexPageVO.inputStr} IN b.spell )> 0, POSITION( #{diseaseIndexPageVO.inputStr} IN b.spell ), 999 ) AS spellPos,
+                    IF( POSITION( #{diseaseIndexPageVO.inputStr} IN c.icd10_code )> 0, POSITION( #{diseaseIndexPageVO.inputStr} IN c.icd10_code ), 999 ) AS codePos,
+                </when>
+                <when test="diseaseIndexPageVO.type == 2">
+                    IF( POSITION( #{diseaseIndexPageVO.inputStr} IN c.guoname )> 0, POSITION( #{diseaseIndexPageVO.inputStr} IN c.guoname ), 999 ) AS namePos,
+                    IF( POSITION( #{diseaseIndexPageVO.inputStr} IN c.guospell )> 0, POSITION( #{diseaseIndexPageVO.inputStr} IN c.guospell ), 999 ) AS spellPos,
+                    IF( POSITION( #{diseaseIndexPageVO.inputStr} IN c.guocode )> 0, POSITION( #{diseaseIndexPageVO.inputStr} IN c.guocode ), 999 ) AS codePos,
+                </when>
+                <otherwise></otherwise>
+            </choose>
+        </if>
+        <if test="diseaseIndexPageVO.type != null">
+            <choose>
+                <when test="diseaseIndexPageVO.type == 1">
+                    a.lib_name AS NAME,
+                    c.icd10_code AS CODE,
+                    b.spell AS spell,
+                </when>
+                <when test="diseaseIndexPageVO.type == 2">
+                    c.guoname AS NAME,
+                    c.guocode AS CODE,
+                    c.guospell AS spell,
+                </when>
+                <otherwise>
+                </otherwise>
+            </choose>
+        </if>
+        a.id
+        FROM
+        kl_concept a,
+        kl_library_info b,
+        kl_disease c
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND a.id = b.concept_id
+        AND a.id = c.concept_id
+        AND b.is_concept = 1
+        AND a.lib_type = 100
+        AND a.`status` = 1
+        <if test="diseaseIndexPageVO.inputStr != null and diseaseIndexPageVO.inputStr != '' and diseaseIndexPageVO.type != null">
+            <choose>
+                <when test="diseaseIndexPageVO.type == 1">
+                    AND c.icd10_code != ''
+                    AND ( a.lib_name LIKE  CONCAT( '%', #{diseaseIndexPageVO.inputStr}, '%' )
+                    OR b.spell LIKE  CONCAT( '%', #{diseaseIndexPageVO.inputStr}, '%' )
+                    OR c.icd10_code LIKE  CONCAT( '%', #{diseaseIndexPageVO.inputStr}, '%' ) )
+                </when>
+                <when test="diseaseIndexPageVO.type == 2">
+                    AND c.guocode != ''
+                    AND ( c.guoname LIKE  CONCAT( '%', #{diseaseIndexPageVO.inputStr}, '%' )
+                    OR c.guospell LIKE CONCAT( '%', #{diseaseIndexPageVO.inputStr}, '%' )
+                    OR c.guocode LIKE  CONCAT( '%', #{diseaseIndexPageVO.inputStr}, '%' ) )
+                </when>
+                <otherwise></otherwise>
+            </choose>
+        </if>
+        ) t
+        ) k
+        ORDER BY
+        k.pos,
+        len
+    </select>
+
 </mapper>