浏览代码

Merge branch 'dev/knowledgeExt20210511' into dev/tcm_20210512

gaodm 4 年之前
父节点
当前提交
3671d175b9
共有 93 个文件被更改,包括 6219 次插入377 次删除
  1. 21 10
      cdssman-service/src/main/java/com/diagbot/dto/KlConceptAllDTO.java
  2. 35 0
      cdssman-service/src/main/java/com/diagbot/dto/KlConceptSimDTO.java
  3. 161 0
      cdssman-service/src/main/java/com/diagbot/dto/KlDiseaseDTO.java
  4. 26 0
      cdssman-service/src/main/java/com/diagbot/dto/KlDrugDTO.java
  5. 95 0
      cdssman-service/src/main/java/com/diagbot/dto/KlDrugMappingDTO.java
  6. 135 0
      cdssman-service/src/main/java/com/diagbot/dto/KlDrugRegisterDTO.java
  7. 89 0
      cdssman-service/src/main/java/com/diagbot/dto/KlLisDTO.java
  8. 43 0
      cdssman-service/src/main/java/com/diagbot/dto/KlOperationDTO.java
  9. 73 0
      cdssman-service/src/main/java/com/diagbot/dto/KlPacsDTO.java
  10. 99 0
      cdssman-service/src/main/java/com/diagbot/dto/KlSymptomDTO.java
  11. 50 0
      cdssman-service/src/main/java/com/diagbot/dto/KlVitalResultDTO.java
  12. 20 0
      cdssman-service/src/main/java/com/diagbot/entity/CommonParam.java
  13. 19 0
      cdssman-service/src/main/java/com/diagbot/entity/Ex.java
  14. 118 97
      cdssman-service/src/main/java/com/diagbot/entity/KlDisease.java
  15. 73 0
      cdssman-service/src/main/java/com/diagbot/entity/KlDrugMapping.java
  16. 301 0
      cdssman-service/src/main/java/com/diagbot/entity/KlDrugRegister.java
  17. 34 78
      cdssman-service/src/main/java/com/diagbot/entity/KlLis.java
  18. 75 0
      cdssman-service/src/main/java/com/diagbot/entity/KlOperation.java
  19. 128 0
      cdssman-service/src/main/java/com/diagbot/entity/KlPacs.java
  20. 118 0
      cdssman-service/src/main/java/com/diagbot/entity/KlSymptom.java
  21. 75 0
      cdssman-service/src/main/java/com/diagbot/entity/KlVitalResult.java
  22. 50 0
      cdssman-service/src/main/java/com/diagbot/enums/InsertOrUpdateEnum.java
  23. 3 1
      cdssman-service/src/main/java/com/diagbot/enums/LexiconEnum.java
  24. 6 1
      cdssman-service/src/main/java/com/diagbot/enums/RelationLibTypeEnum.java
  25. 112 38
      cdssman-service/src/main/java/com/diagbot/facade/KlConceptFacade.java
  26. 64 57
      cdssman-service/src/main/java/com/diagbot/facade/KlDiseaseFacade.java
  27. 47 49
      cdssman-service/src/main/java/com/diagbot/facade/KlDrugFacade.java
  28. 51 0
      cdssman-service/src/main/java/com/diagbot/facade/KlDrugMappingFacade.java
  29. 273 0
      cdssman-service/src/main/java/com/diagbot/facade/KlDrugRegisterFacade.java
  30. 44 1
      cdssman-service/src/main/java/com/diagbot/facade/KlLisFacade.java
  31. 62 0
      cdssman-service/src/main/java/com/diagbot/facade/KlOperationFacade.java
  32. 70 0
      cdssman-service/src/main/java/com/diagbot/facade/KlPacsFacade.java
  33. 185 0
      cdssman-service/src/main/java/com/diagbot/facade/KlRelationFacade.java
  34. 95 0
      cdssman-service/src/main/java/com/diagbot/facade/KlSymptomFacade.java
  35. 63 0
      cdssman-service/src/main/java/com/diagbot/facade/KlVitalResFacade.java
  36. 646 0
      cdssman-service/src/main/java/com/diagbot/facade/XLSXCovertCSVReader.java
  37. 5 1
      cdssman-service/src/main/java/com/diagbot/mapper/KlConceptMapper.java
  38. 16 0
      cdssman-service/src/main/java/com/diagbot/mapper/KlDrugMappingMapper.java
  39. 32 0
      cdssman-service/src/main/java/com/diagbot/mapper/KlDrugRegisterMapper.java
  40. 16 0
      cdssman-service/src/main/java/com/diagbot/mapper/KlOperationMapper.java
  41. 16 0
      cdssman-service/src/main/java/com/diagbot/mapper/KlPacsMapper.java
  42. 16 0
      cdssman-service/src/main/java/com/diagbot/mapper/KlSymptomMapper.java
  43. 16 0
      cdssman-service/src/main/java/com/diagbot/mapper/KlVitalResultMapper.java
  44. 5 2
      cdssman-service/src/main/java/com/diagbot/service/KlConceptService.java
  45. 16 0
      cdssman-service/src/main/java/com/diagbot/service/KlDrugMappingService.java
  46. 32 0
      cdssman-service/src/main/java/com/diagbot/service/KlDrugRegisterService.java
  47. 16 0
      cdssman-service/src/main/java/com/diagbot/service/KlOperationService.java
  48. 16 0
      cdssman-service/src/main/java/com/diagbot/service/KlPacsService.java
  49. 16 0
      cdssman-service/src/main/java/com/diagbot/service/KlSymptomService.java
  50. 16 0
      cdssman-service/src/main/java/com/diagbot/service/KlVitalResultService.java
  51. 7 0
      cdssman-service/src/main/java/com/diagbot/service/impl/KlConceptServiceImpl.java
  52. 22 0
      cdssman-service/src/main/java/com/diagbot/service/impl/KlDrugMappingServiceImpl.java
  53. 50 0
      cdssman-service/src/main/java/com/diagbot/service/impl/KlDrugRegisterServiceImpl.java
  54. 20 0
      cdssman-service/src/main/java/com/diagbot/service/impl/KlOperationServiceImpl.java
  55. 20 0
      cdssman-service/src/main/java/com/diagbot/service/impl/KlPacsServiceImpl.java
  56. 22 0
      cdssman-service/src/main/java/com/diagbot/service/impl/KlSymptomServiceImpl.java
  57. 20 0
      cdssman-service/src/main/java/com/diagbot/service/impl/KlVitalResultServiceImpl.java
  58. 293 0
      cdssman-service/src/main/java/com/diagbot/util/ExcelBigUtil.java
  59. 127 0
      cdssman-service/src/main/java/com/diagbot/util/ReflectUtil.java
  60. 17 0
      cdssman-service/src/main/java/com/diagbot/vo/ConceptRelationVO.java
  61. 18 0
      cdssman-service/src/main/java/com/diagbot/vo/ImportVO.java
  62. 6 5
      cdssman-service/src/main/java/com/diagbot/vo/KlConceptAllVO.java
  63. 32 7
      cdssman-service/src/main/java/com/diagbot/vo/KlConceptSaveVO.java
  64. 152 0
      cdssman-service/src/main/java/com/diagbot/vo/KlDiseaseVO.java
  65. 29 0
      cdssman-service/src/main/java/com/diagbot/vo/KlDrugMappingGetVO.java
  66. 24 0
      cdssman-service/src/main/java/com/diagbot/vo/KlDrugRegisterDelVO.java
  67. 24 0
      cdssman-service/src/main/java/com/diagbot/vo/KlDrugRegisterGetVO.java
  68. 66 0
      cdssman-service/src/main/java/com/diagbot/vo/KlDrugRegisterImportExVO.java
  69. 99 0
      cdssman-service/src/main/java/com/diagbot/vo/KlDrugRegisterPageVO.java
  70. 104 0
      cdssman-service/src/main/java/com/diagbot/vo/KlDrugRegisterSaveVO.java
  71. 71 0
      cdssman-service/src/main/java/com/diagbot/vo/KlDrugRegisterTestVO.java
  72. 24 0
      cdssman-service/src/main/java/com/diagbot/vo/KlDrugSearchVO.java
  73. 26 0
      cdssman-service/src/main/java/com/diagbot/vo/KlDrugVO.java
  74. 88 0
      cdssman-service/src/main/java/com/diagbot/vo/KlLisVO.java
  75. 43 0
      cdssman-service/src/main/java/com/diagbot/vo/KlOperationVO.java
  76. 73 0
      cdssman-service/src/main/java/com/diagbot/vo/KlPacsVO.java
  77. 93 0
      cdssman-service/src/main/java/com/diagbot/vo/KlSymptomVO.java
  78. 50 0
      cdssman-service/src/main/java/com/diagbot/vo/KlVitalResultVO.java
  79. 112 6
      cdssman-service/src/main/java/com/diagbot/web/KlConceptController.java
  80. 119 0
      cdssman-service/src/main/java/com/diagbot/web/KlDrugRegisterController.java
  81. 32 12
      cdssman-service/src/main/resources/mapper/KlConceptMapper.xml
  82. 33 10
      cdssman-service/src/main/resources/mapper/KlDiseaseMapper.xml
  83. 19 0
      cdssman-service/src/main/resources/mapper/KlDrugMappingMapper.xml
  84. 111 0
      cdssman-service/src/main/resources/mapper/KlDrugRegisterMapper.xml
  85. 7 0
      cdssman-service/src/main/resources/mapper/KlLisMapper.xml
  86. 19 0
      cdssman-service/src/main/resources/mapper/KlOperationMapper.xml
  87. 25 0
      cdssman-service/src/main/resources/mapper/KlPacsMapper.xml
  88. 28 0
      cdssman-service/src/main/resources/mapper/KlSymptomMapper.xml
  89. 19 0
      cdssman-service/src/main/resources/mapper/KlVitalResultMapper.xml
  90. 2 2
      cdssman-service/src/test/java/com/diagbot/CodeGeneration.java
  91. 91 0
      cdssman-service/src/test/java/com/diagbot/PrintUtil.java
  92. 185 0
      docs/041.20210511知识库扩展/knowledgeExt_init.sql
  93. 4 0
      docs/041.20210511知识库扩展/user_init.sql

+ 21 - 10
cdssman-service/src/main/java/com/diagbot/dto/KlConceptAllDTO.java

@@ -1,7 +1,5 @@
 package com.diagbot.dto;
 
-import com.diagbot.vo.KlConceptSaveSubVO;
-import io.swagger.models.auth.In;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -28,14 +26,27 @@ public class KlConceptAllDTO {
     private Integer isHasCommon;
     private Double minAge;
     private Double maxAge;
-    private Double minVal;
-    private Double maxVal;
-    private String unit;
-    private Integer scopeType;
-    private String  icdCode;
     private String remark;
-    private Integer drug;
-    private Long deptId;
-    private String deptName;
     private List<KlConceptAllSubDTO> klConceptSub;
+
+    // 疾病扩展信息
+    private KlDiseaseDTO klDiseaseDTO;
+
+    // 药品扩展信息
+    private KlDrugDTO klDrugDTO;
+
+    // 症状扩展信息
+    private KlSymptomDTO klSymptomDTO;
+
+    //化验扩展信息
+    private KlLisDTO klLisDTO;
+
+    //辅检扩展信息
+    private KlPacsDTO klPacsDTO;
+
+    //手术扩展信息
+    private KlOperationDTO klOperationDTO;
+
+    //体征结果扩展信息
+    private KlVitalResultDTO klVitalResultDTO;
 }

+ 35 - 0
cdssman-service/src/main/java/com/diagbot/dto/KlConceptSimDTO.java

@@ -0,0 +1,35 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 概念表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-03-01
+ */
+@Data
+public class KlConceptSimDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键,概念id
+     */
+    private Long id;
+
+    /**
+     * 概念名称(冗余)
+     */
+    private String libName;
+
+    /**
+     * 概念词性type(冗余)
+     */
+    private Integer libType;
+
+}

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

@@ -0,0 +1,161 @@
+package com.diagbot.dto;
+
+import com.google.common.collect.Lists;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * 疾病表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Data
+public class KlDiseaseDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 术语概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 科室概念id
+     */
+    private Long deptId;
+
+    /**
+     * ICD10编号
+     */
+    private String icd10Code;
+
+    /**
+     * 病程
+     */
+    private String course;
+
+    /**
+     * 诱因
+     */
+    private String inducement;
+
+    /**
+     * 饮食禁忌
+     */
+    private String foodProhibition;
+
+    /**
+     * 危险因素
+     */
+    private String hazard;
+
+    /**
+     * 治愈性
+     */
+    private String healing;
+
+    /**
+     * 危害性
+     */
+    private String pernicious;
+
+    /**
+     * 临床分类
+     */
+    private String clinicType;
+
+    /**
+     * 好发地区
+     */
+    private String vulArea;
+
+    /**
+     * 好发人群
+     */
+    private String vulCrowd;
+
+    /**
+     * 发病率
+     */
+    private Double incidence;
+
+    /**
+     * 是否传染(0:否,1:是)
+     */
+    private Integer isInfect;
+
+    /**
+     * 并发症
+     */
+    private String complication;
+
+    /**
+     * 病因
+     */
+    private String pathogeny;
+
+    /**
+     * 疾病分型
+     */
+    private String disType;
+
+    /**
+     * 中西医疾病(0:通用,1:西,2:中)
+     */
+    private Integer chWestern;
+
+    /**
+     * 是否常见病(0:否,1:是)
+     */
+    private Integer isCommonDis;
+
+    /**
+     * 是否遗传(0:否,1:是)
+     */
+    private Integer isHeredity;
+
+    /**
+     * 简称
+     */
+    private String nameSimple;
+
+    /**
+     * 英文简称
+     */
+    private String enNameSimple;
+
+    /**
+     * 英文名称
+     */
+    private String enName;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 肿瘤细胞类型
+     */
+    private String tumorCellType;
+
+    /**
+     * 形态学分类代码
+     */
+    private String morphology;
+
+    // 科室列表
+    private List<KlConceptSimDTO> deptList = Lists.newLinkedList();
+
+    // 部位列表
+    private List<KlConceptSimDTO> partList = Lists.newLinkedList();
+
+    // 疾病系统分类列表
+    private List<KlConceptSimDTO> systemTypeList = Lists.newLinkedList();
+
+}

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

@@ -0,0 +1,26 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 药品
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Data
+public class KlDrugDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    // 药品类别(0:西药,1:中成药)
+    private Integer drug;
+
+    // 通用药品名关联注册药品
+    // private List<KlDrugMappingDTO> klDrugMappingDTOList = Lists.newLinkedList();
+
+}

+ 95 - 0
cdssman-service/src/main/java/com/diagbot/dto/KlDrugMappingDTO.java

@@ -0,0 +1,95 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 药品注册表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Data
+public class KlDrugMappingDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 药品代码
+     */
+    private String drugCode;
+
+    /**
+     * 注册名称
+     */
+    private String name;
+
+    /**
+     * 英文名称
+     */
+    private String enName;
+
+    /**
+     * 商品名称
+     */
+    private String tradeName;
+
+    /**
+     * 药品剂型
+     */
+    private String form;
+
+    /**
+     * 注册规格
+     */
+    private String specification;
+
+    /**
+     * 最小包装数量
+     */
+    private String minPackQuantity;
+
+    /**
+     * 最小包装单位
+     */
+    private String minPackUnit;
+
+    /**
+     * 药品企业
+     */
+    private String company;
+
+    /**
+     * 批准文号
+     */
+    private String approval;
+
+    /**
+     * 药品本位码
+     */
+    private String standardCode;
+
+    /**
+     * 医保类型
+     */
+    private String insuranceType;
+
+    /**
+     * 医保备注
+     */
+    private String insuranceRemrk;
+
+    /**
+     * 药品类别
+     */
+    private String drugType;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 135 - 0
cdssman-service/src/main/java/com/diagbot/dto/KlDrugRegisterDTO.java

@@ -0,0 +1,135 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 药品注册表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Data
+public class KlDrugRegisterDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 药品代码
+     */
+    private String drugCode;
+
+    /**
+     * 注册名称
+     */
+    private String name;
+
+    /**
+     * 英文名称
+     */
+    private String enName;
+
+    /**
+     * 商品名称
+     */
+    private String tradeName;
+
+    /**
+     * 药品剂型
+     */
+    private String form;
+
+    /**
+     * 注册规格
+     */
+    private String specification;
+
+    /**
+     * 最小包装数量
+     */
+    private String minPackQuantity;
+
+    /**
+     * 最小包装单位
+     */
+    private String minPackUnit;
+
+    /**
+     * 药品企业
+     */
+    private String company;
+
+    /**
+     * 批准文号
+     */
+    private String approval;
+
+    /**
+     * 药品本位码
+     */
+    private String standardCode;
+
+    /**
+     * 医保类型
+     */
+    private String insuranceType;
+
+    /**
+     * 医保备注
+     */
+    private String insuranceRemrk;
+
+    /**
+     * 药品类别
+     */
+    private String drugType;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 药品通用名
+     */
+    private Long drugConceptId;
+
+    /**
+     * 药品通用名
+     */
+    private String drugName;
+}

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

@@ -0,0 +1,89 @@
+package com.diagbot.dto;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+;
+
+/**
+ * <p>
+ * 化验表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Data
+public class KlLisDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 术语概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 最小值
+     */
+    private Double minValue;
+
+    /**
+     * 最大值
+     */
+    private Double maxValue;
+
+    /**
+     * 类型(0:范围内;1:范围外)
+     */
+    private Integer type;
+
+    /**
+     * 单位概念id
+     */
+
+    private String unit;
+
+    /**
+     * 检查标本
+     */
+    private String checkSpecimen;
+
+    /**
+     * 检查方法
+     */
+    private String checkMethod;
+
+    /**
+     * 影响因素
+     */
+    private String influenceFac;
+
+    /**
+     * 临床意义
+     */
+    private String clinicalSig;
+
+    /**
+     * 定性(阴、阳性)
+     */
+    private String qualitative;
+
+    /**
+     * 所属类别
+     */
+    private String category;
+
+    /**
+     * 英文名称
+     */
+    private String enName;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

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

@@ -0,0 +1,43 @@
+package com.diagbot.dto;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+;
+
+/**
+ * <p>
+ * 手术表
+ * </p>
+ *
+ * @author kwz
+ * @since 2021-05-11
+ */
+@Data
+public class KlOperationDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 术语概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 手术级别(0,1,2,3,4)
+     */
+    private Integer operationLevel;
+
+    /**
+     * 手术操作码
+     */
+    private String operationCode;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

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

@@ -0,0 +1,73 @@
+package com.diagbot.dto;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+;
+
+/**
+ * <p>
+ * 辅检表
+ * </p>
+ *
+ * @author kwz
+ * @since 2021-05-11
+ */
+@Data
+public class KlPacsDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 术语概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 检查方法
+     */
+    private String checkMethod;
+
+    /**
+     * 项目定义
+     */
+    private String definition;
+
+    /**
+     * 检查目的
+     */
+    private String checkObjective;
+
+    /**
+     * 检查技术
+     */
+    private String checkSkillful;
+
+    /**
+     * 禁忌症和局限性
+     */
+    private String condLimit;
+
+    /**
+     * 适应症
+     */
+    private String interventional;
+
+    /**
+     * 危急标识(0:不危急,1:危急)
+     */
+    private Integer emergencySign;
+
+    /**
+     * 检查前准备
+     */
+    private String checkPrepare;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

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

@@ -0,0 +1,99 @@
+package com.diagbot.dto;
+
+import com.google.common.collect.Lists;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * 症状扩展表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-12
+ */
+@Data
+public class KlSymptomDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 术语概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 阳性症状(0:否,1:是)
+     */
+    private Integer isPositive;
+
+    /**
+     * 英文名称
+     */
+    private String enName;
+
+    /**
+     * 定义
+     */
+    private String definition;
+
+    /**
+     * 中西医症状(0:通用,1:西,2:中)
+     */
+    private Integer chWestern;
+
+    /**
+     * 缓解因素
+     */
+    private String mitigatingFac;
+
+    /**
+     * 加重因素
+     */
+    private String aggravateFac;
+
+    /**
+     * 症状起因
+     */
+    private String cause;
+
+    /**
+     * 常见疾病
+     */
+    private String commonDis;
+
+    /**
+     * 预防措施
+     */
+    private String preMeasures;
+
+    /**
+     * 饮食禁忌
+     */
+    private String foodProhibition;
+
+    /**
+     * 通俗解释
+     */
+    private String commonExplain;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    // 科室列表
+    private List<KlConceptSimDTO> deptList = Lists.newLinkedList();
+
+    // 部位列表
+    private List<KlConceptSimDTO> partList = Lists.newLinkedList();
+
+    // 常见伴随症状列表
+    private List<KlConceptSimDTO> conSymptomList = Lists.newLinkedList();
+
+    // 性质列表
+    private List<KlConceptSimDTO> natureList = Lists.newLinkedList();
+
+}

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

@@ -0,0 +1,50 @@
+package com.diagbot.dto;
+
+
+import com.google.common.collect.Lists;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+;
+
+/**
+ * <p>
+ * 手术表
+ * </p>
+ *
+ * @author kwz
+ * @since 2021-05-11
+ */
+@Data
+public class KlVitalResultDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 术语概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 不适宜人群
+     */
+    private String suitablePopNo;
+
+    /**
+     * 操作方法
+     */
+    private String checkMethod;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    // 科室列表
+    private List<KlConceptSimDTO> deptList = Lists.newLinkedList();
+
+    // 部位列表
+    private List<KlConceptSimDTO> partList = Lists.newLinkedList();
+}

+ 20 - 0
cdssman-service/src/main/java/com/diagbot/entity/CommonParam.java

@@ -0,0 +1,20 @@
+package com.diagbot.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * @Description:
+ * @Author: ztg
+ * @Date: 2018/12/14 14:15
+ */
+@Getter
+@Setter
+public class CommonParam {
+    private String person;     //操作人
+    private Date now;          //当前时间
+    private Long conceptId;    //conceptId
+    private int insertOrUpdate;//更新或新增标识
+}

