Pārlūkot izejas kodu

Merge branch 'develop' into dev/tcm_20210512

gaodm 4 gadi atpakaļ
vecāks
revīzija
243ed8c04a
42 mainītis faili ar 766 papildinājumiem un 484 dzēšanām
  1. 6 0
      cdssman-service/src/main/java/com/diagbot/dto/KlConceptAllDTO.java
  2. 0 10
      cdssman-service/src/main/java/com/diagbot/dto/KlDiseaseDTO.java
  3. 26 0
      cdssman-service/src/main/java/com/diagbot/dto/KlDrugExportDTO.java
  4. 0 11
      cdssman-service/src/main/java/com/diagbot/dto/KlLisDTO.java
  5. 0 10
      cdssman-service/src/main/java/com/diagbot/dto/KlOperationDTO.java
  6. 0 10
      cdssman-service/src/main/java/com/diagbot/dto/KlPacsDTO.java
  7. 0 10
      cdssman-service/src/main/java/com/diagbot/dto/KlSymptomDTO.java
  8. 27 0
      cdssman-service/src/main/java/com/diagbot/dto/KlTcmDiseaseDTO.java
  9. 23 0
      cdssman-service/src/main/java/com/diagbot/dto/KlTcmSyndromeDTO.java
  10. 0 10
      cdssman-service/src/main/java/com/diagbot/dto/KlVitalResultDTO.java
  11. 69 0
      cdssman-service/src/main/java/com/diagbot/entity/KlTcmDisease.java
  12. 68 0
      cdssman-service/src/main/java/com/diagbot/entity/KlTcmSyndrome.java
  13. 81 16
      cdssman-service/src/main/java/com/diagbot/facade/KlConceptFacade.java
  14. 18 7
      cdssman-service/src/main/java/com/diagbot/facade/KlDrugRegisterFacade.java
  15. 57 0
      cdssman-service/src/main/java/com/diagbot/facade/KlTcmDiseaseFacade.java
  16. 57 0
      cdssman-service/src/main/java/com/diagbot/facade/KlTcmSyndromeFacade.java
  17. 47 0
      cdssman-service/src/main/java/com/diagbot/facade/UserClientFacade.java
  18. 36 63
      cdssman-service/src/main/java/com/diagbot/facade/XLSXCovertCSVReader.java
  19. 16 0
      cdssman-service/src/main/java/com/diagbot/mapper/KlTcmDiseaseMapper.java
  20. 16 0
      cdssman-service/src/main/java/com/diagbot/mapper/KlTcmSyndromeMapper.java
  21. 16 0
      cdssman-service/src/main/java/com/diagbot/service/KlTcmDiseaseService.java
  22. 16 0
      cdssman-service/src/main/java/com/diagbot/service/KlTcmSyndromeService.java
  23. 20 0
      cdssman-service/src/main/java/com/diagbot/service/impl/KlTcmDiseaseServiceImpl.java
  24. 20 0
      cdssman-service/src/main/java/com/diagbot/service/impl/KlTcmSyndromeServiceImpl.java
  25. 0 293
      cdssman-service/src/main/java/com/diagbot/util/ExcelBigUtil.java
  26. 6 0
      cdssman-service/src/main/java/com/diagbot/vo/KlConceptSaveVO.java
  27. 0 5
      cdssman-service/src/main/java/com/diagbot/vo/KlLisVO.java
  28. 0 5
      cdssman-service/src/main/java/com/diagbot/vo/KlOperationVO.java
  29. 0 5
      cdssman-service/src/main/java/com/diagbot/vo/KlPacsVO.java
  30. 22 0
      cdssman-service/src/main/java/com/diagbot/vo/KlTcmDiseaseVO.java
  31. 22 0
      cdssman-service/src/main/java/com/diagbot/vo/KlTcmSyndromeVO.java
  32. 0 5
      cdssman-service/src/main/java/com/diagbot/vo/KlVitalResultVO.java
  33. 27 0
      cdssman-service/src/main/java/com/diagbot/vo/SearchVO.java
  34. 24 12
      cdssman-service/src/main/java/com/diagbot/web/KlConceptController.java
  35. 4 5
      cdssman-service/src/main/java/com/diagbot/web/KlDrugRegisterController.java
  36. 0 1
      cdssman-service/src/main/resources/mapper/KlConceptMapper.xml
  37. 1 1
      cdssman-service/src/main/resources/mapper/KlDrugRegisterMapper.xml
  38. 18 0
      cdssman-service/src/main/resources/mapper/KlTcmDiseaseMapper.xml
  39. 18 0
      cdssman-service/src/main/resources/mapper/KlTcmSyndromeMapper.xml
  40. 1 1
      cdssman-service/src/test/java/com/diagbot/CodeGeneration.java
  41. 1 1
      cdssman-service/src/test/java/com/diagbot/PrintUtil.java
  42. 3 3
      docs/041.20210511知识库扩展/knowledgeExt_init.sql

+ 6 - 0
cdssman-service/src/main/java/com/diagbot/dto/KlConceptAllDTO.java

@@ -49,4 +49,10 @@ public class KlConceptAllDTO {
 
     //体征结果扩展信息
     private KlVitalResultDTO klVitalResultDTO;
+
+    // 中医疾病扩展信息
+    private KlTcmDiseaseDTO klTcmDiseaseDTO;
+
+    // 中医证候扩展信息
+    private KlTcmSyndromeDTO klTcmSyndromeDTO;
 }

+ 0 - 10
cdssman-service/src/main/java/com/diagbot/dto/KlDiseaseDTO.java

@@ -19,11 +19,6 @@ public class KlDiseaseDTO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 术语概念id
-     */
-    private Long conceptId;
-
     /**
      * 科室概念id
      */
@@ -134,11 +129,6 @@ public class KlDiseaseDTO implements Serializable {
      */
     private String enName;
 
-    /**
-     * 备注
-     */
-    private String remark;
-
     /**
      * 肿瘤细胞类型
      */

+ 26 - 0
cdssman-service/src/main/java/com/diagbot/dto/KlDrugExportDTO.java

@@ -0,0 +1,26 @@
+package com.diagbot.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 药品通用名导出
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Data
+public class KlDrugExportDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 注册名称
+     */
+    @Excel(name = "药品通用名", orderNum = "1")
+    private String name;
+}

+ 0 - 11
cdssman-service/src/main/java/com/diagbot/dto/KlLisDTO.java

@@ -20,11 +20,6 @@ public class KlLisDTO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 术语概念id
-     */
-    private Long conceptId;
-
     /**
      * 最小值
      */
@@ -80,10 +75,4 @@ public class KlLisDTO implements Serializable {
      * 英文名称
      */
     private String enName;
-
-    /**
-     * 备注
-     */
-    private String remark;
-
 }

+ 0 - 10
cdssman-service/src/main/java/com/diagbot/dto/KlOperationDTO.java

@@ -20,11 +20,6 @@ public class KlOperationDTO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 术语概念id
-     */
-    private Long conceptId;
-
     /**
      * 手术级别(0,1,2,3,4)
      */
@@ -35,9 +30,4 @@ public class KlOperationDTO implements Serializable {
      */
     private String operationCode;
 
-    /**
-     * 备注
-     */
-    private String remark;
-
 }

+ 0 - 10
cdssman-service/src/main/java/com/diagbot/dto/KlPacsDTO.java

@@ -20,11 +20,6 @@ public class KlPacsDTO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 术语概念id
-     */
-    private Long conceptId;
-
     /**
      * 检查方法
      */
