浏览代码

1、批量术语校验

zhaops 4 年之前
父节点
当前提交
2e116a7478

+ 158 - 0
src/main/java/com/diagbot/entity/KlOperation.java

@@ -0,0 +1,158 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 手术扩展表
+ * </p>
+ *
+ * @author zhaops
+ * @since 2021-06-15
+ */
+public class KlOperation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 术语概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 手术级别(0,1,2,3,4)
+     */
+    private Integer operationLevel;
+
+    /**
+     * 手术操作码
+     */
+    private String operationCode;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public Long getConceptId() {
+        return conceptId;
+    }
+
+    public void setConceptId(Long conceptId) {
+        this.conceptId = conceptId;
+    }
+    public Integer getOperationLevel() {
+        return operationLevel;
+    }
+
+    public void setOperationLevel(Integer operationLevel) {
+        this.operationLevel = operationLevel;
+    }
+    public String getOperationCode() {
+        return operationCode;
+    }
+
+    public void setOperationCode(String operationCode) {
+        this.operationCode = operationCode;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "KlOperation{" +
+            "id=" + id +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+            ", conceptId=" + conceptId +
+            ", operationLevel=" + operationLevel +
+            ", operationCode=" + operationCode +
+            ", remark=" + remark +
+        "}";
+    }
+}

+ 66 - 0
src/main/java/com/diagbot/enums/MatchSourceEnum.java