+ 19 - 0
cdssman-service/src/main/java/com/diagbot/entity/Ex.java

@@ -0,0 +1,19 @@
+package com.diagbot.entity;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @description:
+ * @author: zhoutg
+ * @time: 2021/5/21 13:49
+ */
+@Target(value = { ElementType.TYPE, ElementType.FIELD })
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Ex {
+    public String name();
+}

+ 118 - 97
cdssman-service/src/main/java/com/diagbot/entity/KlDisease.java

@@ -2,6 +2,7 @@ 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;
@@ -11,9 +12,10 @@ import java.util.Date;
  * 疾病表
  * </p>
  *
- * @author wangfeng
- * @since 2021-03-01
+ * @author zhoutg
+ * @since 2021-05-11
  */
+@Data
 public class KlDisease implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -54,109 +56,128 @@ public class KlDisease implements Serializable {
      */
     private Long conceptId;
 
+    /**
+     * 科室概念id
+     */
     private Long deptId;
+
     /**
      * ICD10编号
      */
     private String icd10Code;
 
+    /**
+     * 病程
+     */
+    private String course;
+
+    /**
+     * 诱因
+     */
+    private String inducement;
+
+    /**
+     * 饮食禁忌
+     */
+    private String foodProhibition;
+
+    /**
+     * 危险因素
+     */
+    private String hazard;
+
+    /**
+     * 治愈性
+     */
+    private String healing;
+
+    /**
+     * 危害性
+     */
+    private String pernicious;
+
+    /**
+     * 临床分类
+     */
+    private String clinicType;
+
+    /**
+     * 好发地区
+     */
+    private String vulArea;
+
+    /**
+     * 好发人群
+     */
+    private String vulCrowd;
+
+    /**
+     * 发病率
+     */
+    private Double incidence;
+
+    /**
+     * 是否传染(0:否,1:是)
+     */
+    private Integer isInfect;
+
+    /**
+     * 并发症
+     */
+    private String complication;
+
+    /**
+     * 病因
+     */
+    private String pathogeny;
+
+    /**
+     * 疾病分型
+     */
+    private String disType;
+
+    /**
+     * 中西医疾病(0:通用,1:西,2:中)
+     */
+    private Integer chWestern;
+
+    /**
+     * 是否常见病(0:否,1:是)
+     */
+    private Integer isCommonDis;
+
+    /**
+     * 是否遗传(0:否,1:是)
+     */
+    private Integer isHeredity;
+
+    /**
+     * 简称
+     */
+    private String nameSimple;
+
+    /**
+     * 英文简称
+     */
+    private String enNameSimple;
+
+    /**
+     * 英文名称
+     */
+    private String enName;
+
+    /**
+     * 肿瘤细胞类型
+     */
+    private String tumorCellType;
+
+    /**
+     * 形态学分类代码
+     */
+    private String morphology;
+
     /**
      * 备注
      */
     private String remark;
-
-    public Long getDeptId() {
-        return deptId;
-    }
-
-    public void setDeptId(Long deptId) {
-        this.deptId = deptId;
-    }
-
-    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 String getIcd10Code() {
-        return icd10Code;
-    }
-
-    public void setIcd10Code(String icd10Code) {
-        this.icd10Code = icd10Code;
-    }
-
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
-    @Override
-    public String toString() {
-        return "KlDisease{" +
-                "id=" + id +
-                ", isDeleted=" + isDeleted +
-                ", gmtCreate=" + gmtCreate +
-                ", gmtModified=" + gmtModified +
-                ", creator=" + creator +
-                ", modifier=" + modifier +
-                ", conceptId=" + conceptId +
-                ", icd10Code=" + icd10Code +
-                ", remark=" + remark +
-                "}";
-    }
 }

+ 73 - 0
cdssman-service/src/main/java/com/diagbot/entity/KlDrugMapping.java

@@ -0,0 +1,73 @@
+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-11
+ */
+@Data
+public class KlDrugMapping 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;
+
+    /**
+     * 药品通用名conceptId
+     */
+    private Long drugConcept;
+
+    /**
+     * 药品注册名Id
+     */
+    private Long registerId;
+
+    /**
+     * 顺序号
+     */
+    private Integer orderNo;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 301 - 0
cdssman-service/src/main/java/com/diagbot/entity/KlDrugRegister.java

@@ -0,0 +1,301 @@
+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 zhoutg
+ * @since 2021-05-11
+ */
+public class KlDrugRegister 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;
+
+    /**
+     * 药品代码
+     */
+    private String drugCode;
+
+    /**
+     * 注册名称
+     */
+    private String name;
+
+    /**
+     * 英文名称
+     */
+    private String enName;
+
+    /**
+     * 商品名称
+     */
+    private String tradeName;
+
+    /**
+     * 药品剂型
+     */
+    private String form;
+
+    /**
+     * 注册规格
+     */
+    private String specification;
+
+    /**
+     * 最小包装数量
+     */
+    private String minPackQuantity;
+
+    /**
+     * 最小包装单位
+     */
+    private String minPackUnit;
+
+    /**
+     * 药品企业
+     */
+    private String company;
+
+    /**
+     * 批准文号
+     */
+    private String approval;
+
+    /**
+     * 药品本位码
+     */
+    private String standardCode;
+
+    /**
+     * 医保类型
+     */
+    private String insuranceType;
+
+    /**
+     * 医保备注
+     */
+    private String insuranceRemrk;
+
+    /**
+     * 药品类别
+     */
+    private String drugType;
+
+    /**
+     * 备注
+     */
+    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 String getDrugCode() {
+        return drugCode;
+    }
+
+    public void setDrugCode(String drugCode) {
+        this.drugCode = drugCode;
+    }
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+    public String getEnName() {
+        return enName;
+    }
+
+    public void setEnName(String enName) {
+        this.enName = enName;
+    }
+    public String getTradeName() {
+        return tradeName;
+    }
+
+    public void setTradeName(String tradeName) {
+        this.tradeName = tradeName;
+    }
+    public String getForm() {
+        return form;
+    }
+
+    public void setForm(String form) {
+        this.form = form;
+    }
+    public String getSpecification() {
+        return specification;
+    }
+
+    public void setSpecification(String specification) {
+        this.specification = specification;
+    }
+    public String getMinPackQuantity() {
+        return minPackQuantity;
+    }
+
+    public void setMinPackQuantity(String minPackQuantity) {
+        this.minPackQuantity = minPackQuantity;
+    }
+    public String getMinPackUnit() {
+        return minPackUnit;
+    }
+
+    public void setMinPackUnit(String minPackUnit) {
+        this.minPackUnit = minPackUnit;
+    }
+    public String getCompany() {
+        return company;
+    }
+
+    public void setCompany(String company) {
+        this.company = company;
+    }
+    public String getApproval() {
+        return approval;
+    }
+
+    public void setApproval(String approval) {
+        this.approval = approval;
+    }
+    public String getStandardCode() {
+        return standardCode;
+    }
+
+    public void setStandardCode(String standardCode) {
+        this.standardCode = standardCode;
+    }
+    public String getInsuranceType() {
+        return insuranceType;
+    }
+
+    public void setInsuranceType(String insuranceType) {
+        this.insuranceType = insuranceType;
+    }
+    public String getInsuranceRemrk() {
+        return insuranceRemrk;
+    }
+
+    public void setInsuranceRemrk(String insuranceRemrk) {
+        this.insuranceRemrk = insuranceRemrk;
+    }
+    public String getDrugType() {
+        return drugType;
+    }
+
+    public void setDrugType(String drugType) {
+        this.drugType = drugType;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "KlDrugRegister{" +
+            "id=" + id +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+            ", drugCode=" + drugCode +
+            ", name=" + name +
+            ", enName=" + enName +
+            ", tradeName=" + tradeName +
+            ", form=" + form +
+            ", specification=" + specification +
+            ", minPackQuantity=" + minPackQuantity +
+            ", minPackUnit=" + minPackUnit +
+            ", company=" + company +
+            ", approval=" + approval +
+            ", standardCode=" + standardCode +
+            ", insuranceType=" + insuranceType +
+            ", insuranceRemrk=" + insuranceRemrk +
+            ", drugType=" + drugType +
+            ", remark=" + remark +
+        "}";
+    }
+}

+ 34 - 78
cdssman-service/src/main/java/com/diagbot/entity/KlLis.java

@@ -2,6 +2,8 @@ package com.diagbot.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -14,6 +16,8 @@ import java.util.Date;
  * @author wangfeng
  * @since 2021-03-01
  */
+@Setter
+@Getter
 public class KlLis implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -76,94 +80,46 @@ public class KlLis implements Serializable {
     private String unit;
 
     /**
-     * 备注
+     * 检查标本
      */
-    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;
-    }
+    private String checkSpecimen;
 
-    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;
-    }
+    /**
+     * 检查方法
+     */
+    private String checkMethod;
 
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-    public String getModifier() {
-        return modifier;
-    }
+    /**
+     * 影响因素
+     */
+    private String influenceFac;
 
-    public void setModifier(String modifier) {
-        this.modifier = modifier;
-    }
-    public Long getConceptId() {
-        return conceptId;
-    }
+    /**
+     * 临床意义
+     */
+    private String clinicalSig;
 
-    public void setConceptId(Long conceptId) {
-        this.conceptId = conceptId;
-    }
-    public Double getMinValue() {
-        return minValue;
-    }
+    /**
+     * 定性(阴、阳性)
+     */
+    private String qualitative;
 
-    public void setMinValue(Double minValue) {
-        this.minValue = minValue;
-    }
-    public Double getMaxValue() {
-        return maxValue;
-    }
+    /**
+     * 所属类别
+     */
+    private String category;
 
-    public void setMaxValue(Double maxValue) {
-        this.maxValue = maxValue;
-    }
-    public Integer getType() {
-        return type;
-    }
+    /**
+     * 英文名称
+     */
+    private String enName;
 
-    public void setType(Integer type) {
-        this.type = type;
-    }
-    public String getUnit() {
-        return unit;
-    }
+    /**
+     * 备注
+     */
+    private String remark;
 
-    public void setUnit(String unit) {
-        this.unit = unit;
-    }
-    public String getRemark() {
-        return remark;
-    }
 
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
 
     @Override
     public String toString() {

+ 75 - 0
cdssman-service/src/main/java/com/diagbot/entity/KlOperation.java

@@ -0,0 +1,75 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 手术扩展表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-12
+ */
+@Data
+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;
+
+}

+ 128 - 0
cdssman-service/src/main/java/com/diagbot/entity/KlPacs.java

@@ -0,0 +1,128 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 辅检扩展表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-12
+ */
+@Data
+public class KlPacs 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 checkMethod;
+
+    /**
+     * 项目定义
+     */
+    private String definition;
+
+    /**
+     * 检查目的
+     */
+    private String checkObjective;
+
+    /**
+     * 检查技术
+     */
+    private String checkSkillful;
+
+    /**
+     * 禁忌症和局限性
+     */
+    private String condLimit;
+
+    /**
+     * 适应症
+     */
+    private String interventional;
+
+    /**
+     * 危急标识(0:不危急,1:危急)
+     */
+    private Integer emergencySign;
+
+    /**
+     * 检查前准备
+     */
+    private String checkPrepare;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+
+    @Override
+    public String toString() {
+        return "KlPacs{" +
+            "id=" + id +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+            ", conceptId=" + conceptId +
+            ", checkMethod=" + checkMethod +
+            ", definition=" + definition +
+            ", checkObjective=" + checkObjective +
+            ", checkSkillful=" + checkSkillful +
+            ", condLimit=" + condLimit +
+            ", interventional=" + interventional +
+            ", emergencySign=" + emergencySign +
+            ", checkPrepare=" + checkPrepare +
+            ", remark=" + remark +
+        "}";
+    }
+}

+ 118 - 0
cdssman-service/src/main/java/com/diagbot/entity/KlSymptom.java

@@ -0,0 +1,118 @@
+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-12
+ */
+@Data
+public class KlSymptom 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:是)
+     */
+    private Integer isPositive;
+
+    /**
+     * 英文名称
+     */
+    private String enName;
+
+    /**
+     * 定义
+     */
+    private String definition;
+
+    /**
+     * 中西医症状(0:通用,1:西,2:中)
+     */
+    private Integer chWestern;
+
+    /**
+     * 缓解因素
+     */
+    private String mitigatingFac;
+
+    /**
+     * 加重因素
+     */
+    private String aggravateFac;
+
+    /**
+     * 症状起因
+     */
+    private String cause;
+
+    /**
+     * 常见疾病
+     */
+    private String commonDis;
+
+    /**
+     * 预防措施
+     */
+    private String preMeasures;
+
+    /**
+     * 饮食禁忌
+     */
+    private String foodProhibition;
+
+    /**
+     * 通俗解释
+     */
+    private String commonExplain;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 75 - 0
cdssman-service/src/main/java/com/diagbot/entity/KlVitalResult.java

@@ -0,0 +1,75 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 体征结果扩展表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-12
+ */
+@Data
+public class KlVitalResult 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 suitablePopNo;
+
+    /**
+     * 操作方法
+     */
+    private String checkMethod;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 50 - 0
cdssman-service/src/main/java/com/diagbot/enums/InsertOrUpdateEnum.java