@@ -65,9 +60,4 @@ public class KlPacsDTO implements Serializable {
      */
     private String checkPrepare;
 
-    /**
-     * 备注
-     */
-    private String remark;
-
 }

+ 0 - 10
cdssman-service/src/main/java/com/diagbot/dto/KlSymptomDTO.java

@@ -19,11 +19,6 @@ public class KlSymptomDTO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 术语概念id
-     */
-    private Long conceptId;
-
     /**
      * 阳性症状(0:否,1:是)
      */
@@ -79,11 +74,6 @@ public class KlSymptomDTO implements Serializable {
      */
     private String commonExplain;
 
-    /**
-     * 备注
-     */
-    private String remark;
-
     // 科室列表
     private List<KlConceptSimDTO> deptList = Lists.newLinkedList();
 

+ 27 - 0
cdssman-service/src/main/java/com/diagbot/dto/KlTcmDiseaseDTO.java

@@ -0,0 +1,27 @@
+package com.diagbot.dto;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+;
+
+/**
+ * <p>
+ * 中医疾病
+ * </p>
+ *
+ * @author kwz
+ * @since 2021-05-11
+ */
+@Data
+public class KlTcmDiseaseDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 编码
+     */
+    private String code;
+}

+ 23 - 0
cdssman-service/src/main/java/com/diagbot/dto/KlTcmSyndromeDTO.java

@@ -0,0 +1,23 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+/**
+ * <p>
+ * 中医证候
+ * </p>
+ *
+ * @author kwz
+ * @since 2021-05-11
+ */
+@Data
+public class KlTcmSyndromeDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 编码
+     */
+    private String code;
+}

+ 0 - 10
cdssman-service/src/main/java/com/diagbot/dto/KlVitalResultDTO.java

@@ -22,11 +22,6 @@ public class KlVitalResultDTO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 术语概念id
-     */
-    private Long conceptId;
-
     /**
      * 不适宜人群
      */
