소스 검색

医学术语维护翻页查询速度优化

gaodm 4 년 전
부모
커밋
cf00903807

+ 12 - 50
cdssman-service/src/main/java/com/diagbot/facade/KlConceptFacade.java

@@ -3,7 +3,6 @@ package com.diagbot.facade;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.diagbot.client.UserServiceClient;
 import com.diagbot.dto.GetAllForRelationDTO;
 import com.diagbot.dto.KlConceptAllDTO;
@@ -25,7 +24,6 @@ import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.KlConceptServiceImpl;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
-import com.diagbot.util.IntegerUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.StringUtil;
@@ -84,51 +82,25 @@ public class KlConceptFacade extends KlConceptServiceImpl {
      * @return
      */
     public IPage<KlConceptInfoDTO> getConceptInfoPage(KlConceptInfoVO klConceptInfoVO) {
-        Page<KlConceptInfoDTO> klConceptInfoDTOPage = new Page<>();
-        QueryWrapper<KlConcept> conceptQe = new QueryWrapper<>();
         if (StringUtil.isNotBlank(klConceptInfoVO.getSynonymName())) {
-            QueryWrapper<KlLibraryInfo> libraryInfoQe = new QueryWrapper<>();
-            libraryInfoQe.eq("is_deleted", IsDeleteEnum.N.getKey());
-            libraryInfoQe.apply(
-                    "UPPER(`name`) LIKE CONCAT('%',trim('"
-                            + klConceptInfoVO.getSynonymName().toUpperCase()
-                            + "'),'%')");
-            libraryInfoQe.eq(StringUtil.isNotBlank(klConceptInfoVO.getLibType()),
-                    "type_id", klConceptInfoVO.getLibType());
-            List<Long> conceptIdList = klLibraryInfoFacade.list(libraryInfoQe)
+            List<Long> conceptIdList = klLibraryInfoFacade.getLib(klConceptInfoVO)
                     .stream().map(KlLibraryInfo::getConceptId).distinct().collect(Collectors.toList());
-            if (ListUtil.isNotEmpty(conceptIdList)) {
-                conceptQe.in("id", conceptIdList);
-            } else {
-                conceptQe.eq("id", -999999999);
+            if (ListUtil.isEmpty(conceptIdList)) {
+                conceptIdList.add(-999999999L);
             }
+            klConceptInfoVO.setConceptIdList(conceptIdList);
         }
-        if (StringUtil.isNotBlank(klConceptInfoVO.getLibName())) {
-            conceptQe.apply(
-                    "UPPER(lib_name) LIKE CONCAT('%',trim('"
-                            + klConceptInfoVO.getLibName().toUpperCase()
-                            + "'),'%')");
-        }
-        conceptQe.eq("is_deleted", IsDeleteEnum.N.getKey());
-        conceptQe.eq(StringUtil.isNotBlank(klConceptInfoVO.getLibType()),
-                "lib_type", klConceptInfoVO.getLibType());
-        conceptQe.eq(!IntegerUtil.isNull(klConceptInfoVO.getStatus()),
-                "status", klConceptInfoVO.getStatus());
-        conceptQe.orderByDesc("status");
-        conceptQe.orderByDesc("gmt_modified");
-        conceptQe.orderByDesc("id");
-        IPage<KlConcept> conceptPage = this.page(klConceptInfoVO, conceptQe);
-        BeanUtil.copyProperties(conceptPage, klConceptInfoDTOPage);
+        IPage<KlConceptInfoDTO> conceptPage = this.getConceptPage2(klConceptInfoVO);
 
         if (ListUtil.isNotEmpty(conceptPage.getRecords())) {
             //获取用户
             List<String> userIds = conceptPage.getRecords().stream()
-                    .map(KlConcept::getModifier).distinct().collect(Collectors.toList());
+                    .map(KlConceptInfoDTO::getModifierId).distinct().collect(Collectors.toList());
             RespDTO<Map<String, String>> respDTO = userServiceClient.getUserInfoByIds(userIds);
             RespDTOUtil.respNGDealCover(respDTO, "获取用户信息失败");
             //获取同义词
             List<Long> conceptIds = conceptPage.getRecords().stream()
-                    .map(KlConcept::getId).distinct().collect(Collectors.toList());
+                    .map(KlConceptInfoDTO::getConceptId).distinct().collect(Collectors.toList());
             QueryWrapper<KlLibraryInfo> qw = new QueryWrapper<>();
             qw.in("concept_id", conceptIds)
                     .eq("is_deleted", IsDeleteEnum.N.getKey())
@@ -138,33 +110,23 @@ public class KlConceptFacade extends KlConceptServiceImpl {
                     .stream().collect(Collectors.groupingBy(KlLibraryInfo::getConceptId));
             //获取类型
             List<Integer> libTypes = conceptPage.getRecords().stream()
-                    .map(KlConcept::getLibType).distinct().collect(Collectors.toList());
+                    .map(KlConceptInfoDTO::getLibType).distinct().collect(Collectors.toList());
             QueryWrapper<KlLexicon> qwLib = new QueryWrapper<>();
             qwLib.in("code", libTypes)
                     .eq("is_deleted", IsDeleteEnum.N.getKey());
             Map<Integer, String> lexiconMap = klLexiconFacade.list(qwLib)
                     .stream().collect(Collectors.toMap(KlLexicon::getCode, KlLexicon::getName));
             //组装结果
-            List<KlConceptInfoDTO> records = new ArrayList<>();
             conceptPage.getRecords().forEach(i -> {
-                KlConceptInfoDTO klConceptInfoDTO = new KlConceptInfoDTO();
-                klConceptInfoDTO.setConceptId(i.getId());
-                klConceptInfoDTO.setLibName(i.getLibName());
-                klConceptInfoDTO.setLibType(i.getLibType());
-                klConceptInfoDTO.setTypeName(lexiconMap.get(i.getLibType()));
-                klConceptInfoDTO.setSynonymName(libMap.get(i.getId())
+                i.setTypeName(lexiconMap.get(i.getLibType()));
+                i.setSynonymName(libMap.get(i.getConceptId())
                         .stream()
                         .map(KlLibraryInfo::getName)
                         .collect(Collectors.joining("、")));
-                klConceptInfoDTO.setModifierId(i.getModifier());
-                klConceptInfoDTO.setModifierName(respDTO.data.get(i.getModifier()));
-                klConceptInfoDTO.setGmtModified(i.getGmtModified());
-                klConceptInfoDTO.setStatus(i.getStatus());
-                records.add(klConceptInfoDTO);
+                i.setModifierName(respDTO.data.get(i.getModifierId()));
             });
-            klConceptInfoDTOPage.setRecords(records);
         }
-        return klConceptInfoDTOPage;
+        return conceptPage;
     }
 
     /**

+ 2 - 0
cdssman-service/src/main/java/com/diagbot/mapper/KlConceptMapper.java

@@ -23,4 +23,6 @@ public interface KlConceptMapper extends BaseMapper<KlConcept> {
     IPage<KlConceptInfoDTO> getConceptPage(KlConceptInfoVO klConceptInfoVO);
 
     List<KlConceptAllDTO> getConceptAll(KlConceptAllVO klConceptAllVO);
+
+    IPage<KlConceptInfoDTO> getConceptPage2(KlConceptInfoVO klConceptInfoVO);
 }

+ 5 - 2
cdssman-service/src/main/java/com/diagbot/mapper/KlLibraryInfoMapper.java

@@ -1,7 +1,10 @@
 package com.diagbot.mapper;
 
-import com.diagbot.entity.KlLibraryInfo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.entity.KlLibraryInfo;
+import com.diagbot.vo.KlConceptInfoVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +15,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2021-03-01
  */
 public interface KlLibraryInfoMapper extends BaseMapper<KlLibraryInfo> {
-
+    List<KlLibraryInfo> getLib(KlConceptInfoVO klConceptInfoVO);
 }

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

@@ -22,4 +22,6 @@ import java.util.List;
 public interface KlConceptService extends IService<KlConcept> {
     public IPage<KlConceptInfoDTO> getConceptPage(KlConceptInfoVO klConceptInfoVO);
     public List<KlConceptAllDTO> getConceptAll(KlConceptAllVO klConceptAllVO);
+
+    IPage<KlConceptInfoDTO> getConceptPage2(KlConceptInfoVO klConceptInfoVO);
 }

+ 5 - 2
cdssman-service/src/main/java/com/diagbot/service/KlLibraryInfoService.java

@@ -1,7 +1,10 @@
 package com.diagbot.service;
 
-import com.diagbot.entity.KlLibraryInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.entity.KlLibraryInfo;
+import com.diagbot.vo.KlConceptInfoVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +15,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @since 2021-03-01
  */
 public interface KlLibraryInfoService extends IService<KlLibraryInfo> {
-
+    List<KlLibraryInfo> getLib(KlConceptInfoVO klConceptInfoVO);
 }

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

@@ -35,4 +35,9 @@ public class KlConceptServiceImpl extends ServiceImpl<KlConceptMapper, KlConcept
     public List<KlConceptAllDTO> getConceptAll(KlConceptAllVO klConceptAllVO) {
         return baseMapper.getConceptAll(klConceptAllVO);
     }
+
+    @Override
+    public IPage<KlConceptInfoDTO> getConceptPage2(KlConceptInfoVO klConceptInfoVO){
+        return baseMapper.getConceptPage2(klConceptInfoVO);
+    }
 }

+ 7 - 1
cdssman-service/src/main/java/com/diagbot/service/impl/KlLibraryInfoServiceImpl.java

@@ -5,8 +5,11 @@ import com.diagbot.entity.KlLibraryInfo;
 import com.diagbot.mapper.KlLibraryInfoMapper;
 import com.diagbot.service.KlLibraryInfoService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.vo.KlConceptInfoVO;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 术语表 服务实现类
@@ -18,5 +21,8 @@ import org.springframework.stereotype.Service;
 @Service
 @DS("med")
 public class KlLibraryInfoServiceImpl extends ServiceImpl<KlLibraryInfoMapper, KlLibraryInfo> implements KlLibraryInfoService {
-
+    @Override
+    public List<KlLibraryInfo> getLib(KlConceptInfoVO klConceptInfoVO){
+        return baseMapper.getLib(klConceptInfoVO);
+    }
 }

+ 6 - 1
cdssman-service/src/main/java/com/diagbot/vo/KlConceptInfoVO.java

@@ -1,9 +1,12 @@
 package com.diagbot.vo;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * @author wangfeng
  * @Description:
@@ -13,7 +16,9 @@ import lombok.Setter;
 @Getter
 public class KlConceptInfoVO extends Page {
     private String libName;
-    private String libType;
+    private Integer libType;
     private String synonymName;
     private Integer status;
+    @ApiModelProperty(hidden = true)
+    List<Long> conceptIdList;
 }

+ 32 - 0
cdssman-service/src/main/resources/mapper/KlConceptMapper.xml

@@ -94,4 +94,36 @@
         </if>
         ORDER BY a.is_concept DESC
     </select>
+
+    <select id="getConceptPage2"
+            parameterType="com.diagbot.vo.KlConceptInfoVO" resultType="com.diagbot.dto.KlConceptInfoDTO">
+        SELECT
+        b.id AS conceptId,
+        b.lib_name as libName,
+        b.lib_type as libType,
+        "" AS typeName,
+        "" AS synonymName,
+        b.status,
+        b.modifier AS modifierId,
+        b.gmt_modified as gmtModified
+        FROM
+        kl_concept b
+        WHERE b.is_deleted = 'N'
+        <if test="libType != null">
+            AND b.lib_type = #{libType}
+        </if>
+        <if test="libName!=null and libName!=''">
+            AND UPPER(b.lib_name) LIKE CONCAT('%', UPPER(trim(#{libName})), '%')
+        </if>
+        <if test="status != null">
+            AND b.status = #{status}
+        </if>
+        <if test="conceptIdList != null and conceptIdList.size > 0">
+            and b.id in
+            <foreach item="conceptId" collection="conceptIdList" open="(" separator="," close=")">
+                #{conceptId}
+            </foreach>
+        </if>
+        ORDER BY b.status DESC ,b.gmt_modified DESC,b.id DESC
+    </select>
 </mapper>

+ 14 - 0
cdssman-service/src/main/resources/mapper/KlLibraryInfoMapper.xml

@@ -18,4 +18,18 @@
         <result column="remark" property="remark" />
     </resultMap>
 
+    <select id="getLib"
+            parameterType="com.diagbot.vo.KlConceptInfoVO" resultType="com.diagbot.entity.KlLibraryInfo">
+        SELECT
+        *
+        FROM
+        kl_library_info a
+        WHERE a.is_deleted = 'N'
+        <if test="libType != null">
+            AND a.lib_type = #{libType}
+        </if>
+        <if test="synonymName!=null and synonymName!=''">
+            AND UPPER(a.name) LIKE CONCAT('%', UPPER(trim(#{synonymName})), '%')
+        </if>
+    </select>
 </mapper>