@@ -0,0 +1,50 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @author wangfeng
+ * @Description: TODO
+ * @date 2018年11月21日 下午2:31:42
+ */
+public enum InsertOrUpdateEnum implements KeyedNamed {
+    Insert(1, "新增"),
+    Update(2, "修改");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    InsertOrUpdateEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static InsertOrUpdateEnum getEnum(int key) {
+        for (InsertOrUpdateEnum item : InsertOrUpdateEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        InsertOrUpdateEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}
+

+ 3 - 1
cdssman-service/src/main/java/com/diagbot/enums/LexiconEnum.java

@@ -53,7 +53,9 @@ public enum LexiconEnum implements KeyedNamed {
     OperationClassNode(407,"手术和操作类别根节点"),
     LisClassNode(408,"实验室检查类别根节点"),
     PacsClassNode(409,"辅助检查类别根节点"),
-    Age(410,"年龄");
+    Age(410,"年龄"),
+    DisSysType(307,"疾病系统分类"),
+    Nature(126,"性质");
 
 
     @Setter

+ 6 - 1
cdssman-service/src/main/java/com/diagbot/enums/RelationLibTypeEnum.java

@@ -20,7 +20,12 @@ public enum RelationLibTypeEnum implements KeyedNamed {
     disOperator(507, "106"),
     disDifferentDis(508, "100"),
     disLiangbiao(509,"124"),
-    disNurse(510,"123");
+    disNurse(510,"123"),
+    relationDept(511,"115"),
+    relationPart(512,"122"),
+    relationSystem(513,"307"),
+    relationAccSymptom(514,"103"),
+    relationNature(515,"126");
 
 
     @Setter

+ 112 - 38
cdssman-service/src/main/java/com/diagbot/facade/KlConceptFacade.java

@@ -8,7 +8,9 @@ import com.diagbot.dto.GetAllForRelationDTO;
 import com.diagbot.dto.KlConceptAllDTO;
 import com.diagbot.dto.KlConceptAllSubDTO;
 import com.diagbot.dto.KlConceptInfoDTO;
+import com.diagbot.dto.KlConceptSimDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.CommonParam;
 import com.diagbot.entity.KlConcept;
 import com.diagbot.entity.KlConceptCommon;
 import com.diagbot.entity.KlConceptStatic;
@@ -27,10 +29,12 @@ 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.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.UserUtils;
+import com.diagbot.vo.ConceptRelationVO;
 import com.diagbot.vo.GetAllForRelationVO;
 import com.diagbot.vo.KlConceptAllVO;
 import com.diagbot.vo.KlConceptClearVO;
@@ -41,13 +45,13 @@ import com.diagbot.vo.KlConceptSaveVO;
 import com.diagbot.vo.KlLibraryInfoVO;
 import com.diagbot.vo.SearchConceptVO;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
@@ -86,6 +90,17 @@ public class KlConceptFacade extends KlConceptServiceImpl {
     KlDiagnoseBaseFacade klDiagnoseBaseFacade;
     @Autowired
     KlDrugFacade klDrugFacade;
+    @Autowired
+    KlSymptomFacade klSymptomFacade;
+    @Autowired
+    KlPacsFacade klPacsFacade;
+    @Autowired
+    KlOperationFacade klOperationFacade;
+    @Autowired
+    KlVitalResFacade klVitalResFacade;
+    @Autowired
+    KlDrugMappingFacade klDrugMappingFacade;
+
 
     /**
      * @param klConceptInfoVO
@@ -146,21 +161,14 @@ public class KlConceptFacade extends KlConceptServiceImpl {
      * @return
      */
     public KlConceptAllDTO getConceptAlls(KlConceptAllVO klConceptAllVO) {
-        //获取科室;
-        QueryWrapper<KlConcept> klConceptQuer = new QueryWrapper<>();
-        klConceptQuer.eq("is_deleted", IsDeleteEnum.N.getKey()).eq("lib_type", LexiconEnum.Dept.getKey());
-        List<KlConcept> klConceptsDept = list(klConceptQuer);
-        Map<Long, String> deptMap = klConceptsDept.stream().collect(HashMap::new,
-                (m, v) -> m.put(v.getId(), v.getLibName()), HashMap::putAll);
+        Long conceptId = klConceptAllVO.getConceptId();
         List<KlConceptAllDTO> conceptAll = getConceptAll(klConceptAllVO);
+
         KlConceptAllDTO klConceptAll = new KlConceptAllDTO();
         List<KlConceptAllSubDTO> klConceptSub = new ArrayList<>();
         if (ListUtil.isNotEmpty(conceptAll)) {
             for (KlConceptAllDTO data : conceptAll) {
                 if (data.getIsConcept().equals(1)) {
-                    if (null != data.getDeptId()) {
-                        data.setDeptName(deptMap.get(data.getDeptId()));
-                    }
                     BeanUtil.copyProperties(data, klConceptAll);
                 } else {
                     KlConceptAllSubDTO klConceptAllSubDTO = new KlConceptAllSubDTO();
@@ -170,6 +178,37 @@ public class KlConceptFacade extends KlConceptServiceImpl {
             }
         }
         klConceptAll.setKlConceptSub(klConceptSub);
+
+        LexiconEnum lexiconEnum = LexiconEnum.getEnum(klConceptAllVO.getLibType());
+        if (lexiconEnum != null) {
+            ConceptRelationVO conceptRelationVO = new ConceptRelationVO();
+            conceptRelationVO.setConceptId(conceptId);
+            switch (lexiconEnum) {
+                case Disease: // 疾病扩展 kl_disease, kl_relation,kl_relation_order
+                    klDiseaseFacade.getKlDisease(conceptId, klConceptAll);
+                    break;
+                case Symptom: // 症状扩展 kl_symptom, kl_relation,kl_relation_order
+                    klSymptomFacade.getKlSymptom(conceptId, klConceptAll);
+                    break;
+                case Medicine: // 药品扩展 kl_drug
+                    klDrugFacade.getKlDrug(conceptId, klConceptAll);
+                    break;
+                case LisName:
+                case LisSubName: // 化验扩展 kl_lis
+                    klLisFacade.getKlLis(conceptId, klConceptAll);
+                    break;
+                case PacsName:
+                case PacsSubName: // 辅检扩展 kl_pacs
+                    klPacsFacade.getKlPacs(conceptId, klConceptAll);
+                    break;
+                case Operation: // 手术扩展 kl_operation
+                    klOperationFacade.getKlOperation(conceptId, klConceptAll);
+                    break;
+                case VitalResult: //体征结果扩展 kl_vital_result, kl_relation,kl_relation_order
+                    klVitalResFacade.getKlVitalResult(conceptId, klConceptAll);
+                    break;
+            }
+        }
         return klConceptAll;
     }
 
@@ -179,6 +218,8 @@ public class KlConceptFacade extends KlConceptServiceImpl {
      */
     public Boolean saveConceptInfo(KlConceptSaveVO klConceptSaveVO) {
         Date now = DateUtil.now();
+
+        CommonParam commonParam = initCommonParam();
         boolean res = false;
         // 校验名称是否相同
         checkConcept(klConceptSaveVO);
@@ -191,6 +232,7 @@ public class KlConceptFacade extends KlConceptServiceImpl {
         klLibraryInfoFacade.checkLibraryInfoData(paesubVO);
         //先判断是新加的,还是修改
         if (null != klConceptSaveVO.getConceptId() && null != klConceptSaveVO.getLibId()) {
+            commonParam.setConceptId(klConceptSaveVO.getConceptId());
             //更新标准词
             res = updateAll(klConceptSaveVO);
             //更新同义词
@@ -237,11 +279,12 @@ public class KlConceptFacade extends KlConceptServiceImpl {
             klConceptPare.setGmtCreate(now);
             klConceptPare.setGmtModified(now);
             res = save(klConceptPare);
+            commonParam.setConceptId(klConceptPare.getId()); // 赋值conceptId
             if (res) {
                 //2.再把标准词d的conceptId保存到kl_library_info表 生成libId,
                 Long conceptId = klConceptPare.getId();
                 KlLibraryInfo klLibraryInfoSub = new KlLibraryInfo();
-                klLibraryInfoSub.setConceptId(conceptId);
+                klLibraryInfoSub.setConceptId(commonParam.getConceptId());
                 klLibraryInfoSub.setName(klConceptSaveVO.getLibName());
                 klLibraryInfoSub.setSpell(klConceptSaveVO.getSpell());
                 klLibraryInfoSub.setTypeId(klConceptSaveVO.getLibType());
@@ -274,32 +317,47 @@ public class KlConceptFacade extends KlConceptServiceImpl {
                 conceptCommon.setGmtModified(now);
                 klConceptCommonFacade.save(conceptCommon);
             }
-            //更新kl_disease
-            if (null != klConceptSaveVO.getIcdCode()) {
-                res = klDiseaseFacade.saveAll(klConceptPare, klConceptSaveVO);
-            }
-
-            //更新kl_lis
-            if (null != klConceptSaveVO.getScopeType()) {
-                res = klLisFacade.saveAll(klConceptPare, klConceptSaveVO);
-            }
-            if (null != klConceptSaveVO.getDrug()) {
-                res = klDrugFacade.saveAll(klConceptPare, klConceptSaveVO);
-            }
             //增加同义词
             List<KlConceptSaveSubVO> klConceptSub = klConceptSaveVO.getKlConceptSub();
             if (ListUtil.isNotEmpty(klConceptSub)) {
                 for (KlConceptSaveSubVO subVO : klConceptSub) {
                     if (subVO.getLibId() == null) {
-
                         klLibraryInfoFacade.checkLibraryInfoData(subVO);
-
                         res = klLibraryInfoFacade.savekLibraryInfoData(klConceptPare.getId(), subVO);
                     }
                 }
             }
+        }
 
-
+        LexiconEnum lexiconEnum = LexiconEnum.getEnum(klConceptSaveVO.getLibType().intValue());
+        if (lexiconEnum != null) {
+            switch (lexiconEnum) {
+                case Disease: // 疾病扩展 kl_disease, kl_relation,kl_relation_order
+                    res = klDiseaseFacade.saveAll(commonParam, klConceptSaveVO.getKlDiseaseVO());
+                    klRelationFacade.saveKlDisease(commonParam, klConceptSaveVO.getKlDiseaseVO());
+                    break;
+                case Symptom: // 症状扩展 kl_symptom, kl_relation,kl_relation_order
+                    klSymptomFacade.saveAll(commonParam, klConceptSaveVO.getKlSymptomVO());
+                    klRelationFacade.saveKlSymptom(commonParam, klConceptSaveVO.getKlSymptomVO());
+                    break;
+                case Medicine: //  药品通用名扩展 kl_drug
+                    klDrugFacade.saveKlDrug(commonParam, klConceptSaveVO.getKlDrugVO());
+                    break;
+                case LisName:
+                case LisSubName:
+                    klLisFacade.saveAll(commonParam,klConceptSaveVO.getKlLisVO());
+                    break;
+                case PacsSubName:
+                case PacsName:
+                    klPacsFacade.saveAll(commonParam,klConceptSaveVO.getKlPacsVO());
+                    break;
+                case Operation:
+                    klOperationFacade.saveAll(commonParam,klConceptSaveVO.getKlOperationVO());
+                    break;
+                case VitalResult:
+                    klRelationFacade.saveKlVitalRes(commonParam, klConceptSaveVO.getKlVitalResultVO());
+                    break;
+            }
         }
         return res;
     }
@@ -330,18 +388,6 @@ public class KlConceptFacade extends KlConceptServiceImpl {
             //当是疾病的时候才保存性别和年龄大小的数据
             res = klConceptCommonFacade.saveOrUpdateAll(klConceptSaveVO);
         }
-        //更新kl_disease
-        if (null != klConceptSaveVO.getIcdCode()) {
-            //当icd10编码不为空
-            res = klDiseaseFacade.saveOrUpdateAll(klConceptSaveVO);
-        }
-        //更新kl_lis
-        if (null != klConceptSaveVO.getScopeType()) {
-            res = klLisFacade.saveOrUpdateAll(klConceptSaveVO);
-        }
-        if (null != klConceptSaveVO.getDrug()) {
-            klDrugFacade.saveOrUpdateAll(klConceptSaveVO);
-        }
         return res;
     }
 
@@ -526,4 +572,32 @@ public class KlConceptFacade extends KlConceptServiceImpl {
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "医学标准术语名称已存在同义词");
         }
     }
+
+    /**
+     * 根据conceptId和relationId获取关联数据(通用方法)
+     *
+     * @param conceptRelationVO
+     * @return
+     */
+    public Map<Integer, List<KlConceptSimDTO>> getRelationConceptFac(ConceptRelationVO conceptRelationVO) {
+        Map<Integer, List<KlConceptSimDTO>> map = Maps.newLinkedHashMap();
+        List<KlConceptSimDTO> relationConcept = this.getRelationConcept(conceptRelationVO);
+        if (ListUtil.isNotEmpty(relationConcept)) {
+            map = EntityUtil.makeEntityListMap(relationConcept, "libType");
+        }
+        return map;
+    }
+
+    /**
+     * 初始化参数
+     *
+     * @return
+     */
+    public CommonParam initCommonParam() {
+        CommonParam param = new CommonParam();
+        String person = UserUtils.getCurrentPrincipleID();
+        param.setNow(DateUtil.now());
+        param.setPerson(person);
+        return param;
+    }
 }

+ 64 - 57
cdssman-service/src/main/java/com/diagbot/facade/KlDiseaseFacade.java

@@ -1,7 +1,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.diagbot.client.UserServiceClient;
 import com.diagbot.dto.DiseaseAllDetailDTO;
@@ -9,37 +8,41 @@ import com.diagbot.dto.DiseaseDetailDTO;
 import com.diagbot.dto.DiseasePageDTO;
 import com.diagbot.dto.DiseaseSubDetailDTO;
 import com.diagbot.dto.DiseaseTreeDetailDTO;
+import com.diagbot.dto.KlConceptAllDTO;
+import com.diagbot.dto.KlConceptSimDTO;
+import com.diagbot.dto.KlDiseaseDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.CommonParam;
 import com.diagbot.entity.KlConcept;
 import com.diagbot.entity.KlDisease;
 import com.diagbot.entity.KlLexiconRelationship;
 import com.diagbot.enums.DiseaseRelationTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.LexiconEnum;
 import com.diagbot.enums.RelationLibTypeEnum;
 import com.diagbot.service.impl.KlDiseaseServiceImpl;
-import com.diagbot.util.DateUtil;
+import com.diagbot.util.BeanUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.StringUtil;
-import com.diagbot.util.UserUtils;
+import com.diagbot.vo.ConceptRelationVO;
 import com.diagbot.vo.DiseaseDeleteVO;
 import com.diagbot.vo.DiseasePageVO;
 import com.diagbot.vo.GetDiseaseDetailVO;
-import com.diagbot.vo.KlConceptSaveVO;
+import com.diagbot.vo.KlDiseaseVO;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.apache.commons.collections4.MapUtils;
-import org.apache.commons.compress.utils.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
-
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
+
 /**
  * @author wangfeng
  * @Description:
@@ -172,58 +175,62 @@ public class KlDiseaseFacade extends KlDiseaseServiceImpl {
         return diseaseTreeDetailDTO;
     }
 
-
-    public boolean saveOrUpdateAll(KlConceptSaveVO klConceptSaveVO) {
-        Date now = DateUtil.now();
-        boolean res = false;
-        if (null != klConceptSaveVO.getConceptId()) {
-            //校验
-            int countLis = this.count(new QueryWrapper<KlDisease>()
-                    .eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .eq("concept_id", klConceptSaveVO.getConceptId()));
-            if (countLis > 0) {
-                UpdateWrapper<KlDisease> klDiseaseQuerySub = new UpdateWrapper<>();
-                klDiseaseQuerySub.eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .eq("concept_id", klConceptSaveVO.getConceptId())
-                        .set("gmt_modified", now)
-                        .set("modifier", UserUtils.getCurrentPrincipleID())
-                        .set("dept_id", klConceptSaveVO.getDeptId())
-                        .set(StringUtil.isNotBlank(klConceptSaveVO.getIcdCode()), "icd10_code", klConceptSaveVO.getIcdCode());
-                res = this.update(new KlDisease(), klDiseaseQuerySub);
-            } else {
-                KlDisease kllDiseaseSub = new KlDisease();
-                kllDiseaseSub.setConceptId(klConceptSaveVO.getConceptId());
-                kllDiseaseSub.setGmtModified(now);
-                kllDiseaseSub.setDeptId(klConceptSaveVO.getDeptId());
-                kllDiseaseSub.setModifier(UserUtils.getCurrentPrincipleID());
-                kllDiseaseSub.setIcd10Code(klConceptSaveVO.getIcdCode());
-                res = this.save(kllDiseaseSub);
-            }
-
-        } else {
-            KlDisease kllDiseaseSub = new KlDisease();
-            kllDiseaseSub.setConceptId(klConceptSaveVO.getConceptId());
-            kllDiseaseSub.setGmtModified(now);
-            kllDiseaseSub.setDeptId(klConceptSaveVO.getDeptId());
-            kllDiseaseSub.setModifier(UserUtils.getCurrentPrincipleID());
-            kllDiseaseSub.setIcd10Code(klConceptSaveVO.getIcdCode());
-            res = this.save(kllDiseaseSub);
-        }
-        return res;
+    /**
+     * 保存疾病扩展表
+     *
+     * @param commonParam
+     * @param klDiseaseVO
+     * @return
+     */
+    public boolean saveAll(CommonParam commonParam, KlDiseaseVO klDiseaseVO) {
+        // 先删除疾病扩展表
+        this.remove(new QueryWrapper<KlDisease>().eq("concept_id", commonParam.getConceptId()));
+        // 重新插入扩展表
+        KlDisease klDisease = new KlDisease();
+        BeanUtil.copyProperties(klDiseaseVO, klDisease);
+        klDisease.setConceptId(commonParam.getConceptId());
+        klDisease.setGmtModified(commonParam.getNow());
+        klDisease.setGmtCreate(commonParam.getNow());
+        klDisease.setCreator(commonParam.getPerson());
+        klDisease.setModifier(commonParam.getPerson());
+        return this.save(klDisease);
     }
 
-    public boolean saveAll(KlConcept klConceptPare, KlConceptSaveVO klConceptSaveVO) {
-        Date now = DateUtil.now();
-        KlDisease kllDiseaseSub = new KlDisease();
-        kllDiseaseSub.setConceptId(klConceptPare.getId());
-        kllDiseaseSub.setGmtModified(now);
-        kllDiseaseSub.setDeptId(klConceptSaveVO.getDeptId());
-        kllDiseaseSub.setIcd10Code(klConceptSaveVO.getIcdCode());
-        kllDiseaseSub.setCreator(UserUtils.getCurrentPrincipleID());
-        kllDiseaseSub.setModifier(UserUtils.getCurrentPrincipleID());
-        kllDiseaseSub.setGmtCreate(now);
-        kllDiseaseSub.setGmtModified(now);
-        return this.save(kllDiseaseSub);
+    /**
+     * 疾病扩展获取
+     *
+     * @param conceptId
+     * @param klConceptAllDTO
+     */
+    public void getKlDisease(Long conceptId, KlConceptAllDTO klConceptAllDTO) {
+        KlDisease klDisease = this.getOne(new QueryWrapper<KlDisease>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("concept_id", conceptId), false);
+        if (klDisease == null) {
+            return;
+        }
+        KlDiseaseDTO klDiseaseDTO = new KlDiseaseDTO();
+        BeanUtil.copyProperties(klDisease, klDiseaseDTO);
+
+        List<Integer> relationIdList = Lists.newArrayList(
+                RelationLibTypeEnum.relationDept.getKey(),
+                RelationLibTypeEnum.relationPart.getKey(),
+                RelationLibTypeEnum.relationSystem.getKey()
+        );
+        ConceptRelationVO conceptRelationVO = new ConceptRelationVO();
+        conceptRelationVO.setConceptId(conceptId);
+        conceptRelationVO.setRelationList(relationIdList);
+        Map<Integer, List<KlConceptSimDTO>> map = klConceptFacade.getRelationConceptFac(conceptRelationVO);
+        if (map.get(LexiconEnum.Part.getKey()) != null) { // 关联部位
+            klDiseaseDTO.setPartList(map.get(LexiconEnum.Part.getKey()));
+        }
+        if (map.get(LexiconEnum.Dept.getKey()) != null) { // 关联部位
+            klDiseaseDTO.setDeptList(map.get(LexiconEnum.Dept.getKey()));
+        }
+        if (map.get(LexiconEnum.DisSysType.getKey()) != null) { // 关联诊断系统分类
+            klDiseaseDTO.setSystemTypeList(map.get(LexiconEnum.DisSysType.getKey()));
+        }
+        klConceptAllDTO.setKlDiseaseDTO(klDiseaseDTO);
     }
 }
 

+ 47 - 49
cdssman-service/src/main/java/com/diagbot/facade/KlDrugFacade.java

@@ -1,18 +1,16 @@
 package com.diagbot.facade;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.diagbot.entity.KlConcept;
+import com.diagbot.dto.KlConceptAllDTO;
+import com.diagbot.dto.KlDrugDTO;
+import com.diagbot.entity.CommonParam;
 import com.diagbot.entity.KlDrug;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.service.impl.KlDrugServiceImpl;
-import com.diagbot.util.DateUtil;
-import com.diagbot.util.UserUtils;
-import com.diagbot.vo.KlConceptSaveVO;
+import com.diagbot.vo.KlDrugVO;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.Date;
-
 /**
  * @author wangfeng
  * @Description:
@@ -21,55 +19,55 @@ import java.util.Date;
 @Component
 public class KlDrugFacade extends KlDrugServiceImpl {
 
+    @Autowired
+    KlDrugRegisterFacade klDrugRegisterFacade;
 
-    public boolean saveOrUpdateAll(KlConceptSaveVO klConceptSaveVO) {
+    /**
+     * 疾病扩展获取
+     *
+     * @param conceptId
+     * @param klConceptAllDTO
+     */
+    public void getKlDrug(Long conceptId, KlConceptAllDTO klConceptAllDTO) {
+        KlDrugDTO klDrugDTO = new KlDrugDTO();
 
-        Date now = DateUtil.now();
-        boolean res = false;
-        if (null != klConceptSaveVO.getConceptId()) {
-            //校验
-            int countLis = this.count(new QueryWrapper<KlDrug>()
-                    .eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .eq("concept_id", klConceptSaveVO.getConceptId()));
-            if (countLis > 0) {
-                UpdateWrapper<KlDrug> klDrugUpdate = new UpdateWrapper<>();
-                klDrugUpdate.eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .eq("concept_id", klConceptSaveVO.getConceptId())
-                        .set("gmt_modified", now)
-                        .set("modifier", UserUtils.getCurrentPrincipleID())
-                        .set("drug", klConceptSaveVO.getDrug());
-                res = this.update(klDrugUpdate);
-            } else {
-                KlDrug klDrug = new KlDrug();
-                klDrug.setConceptId(klConceptSaveVO.getConceptId());
-                klDrug.setDrug(klConceptSaveVO.getDrug());
-                klDrug.setGmtModified(now);
-                klDrug.setModifier(UserUtils.getCurrentPrincipleID());
-                res = this.save(klDrug);
-            }
-        } else {
-            KlDrug klDrug = new KlDrug();
-            klDrug.setConceptId(klConceptSaveVO.getConceptId());
-            klDrug.setDrug(klConceptSaveVO.getDrug());
-            klDrug.setGmtModified(now);
-            klDrug.setModifier(UserUtils.getCurrentPrincipleID());
-            res = this.save(klDrug);
+        // 获取药品类别(0:西药,1:中成药)
+        KlDrug klDrug = this.getOne(new QueryWrapper<KlDrug>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("concept_id", conceptId), false);
+        if (klDrug != null) {
+            klDrugDTO.setDrug(klDrug.getDrug());
         }
 
-        return res;
+        // 获取关联注册药品信息(这里先不展示关联的注册药品)
+        // KlDrugMappingGetVO klDrugMappingGetVO = new KlDrugMappingGetVO();
+        // klDrugMappingGetVO.setDrugConcept(conceptId);
+        // List<KlDrugMappingDTO> klDrugMappingDTOList = klDrugRegisterFacade.getMappingRegister(klDrugMappingGetVO);
+        // klDrugDTO.setKlDrugMappingDTOList(klDrugMappingDTOList);
 
+        klConceptAllDTO.setKlDrugDTO(klDrugDTO);
     }
 
-    public boolean saveAll(KlConcept klConceptPare, KlConceptSaveVO klConceptSaveVO) {
-        Date now = DateUtil.now();
-        KlDrug klDrug = new KlDrug();
-        klDrug.setConceptId(klConceptPare.getId());
-        klDrug.setDrug(klConceptSaveVO.getDrug());
-        klDrug.setCreator(UserUtils.getCurrentPrincipleID());
-        klDrug.setModifier(UserUtils.getCurrentPrincipleID());
-        klDrug.setGmtCreate(now);
-        klDrug.setGmtModified(now);
-        return this.save(klDrug);
+    /**
+     *
+     * @param commonParam
+     * @param klDrugVO
+     */
+    public void saveKlDrug(CommonParam commonParam, KlDrugVO klDrugVO) {
+        // 先删除
+        this.remove(new QueryWrapper<KlDrug>().eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("concept_id", commonParam.getConceptId()));
+
+        if (klDrugVO != null) {
+            KlDrug klDrug = new KlDrug();
+            klDrug.setConceptId(commonParam.getConceptId());
+            klDrug.setDrug(klDrugVO.getDrug());
+            klDrug.setCreator(commonParam.getPerson());
+            klDrug.setModifier(commonParam.getPerson());
+            klDrug.setGmtCreate(commonParam.getNow());
+            klDrug.setGmtModified(commonParam.getNow());
+            this.save(klDrug);
+        }
     }
 
 }

+ 51 - 0
cdssman-service/src/main/java/com/diagbot/facade/KlDrugMappingFacade.java

@@ -0,0 +1,51 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.KlDrugMappingService;
+import com.diagbot.service.impl.KlDrugMappingServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author zhoutg
+ * @Description:
+ * @date 2021-04-13 10:41
+ */
+@Component
+public class KlDrugMappingFacade extends KlDrugMappingServiceImpl {
+
+    @Autowired
+    @Qualifier("klDrugMappingServiceImpl")
+    KlDrugMappingService klDrugMappingService;
+
+    // /**
+    //  * 保存药品通用名称和注册名称扩展表
+    //  *
+    //  * @param commonParam
+    //  * @param klDrugVO
+    //  * @return
+    //  */
+    // public void saveAll(CommonParam commonParam, KlDrugVO klDrugVO) {
+    //     // 先删除药品通用名和注册名关联扩展表
+    //     this.remove(new QueryWrapper<KlDrugMapping>().eq("drug_concept", commonParam.getConceptId()));
+    //
+    //     // 新增关联
+    //     List<KlDrugMapping> klDrugMappingList = Lists.newLinkedList();
+    //     if (klDrugVO != null) {
+    //         int i = 1;
+    //         for (Long registerId : klDrugVO.getRegisterIdList()) {
+    //             KlDrugMapping klDrugMapping = new KlDrugMapping();
+    //             klDrugMapping.setDrugConcept(commonParam.getConceptId());
+    //             klDrugMapping.setRegisterId(registerId);
+    //             klDrugMapping.setOrderNo(i++);
+    //             klDrugMapping.setGmtModified(commonParam.getNow());
+    //             klDrugMapping.setGmtCreate(commonParam.getNow());
+    //             klDrugMapping.setCreator(commonParam.getPerson());
+    //             klDrugMapping.setModifier(commonParam.getPerson());
+    //             klDrugMappingList.add(klDrugMapping);
+    //         }
+    //         klDrugMappingService.saveBatch(klDrugMappingList);
+    //     }
+    // }
+
+}

+ 273 - 0
cdssman-service/src/main/java/com/diagbot/facade/KlDrugRegisterFacade.java

@@ -0,0 +1,273 @@
+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.KlDrugRegisterDTO;
+import com.diagbot.entity.CommonParam;
+import com.diagbot.entity.KlConcept;
+import com.diagbot.entity.KlDrugMapping;
+import com.diagbot.entity.KlDrugRegister;
+import com.diagbot.enums.InsertOrUpdateEnum;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.service.KlDrugMappingService;
+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.ListUtil;
+import com.diagbot.util.UserUtils;
+import com.diagbot.vo.KlDrugMappingGetVO;
+import com.diagbot.vo.KlDrugRegisterDelVO;
+import com.diagbot.vo.KlDrugRegisterGetVO;
+import com.diagbot.vo.KlDrugRegisterPageVO;
+import com.diagbot.vo.KlDrugRegisterSaveVO;
+import com.diagbot.vo.KlDrugRegisterTestVO;
+import com.diagbot.vo.KlDrugSearchVO;
+import com.google.common.collect.Lists;
+import org.apache.commons.collections4.map.LinkedMap;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author zhoutg
+ * @Description:
+ * @date 2021-04-13 10:41
+ */
+@Component
+public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
+
+    @Autowired
+    @Qualifier("klDrugMappingServiceImpl")
+    KlDrugMappingService klDrugMappingService;
+    @Autowired
+    KlConceptFacade klConceptFacade;
+    @Autowired
+    @Qualifier("klDrugRegisterServiceImpl")
+    KlDrugRegisterService klDrugRegisterService;
+    @Autowired
+    UserFacade userFacade;
+
+    /**
+     * 保存或更新
+     *
+     * @param klDrugRegisterSaveVO
+     */
+    public void saveOrUpdate(KlDrugRegisterSaveVO klDrugRegisterSaveVO) {
+        CommonParam param = initCommonParam();
+        KlDrugRegister klDrugRegister = new KlDrugRegister();
+        if (klDrugRegisterSaveVO.getId() != null) {
+            klDrugRegister = this.getOne(new QueryWrapper<KlDrugRegister>()
+                    .eq("id", klDrugRegisterSaveVO.getId())
+                    .eq("is_deleted", IsDeleteEnum.N.getKey()), false);
+            if (klDrugRegister == null) { //校验
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "数据不存在");
+            }
+            param.setInsertOrUpdate(InsertOrUpdateEnum.Update.getKey());
+        }
+        BeanUtil.copyProperties(klDrugRegisterSaveVO, klDrugRegister);
+        // 重复校验
+        // int count = this.count(new QueryWrapper<KlDrugRegister>()
+        //         .eq("is_deleted", IsDeleteEnum.N.getKey())
+        //         .eq("drug_code", klDrugRegisterSaveVO.getDrugCode())
+        //         .ne("id", klDrugRegisterSaveVO.getId() == null ? -1 : klDrugRegisterSaveVO.getId()));
+        // if (count > 0) {
+        //     throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "药品代码已存在");
+        // }
+        if (InsertOrUpdateEnum.Insert.getKey() == param.getInsertOrUpdate()) {
+            klDrugRegister.setCreator(param.getPerson()); //创建人
+            klDrugRegister.setGmtCreate(param.getNow());//创建时间
+        }
+        klDrugRegister.setGmtModified(param.getNow());//修改时间
+        klDrugRegister.setModifier(param.getPerson());//修改人
+        this.saveOrUpdate(klDrugRegister);
+
+        // 保存药品通用名和注册名映射关系
+        klDrugMappingService.remove(new QueryWrapper<KlDrugMapping>()
+                .eq("register_id", klDrugRegister.getId()));
+
+        // 保存药品通用名和注册药品的关联
+        if (klDrugRegister.getId() != null) {
+            KlDrugMapping klDrugMapping = new KlDrugMapping();
+            klDrugMapping.setRegisterId(klDrugRegister.getId());
+            klDrugMapping.setDrugConcept(klDrugRegisterSaveVO.getDrugConceptId());
+            klDrugMapping.setCreator(param.getPerson());
+            klDrugMapping.setModifier(param.getPerson());
+            klDrugMapping.setGmtModified(param.getNow());
+            klDrugMapping.setGmtCreate(param.getNow());
+            klDrugMappingService.save(klDrugMapping);
+        }
+    }
+
+    /**
+     * 初始化参数
+     *
+     * @return
+     */
+    public CommonParam initCommonParam() {
+        CommonParam param = new CommonParam();
+        String person = UserUtils.getCurrentPrincipleID();
+        param.setNow(DateUtil.now());
+        param.setPerson(person);
+        param.setInsertOrUpdate(InsertOrUpdateEnum.Insert.getKey());
+        return param;
+    }
+
+    /**
+     * 分页
+     *
+     * @param klDrugRegisterPageVO
+     * @return
+     */
+    public IPage<KlDrugRegisterDTO> getPageFac(KlDrugRegisterPageVO klDrugRegisterPageVO) {
+        IPage<KlDrugRegisterDTO> res = this.getPage(klDrugRegisterPageVO);
+        return res;
+    }
+
+    /**
+     * 根据id删除标签
+     *
+     * @param klDrugRegisterDelVO
+     * @return
+     */
+    public void deleteByIdFac(KlDrugRegisterDelVO klDrugRegisterDelVO) {
+        List<KlDrugMapping> klDrugMappingList = klDrugMappingService.list(new QueryWrapper<KlDrugMapping>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("register_id", klDrugRegisterDelVO.getId()));
+        if (ListUtil.isNotEmpty(klDrugMappingList)) {
+            // 校验是否有关联
+            // List<Long> idList = klDrugMappingList.stream().map(r -> r.getDrugConcept()).collect(Collectors.toList());
+            // List<KlConcept> klConceptList = klConceptFacade.list(new QueryWrapper<KlConcept>()
+            //         .eq("is_deleted", IsDeleteEnum.N.getKey()).in("id", idList));
+            // if (ListUtil.isNotEmpty(klConceptList)) {
+            //     String errMsg = klConceptList.stream().map(r -> r.getLibName()).distinct().collect(Collectors.joining(","));
+            //     if (StringUtil.isNotBlank(errMsg)) {
+            //         throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "已关联药品通用名:" + errMsg);
+            //     }
+            // }
+            klDrugMappingService.remove(new QueryWrapper<KlDrugMapping>().in("register_id", klDrugRegisterDelVO.getId()));
+        }
+        this.remove(new QueryWrapper<KlDrugRegister>().eq("id", klDrugRegisterDelVO.getId()));
+    }
+
+    /**
+     * 根据参数返回数据
+     *
+     * @param klDrugRegisterGetVO 获取标签内容参数
+     * @return 标签内容
+     */
+    public KlDrugRegisterDTO getByParam(KlDrugRegisterGetVO klDrugRegisterGetVO) {
+        KlDrugRegisterDTO klDrugRegisterDTO = new KlDrugRegisterDTO();
+        KlDrugRegister klDrugRegister = this.getOne(new QueryWrapper<KlDrugRegister>()
+                .eq("id", klDrugRegisterGetVO.getId())
+                .eq("is_deleted", IsDeleteEnum.N.getKey()), false);
+        if (klDrugRegister != null) {
+            BeanUtil.copyProperties(klDrugRegister, klDrugRegisterDTO);
+        }
+
+        // 获取注册对应的药品通用名
+        KlDrugMappingGetVO klDrugMappingGetVO = new KlDrugMappingGetVO();
+        klDrugMappingGetVO.setRegisterId(klDrugRegister.getId());
+        List<KlConceptSimDTO> klConceptSimDTOList = this.getMappingDrug(klDrugMappingGetVO);
+        if (ListUtil.isNotEmpty(klConceptSimDTOList)) {
+            KlConceptSimDTO conceptSimDTO = klConceptSimDTOList.get(0);
+            klDrugRegisterDTO.setDrugName(conceptSimDTO.getLibName());
+            klDrugRegisterDTO.setDrugConceptId(conceptSimDTO.getId());
+        }
+        return klDrugRegisterDTO;
+    }
+
+    /**
+     * 药品注册名检索药品通用名
+     *
+     * @param klDrugSearchVO
+     * @return
+     */
+    public List<KlConceptSimDTO> searchDrugFac(KlDrugSearchVO klDrugSearchVO) {
+        return this.searchDrug(klDrugSearchVO);
+    }
+
+    /**
+     * 注册药品导入
+     *
+     * @param file
+     * @return
+     */
+    public Map importRegister(MultipartFile file) {
+        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 {
+            List<KlConcept> klConceptList = klConceptFacade.list(new QueryWrapper<KlConcept>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey()).eq("lib_type", 101));
+            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;
+            for (KlDrugRegisterTestVO  klDrugRegisterTestVO : list) {
+                KlDrugRegister klDrugRegister = new KlDrugRegister();
+                BeanUtil.copyProperties(klDrugRegisterTestVO, klDrugRegister);
+                String drugName = klDrugRegisterTestVO.getDrugName();
+                klDrugRegister.setRemark(drugName);
+                drugRegisterList.add(klDrugRegister);
+                if (druMap.get(drugName) == null) {
+                    errMsg.add(drugName);
+                }
+                // if (StringUtil.isBlank(drugName)) {
+                //     errMsg.add(String.format("第%s行药品通用名为空", i));
+                // } else if (druMap.get(drugName) == null) {
+                //     errMsg.add(String.format("第%s行【%s】不是标准词", i, drugName));
+                // }
+                i++;
+            }
+            if (ListUtil.isNotEmpty(errMsg)) {
+                errMsg = errMsg.stream().distinct().collect(Collectors.toList());
+                for (String s : errMsg) {
+                    System.out.println(s);
+                }
+                res.put("错误", StringUtils.join(errMsg, ";"));
+                return res;
+            }
+            this.remove(new QueryWrapper<KlDrugRegister>()); // 删除主表
+            Long t3 = System.currentTimeMillis();
+            klDrugRegisterService.saveBatch(drugRegisterList);
+            Long t4 = System.currentTimeMillis();
+            res.put("保存DrugRegister表耗时:", (t4 - t3) / 1000.0 + "秒");
+
+            List<KlDrugMapping> klDrugMappingList = ListUtil.newArrayList();
+            for (KlDrugRegister klDrugRegister : drugRegisterList) {
+                KlDrugMapping klDrugMapping = new KlDrugMapping();
+                klDrugMapping.setRegisterId(klDrugRegister.getId());
+                klDrugMapping.setDrugConcept(druMap.get(klDrugRegister.getRemark()));
+                klDrugMappingList.add(klDrugMapping);
+            }
+            klDrugMappingService.remove(new QueryWrapper<KlDrugMapping>());
+            Long t5 = System.currentTimeMillis();
+            klDrugMappingService.saveBatch(klDrugMappingList);
+            Long t6 = System.currentTimeMillis();
+            res.put("保存mapping表耗时:", (t6 - t5) / 1000.0 + "秒");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        Long end = System.currentTimeMillis();
+        res.put("总耗时:", (end - t1) / 1000.0 + "秒");
+        return res;
+    }
+
+    public static void main(String[] args) {
+
+    }
+}

+ 44 - 1
cdssman-service/src/main/java/com/diagbot/facade/KlLisFacade.java

@@ -2,13 +2,20 @@ package com.diagbot.facade;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.diagbot.dto.KlConceptAllDTO;
+import com.diagbot.dto.KlLisDTO;
+import com.diagbot.entity.CommonParam;
 import com.diagbot.entity.KlConcept;
+import com.diagbot.entity.KlDisease;
 import com.diagbot.entity.KlLis;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.service.impl.KlLisServiceImpl;
+import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.UserUtils;
 import com.diagbot.vo.KlConceptSaveVO;
+import com.diagbot.vo.KlDiseaseVO;
+import com.diagbot.vo.KlLisVO;
 import org.springframework.stereotype.Component;
 
 import java.util.Date;
@@ -21,7 +28,7 @@ import java.util.Date;
 @Component
 public class KlLisFacade extends KlLisServiceImpl {
 
-    public boolean saveOrUpdateAll(KlConceptSaveVO klConceptSaveVO) {
+    /*public boolean saveOrUpdateAll(KlConceptSaveVO klConceptSaveVO) {
         Date now = DateUtil.now();
         boolean res = false;
         if (null != klConceptSaveVO.getConceptId()) {
@@ -79,5 +86,41 @@ public class KlLisFacade extends KlLisServiceImpl {
         klLisSub.setGmtCreate(now);
         klLisSub.setGmtModified(now);
         return this.save(klLisSub);
+    }*/
+
+    /**
+     * 保存化验扩展表
+     *
+     * @param commonParam
+     * @param klLisVO
+     * @return
+     */
+    public boolean saveAll(CommonParam commonParam, KlLisVO klLisVO) {
+        if(klLisVO == null){
+            return false;
+        }
+        // 先删除疾病扩展表
+        this.remove(new QueryWrapper<KlLis>().eq("concept_id", commonParam.getConceptId()));
+        // 重新插入扩展表
+        KlLis klLis = new KlLis();
+        BeanUtil.copyProperties(klLisVO, klLis);
+        klLis.setConceptId(commonParam.getConceptId());
+        klLis.setGmtModified(commonParam.getNow());
+        klLis.setGmtCreate(commonParam.getNow());
+        klLis.setCreator(commonParam.getPerson());
+        klLis.setModifier(commonParam.getPerson());
+        return this.save(klLis);
+    }
+
+    public void getKlLis(Long conceptId, KlConceptAllDTO klConceptAll) {
+        KlLis klLis = this.getOne(new QueryWrapper<KlLis>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("concept_id", conceptId), false);
+        if (klLis == null) {
+            return;
+        }
+        KlLisDTO klLisDTO = new KlLisDTO();
+        BeanUtil.copyProperties(klLis,klLisDTO);
+        klConceptAll.setKlLisDTO(klLisDTO);
     }
 }

+ 62 - 0
cdssman-service/src/main/java/com/diagbot/facade/KlOperationFacade.java

@@ -0,0 +1,62 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.KlConceptAllDTO;
+import com.diagbot.dto.KlOperationDTO;
+import com.diagbot.entity.CommonParam;
+import com.diagbot.entity.KlOperation;
+import com.diagbot.entity.KlPacs;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.KlOperationServiceImpl;
+import com.diagbot.service.impl.KlPacsServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.vo.KlOperationVO;
+import com.diagbot.vo.KlPacsVO;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author kwz
+ * @Description:
+ * @date 2021-03-18 16:38
+ */
+@Component
+public class KlOperationFacade extends KlOperationServiceImpl {
+
+
+
+    /**
+     * 保存手术扩展表
+     *
+     * @param commonParam
+     * @param klOperationVO
+     * @return
+     */
+    public boolean saveAll(CommonParam commonParam, KlOperationVO klOperationVO) {
+        if(klOperationVO == null){
+            return false;
+        }
+        // 先删除手术扩展表
+        this.remove(new QueryWrapper<KlOperation>().eq("concept_id", commonParam.getConceptId()));
+        // 重新插入扩展表
+        KlOperation klOperation = new KlOperation();
+        BeanUtil.copyProperties(klOperationVO, klOperation);
+        klOperation.setConceptId(commonParam.getConceptId());
+        klOperation.setGmtModified(commonParam.getNow());
+        klOperation.setGmtCreate(commonParam.getNow());
+        klOperation.setCreator(commonParam.getPerson());
+        klOperation.setModifier(commonParam.getPerson());
+        return this.save(klOperation);
+    }
+
+    public void getKlOperation(Long conceptId, KlConceptAllDTO klConceptAll) {
+        KlOperation klOperation = this.getOne(new QueryWrapper<KlOperation>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("concept_id", conceptId), false);
+        if(klOperation == null){
+            return;
+        }
+        KlOperationDTO klOperationDTO = new KlOperationDTO();
+        BeanUtil.copyProperties(klOperation,klOperationDTO);
+        klConceptAll.setKlOperationDTO(klOperationDTO);
+    }
+}

+ 70 - 0
cdssman-service/src/main/java/com/diagbot/facade/KlPacsFacade.java

@@ -0,0 +1,70 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.diagbot.dto.KlConceptAllDTO;
+import com.diagbot.dto.KlPacsDTO;
+import com.diagbot.entity.CommonParam;
+import com.diagbot.entity.KlConcept;
+import com.diagbot.entity.KlLis;
+import com.diagbot.entity.KlPacs;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.KlLisServiceImpl;
+import com.diagbot.service.impl.KlPacsServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.UserUtils;
+import com.diagbot.vo.KlConceptSaveVO;
+import com.diagbot.vo.KlLisVO;
+import com.diagbot.vo.KlPacsVO;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/**
+ * @author kwz
+ * @Description:
+ * @date 2021-03-18 16:38
+ */
+@Component
+public class KlPacsFacade extends KlPacsServiceImpl {
+
+
+
+    /**
+     * 保存辅检扩展表
+     *
+     * @param commonParam
+     * @param klPacsVO
+     * @return
+     */
+    public boolean saveAll(CommonParam commonParam, KlPacsVO klPacsVO) {
+        if(klPacsVO == null){
+            return false;
+        }
+        // 先删除辅检扩展表
+        this.remove(new QueryWrapper<KlPacs>().eq("concept_id", commonParam.getConceptId()));
+        // 重新插入扩展表
+        KlPacs klPacs = new KlPacs();
+        BeanUtil.copyProperties(klPacsVO, klPacs);
+        klPacs.setConceptId(commonParam.getConceptId());
+        klPacs.setGmtModified(commonParam.getNow());
+        klPacs.setGmtCreate(commonParam.getNow());
+        klPacs.setCreator(commonParam.getPerson());
+        klPacs.setModifier(commonParam.getPerson());
+        return this.save(klPacs);
+    }
+
+    public void getKlPacs(Long conceptId, KlConceptAllDTO klConceptAll) {
+        KlPacs klPacs = this.getOne(new QueryWrapper<KlPacs>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("concept_id", conceptId), false);
+        if(klPacs == null){
+            return;
+        }
+        KlPacsDTO klPacsDTO = new KlPacsDTO();
+        BeanUtil.copyProperties(klPacs,klPacsDTO);
+        klConceptAll.setKlPacsDTO(klPacsDTO);
+
+    }
+}

+ 185 - 0
cdssman-service/src/main/java/com/diagbot/facade/KlRelationFacade.java

@@ -1,18 +1,35 @@
 package com.diagbot.facade;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.dto.RelationDTO;
 import com.diagbot.dto.TreeAllDTO;
 import com.diagbot.dto.TreeDTO;
+import com.diagbot.entity.CommonParam;
+import com.diagbot.entity.KlRelation;
+import com.diagbot.entity.KlRelationOrder;
+import com.diagbot.entity.KlVitalResult;
+import com.diagbot.enums.RelationLibTypeEnum;
+import com.diagbot.service.KlRelationOrderService;
+import com.diagbot.service.KlRelationService;
+import com.diagbot.service.KlVitalResultService;
 import com.diagbot.service.impl.KlRelationServiceImpl;
+import com.diagbot.util.BeanUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
+import com.diagbot.vo.KlDiseaseVO;
+import com.diagbot.vo.KlSymptomVO;
+import com.diagbot.vo.KlVitalResultVO;
 import com.diagbot.vo.RelationVO;
 import com.diagbot.vo.TreeVO;
+import com.google.common.collect.Lists;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @Description:
@@ -21,6 +38,22 @@ import java.util.Map;
  */
 @Component
 public class KlRelationFacade extends KlRelationServiceImpl {
+
+    @Autowired
+    @Qualifier("klRelationOrderServiceImpl")
+    KlRelationOrderService klRelationOrderService;
+
+    @Autowired
+    @Qualifier("klRelationServiceImpl")
+    KlRelationService klRelationService;
+
+    @Autowired
+    KlConceptFacade klConceptFacade;
+
+    @Qualifier("klVitalResultServiceImpl")
+    @Autowired
+    KlVitalResultService klVitalResultService;
+;
     public TreeAllDTO getTree(TreeVO treeVO) {
         List<Long[]> pList = new ArrayList<>();
         pList.add(new Long[] { 402L, 600L, 301L, 600L, 101L });//药品化学物质类别
@@ -78,4 +111,156 @@ public class KlRelationFacade extends KlRelationServiceImpl {
         }
         return treeAllDTO;
     }
+
+    /**
+     * 疾病扩展
+     *
+     * @param commonParam
+     * @param klDiseaseVO
+     */
+    public void saveKlDisease(CommonParam commonParam, KlDiseaseVO klDiseaseVO) {
+        // 疾病关联科室,部位,关联系统统一处理。先查找全部数据,删除关联排序表,再删除关联表
+        List<Integer> relationIdList = Lists.newArrayList(
+                RelationLibTypeEnum.relationDept.getKey(),
+                RelationLibTypeEnum.relationPart.getKey(),
+                RelationLibTypeEnum.relationSystem.getKey()
+        );
+        klRelationRemove(commonParam, relationIdList);
+
+        if (klDiseaseVO != null) {
+            // 【科室关联】
+            klRelationSave(commonParam, klDiseaseVO.getDeptList(), RelationLibTypeEnum.relationDept.getKey());
+            // 【部位关联】
+            klRelationSave(commonParam, klDiseaseVO.getPartList(), RelationLibTypeEnum.relationPart.getKey());
+            // 【疾病系统分类关联】
+            klRelationSave(commonParam, klDiseaseVO.getSystemTypeList(), RelationLibTypeEnum.relationSystem.getKey());
+        }
+    }
+
+    /**
+     * 症状扩展
+     *
+     * @param commonParam
+     * @param klSymptomVO
+     */
+    public void saveKlSymptom(CommonParam commonParam, KlSymptomVO klSymptomVO) {
+        // 症状关联科室,部位,伴随症状,性质统一处理。先查找全部数据,删除关联排序表,再删除关联表
+        List<Integer> relationIdList = Lists.newArrayList(
+                RelationLibTypeEnum.relationDept.getKey(),
+                RelationLibTypeEnum.relationPart.getKey(),
+                RelationLibTypeEnum.relationAccSymptom.getKey(),
+                RelationLibTypeEnum.relationNature.getKey()
+        );
+        klRelationRemove(commonParam, relationIdList);
+
+        if (klSymptomVO != null) {
+            // 【科室关联】
+            klRelationSave(commonParam, klSymptomVO.getDeptList(), RelationLibTypeEnum.relationDept.getKey());
+            // 【部位关联】
+            klRelationSave(commonParam, klSymptomVO.getPartList(), RelationLibTypeEnum.relationPart.getKey());
+            // 【常见伴随症状关联】
+            klRelationSave(commonParam, klSymptomVO.getConSymptomList(), RelationLibTypeEnum.relationAccSymptom.getKey());
+            // 【性质关联】
+            klRelationSave(commonParam, klSymptomVO.getNatureList(), RelationLibTypeEnum.relationNature.getKey());
+        }
+    }
+
+    /**
+     * 体征结果扩展
+     * @param commonParam
+     * @param klVitalResultVO
+     */
+    public void saveKlVitalRes(CommonParam commonParam, KlVitalResultVO klVitalResultVO) {
+        if(klVitalResultVO == null){
+            return;
+        }
+        // 先删除体征结果扩展表
+        klVitalResultService.remove(new QueryWrapper<KlVitalResult>().eq("concept_id", commonParam.getConceptId()));
+        // 重新插入扩展表
+        KlVitalResult klVitalResult = new KlVitalResult();
+        BeanUtil.copyProperties(klVitalResultVO, klVitalResult);
+        klVitalResult.setConceptId(commonParam.getConceptId());
+        klVitalResult.setGmtModified(commonParam.getNow());
+        klVitalResult.setGmtCreate(commonParam.getNow());
+        klVitalResult.setCreator(commonParam.getPerson());
+        klVitalResult.setModifier(commonParam.getPerson());
+        klVitalResultService.save(klVitalResult);
+
+        // 体征结果关联科室,部位统一处理。先查找全部数据,删除关联排序表,再删除关联表
+        List<Integer> relationIdList = Lists.newArrayList(
+                RelationLibTypeEnum.relationDept.getKey(),
+                RelationLibTypeEnum.relationPart.getKey()
+        );
+        klRelationRemove(commonParam, relationIdList);
+
+        if (klVitalResultVO != null) {
+            // 【科室关联】
+            klRelationSave(commonParam, klVitalResultVO.getDeptList(), RelationLibTypeEnum.relationDept.getKey());
+            // 【部位关联】
+            klRelationSave(commonParam, klVitalResultVO.getPartList(), RelationLibTypeEnum.relationPart.getKey());
+        }
+    }
+
+    /**
+     * 删除关联表和关联排序表
+     *
+     * @param commonParam 通用参数
+     * @param relationList 关联类型列表
+     */
+    public void klRelationRemove(CommonParam commonParam, List<Integer> relationList) {
+        List<KlRelation> klRelationList = this.list(new QueryWrapper<KlRelation>()
+                .eq("start_id", commonParam.getConceptId())
+                .in("relation_id", relationList)
+        );
+        if (ListUtil.isNotEmpty(klRelationList)) {
+            List<Long> idList = klRelationList.stream().map(r -> r.getId()).collect(Collectors.toList());
+            // 删除关联排序表
+            klRelationOrderService.remove(new QueryWrapper<KlRelationOrder>().in("t_relation_id", idList));
+            // 删除关联表
+            this.remove(new QueryWrapper<KlRelation>().in("id", idList));
+        }
+    }
+
+    /**
+     * 保存关联表和关联排序表
+     *
+     * @param commonParam
+     * @param idList
+     * @param relationId
+     */
+    public void klRelationSave(CommonParam commonParam, List<Long> idList, Integer relationId) {
+        if (ListUtil.isEmpty(idList)) {
+            return;
+        }
+        List<KlRelation> relationSaveList = Lists.newArrayList();
+        for (Long endId : idList) {
+            KlRelation klRelation = new KlRelation();
+            klRelation.setStartId(commonParam.getConceptId());
+            klRelation.setRelationId(relationId);
+            klRelation.setEndId(endId);
+            klRelation.setGmtModified(commonParam.getNow());
+            klRelation.setGmtCreate(commonParam.getNow());
+            klRelation.setCreator(commonParam.getPerson());
+            klRelation.setModifier(commonParam.getPerson());
+            relationSaveList.add(klRelation);
+        }
+        klRelationService.saveBatch(relationSaveList);
+
+        // 【科室关联排序】
+        List<KlRelationOrder> OrderSaveList = Lists.newArrayList();
+        int i = 1;
+        for (KlRelation klRelation : relationSaveList) {
+            KlRelationOrder klRelationOrder = new KlRelationOrder();
+            klRelationOrder.settRelationId(klRelation.getId());
+            klRelationOrder.setOrderNo(i++);
+            klRelation.setGmtModified(commonParam.getNow());
+            klRelation.setGmtCreate(commonParam.getNow());
+            klRelation.setCreator(commonParam.getPerson());
+            klRelation.setModifier(commonParam.getPerson());
+            OrderSaveList.add(klRelationOrder);
+        }
+        klRelationOrderService.saveBatch(OrderSaveList);
+    }
+
+
 }

+ 95 - 0
cdssman-service/src/main/java/com/diagbot/facade/KlSymptomFacade.java

@@ -0,0 +1,95 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.KlConceptAllDTO;
+import com.diagbot.dto.KlConceptSimDTO;
+import com.diagbot.dto.KlSymptomDTO;
+import com.diagbot.entity.CommonParam;
+import com.diagbot.entity.KlSymptom;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.LexiconEnum;
+import com.diagbot.enums.RelationLibTypeEnum;
+import com.diagbot.service.impl.KlSymptomServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.vo.ConceptRelationVO;
+import com.diagbot.vo.KlSymptomVO;
+import com.google.common.collect.Lists;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author zhoutg
+ * @Description:
+ * @date 2021-04-13 10:41
+ */
+@Component
+public class KlSymptomFacade extends KlSymptomServiceImpl {
+
+    @Autowired
+    KlConceptFacade klConceptFacade;
+
+    /**
+     * 保存症状扩展表
+     *
+     * @param commonParam
+     * @param klSymptomVO
+     * @return
+     */
+    public boolean saveAll(CommonParam commonParam, KlSymptomVO klSymptomVO) {
+        // 先删除疾病扩展表
+        this.remove(new QueryWrapper<KlSymptom>().eq("concept_id", commonParam.getConceptId()));
+        // 重新插入扩展表
+        KlSymptom klSymptom = new KlSymptom();
+        BeanUtil.copyProperties(klSymptomVO, klSymptom);
+        klSymptom.setConceptId(commonParam.getConceptId());
+        klSymptom.setGmtModified(commonParam.getNow());
+        klSymptom.setGmtCreate(commonParam.getNow());
+        klSymptom.setCreator(commonParam.getPerson());
+        klSymptom.setModifier(commonParam.getPerson());
+        return this.save(klSymptom);
+    }
+
+    /**
+     * 疾病扩展获取
+     *
+     * @param conceptId
+     * @param klConceptAllDTO
+     */
+    public void getKlSymptom(Long conceptId, KlConceptAllDTO klConceptAllDTO) {
+        KlSymptom klSymptom = this.getOne(new QueryWrapper<KlSymptom>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("concept_id", conceptId), false);
+        if (klSymptom == null) {
+            return;
+        }
+        KlSymptomDTO klSymptomDTO = new KlSymptomDTO();
+        BeanUtil.copyProperties(klSymptom, klSymptomDTO);
+
+        List<Integer> relationIdList = Lists.newArrayList(
+                RelationLibTypeEnum.relationDept.getKey(),
+                RelationLibTypeEnum.relationPart.getKey(),
+                RelationLibTypeEnum.relationAccSymptom.getKey(),
+                RelationLibTypeEnum.relationNature.getKey()
+        );
+        ConceptRelationVO conceptRelationVO = new ConceptRelationVO();
+        conceptRelationVO.setConceptId(conceptId);
+        conceptRelationVO.setRelationList(relationIdList);
+        Map<Integer, List<KlConceptSimDTO>> map = klConceptFacade.getRelationConceptFac(conceptRelationVO);
+        if (map.get(LexiconEnum.Part.getKey()) != null) { // 关联部位
+            klSymptomDTO.setPartList(map.get(LexiconEnum.Part.getKey()));
+        }
+        if (map.get(LexiconEnum.Dept.getKey()) != null) { // 关联科室
+            klSymptomDTO.setDeptList(map.get(LexiconEnum.Dept.getKey()));
+        }
+        if (map.get(LexiconEnum.Symptom.getKey()) != null) { // 关联伴随症状
+            klSymptomDTO.setConSymptomList(map.get(LexiconEnum.Symptom.getKey()));
+        }
+        if (map.get(LexiconEnum.Nature.getKey()) != null) { // 关联性质
+            klSymptomDTO.setNatureList(map.get(LexiconEnum.Nature.getKey()));
+        }
+        klConceptAllDTO.setKlSymptomDTO(klSymptomDTO);
+    }
+}

+ 63 - 0
cdssman-service/src/main/java/com/diagbot/facade/KlVitalResFacade.java

@@ -0,0 +1,63 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.KlConceptAllDTO;
+import com.diagbot.dto.KlConceptSimDTO;
+import com.diagbot.dto.KlVitalResultDTO;
+import com.diagbot.entity.CommonParam;
+import com.diagbot.entity.KlOperation;
+import com.diagbot.entity.KlVitalResult;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.LexiconEnum;
+import com.diagbot.enums.RelationLibTypeEnum;
+import com.diagbot.service.impl.KlOperationServiceImpl;
+import com.diagbot.service.impl.KlVitalResultServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.vo.ConceptRelationVO;
+import com.diagbot.vo.KlOperationVO;
+import com.diagbot.vo.KlVitalResultVO;
+import com.google.common.collect.Lists;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author kwz
+ * @Description:
+ * @date 2021-03-18 16:38
+ */
+@Component
+public class KlVitalResFacade extends KlVitalResultServiceImpl {
+
+    @Autowired
+    KlConceptFacade klConceptFacade;
+
+
+    public void getKlVitalResult(Long conceptId, KlConceptAllDTO klConceptAll) {
+        KlVitalResult klVitalResult = this.getOne(new QueryWrapper<KlVitalResult>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("concept_id", conceptId), false);
+        if(klVitalResult == null){
+            return;
+        }
+        KlVitalResultDTO klVitalResultDTO = new KlVitalResultDTO();
+        BeanUtil.copyProperties(klVitalResult,klVitalResultDTO);
+        List<Integer> relationIdList = Lists.newArrayList(
+                RelationLibTypeEnum.relationDept.getKey(),
+                RelationLibTypeEnum.relationPart.getKey()
+        );
+        ConceptRelationVO conceptRelationVO = new ConceptRelationVO();
+        conceptRelationVO.setConceptId(conceptId);
+        conceptRelationVO.setRelationList(relationIdList);
+        Map<Integer, List<KlConceptSimDTO>> map = klConceptFacade.getRelationConceptFac(conceptRelationVO);
+        if (map.get(LexiconEnum.Part.getKey()) != null) {
+            klVitalResultDTO.setPartList(map.get(LexiconEnum.Part.getKey()));
+        }
+        if (map.get(LexiconEnum.Dept.getKey()) != null) {
+            klVitalResultDTO.setDeptList(map.get(LexiconEnum.Dept.getKey()));
+        }
+        klConceptAll.setKlVitalResultDTO(klVitalResultDTO);
+    }
+}

+ 646 - 0
cdssman-service/src/main/java/com/diagbot/facade/XLSXCovertCSVReader.java

@@ -0,0 +1,646 @@
+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;
+import org.apache.commons.collections4.map.LinkedMap;
+import org.apache.poi.hssf.usermodel.HSSFDateUtil;
+import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.openxml4j.opc.PackageAccess;
+import org.apache.poi.ss.usermodel.BuiltinFormats;
+import org.apache.poi.ss.usermodel.DataFormatter;
+import org.apache.poi.xssf.eventusermodel.ReadOnlySharedStringsTable;
+import org.apache.poi.xssf.eventusermodel.XSSFReader;
+import org.apache.poi.xssf.model.StylesTable;
+import org.apache.poi.xssf.usermodel.XSSFCellStyle;
+import org.apache.poi.xssf.usermodel.XSSFRichTextString;
+import org.springframework.web.multipart.MultipartFile;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.DefaultHandler;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.lang.reflect.Field;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @description:
+ * @author: zhoutg
+ * @time: 2021/5/19 16:34
+ */
+public class XLSXCovertCSVReader {
+    /**
+     * The type of the data value is indicated by an attribute on the cell. The
+     * value is usually in a "v" element within the cell.
+     */
+    enum xssfDataType {
+        BOOL, ERROR, FORMULA, INLINESTR, SSTINDEX, NUMBER,
+    }
+
+    /**
+     * 使用xssf_sax_API处理Excel,请参考: http://poi.apache.org/spreadsheet/how-to.html#xssf_sax_api
+     * <p/>
+     * Also see Standard ECMA-376, 1st edition, part 4, pages 1928ff, at
+     * http://www.ecma-international.org/publications/standards/Ecma-376.htm
+     * <p/>
+     * A web-friendly version is http://openiso.org/Ecma/376/Part4
+     */
+    class MyXSSFSheetHandler extends DefaultHandler {
+
+        /**
+         * Table with styles
+         */
+        private StylesTable stylesTable;
+
+        /**
+         * Table with unique strings
+         */
+        private ReadOnlySharedStringsTable sharedStringsTable;
+
+        /**
+         * Destination for data
+         */
+        private final PrintStream output;
+
+        /**
+         * Number of columns to read starting with leftmost
+         */
+        private final int minColumnCount;
+
+        // Set when V start element is seen
+        private boolean vIsOpen;
+
+        // Set when cell start element is seen;
+        // used when cell close element is seen.
+        private xssfDataType nextDataType;
+
+        // Used to format numeric cell values.
+        private short formatIndex;
+        private String formatString;
+        private final DataFormatter formatter;
+
+        private int thisColumn = -1;
+        // The last column printed to the output stream
+        private int lastColumnNumber = -1;
+
+        // Gathers characters as they are seen.
+        private StringBuffer value;
+        private String[] record;
+        private List<String[]> rows = new ArrayList<String[]>();
+        private boolean isCellNull = false;
+
+        /**
+         * 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
+         */
+        public MyXSSFSheetHandler(StylesTable styles,
+                                  ReadOnlySharedStringsTable strings, int cols, PrintStream target) {
+            this.stylesTable = styles;
+            this.sharedStringsTable = strings;
+            this.minColumnCount = cols;
+            this.output = target;
+            this.value = new StringBuffer();
+            this.nextDataType = xssfDataType.NUMBER;
+            this.formatter = new DataFormatter();
+            record = new String[this.minColumnCount];
+            rows.clear();// 每次读取都清空行集合
+        }
+
+        /*
+         * (non-Javadoc)
+         *
+         * @see
+         * org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String,
+         * java.lang.String, java.lang.String, org.xml.sax.Attributes)
+         */
+        public void startElement(String uri, String localName, String name,
+                                 Attributes attributes) throws SAXException {
+
+            if ("inlineStr".equals(name) || "v".equals(name)) {
+                vIsOpen = true;
+                // Clear contents cache
+                value.setLength(0);
+            }
+            // c => cell
+            else if ("c".equals(name)) {
+                // Get the cell reference
+                String r = attributes.getValue("r");
+                int firstDigit = -1;
+                for (int c = 0; c < r.length(); ++c) {
+                    if (Character.isDigit(r.charAt(c))) {
+                        firstDigit = c;
+                        break;
+                    }
+                }
+                thisColumn = nameToColumn(r.substring(0, firstDigit));
+
+                // Set up defaults.
+                this.nextDataType = xssfDataType.NUMBER;
+                this.formatIndex = -1;
+                this.formatString = null;
+                String cellType = attributes.getValue("t");
+                String cellStyleStr = attributes.getValue("s");
+                if ("b".equals(cellType))
+                    nextDataType = xssfDataType.BOOL;
+                else if ("e".equals(cellType))
+                    nextDataType = xssfDataType.ERROR;
+                else if ("inlineStr".equals(cellType))
+                    nextDataType = xssfDataType.INLINESTR;
+                else if ("s".equals(cellType))
+                    nextDataType = xssfDataType.SSTINDEX;
+                else if ("str".equals(cellType))
+                    nextDataType = xssfDataType.FORMULA;
+                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)
+                        this.formatString = BuiltinFormats
+                                .getBuiltinFormat(this.formatIndex);
+                }
+            }
+
+        }
+
+        /*
+         * (non-Javadoc)
+         *
+         * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String,
+         * java.lang.String, java.lang.String)
+         */
+        public void endElement(String uri, String localName, String name)
+                throws SAXException {
+
+            String thisStr = null;
+
+            // v => contents of a cell
+            if ("v".equals(name)) {
+                // Process the value contents as required.
+                // Do now, as characters() may be called more than once
+                switch (nextDataType) {
+
+                    case BOOL:
+                        char first = value.charAt(0);
+                        thisStr = first == '0' ? "FALSE" : "TRUE";
+                        break;
+
+                    case ERROR:
+                        thisStr = "\"ERROR:" + value.toString() + '"';
+                        break;
+
+                    case FORMULA:
+                        // A formula could result in a string value,
+                        // so always add double-quote characters.
+                        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() + '"';
+                        break;
+
+                    case SSTINDEX:
+                        String sstIndex = value.toString();
+                        try {
+                            int idx = Integer.parseInt(sstIndex);
+                            XSSFRichTextString rtss = new XSSFRichTextString(
+                                    sharedStringsTable.getEntryAt(idx));
+                            thisStr = '"' + rtss.toString() + '"';
+                        } catch (NumberFormatException ex) {
+                            output.println("Failed to parse SST index '" + sstIndex
+                                    + "': " + ex.toString());
+                        }
+                        break;
+
+                    case NUMBER:
+                        String n = value.toString();
+                        // 判断是否是日期格式
+                        if (HSSFDateUtil.isADateFormat(this.formatIndex, n)) {
+                            Double d = Double.parseDouble(n);
+                            Date date=HSSFDateUtil.getJavaDate(d);
+                            thisStr=formateDateToString(date);
+                        } else if (this.formatString != null)
+                            thisStr = formatter.formatRawCellContents(
+                                    Double.parseDouble(n), this.formatIndex,
+                                    this.formatString);
+                        else
+                            thisStr = n;
+                        break;
+
+                    default:
+                        thisStr = "(TODO: Unexpected type: " + nextDataType + ")";
+                        break;
+                }
+
+                // Output after we've seen the string contents
+                // Emit commas for any fields that were missing on this row
+                if (lastColumnNumber == -1) {
+                    lastColumnNumber = 0;
+                }
+                //判断单元格的值是否为空
+                if (thisStr == null || "".equals(isCellNull)) {
+                    isCellNull = true;// 设置单元格是否为空值
+                }
+                record[thisColumn] = thisStr;
+                // Update column
+                if (thisColumn > -1)
+                    lastColumnNumber = thisColumn;
+
+            } else if ("row".equals(name)) {
+
+                // Print out any missing commas if needed
+                if (minColumns > 0) {
+                    // Columns are 0 based
+                    if (lastColumnNumber == -1) {
+                        lastColumnNumber = 0;
+                    }
+                    if (isCellNull == false && record[0] != null
+                            && record[1] != null)// 判断是否空行
+                    {
+                        rows.add(record.clone());
+                        isCellNull = false;
+                        for (int i = 0; i < record.length; i++) {
+                            record[i] = null;
+                        }
+                    }
+                }
+                lastColumnNumber = -1;
+            }
+
+        }
+
+        public List<String[]> getRows() {
+            return rows;
+        }
+
+        public void setRows(List<String[]> rows) {
+            this.rows = rows;
+        }
+
+        /**
+         * Captures characters only if a suitable element is open. Originally
+         * was just "v"; extended for inlineStr also.
+         */
+        public void characters(char[] ch, int start, int length)
+                throws SAXException {
+            if (vIsOpen)
+                value.append(ch, start, length);
+        }
+
+        /**
+         * Converts an Excel column name like "C" to a zero-based index.
+         *
+         * @param name
+         * @return Index corresponding to the specified name
+         */
+        private int nameToColumn(String name) {
+            int column = -1;
+            for (int i = 0; i < name.length(); ++i) {
+                int c = name.charAt(i);
+                column = (column + 1) * 26 + c - 'A';
+            }
+            return column;
+        }
+
+        private String formateDateToString(Date date) {
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式化日期
+            return sdf.format(date);
+
+        }
+
+    }
+
+    // /
+
+    private OPCPackage xlsxPackage;
+    private int minColumns;
+    private PrintStream output;
+    private String sheetName;
+
+    /**
+     * 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
+     */
+    public XLSXCovertCSVReader(OPCPackage pkg, PrintStream output,
+                               String sheetName, int minColumns) {
+        this.xlsxPackage = pkg;
+        this.output = output;
+        this.minColumns = minColumns;
+        this.sheetName = sheetName;
+    }
+
+    /**
+     * Parses and shows the content of one sheet using the specified styles and
+     * shared-strings tables.
+     *
+     * @param styles
+     * @param strings
+     * @param sheetInputStream
+     */
+    public List<String[]> processSheet(StylesTable styles,
+                                       ReadOnlySharedStringsTable strings, InputStream sheetInputStream)
+            throws IOException, ParserConfigurationException, SAXException {
+
+        InputSource sheetSource = new InputSource(sheetInputStream);
+        SAXParserFactory saxFactory = SAXParserFactory.newInstance();
+        SAXParser saxParser = saxFactory.newSAXParser();
+        XMLReader sheetParser = saxParser.getXMLReader();
+        MyXSSFSheetHandler handler = new MyXSSFSheetHandler(styles, strings,
+                this.minColumns, this.output);
+        sheetParser.setContentHandler(handler);
+        sheetParser.parse(sheetSource);
+        return handler.getRows();
+    }
+
+    /**
+     * 初始化这个处理程序 将
+     *
+     * @throws IOException
+     * @throws OpenXML4JException
+     * @throws ParserConfigurationException
+     * @throws SAXException
+     */
+    public List<String[]> process() throws IOException, OpenXML4JException,
+            ParserConfigurationException, SAXException {
+
+        ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable(
+                this.xlsxPackage);
+        XSSFReader xssfReader = new XSSFReader(this.xlsxPackage);
+        List<String[]> list = null;
+        StylesTable styles = xssfReader.getStylesTable();
+        XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) xssfReader
+                .getSheetsData();
+        int index = 0;
+        while (iter.hasNext()) {
+            InputStream stream = iter.next();
+            String sheetNameTemp = iter.getSheetName();
+            if (this.sheetName.equals(sheetNameTemp)) {
+                list = processSheet(styles, strings, stream);
+                stream.close();
+                ++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
+     *            列总数
+     * @return
+     * @throws SAXException
+     * @throws ParserConfigurationException
+     * @throws OpenXML4JException
+     * @throws IOException
+     */
+    private static List<String[]> readerExcel(String path, String sheetName,
+                                              int minColumns) throws IOException, OpenXML4JException,
+            ParserConfigurationException, SAXException {
+        OPCPackage p = OPCPackage.open(path, PackageAccess.READ);
+        XLSXCovertCSVReader xlsx2csv = new XLSXCovertCSVReader(p, System.out,
+                sheetName, minColumns);
+        List<String[]> list = xlsx2csv.process();
+        p.close();
+        return list;
+    }
+
+    /**
+     * 读取Excel
+     *
+     * @param inputStream
+     * @param sheetName
+     * @param minColumns
+     * @return
+     * @throws IOException
+     * @throws OpenXML4JException
+     * @throws ParserConfigurationException
+     * @throws SAXException
+     */
+    private static List<String[]> readerExcel(InputStream inputStream, String sheetName,
+                                             int minColumns) throws IOException, OpenXML4JException,
+            ParserConfigurationException, SAXException {
+        OPCPackage p = OPCPackage.open(inputStream);
+        XLSXCovertCSVReader xlsx2csv = new XLSXCovertCSVReader(p, System.out,
+                sheetName, minColumns);
+        List<String[]> list = xlsx2csv.process();
+        p.close();
+        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;
+    }
+
+    /**
+     * 读取数据
+     *
+     * @param path
+     * @param sheetName
+     * @param colNum
+     * @param c
+     * @return
+     */
+    public static <T> List<T> readData(String path, String sheetName, int colNum, Class<T> c) {
+        List<T> list = Lists.newArrayList();
+        try {
+            List<String[]> stringList = XLSXCovertCSVReader.readerExcel(path, sheetName, colNum);
+            return dealData(stringList, c);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return list;
+    }
+
+    /**
+     * 读取数据
+     *
+     * @param file
+     * @param sheetName
+     * @param colNum
+     * @param c
+     * @return
+     */
+    public static <T> List<T> readData(MultipartFile file, String sheetName, int colNum, Class<T> c) {
+        List<T> list = Lists.newArrayList();
+        try {
+            List<String[]> stringList = XLSXCovertCSVReader.readerExcel(file.getInputStream(), sheetName, colNum);
+            return dealData(stringList, c);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        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;
+    }
+}

+ 5 - 1
cdssman-service/src/main/java/com/diagbot/mapper/KlConceptMapper.java

@@ -1,10 +1,12 @@
 package com.diagbot.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.KlConceptAllDTO;
 import com.diagbot.dto.KlConceptInfoDTO;
+import com.diagbot.dto.KlConceptSimDTO;
 import com.diagbot.entity.KlConcept;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.vo.ConceptRelationVO;
 import com.diagbot.vo.KlConceptAllVO;
 import com.diagbot.vo.KlConceptInfoVO;
 
@@ -25,4 +27,6 @@ public interface KlConceptMapper extends BaseMapper<KlConcept> {
     List<KlConceptAllDTO> getConceptAll(KlConceptAllVO klConceptAllVO);
 
     IPage<KlConceptInfoDTO> getConceptPage2(KlConceptInfoVO klConceptInfoVO);
+
+    List<KlConceptSimDTO> getRelationConcept(ConceptRelationVO conceptRelationVO);
 }

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.KlDrugMapping;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 药品通用名和注册名映射表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+public interface KlDrugMappingMapper extends BaseMapper<KlDrugMapping> {
+
+}

+ 32 - 0
cdssman-service/src/main/java/com/diagbot/mapper/KlDrugRegisterMapper.java

@@ -0,0 +1,32 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.KlConceptSimDTO;
+import com.diagbot.dto.KlDrugMappingDTO;
+import com.diagbot.dto.KlDrugRegisterDTO;
+import com.diagbot.entity.KlDrugRegister;
+import com.diagbot.vo.KlDrugMappingGetVO;
+import com.diagbot.vo.KlDrugRegisterPageVO;
+import com.diagbot.vo.KlDrugSearchVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 药品注册表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+public interface KlDrugRegisterMapper extends BaseMapper<KlDrugRegister> {
+
+    IPage<KlDrugRegisterDTO> getPage(KlDrugRegisterPageVO klDrugRegisterPageVO);
+
+    List<KlDrugMappingDTO> getMappingRegister(KlDrugMappingGetVO klDrugMappingGetVO);
+
+    List<KlConceptSimDTO> getMappingDrug(KlDrugMappingGetVO klDrugMappingGetVO);
+
+    List<KlConceptSimDTO> searchDrug(KlDrugSearchVO klDrugSearchVO);
+}

+ 16 - 0
cdssman-service/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 zhoutg
+ * @since 2021-05-12
+ */
+public interface KlOperationMapper extends BaseMapper<KlOperation> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.KlPacs;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 辅检扩展表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-12
+ */
+public interface KlPacsMapper extends BaseMapper<KlPacs> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.KlSymptom;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 症状扩展表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-12
+ */
+public interface KlSymptomMapper extends BaseMapper<KlSymptom> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.KlVitalResult;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 体征结果扩展表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-12
+ */
+public interface KlVitalResultMapper extends BaseMapper<KlVitalResult> {
+
+}

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

@@ -1,11 +1,12 @@
 package com.diagbot.service;
 
-import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.dto.KlConceptAllDTO;
 import com.diagbot.dto.KlConceptInfoDTO;
+import com.diagbot.dto.KlConceptSimDTO;
 import com.diagbot.entity.KlConcept;
-import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.vo.ConceptRelationVO;
 import com.diagbot.vo.KlConceptAllVO;
 import com.diagbot.vo.KlConceptInfoVO;
 
@@ -24,4 +25,6 @@ public interface KlConceptService extends IService<KlConcept> {
     public List<KlConceptAllDTO> getConceptAll(KlConceptAllVO klConceptAllVO);
 
     IPage<KlConceptInfoDTO> getConceptPage2(KlConceptInfoVO klConceptInfoVO);
+
+    List<KlConceptSimDTO> getRelationConcept(ConceptRelationVO conceptRelationVO);
 }

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.KlDrugMapping;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 药品通用名和注册名映射表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+public interface KlDrugMappingService extends IService<KlDrugMapping> {
+
+}

+ 32 - 0
cdssman-service/src/main/java/com/diagbot/service/KlDrugRegisterService.java

@@ -0,0 +1,32 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.KlConceptSimDTO;
+import com.diagbot.dto.KlDrugMappingDTO;
+import com.diagbot.dto.KlDrugRegisterDTO;
+import com.diagbot.entity.KlDrugRegister;
+import com.diagbot.vo.KlDrugMappingGetVO;
+import com.diagbot.vo.KlDrugRegisterPageVO;
+import com.diagbot.vo.KlDrugSearchVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 药品注册表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+public interface KlDrugRegisterService extends IService<KlDrugRegister> {
+
+    IPage<KlDrugRegisterDTO> getPage(KlDrugRegisterPageVO klDrugRegisterPageVO);
+
+    List<KlDrugMappingDTO> getMappingRegister(KlDrugMappingGetVO klDrugMappingGetVO);
+
+    List<KlConceptSimDTO> getMappingDrug(KlDrugMappingGetVO klDrugMappingGetVO);
+
+    List<KlConceptSimDTO> searchDrug(KlDrugSearchVO klDrugSearchVO);
+}

+ 16 - 0
cdssman-service/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 zhoutg
+ * @since 2021-05-12
+ */
+public interface KlOperationService extends IService<KlOperation> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.KlPacs;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 辅检扩展表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-12
+ */
+public interface KlPacsService extends IService<KlPacs> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.KlSymptom;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 症状扩展表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-12
+ */
+public interface KlSymptomService extends IService<KlSymptom> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.KlVitalResult;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 体征结果扩展表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-12
+ */
+public interface KlVitalResultService extends IService<KlVitalResult> {
+
+}

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

@@ -4,10 +4,12 @@ import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.KlConceptAllDTO;
 import com.diagbot.dto.KlConceptInfoDTO;
+import com.diagbot.dto.KlConceptSimDTO;
 import com.diagbot.entity.KlConcept;
 import com.diagbot.mapper.KlConceptMapper;
 import com.diagbot.service.KlConceptService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.vo.ConceptRelationVO;
 import com.diagbot.vo.KlConceptAllVO;
 import com.diagbot.vo.KlConceptInfoVO;
 import org.springframework.stereotype.Service;
@@ -40,4 +42,9 @@ public class KlConceptServiceImpl extends ServiceImpl<KlConceptMapper, KlConcept
     public IPage<KlConceptInfoDTO> getConceptPage2(KlConceptInfoVO klConceptInfoVO){
         return baseMapper.getConceptPage2(klConceptInfoVO);
     }
+
+    @Override
+    public List<KlConceptSimDTO> getRelationConcept(ConceptRelationVO conceptRelationVO) {
+        return baseMapper.getRelationConcept(conceptRelationVO);
+    }
 }

+ 22 - 0
cdssman-service/src/main/java/com/diagbot/service/impl/KlDrugMappingServiceImpl.java

@@ -0,0 +1,22 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.entity.KlDrugMapping;
+import com.diagbot.mapper.KlDrugMappingMapper;
+import com.diagbot.service.KlDrugMappingService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 药品通用名和注册名映射表 服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Service
+@DS("med")
+public class KlDrugMappingServiceImpl extends ServiceImpl<KlDrugMappingMapper, KlDrugMapping> implements KlDrugMappingService {
+
+}

+ 50 - 0
cdssman-service/src/main/java/com/diagbot/service/impl/KlDrugRegisterServiceImpl.java

@@ -0,0 +1,50 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.KlConceptSimDTO;
+import com.diagbot.dto.KlDrugMappingDTO;
+import com.diagbot.dto.KlDrugRegisterDTO;
+import com.diagbot.entity.KlDrugRegister;
+import com.diagbot.mapper.KlDrugRegisterMapper;
+import com.diagbot.service.KlDrugRegisterService;
+import com.diagbot.vo.KlDrugMappingGetVO;
+import com.diagbot.vo.KlDrugRegisterPageVO;
+import com.diagbot.vo.KlDrugSearchVO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 药品注册表 服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Service
+@DS("med")
+public class KlDrugRegisterServiceImpl extends ServiceImpl<KlDrugRegisterMapper, KlDrugRegister> implements KlDrugRegisterService {
+
+    @Override
+    public IPage<KlDrugRegisterDTO> getPage(KlDrugRegisterPageVO klDrugRegisterPageVO) {
+        return baseMapper.getPage(klDrugRegisterPageVO);
+    }
+
+    @Override
+    public List<KlDrugMappingDTO> getMappingRegister(KlDrugMappingGetVO klDrugMappingGetVO) {
+        return baseMapper.getMappingRegister(klDrugMappingGetVO);
+    }
+
+    @Override
+    public List<KlConceptSimDTO> getMappingDrug(KlDrugMappingGetVO klDrugMappingGetVO) {
+        return baseMapper.getMappingDrug(klDrugMappingGetVO);
+    }
+
+    @Override
+    public List<KlConceptSimDTO> searchDrug(KlDrugSearchVO klDrugSearchVO) {
+        return baseMapper.searchDrug(klDrugSearchVO);
+    }
+}

+ 20 - 0
cdssman-service/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 zhoutg
+ * @since 2021-05-12
+ */
+@Service
+public class KlOperationServiceImpl extends ServiceImpl<KlOperationMapper, KlOperation> implements KlOperationService {
+
+}

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

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.KlPacs;
+import com.diagbot.mapper.KlPacsMapper;
+import com.diagbot.service.KlPacsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 辅检扩展表 服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-12
+ */
+@Service
+public class KlPacsServiceImpl extends ServiceImpl<KlPacsMapper, KlPacs> implements KlPacsService {
+
+}

+ 22 - 0
cdssman-service/src/main/java/com/diagbot/service/impl/KlSymptomServiceImpl.java

@@ -0,0 +1,22 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.entity.KlSymptom;
+import com.diagbot.mapper.KlSymptomMapper;
+import com.diagbot.service.KlSymptomService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 症状扩展表 服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-12
+ */
+@Service
+@DS("med")
+public class KlSymptomServiceImpl extends ServiceImpl<KlSymptomMapper, KlSymptom> implements KlSymptomService {
+
+}

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

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.KlVitalResult;
+import com.diagbot.mapper.KlVitalResultMapper;
+import com.diagbot.service.KlVitalResultService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 体征结果扩展表 服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-12
+ */
+@Service
+public class KlVitalResultServiceImpl extends ServiceImpl<KlVitalResultMapper, KlVitalResult> implements KlVitalResultService {
+
+}

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

@@ -0,0 +1,293 @@
+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);
+    }
+}
+

+ 127 - 0
cdssman-service/src/main/java/com/diagbot/util/ReflectUtil.java

@@ -0,0 +1,127 @@
+package com.diagbot.util;
+
+import com.google.common.collect.Lists;
+
+import java.lang.reflect.Field;
+import java.util.List;
+
+/**
+ * @description: 反射工具类
+ * @author: zhoutg
+ * @date: 2021/4/27 13:29
+ */
+public class ReflectUtil {
+
+    /**
+     * 获取属性对应的值,以list形式返回
+     *
+     * @param list
+     * @param propertyName
+     * @param <T>
+     * @param <V>
+     * @return
+     */
+    public static <T, V> List<V> getPropertyList(List<T> list, String propertyName) {
+        List<V> res = Lists.newArrayList();
+        if (ListUtil.isEmpty(list)) {
+            return res;
+        }
+        for (T t : list) {
+            try {
+                V val = getProperty(t, propertyName);
+                if (val != null) {
+                    // 字符串类型不为空判断
+                    if (StringUtil.isNotBlank(String.valueOf(val))) {
+                        res.add(val);
+                    }
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return res;
+    }
+
+    /**
+     * 获取属性对应的值,以list形式返回——重载
+     *
+     * @param list
+     * @param <T>
+     * @return
+     */
+    public static <T> List<String> getPropertyList(List<T> list) {
+        return getPropertyList(list, "name");
+    }
+
+    /**
+     * 循环向上转型, 获取对象的 DeclaredField
+     *
+     * @param object    : 子类对象
+     * @param fieldName : 父类中的属性名
+     * @return 父类中的属性对象
+     */
+    public static Field getDeclaredField(Object object, String fieldName) {
+        Field field = null;
+        Class<?> clazz = object.getClass();
+        for (; clazz != Object.class; clazz = clazz.getSuperclass()) {
+            try {
+                field = clazz.getDeclaredField(fieldName);
+                return field;
+            } catch (Exception e) {
+                //这里甚么都不要做!并且这里的异常必须这样写,不能抛出去。
+                //如果这里的异常打印或者往外抛,则就不会执行clazz = clazz.getSuperclass(),最后就不会进入到父类中了
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 获取对象的属性值,直接使用getDeclaredFields()方法只能获取当前类声明的字段,需要递归向上获取
+     *
+     * @param object    : 子类对象
+     * @param fieldName : 父类中的属性名
+     * @return : 父类中的属性值
+     */
+    public static <T> T getProperty(Object object, String fieldName) {
+        try {
+            //根据 对象和属性名通过反射获取Field对象
+            Field field = getDeclaredField(object, fieldName);
+            // 容错处理
+            if (field == null) {
+                return null;
+            }
+            //抑制Java对其的检查
+            field.setAccessible(true);
+            //获取 object 中 field 所代表的属性值
+            return (T) field.get(object);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 对象赋值
+     *
+     * @param object
+     * @param property
+     * @param value
+     */
+    public static void setFieldValue(Object object, String property, Object value){
+        //根据 对象和属性名通过反射 调用上面的方法获取 Field对象
+        Field field = getDeclaredField(object, property) ;
+        //抑制Java对其的检查
+        field.setAccessible(true) ;
+        try {
+            field.set(object, value);
+        } catch (IllegalArgumentException e) {
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+
+    }
+}

+ 17 - 0
cdssman-service/src/main/java/com/diagbot/vo/ConceptRelationVO.java

@@ -0,0 +1,17 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhoutg
+ * @time: 2020/9/10 14:48
+ */
+@Data
+public class ConceptRelationVO {
+
+    private Long conceptId;
+    private List<Integer> relationList;
+}

+ 18 - 0
cdssman-service/src/main/java/com/diagbot/vo/ImportVO.java

@@ -0,0 +1,18 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+/**
+ * @Description:
+ * @Author:zhoutg
+ * @time: 2020/8/24 17:23
+ */
+@Data
+public class ImportVO {
+
+    // sheet名称
+    private String sheetName;
+    // 列数量
+    private Integer colNum  = 0;
+
+}

+ 6 - 5
cdssman-service/src/main/java/com/diagbot/vo/KlConceptAllVO.java

@@ -1,7 +1,6 @@
 package com.diagbot.vo;
 
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
 
 import javax.validation.constraints.NotNull;
 
@@ -10,9 +9,11 @@ import javax.validation.constraints.NotNull;
  * @Description:
  * @date 2021-03-02 14:06
  */
-@Setter
-@Getter
+@Data
 public class KlConceptAllVO {
     @NotNull(message = "请输入conceptId")
-    private Long  conceptId;
+    private Long conceptId;
+
+    @NotNull(message = "请输入libType")
+    private Integer libType;
 }

+ 32 - 7
cdssman-service/src/main/java/com/diagbot/vo/KlConceptSaveVO.java

@@ -15,31 +15,56 @@ import java.util.List;
 @Setter
 @Getter
 public class KlConceptSaveVO {
+    // 术语Id
     private Long conceptId;
+    // libId
     private Long libId;
     @NotBlank(message = "请输入医学标准术语名称")
     private String libName;
+    // 拼音
     private String spell;
     @NotNull(message = "请输入医学标准术语词性type")
     private Integer libType;
+    // 同义词名称
     private String synonymName;
     @NotNull(message = "请输入状态")
     private Integer status;
     //是否标准词,1:是,0:否
     private Integer isConcept = 0;
+    // 性别
     private Integer sexType;
     //是否有通用扩展(0:否;1:是)
     @NotNull(message = "请输入是否有通用扩展")
     private Integer isHasCommon;
+    // 最小年龄
     private Double minAge;
+    // 最大年龄
     private Double maxAge;
-    private Double minVal;
-    private Double maxVal;
-    private String unit;
-    private Integer scopeType;
-    private String icdCode;
+    // 备注
     private String remark;
-    private Integer drug;
-    private Long deptId;
+
+    // 同义词列表
     private List<KlConceptSaveSubVO> klConceptSub;
+
+    // 疾病扩展信息
+    private KlDiseaseVO klDiseaseVO;
+
+    // 药品通用名扩展
+    private KlDrugVO klDrugVO;
+
+    // 症状扩展信息
+    private KlSymptomVO klSymptomVO;
+
+    // 化验扩展信息
+    private KlLisVO klLisVO;
+
+    // 辅检扩展信息
+    private KlPacsVO klPacsVO;
+
+    // 手术扩展信息
+    private KlOperationVO klOperationVO;
+
+    // 体征结果扩展信息
+    private KlVitalResultVO klVitalResultVO;
+
 }

+ 152 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlDiseaseVO.java

@@ -0,0 +1,152 @@
+package com.diagbot.vo;
+
+import com.google.common.collect.Lists;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * 疾病表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Data
+public class KlDiseaseVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * ICD10编号
+     */
+    private String icd10Code;
+
+    /**
+     * 病程
+     */
+    private String course;
+
+    /**
+     * 诱因
+     */
+    private String inducement;
+
+    /**
+     * 饮食禁忌
+     */
+    private String foodProhibition;
+
+    /**
+     * 危险因素
+     */
+    private String hazard;
+
+    /**
+     * 治愈性
+     */
+    private String healing;
+
+    /**
+     * 危害性
+     */
+    private String pernicious;
+
+    /**
+     * 临床分类
+     */
+    private String clinicType;
+
+    /**
+     * 好发地区
+     */
+    private String vulArea;
+
+    /**
+     * 好发人群
+     */
+    private String vulCrowd;
+
+    /**
+     * 发病率
+     */
+    private Double incidence;
+
+    /**
+     * 是否传染(0:否,1:是)
+     */
+    private Integer isInfect;
+
+    /**
+     * 并发症
+     */
+    private String complication;
+
+    /**
+     * 病因
+     */
+    private String pathogeny;
+
+    /**
+     * 疾病分型
+     */
+    private String disType;
+
+    /**
+     * 中西医疾病(0:通用,1:西,2:中)
+     */
+    private Integer chWestern;
+
+    /**
+     * 是否常见病(0:否,1:是)
+     */
+    private Integer isCommonDis;
+
+    /**
+     * 是否遗传(0:否,1:是)
+     */
+    private Integer isHeredity;
+
+    /**
+     * 简称
+     */
+    private String nameSimple;
+
+    /**
+     * 英文简称
+     */
+    private String enNameSimple;
+
+    /**
+     * 英文名称
+     */
+    private String enName;
+
+    /**
+     * 肿瘤细胞类型
+     */
+    private String tumorCellType;
+
+    /**
+     * 形态学分类代码
+     */
+    private String morphology;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    // 科室列表
+    private List<Long> deptList = Lists.newLinkedList();
+
+    // 部位列表
+    private List<Long> partList = Lists.newLinkedList();
+
+    // 疾病系统分类列表
+    private List<Long> systemTypeList = Lists.newLinkedList();
+
+}

+ 29 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlDrugMappingGetVO.java

@@ -0,0 +1,29 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 药品通用名和注册药品关联表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Data
+public class KlDrugMappingGetVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 药品通用名conceptId
+     */
+    private Long drugConcept;
+
+    /**
+     * 注册药品Id
+     */
+    private Long registerId;
+}

+ 24 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlDrugRegisterDelVO.java

@@ -0,0 +1,24 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 药品注册表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Data
+public class KlDrugRegisterDelVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+}

+ 24 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlDrugRegisterGetVO.java

@@ -0,0 +1,24 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 药品注册表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Data
+public class KlDrugRegisterGetVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+}

+ 66 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlDrugRegisterImportExVO.java

@@ -0,0 +1,66 @@
+package com.diagbot.vo;
+
+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 KlDrugRegisterImportExVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Excel(name="药品代码")
+    private String drugCode;
+
+    @Excel(name="注册名称")
+    private String name;
+
+    @Excel(name="英文名称")
+    private String enName;
+
+    @Excel(name="商品名称")
+    private String tradeName;
+
+    @Excel(name="注册剂型")
+    private String form;
+
+    @Excel(name="注册规格")
+    private String specification;
+
+    @Excel(name="最小包装数量")
+    private String minPackQuantity;
+
+    @Excel(name="最小包装单位")
+    private String minPackUnit;
+
+    @Excel(name="药品企业")
+    private String company;
+
+    @Excel(name="批准文号")
+    private String approval;
+
+    @Excel(name="药品本位码")
+    private String standardCode;
+
+    @Excel(name="甲乙类")
+    private String insuranceType;
+
+    @Excel(name="医保备注")
+    private String insuranceRemrk;
+
+    @Excel(name="药品类别")
+    private String drugType;
+
+    @Excel(name="药品通用名")
+    private String drugName;
+
+}

+ 99 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlDrugRegisterPageVO.java

@@ -0,0 +1,99 @@
+package com.diagbot.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.Data;
+
+/**
+ * <p>
+ * 药品注册表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Data
+public class KlDrugRegisterPageVO extends Page {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 药品代码
+     */
+    private String drugCode;
+
+    /**
+     * 注册名称| 商品名称
+     */
+    private String name;
+
+    /**
+     * 英文名称
+     */
+    private String enName;
+
+    /**
+     * 药品剂型
+     */
+    private String form;
+
+    /**
+     * 注册规格
+     */
+    private String specification;
+
+    /**
+     * 最小包装数量
+     */
+    private String minPackQuantity;
+
+    /**
+     * 最小包装单位
+     */
+    private String minPackUnit;
+
+    /**
+     * 药品企业
+     */
+    private String company;
+
+    /**
+     * 批准文号
+     */
+    private String approval;
+
+    /**
+     * 药品本位码
+     */
+    private String standardCode;
+
+    /**
+     * 医保类型
+     */
+    private String insuranceType;
+
+    /**
+     * 医保备注
+     */
+    private String insuranceRemrk;
+
+    /**
+     * 药品通用名
+     */
+    private String commonName;
+
+    /**
+     * 药品类别
+     */
+    private String drugType;
+
+}

+ 104 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlDrugRegisterSaveVO.java

@@ -0,0 +1,104 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 药品注册表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Data
+public class KlDrugRegisterSaveVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 药品代码
+     */
+    private String drugCode;
+
+    /**
+     * 注册名称
+     */
+    private String name;
+
+    /**
+     * 英文名称
+     */
+    private String enName;
+
+    /**
+     * 商品名称
+     */
+    private String tradeName;
+
+    /**
+     * 药品剂型
+     */
+    private String form;
+
+    /**
+     * 注册规格
+     */
+    private String specification;
+
+    /**
+     * 最小包装数量
+     */
+    private String minPackQuantity;
+
+    /**
+     * 最小包装单位
+     */
+    private String minPackUnit;
+
+    /**
+     * 药品企业
+     */
+    private String company;
+
+    /**
+     * 批准文号
+     */
+    private String approval;
+
+    /**
+     * 药品本位码
+     */
+    private String standardCode;
+
+    /**
+     * 医保类型
+     */
+    private String insuranceType;
+
+    /**
+     * 医保备注
+     */
+    private String insuranceRemrk;
+
+    /**
+     * 药品类别
+     */
+    private String drugType;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 药品通用名Id
+     */
+    private Long drugConceptId;
+}

+ 71 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlDrugRegisterTestVO.java

@@ -0,0 +1,71 @@
+package com.diagbot.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.diagbot.entity.Ex;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 药品注册表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Data
+public class KlDrugRegisterTestVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Ex(name="药品代码")
+    @Excel(name="药品代码")
+    private String drugCode;
+
+    @Ex(name="注册名称")
+    private String name;
+
+    @Ex(name="英文名称")
+    private String enName;
+
+    @Ex(name="商品名称")
+    private String tradeName;
+
+    @Ex(name="注册剂型")
+    private String form;
+
+    @Ex(name="注册规格")
+    private String specification;
+
+    @Ex(name="最小包装数量")
+    @Excel(name="最小包装数量")
+    private String minPackQuantity;
+
+    @Ex(name="最小包装单位")
+    private String minPackUnit;
+
+    @Ex(name="药品企业")
+    private String company;
+
+    @Ex(name="批准文号")
+    private String approval;
+
+    @Ex(name="药品本位码")
+    private String standardCode;
+
+    @Ex(name="甲乙类")
+    @Excel(name="甲乙类")
+    private String insuranceType;
+
+    @Ex(name="医保备注")
+    @Excel(name="医保备注")
+    private String insuranceRemrk;
+
+    @Ex(name="药品类别")
+    private String drugType;
+
+    @Ex(name="药品通用名")
+    private String drugName;
+
+}

+ 24 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlDrugSearchVO.java

@@ -0,0 +1,24 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 药品注册名搜索药品通用名
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Data
+public class KlDrugSearchVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 搜索名
+     */
+    private String name;
+}

+ 26 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlDrugVO.java

@@ -0,0 +1,26 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 药品通用名和注册名映射表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Data
+public class KlDrugVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    // 药品类别(0:西药,1:中成药)
+    private Integer drug;
+
+    // // 药品注册名Id列表
+    // private List<Long> registerIdList = Lists.newLinkedList();
+
+}

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

@@ -0,0 +1,88 @@
+package com.diagbot.vo;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+;
+
+/**
+ * <p>
+ * 化验表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-11
+ */
+@Data
+public class KlLisVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 术语概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 最小值
+     */
+    private Double minValue;
+
+    /**
+     * 最大值
+     */
+    private Double maxValue;
+
+    /**
+     * 类型(0:范围内;1:范围外)
+     */
+    private Integer type;
+
+    /**
+     * 单位概念id
+     */
+
+    private String unit;
+
+    /**
+     * 检查标本
+     */
+    private String checkSpecimen;
+
+    /**
+     * 检查方法
+     */
+    private String checkMethod;
+
+    /**
+     * 影响因素
+     */
+    private String influenceFac;
+
+    /**
+     * 临床意义
+     */
+    private String clinicalSig;
+
+    /**
+     * 定性(阴、阳性)
+     */
+    private String qualitative;
+
+    /**
+     * 所属类别
+     */
+    private String category;
+
+    /**
+     * 英文名称
+     */
+    private String enName;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

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

@@ -0,0 +1,43 @@
+package com.diagbot.vo;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+;
+
+/**
+ * <p>
+ * 手术表
+ * </p>
+ *
+ * @author kwz
+ * @since 2021-05-11
+ */
+@Data
+public class KlOperationVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 术语概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 手术级别(0,1,2,3,4)
+     */
+    private Integer operationLevel;
+
+    /**
+     * 手术操作码
+     */
+    private String operationCode;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

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

@@ -0,0 +1,73 @@
+package com.diagbot.vo;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+;
+
+/**
+ * <p>
+ * 辅检表
+ * </p>
+ *
+ * @author kwz
+ * @since 2021-05-11
+ */
+@Data
+public class KlPacsVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 术语概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 检查方法
+     */
+    private String checkMethod;
+
+    /**
+     * 项目定义
+     */
+    private String definition;
+
+    /**
+     * 检查目的
+     */
+    private String checkObjective;
+
+    /**
+     * 检查技术
+     */
+    private String checkSkillful;
+
+    /**
+     * 禁忌症和局限性
+     */
+    private String condLimit;
+
+    /**
+     * 适应症
+     */
+    private String interventional;
+
+    /**
+     * 危急标识(0:不危急,1:危急)
+     */
+    private Integer emergencySign;
+
+    /**
+     * 检查前准备
+     */
+    private String checkPrepare;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 93 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlSymptomVO.java

@@ -0,0 +1,93 @@
+package com.diagbot.vo;
+
+import com.google.common.collect.Lists;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * 症状扩展表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-05-12
+ */
+@Data
+public class KlSymptomVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 阳性症状(0:否,1:是)
+     */
+    private Integer isPositive;
+
+    /**
+     * 英文名称
+     */
+    private String enName;
+
+    /**
+     * 定义
+     */
+    private String definition;
+
+    /**
+     * 中西医症状(0:通用,1:西,2:中)
+     */
+    private Integer chWestern;
+
+    /**
+     * 缓解因素
+     */
+    private String mitigatingFac;
+
+    /**
+     * 加重因素
+     */
+    private String aggravateFac;
+
+    /**
+     * 症状起因
+     */
+    private String cause;
+
+    /**
+     * 常见疾病
+     */
+    private String commonDis;
+
+    /**
+     * 预防措施
+     */
+    private String preMeasures;
+
+    /**
+     * 饮食禁忌
+     */
+    private String foodProhibition;
+
+    /**
+     * 通俗解释
+     */
+    private String commonExplain;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    // 科室列表
+    private List<Long> deptList = Lists.newLinkedList();
+
+    // 发病部位
+    private List<Long> partList = Lists.newLinkedList();
+
+    // 常见伴随症状
+    private List<Long> conSymptomList = Lists.newLinkedList();
+
+    // 性质
+    private List<Long> natureList = Lists.newLinkedList();
+}

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

@@ -0,0 +1,50 @@
+package com.diagbot.vo;
+
+
+import com.google.common.collect.Lists;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+;
+
+/**
+ * <p>
+ * 手术表
+ * </p>
+ *
+ * @author kwz
+ * @since 2021-05-11
+ */
+@Data
+public class KlVitalResultVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 术语概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 不适宜人群
+     */
+    private String suitablePopNo;
+
+    /**
+     * 操作方法
+     */
+    private String checkMethod;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    // 科室列表
+    private List<Long> deptList = Lists.newLinkedList();
+
+    // 发病部位
+    private List<Long> partList = Lists.newLinkedList();
+}

+ 112 - 6
cdssman-service/src/main/java/com/diagbot/web/KlConceptController.java

@@ -4,30 +4,25 @@ 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;
 import com.diagbot.enums.StatusEnum;
 import com.diagbot.facade.KlConceptFacade;
-import com.diagbot.vo.GetAllForRelationVO;
 import com.diagbot.vo.KlConceptAllVO;
 import com.diagbot.vo.KlConceptClearVO;
 import com.diagbot.vo.KlConceptInfoVO;
 import com.diagbot.vo.KlConceptSatarOrdisaVO;
 import com.diagbot.vo.KlConceptSaveVO;
-import com.diagbot.vo.KlRuleSatartOrdisaVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
-import java.util.List;
 
 /**
  * <p>
@@ -58,13 +53,124 @@ public class KlConceptController {
     public RespDTO<KlConceptAllDTO> getConceptInfoAll(@RequestBody @Valid KlConceptAllVO klConceptAllVO) {
         return RespDTO.onSuc(klConceptFacade.getConceptAlls(klConceptAllVO));
     }
-    @ApiOperation(value = "新增和修改基础术语详情[by:wangfeng]")
+
+    @ApiOperation(value = "新增和修改基础术语详情[by:wangfeng]",
+            notes = "conceptId:术语Id\n" +
+                    "libId:libId\n" +
+                    "spell:拼音\n" +
+                    "synonymName:同义词名称\n" +
+                    "isConcept:是否标准词,1:是,0:否\n" +
+                    "sexType:性别\n" +
+                    "minAge:最小年龄\n" +
+                    "maxAge:最大年龄\n" +
+                    "remark:备注\n" +
+                    "klConceptSub:同义词列表\n" +
+
+                    "<br>" +
+                    "【klDiseaseVO:疾病扩展信息】\n" +
+                    "icd10Code:ICD10编号\n" +
+                    "course:病程\n" +
+                    "inducement:诱因\n" +
+                    "foodProhibition:饮食禁忌\n" +
+                    "hazard:危险因素\n" +
+                    "healing:治愈性\n" +
+                    "pernicious:危害性\n" +
+                    "clinicType:临床分类\n" +
+                    "vulArea:好发地区\n" +
+                    "vulCrowd:好发人群\n" +
+                    "incidence:发病率\n" +
+                    "isInfect:是否传染(0:否,1:是)\n" +
+                    "complication:并发症\n" +
+                    "pathogeny:病因\n" +
+                    "disType:疾病分型\n" +
+                    "chWestern:中西医疾病(0:通用,1:西,2:中)\n" +
+                    "isCommonDis:是否常见病(0:否,1:是)\n" +
+                    "isHeredity:是否遗传(0:否,1:是)\n" +
+                    "nameSimple:简称\n" +
+                    "enNameSimple:英文简称\n" +
+                    "enName:英文名称\n" +
+                    "remark:备注\n" +
+                    "tumorCellType:肿瘤细胞类型\n" +
+                    "morphology:形态学分类代码\n" +
+                    "deptList:科室列表\n" +
+                    "partList:部位列表\n" +
+                    "systemTypeList:疾病系统分类列表\n" +
+
+                    "<br>" +
+                    "【klDrugVO:药品通用名扩展】\n" +
+                    "drug:药品类别(0:西药,1:中成药)\n" +
+
+                    "<br>" +
+                    "【klSymptomVO:症状扩展信息】\n" +
+                    "isPositive:阳性症状(0:否,1:是)\n" +
+                    "enName:英文名称\n" +
+                    "definition:定义\n" +
+                    "chWestern:中西医症状(0:通用,1:西,2:中)\n" +
+                    "mitigatingFac:缓解因素\n" +
+                    "aggravateFac:加重因素\n" +
+                    "cause:症状起因\n" +
+                    "commonDis:常见疾病\n" +
+                    "preMeasures:预防措施\n" +
+                    "foodProhibition:饮食禁忌\n" +
+                    "commonExplain:通俗解释\n" +
+                    "remark:备注\n" +
+                    "deptList:科室列表\n" +
+                    "partList:发病部位列表\n" +
+                    "conSymptomList:常见伴随症状列表\n" +
+                    "natureList:性质列表\n" +
+
+                    "<br>" +
+                    "【klLisVO:化验扩展信息】\n" +
+                    "conceptId:术语概念id\n" +
+                    "minValue:最小值\n" +
+                    "maxValue:最大值\n" +
+                    "type:类型(0:范围内;1:范围外)\n" +
+                    "unit:单位概念id\n" +
+                    "checkSpecimen:检查标本\n" +
+                    "checkMethod:检查方法\n" +
+                    "influenceFac:影响因素\n" +
+                    "clinicalSig:临床意义\n" +
+                    "qualitative:定性(阴、阳性)\n" +
+                    "category:所属类别\n" +
+                    "enName:英文名称\n" +
+                    "remark:备注\n" +
+
+                    "<br>" +
+                    "【klPacsVO:辅检扩展信息】\n" +
+                    "conceptId:术语概念id\n" +
+                    "checkMethod:检查方法\n" +
+                    "definition:项目定义\n" +
+                    "checkObjective:检查目的\n" +
+                    "checkSkillful:检查技术\n" +
+                    "condLimit:禁忌症和局限性\n" +
+                    "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" +
+                    "suitablePopNo:不适宜人群\n" +
+                    "checkMethod:操作方法\n" +
+                    "remark:备注\n" +
+                    "deptList:科室列表\n" +
+                    "partList:发病部位"
+                     )
     @PostMapping("/saveConceptInfo")
     @SysLogger("saveConceptInfo")
     @DSTransactional
     public RespDTO<Boolean> saveConceptInfos(@RequestBody @Valid KlConceptSaveVO klConceptSaveVO) {
         return RespDTO.onSuc(klConceptFacade.saveConceptInfo(klConceptSaveVO));
     }
+
     @ApiOperation(value = "删除同义词[by:wangfeng]")
     @PostMapping("/clearConceptInfo")
     @SysLogger("clearConceptInfo")

+ 119 - 0
cdssman-service/src/main/java/com/diagbot/web/KlDrugRegisterController.java

@@ -0,0 +1,119 @@
+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.KlConceptSimDTO;
+import com.diagbot.dto.KlDrugRegisterDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.KlDrugRegisterFacade;
+import com.diagbot.vo.KlDrugRegisterDelVO;
+import com.diagbot.vo.KlDrugRegisterGetVO;
+import com.diagbot.vo.KlDrugRegisterPageVO;
+import com.diagbot.vo.KlDrugRegisterSaveVO;
+import com.diagbot.vo.KlDrugSearchVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 标签基础表 前端控制器
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-11-23
+ */
+@RestController
+@RequestMapping("/klDrugRegister")
+@SuppressWarnings("unchecked")
+@Api(value = "注册药品相关API", tags = { "注册药品相关API" })
+public class KlDrugRegisterController {
+
+    @Autowired
+    KlDrugRegisterFacade klDrugRegisterFacade;
+
+    @ApiOperation(value = "新增或更新[by:zhoutg]",
+            notes = "id:主键\n" +
+                    "drugCode:药品代码\n" +
+                    "name:注册名称\n" +
+                    "enName:英文名称\n" +
+                    "tradeName:商品名称\n" +
+                    "form:药品剂型\n" +
+                    "specification:注册规格\n" +
+                    "minPackQuantity:最小包装数量\n" +
+                    "minPackUnit:最小包装单位\n" +
+                    "company:药品企业\n" +
+                    "approval:批准文号\n" +
+                    "standardCode:药品本位码\n" +
+                    "insuranceType:医保类型\n" +
+                    "insuranceRemrk:医保备注\n" +
+                    "drugType:药品类别\n" +
+                    "remark:备注\n" +
+                    "drugConceptId:药品通用名Id")
+    @PostMapping("/saveOrUpdate")
+    @SysLogger("saveOrUpdate")
+    @DSTransactional
+    public RespDTO<Boolean> saveOrUpdate(@RequestBody KlDrugRegisterSaveVO klDrugRegisterSaveVO) {
+        klDrugRegisterFacade.saveOrUpdate(klDrugRegisterSaveVO);
+        return RespDTO.onSuc(true);
+    }
+
+    @ApiOperation(value = "分页[by:zhoutg]",
+            notes = "name:注册名称| 商品名称\n" +
+                    "form:药品剂型\n" +
+                    "company:药品企业\n" +
+                    "insuranceType:医保类型\n" +
+                    "commonName:药品通用名")
+    @PostMapping("/getPage")
+    @SysLogger("getPage")
+    public RespDTO<IPage<KlDrugRegisterDTO>> getPage(@RequestBody KlDrugRegisterPageVO klDrugRegisterPageVO) {
+        IPage<KlDrugRegisterDTO> data = klDrugRegisterFacade.getPageFac(klDrugRegisterPageVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "删除[by:zhoutg]",
+            notes = "id:主键")
+    @PostMapping("/delete")
+    @SysLogger("delete")
+    @DSTransactional
+    public RespDTO<Boolean> delete(@RequestBody KlDrugRegisterDelVO klDrugRegisterDelVO) {
+        klDrugRegisterFacade.deleteByIdFac(klDrugRegisterDelVO);
+        return RespDTO.onSuc(true);
+    }
+
+    @ApiOperation(value = "根据参数获取数据[by:zhoutg]",
+            notes = "id: 主键")
+    @PostMapping("/getByParam")
+    public RespDTO<KlDrugRegisterDTO> getByParam(@RequestBody KlDrugRegisterGetVO klDrugRegisterGetVO) {
+        KlDrugRegisterDTO data = klDrugRegisterFacade.getByParam(klDrugRegisterGetVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "药品注册名检索药品通用名,已经关联的需要过滤[by:zhoutg]",
+            notes = "name: 检索名")
+    @PostMapping("/searchDrug")
+    public RespDTO<List<KlConceptSimDTO>> searchDrug(@RequestBody KlDrugSearchVO klDrugSearchVO) {
+        List<KlConceptSimDTO> data = klDrugRegisterFacade.searchDrugFac(klDrugSearchVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "注册药品导入[by:zhoutg]",
+            notes = "")
+    @PostMapping("/importRegister")
+    @DSTransactional
+    public RespDTO<Map> importRegister(@RequestParam("file") MultipartFile file) {
+        Map data = klDrugRegisterFacade.importRegister(file);
+        return RespDTO.onSuc(data);
+    }
+}

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

@@ -15,6 +15,7 @@
         <result column="lib_type" property="libType"/>
         <result column="status" property="status"/>
     </resultMap>
+
     <select id="getConceptPage"
             parameterType="com.diagbot.vo.KlConceptInfoVO" resultType="com.diagbot.dto.KlConceptInfoDTO">
         SELECT
@@ -55,6 +56,7 @@
         GROUP BY a.concept_id
         ORDER BY b.status DESC ,b.gmt_modified DESC
     </select>
+
     <select id="getConceptAll" resultType="com.diagbot.dto.KlConceptAllDTO">
         SELECT
         a.concept_id AS conceptId,
@@ -70,26 +72,14 @@
         f.sex_type AS sexType,
         f.min_age AS minAge,
         f.max_age AS maxAge,
-        g.min_value AS minVal,
-        g.max_value AS maxVal,
-        g.unit AS unit,
-        g.type AS scopeType,
-        h.dept_id AS deptId,
-        h.icd10_code AS icdCode,
-        dr.drug ,
         a.remark
         FROM
         kl_library_info a
         INNER JOIN kl_concept b
         ON b.id = a.concept_id
-        INNER JOIN kl_concept c
-        ON c.id = a.concept_id
         INNER JOIN kl_lexicon d
         ON b.lib_type = d.code
         LEFT JOIN kl_concept_common f ON f.concept_id = a.concept_id
-        LEFT JOIN kl_lis g ON g.concept_id = a.concept_id
-        LEFT JOIN kl_disease h ON h.concept_id = a.concept_id
-        LEFT JOIN kl_drug  dr ON dr.concept_id = a.concept_id
         WHERE a.is_deleted = 'N'
         AND b.is_deleted = 'N'
         AND d.is_deleted = 'N'
@@ -130,4 +120,34 @@
         </if>
         ORDER BY b.status DESC ,b.gmt_modified DESC,b.id DESC
     </select>
+
+    <select id="getRelationConcept" parameterType="com.diagbot.vo.ConceptRelationVO" resultType="com.diagbot.dto.KlConceptSimDTO">
+        SELECT
+            t.id, t.lib_name, t.lib_type
+        FROM
+            kl_concept a,
+            kl_relation b,
+            kl_relation_order c,
+            kl_concept t
+        WHERE
+            a.is_deleted = 'N'
+        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}
+        </if>
+        <if test="relationList != null and relationList.size() > 0">
+            and b.relation_id in
+            <foreach collection="relationList" item="item" separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
+        AND a.id = b.start_id
+        AND b.id = c.t_relation_id
+        AND b.end_id = t.id
+        order by b.relation_id, c.order_no
+    </select>
 </mapper>

+ 33 - 10
cdssman-service/src/main/resources/mapper/KlDiseaseMapper.xml

@@ -4,17 +4,40 @@
 
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.diagbot.entity.KlDisease">
-        <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="dept_id" property="deptId"/>
-        <result column="icd10_code" property="icd10Code"/>
-        <result column="remark" property="remark"/>
+        <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="dept_id" property="deptId" />
+        <result column="icd10_code" property="icd10Code" />
+        <result column="course" property="course" />
+        <result column="inducement" property="inducement" />
+        <result column="food_prohibition" property="foodProhibition" />
+        <result column="hazard" property="hazard" />
+        <result column="healing" property="healing" />
+        <result column="pernicious" property="pernicious" />
+        <result column="clinic_type" property="clinicType" />
+        <result column="vul_area" property="vulArea" />
+        <result column="vul_crowd" property="vulCrowd" />
+        <result column="incidence" property="incidence" />
+        <result column="is_infect" property="isInfect" />
+        <result column="complication" property="complication" />
+        <result column="pathogeny" property="pathogeny" />
+        <result column="dis_type" property="disType" />
+        <result column="ch_western" property="chWestern" />
+        <result column="is_common_dis" property="isCommonDis" />
+        <result column="is_heredity" property="isHeredity" />
+        <result column="name_simple" property="nameSimple" />
+        <result column="en_name_simple" property="enNameSimple" />
+        <result column="en_name" property="enName" />
+        <result column="morphology" property="morphology" />
+        <result column="tumor_cell_type" property="tumorCellType" />
+        <result column="remark" property="remark" />
     </resultMap>
+
     <select id="getDiseasePage" resultType="com.diagbot.dto.DiseasePageDTO">
         SELECT
         a.id,

+ 19 - 0
cdssman-service/src/main/resources/mapper/KlDrugMappingMapper.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.KlDrugMappingMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.KlDrugMapping">
+        <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="drug_concept" property="drugConcept" />
+        <result column="register_id" property="registerId" />
+        <result column="oder_no" property="orderNo" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

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

@@ -0,0 +1,111 @@
+<?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.KlDrugRegisterMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.KlDrugRegister">
+        <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="drug_code" property="drugCode" />
+        <result column="name" property="name" />
+        <result column="en_name" property="enName" />
+        <result column="trade_name" property="tradeName" />
+        <result column="form" property="form" />
+        <result column="specification" property="specification" />
+        <result column="min_pack_quantity" property="minPackQuantity" />
+        <result column="min_pack_unit" property="minPackUnit" />
+        <result column="company" property="company" />
+        <result column="approval" property="approval" />
+        <result column="standard_code" property="standardCode" />
+        <result column="insurance_type" property="insuranceType" />
+        <result column="insurance_remrk" property="insuranceRemrk" />
+        <result column="drug_type" property="drugType" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+    <select id="getPage" resultType="com.diagbot.dto.KlDrugRegisterDTO">
+        SELECT a.*, c.lib_name commonName 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'
+        <if test="commonName != null and commonName != ''">
+            AND c.lib_name like concat ('%', #{commonName}, '%')
+        </if>
+        <if test="drugCode != null and drugCode != ''">
+            AND a.drug_code like concat ('%', #{drugCode}, '%')
+        </if>
+        <if test="name != null and name != ''">
+            AND (a.name like concat ('%', #{name}, '%') or
+            a.trade_name like concat ('%', #{name}, '%')
+            )
+        </if>
+        <if test="form != null and form != ''">
+            AND a.form like concat ('%', #{form}, '%')
+        </if>
+        <if test="specification != null and specification != ''">
+            AND a.specification like concat ('%', #{specification}, '%')
+        </if>
+        <if test="company != null and company != ''">
+            AND a.company like concat ('%', #{company}, '%')
+        </if>
+        <if test="approval != null and approval != ''">
+            AND a.approval like concat ('%', #{approval}, '%')
+        </if>
+        <if test="standardCode != null and standardCode != ''">
+            AND a.standard_code like concat ('%', #{standardCode}, '%')
+        </if>
+        <if test="insuranceType != null and insuranceType != ''">
+            AND a.insurance_type like concat ('%', #{insuranceType}, '%')
+        </if>
+        <if test="drugType != null and drugType != ''">
+            AND a.drug_type like concat ('%', #{drugType}, '%')
+        </if>
+        order by a.gmt_modified desc
+    </select>
+
+    <select id="getMappingRegister" resultType="com.diagbot.dto.KlDrugMappingDTO" parameterType="com.diagbot.vo.KlDrugMappingGetVO">
+        SELECT
+            b.*
+        FROM
+            `kl_drug_mapping` a,
+            kl_drug_register b
+        WHERE
+            a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        and a.register_id = b.id
+        and a.drug_concept = #{drugConcept}
+        order by a.order_no
+    </select>
+
+    <select id="getMappingDrug" resultType="com.diagbot.dto.KlConceptSimDTO" parameterType="com.diagbot.vo.KlDrugMappingGetVO">
+        SELECT
+            b.*
+        FROM
+            `kl_drug_mapping` a,
+            kl_concept b
+        WHERE
+            a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        and a.drug_concept = b.id
+        and a.register_id = #{registerId}
+        order by a.order_no
+    </select>
+
+    <select id="searchDrug" resultType="com.diagbot.dto.KlConceptSimDTO" parameterType="com.diagbot.vo.KlDrugSearchVO">
+        SELECT
+            a.*
+        FROM
+            kl_concept a
+        WHERE
+            a.is_deleted = 'N'
+        AND a.lib_type = 101
+        AND a.lib_name LIKE concat('%',#{name}, '%')
+        and a.id not in (
+            SELECT b.drug_concept FROM `kl_drug_mapping` b where a.is_deleted = 'N'
+        )
+    </select>
+</mapper>

+ 7 - 0
cdssman-service/src/main/resources/mapper/KlLisMapper.xml

@@ -15,6 +15,13 @@
         <result column="max_value" property="maxValue" />
         <result column="type" property="type" />
         <result column="unit" property="unit" />
+        <result column="check_specimen" property="checkSpecimen" />
+        <result column="check_method" property="checkMethod" />
+        <result column="influence_fac" property="influenceFac" />
+        <result column="clinical_sig" property="clinicalSig" />
+        <result column="qualitative" property="qualitative" />
+        <result column="category" property="category" />
+        <result column="en_name" property="enName" />
         <result column="remark" property="remark" />
     </resultMap>
 

+ 19 - 0
cdssman-service/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>

+ 25 - 0
cdssman-service/src/main/resources/mapper/KlPacsMapper.xml

@@ -0,0 +1,25 @@
+<?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.KlPacsMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.KlPacs">
+        <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="check_method" property="checkMethod" />
+        <result column="definition" property="definition" />
+        <result column="check_objective" property="checkObjective" />
+        <result column="check_skillful" property="checkSkillful" />
+        <result column="cond_limit" property="condLimit" />
+        <result column="interventional" property="interventional" />
+        <result column="emergency_sign" property="emergencySign" />
+        <result column="check_prepare" property="checkPrepare" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

+ 28 - 0
cdssman-service/src/main/resources/mapper/KlSymptomMapper.xml

@@ -0,0 +1,28 @@
+<?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.KlSymptomMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.KlSymptom">
+        <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="is_positive" property="isPositive" />
+        <result column="en_name" property="enName" />
+        <result column="definition" property="definition" />
+        <result column="ch_western" property="chWestern" />
+        <result column="mitigating_fac" property="mitigatingFac" />
+        <result column="aggravate_fac" property="aggravateFac" />
+        <result column="cause" property="cause" />
+        <result column="common_dis" property="commonDis" />
+        <result column="pre_measures" property="preMeasures" />
+        <result column="food_prohibition" property="foodProhibition" />
+        <result column="common_explain" property="commonExplain" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

+ 19 - 0
cdssman-service/src/main/resources/mapper/KlVitalResultMapper.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.KlVitalResultMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.KlVitalResult">
+        <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="suitable_pop_no" property="suitablePopNo" />
+        <result column="check_method" property="checkMethod" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

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

@@ -33,7 +33,7 @@ public class CodeGeneration {
         gc.setEnableCache(false);// XML 二级缓存
         gc.setBaseResultMap(true);// XML ResultMap
         gc.setBaseColumnList(false);// XML columList
-        gc.setAuthor("wangfeng");// 作者
+        gc.setAuthor("zhoutg");// 作者
 
         // 自定义文件命名,注意 %s 会自动填充表实体属性!
         gc.setControllerName("%sController");
@@ -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_dictionary_info","kl_disease","kl_disease_corresponding","kl_lexicon","kl_lexicon_relationship" ,"kl_library_info","kl_lis","kl_relation","kl_relation_order"}); // 需要生成的表
+        strategy.setInclude(new String[] { "kl_lis","kl_operation","kl_pacs","kl_vital_result"}); // 需要生成的表
 
         strategy.setSuperServiceClass(null);
         strategy.setSuperServiceImplClass(null);

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

@@ -0,0 +1,91 @@
+package com.diagbot;
+
+import com.diagbot.util.StringUtil;
+import com.google.common.collect.Lists;
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @description: 打印类的属性名和注释
+ * @author: zhoutg
+ * @time: 2021/5/18 14:48
+ */
+public class PrintUtil {
+
+    /**
+     * 输入字段名和注释
+     *
+     * @param path
+     */
+    public static void print(String path) {
+        List<String> list = Lists.newArrayList();
+        StringBuffer sb = new StringBuffer();
+        try {
+            BufferedReader br = new BufferedReader(
+                    new InputStreamReader(
+                            new FileInputStream(path), "UTF-8"));
+            String line = "";
+            while ((line = br.readLine()) != null) {
+                list.add(line);
+                sb.append(line.trim());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        String text = sb.toString();
+        // 截取有效内容
+        if (sb.indexOf("serialVersionUID = 1L;") >= 0) {
+            text = sb.substring(sb.indexOf("serialVersionUID = 1L;") + 22);
+        } else {
+            text = sb.substring(sb.indexOf("{") + 1);
+        }
+        List<String> stringList = Lists.newArrayList(text.split(";"));
+        Map<String, String> map = new LinkedHashMap<>();
+        String key = "";
+        String value = "";
+        for (String s : stringList) {
+            try {
+                if (s.indexOf("/*** ") >= 0) {
+                    value = s.substring(s.indexOf("/***") + 4, s.indexOf("*/")).trim();
+                } else if (s.indexOf("//") >= 0) {
+                    value = s.substring(s.indexOf("//") + 2, s.indexOf("private")).trim();
+                }
+                int index = s.indexOf("=");
+                if (index >= 0) { // 包含“=”,例如:// 科室列表private List<Long> deptList = Lists.newLinkedList()
+                    StringBuffer keySb = new StringBuffer();
+                    boolean insertflag = false; // 是否有效字符插入
+                    for (int i = index - 1; i >= 0; i--) {
+                        char ch = s.charAt(i);
+                        if (insertflag && StringUtil.isBlank(String.valueOf(ch))) {
+                            break;
+                        }
+                        if (StringUtil.isNotBlank(String.valueOf(ch))) {
+                            keySb.append(ch);
+                            insertflag = true;
+                        }
+                    }
+                    keySb.reverse();// 反转
+                    key = keySb.toString();
+                } else {    // 不包含“=”,例如: /*** 英文名称*/private String enName;
+                    key = s.substring(s.lastIndexOf(" ")).trim();
+                }
+                map.put(key, value);
+            } catch (Exception e) {
+                // 捕获异常不处理
+            }
+        }
+        for (String property : map.keySet()) {
+            System.out.println(property + ":" + map.get(property) + "");
+        }
+    }
+
+    public static void main(String[] args) {
+        String path = "D:\\diagbot\\diagbotcloud\\cdssman-service\\src\\main\\java\\com\\diagbot\\vo\\klSymptomVO.java";
+        print(path);
+    }
+}

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

@@ -0,0 +1,185 @@
+INSERT INTO `cdss`.`sys_dictionary_info` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('128', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '50', '否', '0', '1', '1', '是否选项');
+INSERT INTO `cdss`.`sys_dictionary_info` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('129', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '50', '是', '1', '1', '2', '是否选项');
+
+
+use `med_2021`;
+
+INSERT INTO `kl_lexicon_relationship` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `remark`) VALUES ('12', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '关联科室', '511', '');
+INSERT INTO `kl_lexicon_relationship` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `remark`) VALUES ('13', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '关联部位', '512', '');
+INSERT INTO `kl_lexicon_relationship` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `remark`) VALUES ('14', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '关联系统分类', '513', '');
+INSERT INTO `kl_lexicon_relationship` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `remark`) VALUES ('15', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '关联伴随症状', '514', '');
+INSERT INTO `kl_lexicon_relationship` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `remark`) VALUES ('16', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '关联性质', '515', '');
+
+ALTER TABLE `kl_disease` add COLUMN `tumor_cell_type` varchar(255) not null DEFAULT '' COMMENT '肿瘤细胞类型' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `morphology` varchar(255) not null DEFAULT '' COMMENT '形态学分类代码' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `en_name` varchar(255) not null DEFAULT '' COMMENT '英文名称' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `en_name_simple` varchar(255) not null DEFAULT '' COMMENT '英文简称' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `name_simple` varchar(255) not null DEFAULT '' COMMENT '简称' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `is_heredity` TINYINT(4) not null DEFAULT '0' COMMENT '是否遗传(0:否,1:是)' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `is_common_dis` TINYINT(4) not null DEFAULT '1' COMMENT '是否常见病(0:否,1:是)' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `ch_western` TINYINT(4) not null DEFAULT '0' COMMENT '中西医疾病(0:通用,1:西,2:中)' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `dis_type` varchar(1024) not null DEFAULT '' COMMENT '疾病分型' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `pathogeny` varchar(1024) not null DEFAULT '' COMMENT '病因' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `complication` varchar(1024) not null DEFAULT '' COMMENT '并发症' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `is_infect` TINYINT(4) not null DEFAULT '0' COMMENT '是否传染(0:否,1:是)' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `incidence` double(11,5) DEFAULT NULL COMMENT '发病率' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `vul_crowd` varchar(255) not null DEFAULT '' COMMENT '好发人群' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `vul_area` varchar(255) not null DEFAULT '' COMMENT '好发地区' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `clinic_type` varchar(1024) not null DEFAULT '' COMMENT '临床分类' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `pernicious` varchar(255) not null DEFAULT '' COMMENT '危害性' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `healing` varchar(255) not null DEFAULT '' COMMENT '治愈性' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `hazard` varchar(1024) not null DEFAULT '' COMMENT '危险因素' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `food_prohibition` varchar(1024) not null DEFAULT '' COMMENT '饮食禁忌' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `inducement` varchar(255) not null DEFAULT '' COMMENT '诱因' AFTER `icd10_code`;
+ALTER TABLE `kl_disease` add COLUMN `course` varchar(255) not null DEFAULT '' COMMENT '病程' AFTER `icd10_code`;
+
+-- ----------------------------
+-- Alter Table structure for kl_lis
+-- ----------------------------
+ALTER TABLE `kl_lis` add COLUMN `en_name` varchar(255) not null DEFAULT '' COMMENT '英文名称' AFTER `unit`;
+ALTER TABLE `kl_lis` add COLUMN `category` varchar(255) not null DEFAULT '' COMMENT '所属类别' AFTER `unit`;
+ALTER TABLE `kl_lis` add COLUMN `qualitative` varchar(255) not null DEFAULT '' COMMENT '定性(阴、阳性)' AFTER `unit`;
+ALTER TABLE `kl_lis` add COLUMN `clinical_sig` varchar(1024) not null DEFAULT '' COMMENT '临床意义' AFTER `unit`;
+ALTER TABLE `kl_lis` add COLUMN `influence_fac` varchar(1024) not null DEFAULT '' COMMENT '影响因素' AFTER `unit`;
+ALTER TABLE `kl_lis` add COLUMN `check_method` varchar(1024) not null DEFAULT '' COMMENT '检查方法' AFTER `unit`;
+ALTER TABLE `kl_lis` add COLUMN `check_specimen` varchar(255) not null DEFAULT '' COMMENT '检查标本' AFTER `unit`;
+
+-- ----------------------------
+-- Table structure for kl_drug_register
+-- ----------------------------
+DROP TABLE IF EXISTS `kl_drug_register`;
+CREATE TABLE `kl_drug_register` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `drug_code` varchar(255) NOT NULL DEFAULT '' COMMENT '药品代码',
+  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '注册名称',
+  `en_name` varchar(255) NOT NULL DEFAULT '' COMMENT '英文名称',
+  `trade_name` varchar(255) NOT NULL DEFAULT '' COMMENT '商品名称',
+  `form` varchar(255) NOT NULL DEFAULT '' COMMENT '药品剂型',
+  `specification` varchar(255) NOT NULL DEFAULT '' COMMENT '注册规格',
+  `min_pack_quantity` varchar(255) NOT NULL DEFAULT '' COMMENT '最小包装数量',
+  `min_pack_unit` varchar(255) NOT NULL DEFAULT '' COMMENT '最小包装单位',
+  `company` varchar(255) NOT NULL DEFAULT '' COMMENT '药品企业',
+  `approval` varchar(255) NOT NULL DEFAULT '' COMMENT '批准文号',
+  `standard_code` varchar(255) NOT NULL DEFAULT '' COMMENT '药品本位码',
+  `insurance_type` varchar(255) NOT NULL DEFAULT '' COMMENT '医保类型',
+  `insurance_remrk` varchar(255) NOT NULL DEFAULT '' COMMENT '医保备注',
+  `drug_type` varchar(255) NOT NULL DEFAULT '' COMMENT '药品类别',
+  `remark` varchar(300) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='药品注册表';
+
+-- ----------------------------
+-- Table structure for kl_drug_mapping
+-- ----------------------------
+DROP TABLE IF EXISTS `kl_drug_mapping`;
+CREATE TABLE `kl_drug_mapping` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `drug_concept` bigint(20) NOT NULL DEFAULT '0' COMMENT '药品通用名conceptId',
+  `register_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '药品注册名Id',
+  `order_no` int(11) NOT NULL DEFAULT '0' COMMENT '顺序号',
+  `remark` varchar(300) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  KEY `drug_concept` (`drug_concept`) USING BTREE,
+  KEY `register_id` (`register_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='药品通用名和注册名映射表';
+
+-- ----------------------------
+-- Table structure for kl_symptom
+-- ----------------------------
+DROP TABLE IF EXISTS `kl_symptom`;
+CREATE TABLE `kl_symptom` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `concept_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '术语概念id',
+  `is_positive` TINYINT(4) NOT NULL DEFAULT '1' COMMENT '阳性症状(0:否,1:是)',
+  `en_name` varchar(255) NOT NULL DEFAULT '' COMMENT '英文名称',
+  `definition` varchar(1024) NOT NULL DEFAULT '' COMMENT '定义',
+  `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 '预防措施',
+  `food_prohibition` varchar(1024) not null DEFAULT '' COMMENT '饮食禁忌',
+  `common_explain` varchar(255) NOT NULL DEFAULT '' COMMENT '通俗解释',
+  `remark` varchar(300) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `idx_concept_id` (`concept_id`) USING BTREE COMMENT '概念id全表唯一'
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='症状扩展表';
+
+-- ----------------------------
+-- Table structure for kl_pacs
+-- ----------------------------
+DROP TABLE IF EXISTS `kl_pacs`;
+CREATE TABLE `kl_pacs` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `concept_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '术语概念id',
+  `check_method` varchar(255) NOT NULL DEFAULT '' COMMENT '检查方法',
+  `definition` varchar(1024) NOT NULL DEFAULT '' COMMENT '项目定义',
+  `check_objective` varchar(1024) NOT NULL DEFAULT '' COMMENT '检查目的',
+  `check_skillful` varchar(255) NOT NULL DEFAULT '' COMMENT '检查技术',
+  `cond_limit` varchar(1024) NOT NULL DEFAULT '' COMMENT '禁忌症和局限性',
+  `interventional` varchar(1024) NOT NULL DEFAULT '' COMMENT '适应症',
+  `emergency_sign` TINYINT(4) not null DEFAULT '0' COMMENT '危急标识(0:不危急,1:危急)',
+  `check_prepare` varchar(1024) not null DEFAULT '' COMMENT '检查前准备',
+  `remark` varchar(300) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `idx_concept_id` (`concept_id`) USING BTREE COMMENT '概念id全表唯一'
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='辅检扩展表';
+
+-- ----------------------------
+-- Table structure for operation
+-- ----------------------------
+DROP TABLE IF EXISTS `kl_operation`;
+CREATE TABLE `kl_operation` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `concept_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '术语概念id',
+  `operation_level` TINYINT(4) not null DEFAULT '0' COMMENT '手术级别(0,1,2,3,4)',
+  `operation_code` varchar(255) not null DEFAULT '' COMMENT '手术操作码',
+  `remark` varchar(300) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `idx_concept_id` (`concept_id`) USING BTREE COMMENT '概念id全表唯一'
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='手术扩展表';
+
+-- ----------------------------
+-- Table structure for vital result
+-- ----------------------------
+DROP TABLE IF EXISTS `kl_vital_result`;
+CREATE TABLE `kl_vital_result` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `concept_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '术语概念id',
+  `suitable_pop_no` varchar(255) not null DEFAULT '' COMMENT '不适宜人群',
+  `check_method` varchar(1024) not null DEFAULT '' COMMENT '操作方法',
+  `remark` varchar(300) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `idx_concept_id` (`concept_id`) USING BTREE COMMENT '概念id全表唯一'
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='体征结果扩展表';

+ 4 - 0
docs/041.20210511知识库扩展/user_init.sql

@@ -0,0 +1,4 @@
+use `sys-user`;
+
+INSERT INTO `sys-user`.`sys_menu` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `order_no`, `remark`) VALUES ('103', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '注册药品维护', '97', 'LT-ZSKKZWH-ZCYPWH', '6', '朗通-知识库扩展维护-注册药品维护');
+INSERT INTO `sys-user`.`sys_role_menu` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ('111', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '18', '103', '朗通-知识库扩展维护-注册药品维护');