@@ -0,0 +1,66 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/6/15 13:20
+ */
+public enum MatchSourceEnum implements KeyedNamed {
+    StandWord(1, "标准词"),
+    SynonymsWord(2, "同义词"),
+    Code(3,"编码"),
+    History(4,"历史数据"),
+    SimilarWord(5,"相似词");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    MatchSourceEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static MatchSourceEnum getEnum(int key) {
+        for (MatchSourceEnum item : MatchSourceEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static MatchSourceEnum getEnum(String name) {
+        for (MatchSourceEnum item : MatchSourceEnum.values()) {
+            if (item.name.equals(name)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        MatchSourceEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    public static Integer getKey(String name) {
+        MatchSourceEnum item = getEnum(name);
+        return item != null ? item.key : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 117 - 20
src/main/java/com/diagbot/facade/KlConceptFacade.java

@@ -7,10 +7,13 @@ import com.diagbot.dto.KllisDetailDTO;
 import com.diagbot.entity.KlConcept;
 import com.diagbot.entity.KlDisease;
 import com.diagbot.entity.KlLibraryInfo;
+import com.diagbot.entity.KlOperation;
 import com.diagbot.entity.TcmDisease;
 import com.diagbot.entity.TcmSyndrome;
+import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.LexiconEnum;
+import com.diagbot.enums.MatchSourceEnum;
 import com.diagbot.enums.StatusEnum;
 import com.diagbot.service.impl.KlConceptServiceImpl;
 import com.diagbot.util.EntityUtil;
@@ -26,6 +29,7 @@ import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -41,6 +45,8 @@ public class KlConceptFacade extends KlConceptServiceImpl {
     @Autowired
     private KlDiseaseFacade klDiseaseFacade;
     @Autowired
+    private KlOperationFacade klOperationFacade;
+    @Autowired
     private TcmDiseaseFacade tcmDiseaseFacade;
     @Autowired
     private TcmSyndromeFacade tcmSyndromeFacade;
@@ -61,12 +67,33 @@ public class KlConceptFacade extends KlConceptServiceImpl {
         //type: 类型:1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候
         Integer type = convertType(conceptVO.getType());
 
-        if (conceptVO.getSynonyms() != null && conceptVO.getSynonyms() == 1) {
+        if (conceptVO.getSource().equals(MatchSourceEnum.StandWord.getKey())) {
+            QueryWrapper<KlConcept> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("status", StatusEnum.Enable.getKey())
+                    .in("lib_name", conceptVO.getNames());
+            if (conceptVO.getType().equals(ConceptTypeEnum.Pacs.getKey())) {
+                //辅检同时检索辅检项目和辅检子项
+                queryWrapper.in("lib_type", Arrays.asList(LexiconEnum.PacsName.getKey(), LexiconEnum.PacsSubName.getKey()));
+            } else {
+                queryWrapper.eq("lib_type", type);
+            }
+            List<KlConcept> concepts = this.list(queryWrapper);
+
+            if (ListUtil.isNotEmpty(concepts)) {
+                for (KlConcept concept : concepts) {
+                    IndexBatchDTO dto = new IndexBatchDTO();
+                    dto.setId(concept.getId());
+                    dto.setName(concept.getLibName());
+                    retList.add(dto);
+                }
+            }
+        } else if (conceptVO.getSource().equals(MatchSourceEnum.SynonymsWord.getKey())) {
             QueryWrapper<KlLibraryInfo> queryWrapper = new QueryWrapper<>();
             queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
                     .eq("is_concept", 0)
                     .in("name", conceptVO.getNames());
-            if (conceptVO.getType().equals(3)) {
+            if (conceptVO.getType().equals(ConceptTypeEnum.Pacs.getKey())) {
                 //辅检同时检索辅检项目和辅检子项
                 queryWrapper.in("type_id", Arrays.asList(LexiconEnum.PacsName.getKey(), LexiconEnum.PacsSubName.getKey()));
             } else {
@@ -104,25 +131,83 @@ public class KlConceptFacade extends KlConceptServiceImpl {
                     }
                 }
             }
-        } else {
-            QueryWrapper<KlConcept> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .eq("status", StatusEnum.Enable.getKey())
-                    .in("lib_name", conceptVO.getNames());
-            if (conceptVO.getType().equals(3)) {
-                //辅检同时检索辅检项目和辅检子项
-                queryWrapper.in("lib_type", Arrays.asList(LexiconEnum.PacsName.getKey(), LexiconEnum.PacsSubName.getKey()));
-            } else {
-                queryWrapper.eq("lib_type", type);
+        } else if (conceptVO.getSource().equals(MatchSourceEnum.Code.getKey())) {
+            List<Long> conceptIds = Lists.newArrayList();
+            Map<Long, List<String>> codeMap = new HashMap<>();
+            if (type.equals(LexiconEnum.Disease.getKey())) {
+                List<KlDisease> diseases = klDiseaseFacade.list(new QueryWrapper<KlDisease>()
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .in("icd10_code", conceptVO.getNames()));
+                if (ListUtil.isNotEmpty(diseases)) {
+                    conceptIds = diseases.stream().map(KlDisease::getConceptId).distinct().collect(Collectors.toList());
+                    codeMap = diseases.stream().collect(Collectors.toMap(KlDisease::getConceptId,
+                            v -> {
+                                List<String> codes = Lists.newArrayList();
+                                codes.add(v.getIcd10Code());
+                                return codes;
+                            }));
+                }
+            } else if (type.equals(LexiconEnum.Operation.getKey())) {
+                List<KlOperation> operations = klOperationFacade.list(new QueryWrapper<KlOperation>()
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .in("operation_code", conceptVO.getNames()));
+                if (ListUtil.isNotEmpty(operations)) {
+                    conceptIds = operations.stream().map(KlOperation::getConceptId).distinct().collect(Collectors.toList());
+                    codeMap = operations.stream().collect(Collectors.toMap(KlOperation::getConceptId,
+                            v -> {
+                                List<String> codes = Lists.newArrayList();
+                                codes.add(v.getOperationCode());
+                                return codes;
+                            }));
+                }
+            } else if (type.equals(LexiconEnum.Tcmdisease.getKey())) {
+                List<TcmDisease> tcmDiseases = tcmDiseaseFacade.list(new QueryWrapper<TcmDisease>()
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .in("code", conceptVO.getNames()));
+                if (ListUtil.isNotEmpty(tcmDiseases)) {
+                    conceptIds = tcmDiseases.stream().map(TcmDisease::getConceptId).distinct().collect(Collectors.toList());
+                    codeMap = tcmDiseases.stream().collect(Collectors.toMap(TcmDisease::getConceptId,
+                            v -> {
+                                List<String> codes = Lists.newArrayList();
+                                codes.add(v.getCode());
+                                return codes;
+                            }));
+                }
+            } else if (type.equals(LexiconEnum.Tcmsyndrome.getKey())) {
+                List<TcmSyndrome> tcmSyndromes = tcmSyndromeFacade.list(new QueryWrapper<TcmSyndrome>()
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .in("code", conceptVO.getNames()));
+                if (ListUtil.isNotEmpty(tcmSyndromes)) {
+                    conceptIds = tcmSyndromes.stream().map(TcmSyndrome::getConceptId).distinct().collect(Collectors.toList());
+                    codeMap = tcmSyndromes.stream().collect(Collectors.toMap(TcmSyndrome::getConceptId,
+                            v -> {
+                                List<String> codes = Lists.newArrayList();
+                                codes.add(v.getCode());
+                                return codes;
+                            }));
+                }
             }
-            List<KlConcept> concepts = this.list(queryWrapper);
-
-            if (ListUtil.isNotEmpty(concepts)) {
-                for (KlConcept concept : concepts) {
-                    IndexBatchDTO dto = new IndexBatchDTO();
-                    dto.setId(concept.getId());
-                    dto.setName(concept.getLibName());
-                    retList.add(dto);
+            List<KlConcept> concepts = this.list(new QueryWrapper<KlConcept>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("status", StatusEnum.Enable.getKey())
+                    .in("id", conceptIds));
+            Map<Long, KlConcept> conceptMap
+                    = concepts.stream().collect(Collectors.toMap(KlConcept::getId, v -> v));
+            if (conceptMap != null && conceptMap.size() > 0) {
+                for (Map.Entry<Long, KlConcept> entry : conceptMap.entrySet()) {
+                    KlConcept concept = entry.getValue();
+                    if (codeMap.containsKey(entry.getKey())) {
+                        for (String code : codeMap.get(entry.getKey())) {
+                            if (!conceptVO.getNames().contains(code)) {
+                                continue;
+                            }
+                            IndexBatchDTO indexBatchDTO = new IndexBatchDTO();
+                            indexBatchDTO.setId(concept.getId());
+                            indexBatchDTO.setName(concept.getLibName());
+                            indexBatchDTO.setCode(code);
+                            retList.add(indexBatchDTO);
+                        }
+                    }
                 }
             }
         }
@@ -144,6 +229,18 @@ public class KlConceptFacade extends KlConceptServiceImpl {
                     }
                 }
             }
+        } else if (type.equals(LexiconEnum.Operation.getKey())) {
+            List<KlOperation> operations = klOperationFacade.list(new QueryWrapper<KlOperation>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .in("concept_id", conceptIds));
+            if (ListUtil.isNotEmpty(operations)) {
+                Map<Long, KlOperation> idMap = operations.stream().collect(Collectors.toMap(KlOperation::getConceptId, v -> v));
+                for (IndexBatchDTO dto : retList) {
+                    if (idMap.containsKey(dto.getId())) {
+                        dto.setCode(idMap.get(dto.getId()).getOperationCode());
+                    }
+                }
+            }
         } else if (type.equals(LexiconEnum.Tcmdisease.getKey())) {
             List<TcmDisease> tcmDiseases = tcmDiseaseFacade.list(new QueryWrapper<TcmDisease>()
                     .eq("is_deleted", IsDeleteEnum.N.getKey())

+ 13 - 0
src/main/java/com/diagbot/facade/KlOperationFacade.java

@@ -0,0 +1,13 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.KlOperationServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/6/15 15:07
+ */
+@Component
+public class KlOperationFacade extends KlOperationServiceImpl {
+}

+ 16 - 0
src/main/java/com/diagbot/mapper/KlOperationMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.KlOperation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 手术扩展表 Mapper 接口
+ * </p>
+ *
+ * @author zhaops
+ * @since 2021-06-15
+ */
+public interface KlOperationMapper extends BaseMapper<KlOperation> {
+
+}

+ 16 - 0
src/main/java/com/diagbot/service/KlOperationService.java

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.KlOperation;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 手术扩展表 服务类
+ * </p>
+ *
+ * @author zhaops
+ * @since 2021-06-15
+ */
+public interface KlOperationService extends IService<KlOperation> {
+
+}

+ 20 - 0
src/main/java/com/diagbot/service/impl/KlOperationServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.KlOperation;
+import com.diagbot.mapper.KlOperationMapper;
+import com.diagbot.service.KlOperationService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 手术扩展表 服务实现类
+ * </p>
+ *
+ * @author zhaops
+ * @since 2021-06-15
+ */
+@Service
+public class KlOperationServiceImpl extends ServiceImpl<KlOperationMapper, KlOperation> implements KlOperationService {
+
+}

+ 5 - 1
src/main/java/com/diagbot/vo/ConceptVO.java

@@ -17,5 +17,9 @@ public class ConceptVO {
     private List<String> names;
     @NotNull(message = "请输入术语类型")
     private Integer type;
-    private Integer synonyms;
+    /**
+     * 数据来源(1-标准词、2-同义词、3-编码、4-历史数据、5-相似词、99-数据迁移)
+     */
+    @NotNull(message = "请指定数据来源(1-标准词、2-同义词、3-编码、4-历史数据、5-相似词、99-数据迁移)")
+    private Integer source;
 }

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

@@ -61,7 +61,8 @@ public class RetrievalController {
 
     @ApiOperation(value = "术语批量查询[zhaops]",
             notes = "type: 类型:1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候<br>" +
-                    "names: 术语列表<br>")
+                    "names: 术语列表<br>" +
+                    "source: 数据来源:1-标准词、2-同义词、3-编码、4-历史数据、5-相似词、99-数据迁移<br>")
     @PostMapping("/getConceptNames")
     public RespDTO<List<IndexBatchDTO>> getConceptNames(@Valid @RequestBody ConceptVO conceptVO) {
         List<IndexBatchDTO> data = klConceptFacade.getConceptNames(conceptVO);

+ 19 - 0
src/main/resources/mapper/KlOperationMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.KlOperationMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.KlOperation">
+        <id column="id" property="id" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+        <result column="concept_id" property="conceptId" />
+        <result column="operation_level" property="operationLevel" />
+        <result column="operation_code" property="operationCode" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>