@@ -37,11 +32,6 @@ public class KlVitalResultDTO implements Serializable {
      */
     private String checkMethod;
 
-    /**
-     * 备注
-     */
-    private String remark;
-
     // 科室列表
     private List<KlConceptSimDTO> deptList = Lists.newLinkedList();
 

+ 69 - 0
cdssman-service/src/main/java/com/diagbot/entity/KlTcmDisease.java

@@ -0,0 +1,69 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 中医疾病表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-28
+ */
+@Data
+public class KlTcmDisease 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;
+
+    /**
+     * 编码
+     */
+    private String code;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 68 - 0
cdssman-service/src/main/java/com/diagbot/entity/KlTcmSyndrome.java

@@ -0,0 +1,68 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 中医证候表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-28
+ */
+@Data
+public class KlTcmSyndrome 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;
+
+    /**
+     * 编码
+     */
+    private String code;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 81 - 16
cdssman-service/src/main/java/com/diagbot/facade/KlConceptFacade.java

@@ -16,6 +16,7 @@ import com.diagbot.entity.KlConceptCommon;
 import com.diagbot.entity.KlConceptStatic;
 import com.diagbot.entity.KlDiagnose;
 import com.diagbot.entity.KlDiagnoseBase;
+import com.diagbot.entity.KlDrugMapping;
 import com.diagbot.entity.KlLexicon;
 import com.diagbot.entity.KlLibraryInfo;
 import com.diagbot.entity.KlRelation;
@@ -23,6 +24,7 @@ import com.diagbot.entity.KlRule;
 import com.diagbot.entity.KlRuleBase;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.LexiconEnum;
+import com.diagbot.enums.RelationLibTypeEnum;
 import com.diagbot.enums.StatusEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
@@ -44,6 +46,7 @@ import com.diagbot.vo.KlConceptSaveSubVO;
 import com.diagbot.vo.KlConceptSaveVO;
 import com.diagbot.vo.KlLibraryInfoVO;
 import com.diagbot.vo.SearchConceptVO;
+import com.diagbot.vo.SearchVO;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.apache.commons.lang3.StringUtils;
@@ -100,7 +103,10 @@ public class KlConceptFacade extends KlConceptServiceImpl {
     KlVitalResFacade klVitalResFacade;
     @Autowired
     KlDrugMappingFacade klDrugMappingFacade;
-
+    @Autowired
+    KlTcmDiseaseFacade klTcmDiseaseFacade;
+    @Autowired
+    KlTcmSyndromeFacade klTcmSyndromeFacade;
 
     /**
      * @param klConceptInfoVO
@@ -207,6 +213,12 @@ public class KlConceptFacade extends KlConceptServiceImpl {
                 case VitalResult: //体征结果扩展 kl_vital_result, kl_relation,kl_relation_order
                     klVitalResFacade.getKlVitalResult(conceptId, klConceptAll);
                     break;
+                case Tcmdisease: // 中医疾病
+                    klTcmDiseaseFacade.getKlTcmDisease(conceptId, klConceptAll);
+                    break;
+                case Tcmsyndrome: // 中医证候
+                    klTcmSyndromeFacade.getKlTcmSyndrome(conceptId, klConceptAll);
+                    break;
             }
         }
         return klConceptAll;
@@ -343,20 +355,26 @@ public class KlConceptFacade extends KlConceptServiceImpl {
                 case Medicine: //  药品通用名扩展 kl_drug
                     klDrugFacade.saveKlDrug(commonParam, klConceptSaveVO.getKlDrugVO());
                     break;
-                case LisName:
-                case LisSubName:
-                    klLisFacade.saveAll(commonParam,klConceptSaveVO.getKlLisVO());
+                case LisName: // 实验室检查套餐
+                case LisSubName: // 实验室检查子项目
+                    klLisFacade.saveAll(commonParam, klConceptSaveVO.getKlLisVO());
                     break;
-                case PacsSubName:
-                case PacsName:
-                    klPacsFacade.saveAll(commonParam,klConceptSaveVO.getKlPacsVO());
+                case PacsSubName: // 辅助检查子项目
+                case PacsName: // 辅助检查项目
+                    klPacsFacade.saveAll(commonParam, klConceptSaveVO.getKlPacsVO());
                     break;
-                case Operation:
-                    klOperationFacade.saveAll(commonParam,klConceptSaveVO.getKlOperationVO());
+                case Operation: // 手术和操作
+                    klOperationFacade.saveAll(commonParam, klConceptSaveVO.getKlOperationVO());
                     break;
-                case VitalResult:
+                case VitalResult: // 体征结果
                     klRelationFacade.saveKlVitalRes(commonParam, klConceptSaveVO.getKlVitalResultVO());
                     break;
+                case Tcmdisease: // 中医疾病
+                    klTcmDiseaseFacade.saveAll(commonParam, klConceptSaveVO.getKlTcmDiseaseVO());
+                    break;
+                case Tcmsyndrome: // 中医证候
+                    klTcmSyndromeFacade.saveAll(commonParam, klConceptSaveVO.getKlTcmSyndromeVO());
+                    break;
             }
         }
         return res;
@@ -425,6 +443,12 @@ public class KlConceptFacade extends KlConceptServiceImpl {
         return retList;
     }
 
+    /**
+     * 根据类型和名称查找术语,名称和类型不能为空
+     *
+     * @param searchConceptVO
+     * @return
+     */
     public List<GetAllForRelationDTO> searchConceptByNameAndLibType(SearchConceptVO searchConceptVO) {
         List<GetAllForRelationDTO> getAllForRelationDTOS = Lists.newArrayList();
         String name = searchConceptVO.getName();
@@ -451,6 +475,34 @@ public class KlConceptFacade extends KlConceptServiceImpl {
         return getAllForRelationDTOS;
     }
 
+    /**
+     * 根据类型和名称查找术语,名称可为空
+     *
+     * @param SearchVO
+     * @return
+     */
+    public List<GetAllForRelationDTO> searchConceptByNameAndLibType(SearchVO SearchVO) {
+        List<GetAllForRelationDTO> getAllForRelationDTOS = Lists.newArrayList();
+        List<Long> excludedConceptIds = SearchVO.getExcludedConceptIds();
+        List<KlConcept> conceptList = this.list(new QueryWrapper<KlConcept>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("lib_type", SearchVO.getLibType())
+                .eq("status", StatusEnum.Enable.getKey())
+                .like(StringUtil.isNotBlank(SearchVO.getName()), "lib_name", SearchVO.getName())
+                .notIn(ListUtil.isNotEmpty(excludedConceptIds), "id", excludedConceptIds));
+        if (ListUtil.isNotEmpty(conceptList)) {
+            getAllForRelationDTOS = conceptList.stream().map(x -> {
+                GetAllForRelationDTO getAllForRelationDTO = new GetAllForRelationDTO();
+                getAllForRelationDTO.setConceptNameType(x.getLibName());
+                getAllForRelationDTO.setConceptName(x.getLibName());
+                getAllForRelationDTO.setConceptId(x.getId());
+                getAllForRelationDTO.setLibType(x.getLibType());
+                return getAllForRelationDTO;
+            }).collect(Collectors.toList());
+        }
+        return getAllForRelationDTOS;
+    }
+
     /**
      * 筛选符合类型的概念id
      *
@@ -497,11 +549,17 @@ public class KlConceptFacade extends KlConceptServiceImpl {
             }
 
             //kl_relation
-            int relationsum = klRelationFacade.count(new QueryWrapper<KlRelation>().eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .eq("start_id", klConceptSatarOrdisaVO.getConceptId()).or()
-                    .eq("end_id", klConceptSatarOrdisaVO.getConceptId()));
+            List<Integer> notRelationList = Lists.newArrayList(RelationLibTypeEnum.relationDept.getKey(),
+                    RelationLibTypeEnum.relationPart.getKey(), RelationLibTypeEnum.relationSystem.getKey(),
+                    RelationLibTypeEnum.relationAccSymptom.getKey(), RelationLibTypeEnum.relationNature.getKey());
+            int relationsum = klRelationFacade.count(new QueryWrapper<KlRelation>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .and(r -> r.eq("end_id", klConceptSatarOrdisaVO.getConceptId())
+                            .or(r1 -> r1.eq("start_id", klConceptSatarOrdisaVO.getConceptId()).notIn("relation_id", notRelationList))
+                    )
+            );
             if (relationsum > 0) {
-                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该医学标准术语与树形结构或疾病相关存在关系!");
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该医学标准术语与树形结构或疾病相关或扩展信息存在关系!");
             }
             //kl_rule
             int rulesum = klRuleFacade.count(new QueryWrapper<KlRule>().eq("is_deleted", IsDeleteEnum.N.getKey())
@@ -527,12 +585,19 @@ public class KlConceptFacade extends KlConceptServiceImpl {
             if (diagnoseBasesum > 0) {
                 throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该医学标准术语与诊断依据维护明细存在关系!");
             }
+            //kl_drug_mapping
+            int drugMappingSum = klDrugMappingFacade.count(new QueryWrapper<KlDrugMapping>().eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("drug_concept", klConceptSatarOrdisaVO.getConceptId()));
+            if (drugMappingSum > 0) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该医学标准术语与注册药品存在关系!");
+            }
         }
         UpdateWrapper<KlConcept> klLibraryUpdate = new UpdateWrapper<>();
         klLibraryUpdate.eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("id", klConceptSatarOrdisaVO.getConceptId())
-                .set("status", status).set("gmt_modified", now)
-                .set("modifier", UserUtils.getCurrentPrincipleID());
+                .set("status", status).set("gmt_modified", now);
+        // .set("modifier", UserUtils.getCurrentPrincipleID()
+        // );
         return this.update(klLibraryUpdate);
 
     }

+ 18 - 7
cdssman-service/src/main/java/com/diagbot/facade/KlDrugRegisterFacade.java

@@ -3,6 +3,7 @@ package com.diagbot.facade;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.KlConceptSimDTO;
+import com.diagbot.dto.KlDrugExportDTO;
 import com.diagbot.dto.KlDrugRegisterDTO;
 import com.diagbot.entity.CommonParam;
 import com.diagbot.entity.KlConcept;
@@ -17,6 +18,7 @@ import com.diagbot.service.KlDrugRegisterService;
 import com.diagbot.service.impl.KlDrugRegisterServiceImpl;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
+import com.diagbot.util.ExcelUtils;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.UserUtils;
 import com.diagbot.vo.KlDrugMappingGetVO;
@@ -34,6 +36,7 @@ import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -56,6 +59,8 @@ public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
     KlDrugRegisterService klDrugRegisterService;
     @Autowired
     UserFacade userFacade;
+    @Autowired
+    UserClientFacade userClientFacade;
 
     /**
      * 保存或更新
@@ -130,6 +135,9 @@ public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
      */
     public IPage<KlDrugRegisterDTO> getPageFac(KlDrugRegisterPageVO klDrugRegisterPageVO) {
         IPage<KlDrugRegisterDTO> res = this.getPage(klDrugRegisterPageVO);
+
+        // 设置操作人姓名
+        userClientFacade.setUserName(res.getRecords());
         return res;
     }
 
@@ -202,12 +210,11 @@ public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
      * @param file
      * @return
      */
-    public Map importRegister(MultipartFile file) {
+    public void importRegister(MultipartFile file, HttpServletResponse response) {
         Map res = new LinkedMap();
         Long t1 = System.currentTimeMillis();
         List<KlDrugRegisterTestVO> list = XLSXCovertCSVReader.readData(file, "注册药品",
                 30, KlDrugRegisterTestVO.class);
-        // List<KlDrugRegisterTestVO> list = ExcelBigUtil.readData(file, null, 0, KlDrugRegisterTestVO.class);
         Long t2 = System.currentTimeMillis();
         res.put("读取sheet耗时:", (t2 - t1) / 1000.0 + "秒");
         try {
@@ -216,7 +223,7 @@ public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
             Map<String, Long> druMap = klConceptList.stream().collect(Collectors.toMap(k -> k.getLibName(), v -> v.getId(), (r1, r2) -> (r2)));
             List<String> errMsg = Lists.newArrayList();
             List<KlDrugRegister> drugRegisterList = Lists.newLinkedList();
-            int i = 2;
+            // int i = 2;
             for (KlDrugRegisterTestVO  klDrugRegisterTestVO : list) {
                 KlDrugRegister klDrugRegister = new KlDrugRegister();
                 BeanUtil.copyProperties(klDrugRegisterTestVO, klDrugRegister);
@@ -231,15 +238,20 @@ public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
                 // } else if (druMap.get(drugName) == null) {
                 //     errMsg.add(String.format("第%s行【%s】不是标准词", i, drugName));
                 // }
-                i++;
+                // i++;
             }
             if (ListUtil.isNotEmpty(errMsg)) {
                 errMsg = errMsg.stream().distinct().collect(Collectors.toList());
+                List<KlDrugExportDTO> klDrugExportDTOList = Lists.newLinkedList();
                 for (String s : errMsg) {
-                    System.out.println(s);
+                    KlDrugExportDTO klDrugExportDTO = new KlDrugExportDTO();
+                    klDrugExportDTO.setName(s);
+                    klDrugExportDTOList.add(klDrugExportDTO);
                 }
+                ExcelUtils.exportExcel(klDrugExportDTOList, null, "药品通用名", KlDrugExportDTO.class,
+                        "未校验通过的药品通用名", response, 12.8f);
                 res.put("错误", StringUtils.join(errMsg, ";"));
-                return res;
+                return;
             }
             this.remove(new QueryWrapper<KlDrugRegister>()); // 删除主表
             Long t3 = System.currentTimeMillis();
@@ -264,7 +276,6 @@ public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
         }
         Long end = System.currentTimeMillis();
         res.put("总耗时:", (end - t1) / 1000.0 + "秒");
-        return res;
     }
 
     public static void main(String[] args) {

+ 57 - 0
cdssman-service/src/main/java/com/diagbot/facade/KlTcmDiseaseFacade.java

@@ -0,0 +1,57 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.KlConceptAllDTO;
+import com.diagbot.dto.KlTcmDiseaseDTO;
+import com.diagbot.entity.CommonParam;
+import com.diagbot.entity.KlTcmDisease;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.KlTcmDiseaseServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.vo.KlTcmDiseaseVO;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author zhoutg
+ * @Description:
+ * @date 2021-03-18 16:38
+ */
+@Component
+public class KlTcmDiseaseFacade extends KlTcmDiseaseServiceImpl {
+
+    /**
+     * 保存中医疾病扩展表
+     *
+     * @param commonParam
+     * @param klTcmDiseaseVO
+     * @return
+     */
+    public boolean saveAll(CommonParam commonParam, KlTcmDiseaseVO klTcmDiseaseVO) {
+        if (klTcmDiseaseVO == null) {
+            return false;
+        }
+        // 先删除扩展表
+        this.remove(new QueryWrapper<KlTcmDisease>().eq("concept_id", commonParam.getConceptId()));
+        // 重新插入扩展表
+        KlTcmDisease klTcmDisease = new KlTcmDisease();
+        BeanUtil.copyProperties(klTcmDiseaseVO, klTcmDisease);
+        klTcmDisease.setConceptId(commonParam.getConceptId());
+        klTcmDisease.setGmtModified(commonParam.getNow());
+        klTcmDisease.setGmtCreate(commonParam.getNow());
+        klTcmDisease.setCreator(commonParam.getPerson());
+        klTcmDisease.setModifier(commonParam.getPerson());
+        return this.save(klTcmDisease);
+    }
+
+    public void getKlTcmDisease(Long conceptId, KlConceptAllDTO klConceptAll) {
+        KlTcmDisease klTcmDisease = this.getOne(new QueryWrapper<KlTcmDisease>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("concept_id", conceptId), false);
+        if (klTcmDisease == null) {
+            return;
+        }
+        KlTcmDiseaseDTO klTcmDiseaseDTO = new KlTcmDiseaseDTO();
+        BeanUtil.copyProperties(klTcmDisease, klTcmDiseaseDTO);
+        klConceptAll.setKlTcmDiseaseDTO(klTcmDiseaseDTO);
+    }
+}

+ 57 - 0
cdssman-service/src/main/java/com/diagbot/facade/KlTcmSyndromeFacade.java

@@ -0,0 +1,57 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.KlConceptAllDTO;
+import com.diagbot.dto.KlTcmSyndromeDTO;
+import com.diagbot.entity.CommonParam;
+import com.diagbot.entity.KlTcmSyndrome;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.KlTcmSyndromeServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.vo.KlTcmSyndromeVO;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author zhoutg
+ * @Description:
+ * @date 2021-03-18 16:38
+ */
+@Component
+public class KlTcmSyndromeFacade extends KlTcmSyndromeServiceImpl {
+
+    /**
+     * 保存中医症候扩展表
+     *
+     * @param commonParam
+     * @param klTcmSyndromeVO
+     * @return
+     */
+    public boolean saveAll(CommonParam commonParam, KlTcmSyndromeVO klTcmSyndromeVO) {
+        if (klTcmSyndromeVO == null) {
+            return false;
+        }
+        // 先删除扩展表
+        this.remove(new QueryWrapper<KlTcmSyndrome>().eq("concept_id", commonParam.getConceptId()));
+        // 重新插入扩展表
+        KlTcmSyndrome klTcmSyndrome = new KlTcmSyndrome();
+        BeanUtil.copyProperties(klTcmSyndromeVO, klTcmSyndrome);
+        klTcmSyndrome.setConceptId(commonParam.getConceptId());
+        klTcmSyndrome.setGmtModified(commonParam.getNow());
+        klTcmSyndrome.setGmtCreate(commonParam.getNow());
+        klTcmSyndrome.setCreator(commonParam.getPerson());
+        klTcmSyndrome.setModifier(commonParam.getPerson());
+        return this.save(klTcmSyndrome);
+    }
+
+    public void getKlTcmSyndrome(Long conceptId, KlConceptAllDTO klConceptAll) {
+        KlTcmSyndrome KlTcmSyndrome = this.getOne(new QueryWrapper<KlTcmSyndrome>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("concept_id", conceptId), false);
+        if (KlTcmSyndrome == null) {
+            return;
+        }
+        KlTcmSyndromeDTO klTcmSyndromeDTO = new KlTcmSyndromeDTO();
+        BeanUtil.copyProperties(KlTcmSyndrome, klTcmSyndromeDTO);
+        klConceptAll.setKlTcmSyndromeDTO(klTcmSyndromeDTO);
+    }
+}

+ 47 - 0
cdssman-service/src/main/java/com/diagbot/facade/UserClientFacade.java

@@ -0,0 +1,47 @@
+package com.diagbot.facade;
+
+import com.diagbot.client.UserServiceClient;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.ReflectUtil;
+import com.diagbot.util.RespDTOUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @description: 通用方法
+ * @author: zhoutg
+ * @time: 2021/6/3 18:56
+ */
+@Component
+public class UserClientFacade {
+
+    @Autowired
+    UserServiceClient userServiceClient;
+
+    /**
+     * 设置操作人姓名
+     *
+     * @param tList
+     * @param <T>
+     */
+    public <T> void setUserName(List<T> tList) {
+        if (ListUtil.isEmpty(tList)) {
+            return;
+        }
+        List<String> userIdList = ReflectUtil.getPropertyList(tList, "modifier");
+        if (ListUtil.isNotEmpty(userIdList)) {
+            userIdList = userIdList.stream().distinct().collect(Collectors.toList());
+            RespDTO<Map<String, String>> mapRespDTO = userServiceClient.getUserInfoByIds(userIdList);
+            RespDTOUtil.respNGDealCover(mapRespDTO, "获取操作人失败");
+            Map<String, String> data = mapRespDTO.data;
+            for (T t : tList) {
+                ReflectUtil.setFieldValue(t, "modifier", data.get(ReflectUtil.getProperty(t, "modifier")));
+            }
+        }
+    }
+}

+ 36 - 63
cdssman-service/src/main/java/com/diagbot/facade/XLSXCovertCSVReader.java

@@ -1,7 +1,6 @@
 package com.diagbot.facade;
 
 import com.diagbot.entity.Ex;
-import com.diagbot.util.ListUtil;
 import com.diagbot.util.ReflectUtil;
 import com.diagbot.util.StringUtil;
 import com.google.common.collect.Lists;
@@ -107,14 +106,10 @@ public class XLSXCovertCSVReader {
         /**
          * Accepts objects needed while parsing.
          *
-         * @param styles
-         *            Table of styles
-         * @param strings
-         *            Table of shared strings
-         * @param cols
-         *            Minimum number of columns to show
-         * @param target
-         *            Sink for output
+         * @param styles  Table of styles
+         * @param strings Table of shared strings
+         * @param cols    Minimum number of columns to show
+         * @param target  Sink for output
          */
         public MyXSSFSheetHandler(StylesTable styles,
                                   ReadOnlySharedStringsTable strings, int cols, PrintStream target) {
@@ -163,26 +158,27 @@ public class XLSXCovertCSVReader {
                 this.formatString = null;
                 String cellType = attributes.getValue("t");
                 String cellStyleStr = attributes.getValue("s");
-                if ("b".equals(cellType))
+                if ("b".equals(cellType)) {
                     nextDataType = xssfDataType.BOOL;
-                else if ("e".equals(cellType))
+                } else if ("e".equals(cellType)) {
                     nextDataType = xssfDataType.ERROR;
-                else if ("inlineStr".equals(cellType))
+                } else if ("inlineStr".equals(cellType)) {
                     nextDataType = xssfDataType.INLINESTR;
-                else if ("s".equals(cellType))
+                } else if ("s".equals(cellType)) {
                     nextDataType = xssfDataType.SSTINDEX;
-                else if ("str".equals(cellType))
+                } else if ("str".equals(cellType)) {
                     nextDataType = xssfDataType.FORMULA;
-                else if (cellStyleStr != null) {
+                } else if (cellStyleStr != null) {
                     // It's a number, but almost certainly one
                     // with a special style or format
                     int styleIndex = Integer.parseInt(cellStyleStr);
                     XSSFCellStyle style = stylesTable.getStyleAt(styleIndex);
                     this.formatIndex = style.getDataFormat();
                     this.formatString = style.getDataFormatString();
-                    if (this.formatString == null)
+                    if (this.formatString == null) {
                         this.formatString = BuiltinFormats
                                 .getBuiltinFormat(this.formatIndex);
+                    }
                 }
             }
 
@@ -211,20 +207,20 @@ public class XLSXCovertCSVReader {
                         break;
 
                     case ERROR:
-                        thisStr = "\"ERROR:" + value.toString() + '"';
+                        thisStr = "ERROR:" + value.toString();
                         break;
 
                     case FORMULA:
                         // A formula could result in a string value,
                         // so always add double-quote characters.
-                        thisStr = '"' + value.toString() + '"';
+                        thisStr = value.toString();
                         break;
 
                     case INLINESTR:
                         // TODO: have seen an example of this, so it's untested.
                         XSSFRichTextString rtsi = new XSSFRichTextString(
                                 value.toString());
-                        thisStr = '"' + rtsi.toString() + '"';
+                        thisStr = rtsi.toString();
                         break;
 
                     case SSTINDEX:
@@ -233,7 +229,7 @@ public class XLSXCovertCSVReader {
                             int idx = Integer.parseInt(sstIndex);
                             XSSFRichTextString rtss = new XSSFRichTextString(
                                     sharedStringsTable.getEntryAt(idx));
-                            thisStr = '"' + rtss.toString() + '"';
+                            thisStr = rtss.toString();
                         } catch (NumberFormatException ex) {
                             output.println("Failed to parse SST index '" + sstIndex
                                     + "': " + ex.toString());
@@ -245,14 +241,15 @@ public class XLSXCovertCSVReader {
                         // 判断是否是日期格式
                         if (HSSFDateUtil.isADateFormat(this.formatIndex, n)) {
                             Double d = Double.parseDouble(n);
-                            Date date=HSSFDateUtil.getJavaDate(d);
-                            thisStr=formateDateToString(date);
-                        } else if (this.formatString != null)
+                            Date date = HSSFDateUtil.getJavaDate(d);
+                            thisStr = formateDateToString(date);
+                        } else if (this.formatString != null) {
                             thisStr = formatter.formatRawCellContents(
                                     Double.parseDouble(n), this.formatIndex,
                                     this.formatString);
-                        else
+                        } else {
                             thisStr = n;
+                        }
                         break;
 
                     default:
@@ -269,13 +266,17 @@ public class XLSXCovertCSVReader {
                 if (thisStr == null || "".equals(isCellNull)) {
                     isCellNull = true;// 设置单元格是否为空值
                 }
+                // trim()
+                if (thisStr != null) {
+                    thisStr = thisStr.trim();
+                }
                 record[thisColumn] = thisStr;
                 // Update column
-                if (thisColumn > -1)
+                if (thisColumn > -1) {
                     lastColumnNumber = thisColumn;
+                }
 
             } else if ("row".equals(name)) {
-
                 // Print out any missing commas if needed
                 if (minColumns > 0) {
                     // Columns are 0 based
@@ -311,8 +312,9 @@ public class XLSXCovertCSVReader {
          */
         public void characters(char[] ch, int start, int length)
                 throws SAXException {
-            if (vIsOpen)
+            if (vIsOpen) {
                 value.append(ch, start, length);
+            }
         }
 
         /**
@@ -348,12 +350,9 @@ public class XLSXCovertCSVReader {
     /**
      * Creates a new XLSX -> CSV converter
      *
-     * @param pkg
-     *            The XLSX package to process
-     * @param output
-     *            The PrintStream to output the CSV to
-     * @param minColumns
-     *            The minimum number of columns to output, or -1 for no minimum
+     * @param pkg        The XLSX package to process
+     * @param output     The PrintStream to output the CSV to
+     * @param minColumns The minimum number of columns to output, or -1 for no minimum
      */
     public XLSXCovertCSVReader(OPCPackage pkg, PrintStream output,
                                String sheetName, int minColumns) {
@@ -414,25 +413,15 @@ public class XLSXCovertCSVReader {
                 ++index;
             }
         }
-        if (ListUtil.isNotEmpty(list)) {
-            for (String[] arr : list) {
-                for (int i = 0; i < arr.length; i++) {
-                    arr[i] = getObject(arr[i]);
-                }
-            }
-        }
         return list;
     }
 
     /**
      * 读取Excel
      *
-     * @param path
-     *            文件路径
-     * @param sheetName
-     *            sheet名称
-     * @param minColumns
-     *            列总数
+     * @param path       文件路径
+     * @param sheetName  sheet名称
+     * @param minColumns 列总数
      * @return
      * @throws SAXException
      * @throws ParserConfigurationException
@@ -463,7 +452,7 @@ public class XLSXCovertCSVReader {
      * @throws SAXException
      */
     private static List<String[]> readerExcel(InputStream inputStream, String sheetName,
-                                             int minColumns) throws IOException, OpenXML4JException,
+                                              int minColumns) throws IOException, OpenXML4JException,
             ParserConfigurationException, SAXException {
         OPCPackage p = OPCPackage.open(inputStream);
         XLSXCovertCSVReader xlsx2csv = new XLSXCovertCSVReader(p, System.out,
@@ -473,22 +462,6 @@ public class XLSXCovertCSVReader {
         return list;
     }
 
-    /**
-     * 去除前后的""
-     *
-     * @param s
-     * @return
-     */
-    public static String getObject(String s) {
-        if (StringUtil.isBlank(s)) {
-            return s;
-        }
-        if (s.startsWith("\"") && s.endsWith("\"")) {
-            s = s.substring(1, s.length() -1);
-        }
-        return s;
-    }
-
     /**
      * 读取数据
      *

+ 16 - 0
cdssman-service/src/main/java/com/diagbot/mapper/KlTcmDiseaseMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.KlTcmDisease;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 中医疾病表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-28
+ */
+public interface KlTcmDiseaseMapper extends BaseMapper<KlTcmDisease> {
+
+}

+ 16 - 0
cdssman-service/src/main/java/com/diagbot/mapper/KlTcmSyndromeMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.KlTcmSyndrome;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 中医证候表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-28
+ */
+public interface KlTcmSyndromeMapper extends BaseMapper<KlTcmSyndrome> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.KlTcmDisease;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 中医疾病表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-28
+ */
+public interface KlTcmDiseaseService extends IService<KlTcmDisease> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.KlTcmSyndrome;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 中医证候表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-28
+ */
+public interface KlTcmSyndromeService extends IService<KlTcmSyndrome> {
+
+}

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

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.KlTcmDisease;
+import com.diagbot.mapper.KlTcmDiseaseMapper;
+import com.diagbot.service.KlTcmDiseaseService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 中医疾病表 服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-28
+ */
+@Service
+public class KlTcmDiseaseServiceImpl extends ServiceImpl<KlTcmDiseaseMapper, KlTcmDisease> implements KlTcmDiseaseService {
+
+}

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

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.KlTcmSyndrome;
+import com.diagbot.mapper.KlTcmSyndromeMapper;
+import com.diagbot.service.KlTcmSyndromeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 中医证候表 服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-28
+ */
+@Service
+public class KlTcmSyndromeServiceImpl extends ServiceImpl<KlTcmSyndromeMapper, KlTcmSyndrome> implements KlTcmSyndromeService {
+
+}

+ 0 - 293
cdssman-service/src/main/java/com/diagbot/util/ExcelBigUtil.java

@@ -1,293 +0,0 @@
-package com.diagbot.util;
-
-import com.diagbot.entity.Ex;
-import com.diagbot.vo.KlDrugRegisterTestVO;
-import com.google.common.collect.Lists;
-import org.apache.commons.collections4.map.LinkedMap;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.CellType;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @description:
- * @author: zhoutg
- * @time: 2021/5/24 19:58
- */
-public class ExcelBigUtil {
-
-    /**
-     * 读取数据
-     *
-     * @param file
-     * @param sheetName
-     * @param titleNo 标题所在行
-     * @param c
-     * @param <T>
-     * @return
-     */
-    public static <T> List<T> readData(MultipartFile file, String sheetName, int titleNo, Class<T> c) {
-        List<T> list = Lists.newArrayList();
-        try {
-            Sheet sheet = getSheet(file, sheetName);
-            List<String[]> stringList = getListData(sheet, titleNo);
-            return dealData(stringList, c);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return list;
-    }
-
-    /**
-     * 读取数据
-     *
-     * @param path
-     * @param sheetName
-     * @param titleNo
-     * @param c
-     * @param <T>
-     * @return
-     */
-    public static <T> List<T> readData(String path, String sheetName, int titleNo, Class<T> c) {
-        List<T> list = Lists.newArrayList();
-        try {
-            Sheet sheet = getSheet(path, sheetName);
-            List<String[]> stringList = getListData(sheet, titleNo);
-            return dealData(stringList, c);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return list;
-    }
-
-    /**
-     * 获取Sheet
-     *
-     * @param filePath
-     * @param sheetName
-     * @return
-     */
-    private static Sheet getSheet(String filePath, String sheetName) {
-        Sheet sheet = null;
-        FileInputStream fileInputStream = null;
-        try {
-            fileInputStream = new FileInputStream(filePath);
-            XSSFWorkbook sheets = new XSSFWorkbook(fileInputStream);
-            if (StringUtil.isBlank(sheetName)) {
-                sheet = sheets.getSheetAt(0);
-            } else {
-                sheet = sheets.getSheet(sheetName);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return sheet;
-    }
-
-    /**
-     * 获取Sheet
-     *
-     * @param file
-     * @param sheetName
-     * @return
-     */
-    private static Sheet getSheet(MultipartFile file, String sheetName) {
-        Sheet sheet = null;
-        try {
-            // XSSFWorkbook sheets = new XSSFWorkbook(file.getInputStream());
-            Workbook workbook = getWorkBook(file);
-            //获取sheet
-            if (StringUtil.isBlank(sheetName)) {
-                sheet = workbook.getSheetAt(0);
-            } else {
-                sheet = workbook.getSheet(sheetName);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return sheet;
-    }
-
-    /**
-     * 得到Workbook对象
-     * @param file
-     * @return
-     * @throws IOException
-     */
-    public static Workbook getWorkBook(MultipartFile file) throws IOException {
-        //这样写  excel 能兼容03和07
-        InputStream is = file.getInputStream();
-        Workbook hssfWorkbook = null;
-        try {
-            hssfWorkbook = new HSSFWorkbook(is);
-        } catch (Exception ex) {
-            is =file.getInputStream();
-            hssfWorkbook = new XSSFWorkbook(is);
-        }
-        return hssfWorkbook;
-    }
-
-    /**
-     * 将sheet数据放入List
-     *
-     * @param sheet
-     * @param title
-     * @return
-     */
-    private static List<String[]> getListData(Sheet sheet, Integer title) {
-        List<String[]> list = new ArrayList<>();
-        int colLength = sheet.getRow(title).getLastCellNum();
-        for (int j = title; j <= sheet.getLastRowNum(); j++) {
-            Row row = sheet.getRow(j);
-            if (row != null) { // 空行数据
-                String[] str = new String[colLength];
-                for (int i = 0; i < colLength; i++) {
-                    Cell cell = row.getCell(i);
-                    if (cell == null) {
-                        str[i] = null;
-                    } else {
-                        cell.setCellType(CellType.STRING);
-                        str[i] = cell.toString();
-                    }
-                }
-                list.add(str);
-            }
-        }
-        return list;
-    }
-
-    /**
-     * 数据处理
-     *
-     * @param list
-     * @param c
-     * @param <T>
-     * @return
-     */
-    public static <T> List<T> dealData(List<String[]> list, Class<T> c) {
-        List<T> res = Lists.newArrayList();
-        try {
-            // 标题
-            String[] titleRow = list.get(0);
-            Map<Integer, String> colMap = new LinkedMap();
-            for (int i = 0; i < titleRow.length; i++) {
-                if (StringUtil.isBlank(titleRow[i])) {
-                    break;
-                }
-                colMap.put(i, titleRow[i]);
-            }
-            // System.out.println(colMap);
-
-            // 字段映射
-            Field[] fields = c.getDeclaredFields();
-            // 属性和表格列对应
-            Map<String, Map<String, String>> classMap = new LinkedHashMap();
-            for (Field field : fields) {
-                if (field.isAnnotationPresent(Ex.class)) {
-                    Ex annotation = field.getAnnotation(Ex.class);
-                    Map<String, String> propertyMap = new LinkedHashMap<>();
-                    propertyMap.put("field", field.getName());
-                    propertyMap.put("convertType", field.getGenericType().toString());
-                    classMap.put(annotation.name(), propertyMap);
-                }
-                field.getClass();
-            }
-            // System.out.println(classMap);
-
-            // 有效数据读取
-            int rowNum = 1;
-            for (String[] row : list) {
-                if (rowNum++ == 1) {
-                    continue;
-                }
-                T obj = c.newInstance();
-                for (int i = 0; i < row.length; i++) {
-                    if (classMap.get(colMap.get(i)) == null) {
-                        continue;
-                    }
-                    String property = classMap.get(colMap.get(i)).get("field");
-                    String convertType = classMap.get(colMap.get(i)).get("convertType");
-                    // System.out.println(property + ":" + row[i]);
-                    if (StringUtil.isNotBlank(property)) {
-                        Object value = convertValue(row[i], convertType);
-                        if (value != null) {
-                            ReflectUtil.setFieldValue(obj, property, value);
-                        }
-                    }
-                }
-                res.add(obj);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return res;
-    }
-
-    /**
-     * 根据反射转成不同的类型
-     *
-     * @param object
-     * @param convertType
-     * @return
-     */
-    public static Object convertValue(String object, String convertType) {
-        Object res = null;
-        if (object == null) {
-            return null;
-        }
-        try {
-            switch (convertType) {
-                case "class java.lang.Integer":
-                case "int":
-                    res = Integer.parseInt(object);
-                    break;
-                case "class java.lang.Long":
-                case "long":
-                    res = Long.parseLong(object);
-                    break;
-                case "class java.lang.Float":
-                case "float":
-                    res = Float.parseFloat(object);
-                    break;
-                case "class java.lang.Double":
-                case "double":
-                    res = Double.parseDouble(object);
-                    break;
-                case "class java.lang.Boolean":
-                case "boolean":
-                    res = Boolean.parseBoolean(object);
-                    break;
-                case "class java.lang.String":
-                    res = object;
-                    break;
-                default:
-                    res = object;
-                    break;
-            }
-        } catch (Exception e) {
-            // e.printStackTrace();
-            return null;
-        }
-        return res;
-    }
-
-    public static void main(String[] args) {
-        String path = "D:\\newSVN\\2020新版CDSS\\05.其他资料\\数据\\其他数据\\【注册药品导入模板】 - 副本.xlsx";
-        List<KlDrugRegisterTestVO> klDrugRegisterTestVOList = readData(path, null, 0, KlDrugRegisterTestVO.class);
-        System.out.println(klDrugRegisterTestVOList);
-    }
-}
-

+ 6 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlConceptSaveVO.java

@@ -67,4 +67,10 @@ public class KlConceptSaveVO {
     // 体征结果扩展信息
     private KlVitalResultVO klVitalResultVO;
 
+    // 中医疾病表
+    private KlTcmDiseaseVO klTcmDiseaseVO;
+
+    // 中医证候表
+    private KlTcmSyndromeVO klTcmSyndromeVO;
+
 }

+ 0 - 5
cdssman-service/src/main/java/com/diagbot/vo/KlLisVO.java

@@ -19,11 +19,6 @@ public class KlLisVO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 术语概念id
-     */
-    private Long conceptId;
-
     /**
      * 最小值
      */

+ 0 - 5
cdssman-service/src/main/java/com/diagbot/vo/KlOperationVO.java

@@ -20,11 +20,6 @@ public class KlOperationVO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 术语概念id
-     */
-    private Long conceptId;
-
     /**
      * 手术级别(0,1,2,3,4)
      */

+ 0 - 5
cdssman-service/src/main/java/com/diagbot/vo/KlPacsVO.java

@@ -20,11 +20,6 @@ public class KlPacsVO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 术语概念id
-     */
-    private Long conceptId;
-
     /**
      * 检查方法
      */

+ 22 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlTcmDiseaseVO.java

@@ -0,0 +1,22 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 中医疾病表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-28
+ */
+@Data
+public class KlTcmDiseaseVO implements Serializable {
+
+    /**
+     * 编码
+     */
+    private String code;
+}

+ 22 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlTcmSyndromeVO.java

@@ -0,0 +1,22 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 中医证候表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-28
+ */
+@Data
+public class KlTcmSyndromeVO implements Serializable {
+
+    /**
+     * 编码
+     */
+    private String code;
+}

+ 0 - 5
cdssman-service/src/main/java/com/diagbot/vo/KlVitalResultVO.java

@@ -22,11 +22,6 @@ public class KlVitalResultVO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 术语概念id
-     */
-    private Long conceptId;
-
     /**
      * 不适宜人群
      */

+ 27 - 0
cdssman-service/src/main/java/com/diagbot/vo/SearchVO.java

@@ -0,0 +1,27 @@
+package com.diagbot.vo;
+
+import com.google.common.collect.Lists;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @author zhoutg
+ * @date 2021/3/10
+ * @time 12:57
+ */
+@Data
+public class SearchVO {
+
+    @ApiModelProperty(value="名称")
+    private String name;
+
+    @ApiModelProperty(value="词性id")
+    @NotNull(message ="请输入搜索词的词性" )
+    private Integer libType;
+
+    @ApiModelProperty(value="需要排除的概念id集合")
+    private List<Long> excludedConceptIds = Lists.newArrayList();
+}

+ 24 - 12
cdssman-service/src/main/java/com/diagbot/web/KlConceptController.java

@@ -4,6 +4,7 @@ package com.diagbot.web;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.GetAllForRelationDTO;
 import com.diagbot.dto.KlConceptAllDTO;
 import com.diagbot.dto.KlConceptInfoDTO;
 import com.diagbot.dto.RespDTO;
@@ -14,6 +15,7 @@ import com.diagbot.vo.KlConceptClearVO;
 import com.diagbot.vo.KlConceptInfoVO;
 import com.diagbot.vo.KlConceptSatarOrdisaVO;
 import com.diagbot.vo.KlConceptSaveVO;
+import com.diagbot.vo.SearchVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,6 +25,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * <p>
@@ -89,7 +92,6 @@ public class KlConceptController {
                     "nameSimple:简称\n" +
                     "enNameSimple:英文简称\n" +
                     "enName:英文名称\n" +
-                    "remark:备注\n" +
                     "tumorCellType:肿瘤细胞类型\n" +
                     "morphology:形态学分类代码\n" +
                     "deptList:科室列表\n" +
@@ -113,7 +115,6 @@ public class KlConceptController {
                     "preMeasures:预防措施\n" +
                     "foodProhibition:饮食禁忌\n" +
                     "commonExplain:通俗解释\n" +
-                    "remark:备注\n" +
                     "deptList:科室列表\n" +
                     "partList:发病部位列表\n" +
                     "conSymptomList:常见伴随症状列表\n" +
@@ -121,7 +122,6 @@ public class KlConceptController {
 
                     "<br>" +
                     "【klLisVO:化验扩展信息】\n" +
-                    "conceptId:术语概念id\n" +
                     "minValue:最小值\n" +
                     "maxValue:最大值\n" +
                     "type:类型(0:范围内;1:范围外)\n" +
@@ -133,11 +133,9 @@ public class KlConceptController {
                     "qualitative:定性(阴、阳性)\n" +
                     "category:所属类别\n" +
                     "enName:英文名称\n" +
-                    "remark:备注\n" +
 
                     "<br>" +
                     "【klPacsVO:辅检扩展信息】\n" +
-                    "conceptId:术语概念id\n" +
                     "checkMethod:检查方法\n" +
                     "definition:项目定义\n" +
                     "checkObjective:检查目的\n" +
@@ -146,23 +144,26 @@ public class KlConceptController {
                     "interventional:适应症\n" +
                     "emergencySign:危急标识(0:不危急,1:危急)\n" +
                     "checkPrepare:检查前准备\n" +
-                    "remark:备注\n" +
 
                     "<br>" +
                     "【klOperationVO:手术扩展信息】\n" +
-                    "conceptId:术语概念id\n" +
                     "operationLevel:手术级别(0,1,2,3,4)\n" +
                     "operationCode:手术操作码\n" +
-                    "remark:备注\n" +
 
                     "<br>" +
-                    "【klVitalResultVO:体征结果扩展信息】\n"
-                    +"conceptId:术语概念id\n" +
+                    "【klVitalResultVO:体征结果扩展信息】\n" +
                     "suitablePopNo:不适宜人群\n" +
                     "checkMethod:操作方法\n" +
-                    "remark:备注\n" +
                     "deptList:科室列表\n" +
-                    "partList:发病部位"
+                    "partList:发病部位\n" +
+
+                    "<br>" +
+                    "【klTcmDiseaseVO:中医疾病扩展信息】\n" +
+                    "code:编码\n" +
+
+                    "<br>" +
+                    "【klTcmSyndromeVO:中医症候扩展信息】\n" +
+                    "code:编码\n"
                      )
     @PostMapping("/saveConceptInfo")
     @SysLogger("saveConceptInfo")
@@ -191,4 +192,15 @@ public class KlConceptController {
     public RespDTO<Boolean> startRuleInfos(@RequestBody @Valid KlConceptSatarOrdisaVO klConceptSatarOrdisaVO) {
         return RespDTO.onSuc(klConceptFacade.startOrDisableRule(klConceptSatarOrdisaVO,StatusEnum.Enable.getKey()));
     }
+
+    @ApiOperation(value = "根据类型和名称查找术语,名称可为空[by:zhoutg]",
+            notes = "name: 术语的名称<br>" +
+                    "libType: 术语的词性<br>" +
+                    "excludedConceptIds: 需要排除的概念id集合")
+    @PostMapping("/search")
+    @SysLogger("search")
+    public RespDTO<GetAllForRelationDTO> search(@RequestBody SearchVO SearchVO) {
+        List<GetAllForRelationDTO> getAllForRelationDTOS = klConceptFacade.searchConceptByNameAndLibType(SearchVO);
+        return RespDTO.onSuc(getAllForRelationDTOS);
+    }
 }

+ 4 - 5
cdssman-service/src/main/java/com/diagbot/web/KlDrugRegisterController.java

@@ -23,8 +23,8 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
-import java.util.Map;
 
 /**
  * <p>
@@ -74,7 +74,7 @@ public class KlDrugRegisterController {
                     "form:药品剂型\n" +
                     "company:药品企业\n" +
                     "insuranceType:医保类型\n" +
-                    "commonName:药品通用名")
+                    "drugName:药品通用名")
     @PostMapping("/getPage")
     @SysLogger("getPage")
     public RespDTO<IPage<KlDrugRegisterDTO>> getPage(@RequestBody KlDrugRegisterPageVO klDrugRegisterPageVO) {
@@ -112,8 +112,7 @@ public class KlDrugRegisterController {
             notes = "")
     @PostMapping("/importRegister")
     @DSTransactional
-    public RespDTO<Map> importRegister(@RequestParam("file") MultipartFile file) {
-        Map data = klDrugRegisterFacade.importRegister(file);
-        return RespDTO.onSuc(data);
+    public void importRegister(@RequestParam("file") MultipartFile file, HttpServletResponse response) {
+        klDrugRegisterFacade.importRegister(file, response);
     }
 }

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

@@ -134,7 +134,6 @@
         AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
         AND t.is_deleted = 'N'
-        AND a.`status` = 1
         AND t.`status` = 1
         <if test="conceptId!=null and conceptId!=''">
             AND a.id = #{conceptId}

+ 1 - 1
cdssman-service/src/main/resources/mapper/KlDrugRegisterMapper.xml

@@ -28,7 +28,7 @@
     </resultMap>
 
     <select id="getPage" resultType="com.diagbot.dto.KlDrugRegisterDTO">
-        SELECT a.*, c.lib_name commonName FROM `kl_drug_register` a
+        SELECT a.*, c.lib_name drugName FROM `kl_drug_register` a
         left join kl_drug_mapping b on b.register_id = a.id
         left join kl_concept c on c.id = b.drug_concept and c.status = 1
         WHERE a.is_deleted = 'N'

+ 18 - 0
cdssman-service/src/main/resources/mapper/KlTcmDiseaseMapper.xml

@@ -0,0 +1,18 @@
+<?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.KlTcmDiseaseMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.KlTcmDisease">
+        <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="code" property="code" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

+ 18 - 0
cdssman-service/src/main/resources/mapper/KlTcmSyndromeMapper.xml

@@ -0,0 +1,18 @@
+<?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.KlTcmSyndromeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.KlTcmSyndrome">
+        <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="code" property="code" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

+ 1 - 1
cdssman-service/src/test/java/com/diagbot/CodeGeneration.java

@@ -56,7 +56,7 @@ public class CodeGeneration {
         StrategyConfig strategy = new StrategyConfig();
         //strategy.setTablePrefix(new String[] { "test" });// 此处可以修改为您的表前缀
         strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
-        strategy.setInclude(new String[] { "kl_lis","kl_operation","kl_pacs","kl_vital_result"}); // 需要生成的表
+        strategy.setInclude(new String[] { "kl_tcm_disease","kl_tcm_syndrome"}); // 需要生成的表
 
         strategy.setSuperServiceClass(null);
         strategy.setSuperServiceImplClass(null);

+ 1 - 1
cdssman-service/src/test/java/com/diagbot/PrintUtil.java

@@ -85,7 +85,7 @@ public class PrintUtil {
     }
 
     public static void main(String[] args) {
-        String path = "D:\\diagbot\\diagbotcloud\\cdssman-service\\src\\main\\java\\com\\diagbot\\vo\\klSymptomVO.java";
+        String path = "D:\\diagbot\\diagbotcloud\\cdssman-service\\src\\main\\java\\com\\diagbot\\vo\\KlTcmSyndromeVO.java";
         print(path);
     }
 }

+ 3 - 3
docs/041.20210511知识库扩展/knowledgeExt_init.sql

@@ -111,9 +111,9 @@ CREATE TABLE `kl_symptom` (
   `ch_western` TINYINT(4) not null DEFAULT '0' COMMENT '中西医症状(0:通用,1:西,2:中)',
   `mitigating_fac` varchar(255) NOT NULL DEFAULT '' COMMENT '缓解因素',
   `aggravate_fac` varchar(255) NOT NULL DEFAULT '' COMMENT '加重因素',
-  `cause` varchar(255) NOT NULL DEFAULT '' COMMENT '症状起因',
-  `common_dis` varchar(255) NOT NULL DEFAULT '' COMMENT '常见疾病',
-  `pre_measures` varchar(255) NOT NULL DEFAULT '' COMMENT '预防措施',
+  `cause` varchar(1024) NOT NULL DEFAULT '' COMMENT '症状起因',
+  `common_dis` varchar(1024) NOT NULL DEFAULT '' COMMENT '常见疾病',
+  `pre_measures` varchar(1024) NOT NULL DEFAULT '' COMMENT '预防措施',
   `food_prohibition` varchar(1024) not null DEFAULT '' COMMENT '饮食禁忌',
   `common_explain` varchar(255) NOT NULL DEFAULT '' COMMENT '通俗解释',
   `remark` varchar(300) DEFAULT NULL COMMENT '备注',