소스 검색

Merge branch 'dev/importDiagnose20210429' into dev/mapping20210603

gaodm 3 년 전
부모
커밋
bd7f316cb0
42개의 변경된 파일908개의 추가작업 그리고 322개의 파일을 삭제
  1. 39 0
      doc/008.20210629诊断依据基础表扩展/med_2021.sql
  2. 1 1
      src/main/java/com/diagbot/config/CacheDeleteInit.java
  3. 2 6
      src/main/java/com/diagbot/dto/BaseDiagnoseDTO.java
  4. 2 6
      src/main/java/com/diagbot/dto/BaseRegulationDTO.java
  5. 2 3
      src/main/java/com/diagbot/dto/ExportDiagnoseDTO.java
  6. 39 0
      src/main/java/com/diagbot/dto/IndicationExportDTO.java
  7. 7 2
      src/main/java/com/diagbot/dto/KlDiagnoseByIdDTO.java
  8. 19 0
      src/main/java/com/diagbot/dto/KlDiagnoseLibNameDTO.java
  9. 0 28
      src/main/java/com/diagbot/entity/KlDiagnoseBase.java
  10. 68 0
      src/main/java/com/diagbot/entity/KlDiagnoseBaseRelation.java
  11. 0 5
      src/main/java/com/diagbot/entity/KlRegulationBase.java
  12. 49 0
      src/main/java/com/diagbot/enums/CommonEnum.java
  13. 1 1
      src/main/java/com/diagbot/enums/DiagnoseLexiconTypeEnum.java
  14. 21 0
      src/main/java/com/diagbot/facade/KlDiagnoseBaseRelationFacade.java
  15. 20 9
      src/main/java/com/diagbot/facade/KlDiagnoseDetailFacade.java
  16. 52 6
      src/main/java/com/diagbot/facade/KlDiagnoseFacade.java
  17. 38 23
      src/main/java/com/diagbot/facade/KlDiagnoseImportFacade.java
  18. 14 0
      src/main/java/com/diagbot/facade/KlRuleFacade.java
  19. 1 1
      src/main/java/com/diagbot/facade/NeoFacade.java
  20. 20 0
      src/main/java/com/diagbot/mapper/KlDiagnoseBaseRelationMapper.java
  21. 0 3
      src/main/java/com/diagbot/mapper/KlRegulationBaseMapper.java
  22. 3 0
      src/main/java/com/diagbot/mapper/KlRuleMapper.java
  23. 6 7
      src/main/java/com/diagbot/rule/CommonRule.java
  24. 43 39
      src/main/java/com/diagbot/rule/GroupRule.java
  25. 1 1
      src/main/java/com/diagbot/rule/VitalRule.java
  26. 19 0
      src/main/java/com/diagbot/service/KlDiagnoseBaseRelationService.java
  27. 0 3
      src/main/java/com/diagbot/service/KlRegulationBaseService.java
  28. 3 4
      src/main/java/com/diagbot/service/KlRuleService.java
  29. 25 0
      src/main/java/com/diagbot/service/impl/KlDiagnoseBaseRelationServiceImpl.java
  30. 0 5
      src/main/java/com/diagbot/service/impl/KlRegulationBaseServiceImpl.java
  31. 6 1
      src/main/java/com/diagbot/service/impl/KlRuleServiceImpl.java
  32. 112 0
      src/main/java/com/diagbot/util/CoreUtil.java
  33. 12 12
      src/main/java/com/diagbot/vo/ImportDiagnoseVO.java
  34. 3 1
      src/main/java/com/diagbot/vo/KlDiagnoseDetailVO.java
  35. 2 1
      src/main/java/com/diagbot/vo/KlDiagnoseSaveVO.java
  36. 33 0
      src/main/java/com/diagbot/web/KlIndicationImportController.java
  37. 72 49
      src/main/resources/mapper/KlDiagnoseBaseMapper.xml
  38. 38 0
      src/main/resources/mapper/KlDiagnoseBaseRelationMapper.xml
  39. 1 1
      src/main/resources/mapper/KlDiagnoseMapper.xml
  40. 66 102
      src/main/resources/mapper/KlRegulationBaseMapper.xml
  41. 66 0
      src/main/resources/mapper/KlRuleMapper.xml
  42. 2 2
      src/test/java/com/diagbot/CodeGeneration.java

+ 39 - 0
doc/008.20210629诊断依据基础表扩展/med_2021.sql

@@ -0,0 +1,39 @@
+USE `med_2021`;
+
+drop TABLE if EXISTS kl_diagnose_base_relation;
+CREATE TABLE `kl_diagnose_base_relation` (
+  `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则表示纪录未修改',
+  `diagnose_base_id` bigint(20) NOT NULL COMMENT 'diagnose_base_id',
+  `concept_id` bigint(20) NOT NULL COMMENT 'concept_id',
+  `order_no` int(11) NOT NULL DEFAULT '0' COMMENT '排序号',
+  PRIMARY KEY (`id`),
+  KEY `diagnose_base_id` (`diagnose_base_id`),
+  KEY `concept_id` (`concept_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='基础规则关联表';
+
+-- ALTER TABLE `kl_diagnose_base` drop COLUMN `concept_id`;
+-- ALTER TABLE `kl_diagnose_base` drop COLUMN `status`;
+
+drop TABLE if EXISTS kl_regulation_base_relation;
+CREATE TABLE `kl_regulation_base_relation` (
+  `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则表示纪录未修改',
+  `regulation_base_id` bigint(20) NOT NULL COMMENT 'regulation_base_id',
+  `concept_id` bigint(20) NOT NULL COMMENT 'concept_id',
+  `order_no` int(11) NOT NULL DEFAULT '0' COMMENT '排序号',
+  PRIMARY KEY (`id`),
+  KEY `regulation_base_id` (`regulation_base_id`),
+  KEY `concept_id` (`concept_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='通用基础规则关联表';
+
+-- ALTER TABLE `kl_regulation_base` drop COLUMN `concept_id`;
+-- ALTER TABLE `kl_regulation_base` drop COLUMN `status`;

+ 1 - 1
src/main/java/com/diagbot/config/CacheDeleteInit.java

@@ -54,7 +54,7 @@ public class CacheDeleteInit implements CommandLineRunner {
         cacheFacade.loadAllBaseDiagnoseCache();
         log.info("CDSS-CORE服务启动加载诊断依据缓存成功!");
 
-        cacheFacade.loadAllRuleCache();
+        // cacheFacade.loadAllRuleCache();
         log.info("CDSS-CORE服务启动加载医学知识库中的所有规则缓存成功!");
 
         log.info("CDSS-CORE初始化完成!");

+ 2 - 6
src/main/java/com/diagbot/dto/BaseDiagnoseDTO.java

@@ -11,10 +11,6 @@ import lombok.Setter;
 @Getter
 @Setter
 public class BaseDiagnoseDTO {
-    /**
-     * 联合唯一键
-     */
-    private String baseKey;
 
     /**
      * id逗号隔开
@@ -32,9 +28,9 @@ public class BaseDiagnoseDTO {
     private Integer baseLibType;
 
     /**
-     * 提示概念id
+     * 多个概念id
      */
-    private Long conceptId;
+    private String baseConceptids;
 
     /**
      * 基础规则类型(1:等于术语本身;2:存在比较;3:不等于术语本身;)

+ 2 - 6
src/main/java/com/diagbot/dto/BaseRegulationDTO.java

@@ -11,10 +11,6 @@ import lombok.Setter;
 @Getter
 @Setter
 public class BaseRegulationDTO {
-    /**
-     * 联合唯一键
-     */
-    private String baseKey;
 
     /**
      * id逗号隔开
@@ -32,9 +28,9 @@ public class BaseRegulationDTO {
     private Integer baseLibType;
 
     /**
-     * 提示概念id
+     * 多个概念id
      */
-    private Long conceptId;
+    private String baseConceptids;
 
     /**
      * 基础规则类型(1:等于术语本身;2:存在比较;3:不等于术语本身;)

+ 2 - 3
src/main/java/com/diagbot/dto/ExportDiagnoseDTO.java

@@ -24,6 +24,8 @@ public class ExportDiagnoseDTO implements Serializable {
     private String orderNo = "";
     @Excel(name="规则", width = 50, orderNum = "30")
     private String rule = "";
+    @Excel(name="关联词", width = 25, orderNum = "35")
+    private String relation;
     @Excel(name="等于", width = 10, orderNum = "40")
     private String eq;
     @Excel(name="最大值", width = 10, orderNum = "50")
@@ -36,7 +38,4 @@ public class ExportDiagnoseDTO implements Serializable {
     private String maxSymbol;
     @Excel(name="单位", width = 10, orderNum = "90")
     private String minSymbol;
-    @Excel(name="关联词", width = 30, orderNum = "35")
-    private String relation;
-
 }

+ 39 - 0
src/main/java/com/diagbot/dto/IndicationExportDTO.java

@@ -0,0 +1,39 @@
+package com.diagbot.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 诊断依据导出
+ * </p>
+ *
+ * @author kongwz
+ * @since 2020-07-28
+ */
+@Data
+public class IndicationExportDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Excel(name="开单名称", width = 25, orderNum = "10")
+    private String parName = "";
+    @Excel(name="开单类型", width = 15, orderNum = "20")
+    private String parType = "";
+    @Excel(name="规则名称", width = 25, orderNum = "30")
+    private String baseName = "";
+    @Excel(name="规则类型", width = 15, orderNum = "35")
+    private String baseType;
+    @Excel(name="其他条件", width = 10, orderNum = "40")
+    private String otherType;
+    @Excel(name="最大值", width = 10, orderNum = "50")
+    private String maxValue;
+    @Excel(name="最大值符号", width = 10, orderNum = "60")
+    private String maxOperator;
+    @Excel(name="最小值", width = 10, orderNum = "70")
+    private String minValue;
+    @Excel(name="最小值符号", width = 10, orderNum = "80")
+    private String minOperator;
+}

+ 7 - 2
src/main/java/com/diagbot/dto/KlDiagnoseByIdDTO.java

@@ -3,6 +3,8 @@ package com.diagbot.dto;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * @author wangfeng
  * @Description:
@@ -23,6 +25,7 @@ public class KlDiagnoseByIdDTO {
      */
     private Integer conditionType;
 
+    private Long basId;
     /**
      * 规则组别(condition_type为2:拟诊条件;3:确诊条件;4:警惕条件有效)
      */
@@ -40,9 +43,11 @@ public class KlDiagnoseByIdDTO {
      * 描述
      */
     private String basDescription;
-    private Long basConceptId;
-    private String basLibName;
+    /*  private Long basConceptId;
+      private String basLibName;*/
+    private List<KlDiagnoseLibNameDTO> libNameList;
     private Integer basLibType;
+
     private String basLename;
     /**
      * 基础规则类型(1:等于术语本身;2:存在比较;3:不等于术语本身;)

+ 19 - 0
src/main/java/com/diagbot/dto/KlDiagnoseLibNameDTO.java

@@ -0,0 +1,19 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2021-07-01 10:20
+ */
+@Setter
+@Getter
+public class KlDiagnoseLibNameDTO {
+    private Long basId;
+    private Long basConceptId;
+    private String basLibName;
+    private Integer basLibType;
+    private String basLename;
+}

+ 0 - 28
src/main/java/com/diagbot/entity/KlDiagnoseBase.java

@@ -49,11 +49,6 @@ public class KlDiagnoseBase implements Serializable {
      */
     private String modifier;
 
-    /**
-     * 提示概念id
-     */
-    private Long conceptId;
-
     /**
      * 描述
      */
@@ -109,11 +104,6 @@ public class KlDiagnoseBase implements Serializable {
      */
     private String eqUnit;
 
-    /**
-     * 启用状态(0:禁用,1:启用)
-     */
-    private Integer status;
-
     public Long getId() {
         return id;
     }
@@ -162,14 +152,6 @@ public class KlDiagnoseBase implements Serializable {
         this.modifier = modifier;
     }
 
-    public Long getConceptId() {
-        return conceptId;
-    }
-
-    public void setConceptId(Long conceptId) {
-        this.conceptId = conceptId;
-    }
-
     public String getDescription() {
         return description;
     }
@@ -258,14 +240,6 @@ public class KlDiagnoseBase implements Serializable {
         this.eqUnit = eqUnit;
     }
 
-    public Integer getStatus() {
-        return status;
-    }
-
-    public void setStatus(Integer status) {
-        this.status = status;
-    }
-
     @Override
     public String toString() {
         return "KlDiagnoseBase{" +
@@ -275,7 +249,6 @@ public class KlDiagnoseBase implements Serializable {
                 ", gmtModified=" + gmtModified +
                 ", creator=" + creator +
                 ", modifier=" + modifier +
-                ", conceptId=" + conceptId +
                 ", description=" + description +
                 ", type=" + type +
                 ", minOperator=" + minOperator +
@@ -287,7 +260,6 @@ public class KlDiagnoseBase implements Serializable {
                 ", eqOperator=" + eqOperator +
                 ", eqValue=" + eqValue +
                 ", eqUnit=" + eqUnit +
-                ", status=" + status +
                 "}";
     }
 }

+ 68 - 0
src/main/java/com/diagbot/entity/KlDiagnoseBaseRelation.java

@@ -0,0 +1,68 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 基础规则关联表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-06-30
+ */
+@Data
+public class KlDiagnoseBaseRelation 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;
+
+    /**
+     * diagnose_base_id
+     */
+    private Long diagnoseBaseId;
+
+    /**
+     * concept_id
+     */
+    private Long conceptId;
+
+    /**
+     * 排序号
+     */
+    private Integer orderNo;
+}

+ 0 - 5
src/main/java/com/diagbot/entity/KlRegulationBase.java

@@ -51,11 +51,6 @@ public class KlRegulationBase implements Serializable {
      */
     private String modifier;
 
-    /**
-     * 提示概念id
-     */
-    private Long conceptId;
-
     /**
      * 描述
      */

+ 49 - 0
src/main/java/com/diagbot/enums/CommonEnum.java

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

+ 1 - 1
src/main/java/com/diagbot/enums/DiagnoseLexiconTypeEnum.java

@@ -33,7 +33,7 @@ public enum DiagnoseLexiconTypeEnum implements KeyedNamed {
     DiseaseHisTpye(6, "F:疾病"),//病史
     ZsxbszzTpyeCause(7, "G:主诉现病史正则"),//诱因
     ZsxbszzTpyeBc(8, "G:主诉现病史正则"),//病程
-    jwzzTpye(9, "H:既往史正则"),
+    jwzzTpye(9, "H:既往史正则"),//其他
     QuezhenTpye(91, "确诊"),
     NizhenTpye(92, "拟诊"),
     JtTpye(93, "警惕");

+ 21 - 0
src/main/java/com/diagbot/facade/KlDiagnoseBaseRelationFacade.java

@@ -0,0 +1,21 @@
+package com.diagbot.facade;
+
+import com.diagbot.dto.KlDiagnoseLibNameDTO;
+import com.diagbot.service.impl.KlDiagnoseBaseRelationServiceImpl;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2021/3/15 10:58
+ */
+@Component
+public class KlDiagnoseBaseRelationFacade extends KlDiagnoseBaseRelationServiceImpl {
+
+    public List<KlDiagnoseLibNameDTO> getLibNameLists(List<Long> basId) {
+        return getLibNameList(basId);
+    }
+
+}

+ 20 - 9
src/main/java/com/diagbot/facade/KlDiagnoseDetailFacade.java

@@ -5,6 +5,7 @@ import com.diagbot.dto.ExportDescDTO;
 import com.diagbot.dto.ExportDiagnoseDTO;
 import com.diagbot.dto.ExportDiagnoseNameDTO;
 import com.diagbot.entity.KlDiagnoseDetail;
+import com.diagbot.enums.CommonEnum;
 import com.diagbot.enums.DiagnoseLexiconTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.service.impl.KlDiagnoseDetailServiceImpl;
@@ -90,7 +91,8 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
         StringBuffer sb = new StringBuffer();
         sb.append("1、类型:症状【A】,体格检查结果【B】,体格检查项目【C】,实验室检查子项目【D】,辅助检查结果【E】,疾病【F】," +
                 "主诉现病史正则【G】,既往史正则【H】,年龄【I】,人群【J】,查体正则【K】,辅检结果正则【L】\n\n");
-        sb.append("2、诊断类型:【拟诊】,【确诊】,【警惕】");
+        sb.append("2、诊断类型:【拟诊】,【确诊】,【警惕】\n\n");
+        sb.append("3、http://192.168.2.121:7010/swagger-ui.html");
         exportDescDTO.setName(sb.toString());
         exportDescDTOList.add(exportDescDTO);
         exportDto.add(ExcelUtils.createOneSheet("说明", null, ExportDescDTO.class, exportDescDTOList, styleMap2));
@@ -124,7 +126,7 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
         List<Integer> types = Lists.newArrayList(91, 92, 93);
 
         Map<Integer, List<KlDiagnoseDetail>> typeDiagnoseDetails = EntityUtil.makeEntityListMap(datats, "type");
-        for (Map.Entry<Integer, List<String>> edd : exportDiagnoseDTOS.entrySet()) {
+        /*for (Map.Entry<Integer, List<String>> edd : exportDiagnoseDTOS.entrySet()) {
             Integer type = edd.getKey();
             List<KlDiagnoseDetail> klDiagnoseDetails = typeDiagnoseDetails.get(type);
             List<String> relations = edd.getValue();
@@ -142,7 +144,7 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
                 codes.add(maxCodeArray[0]+"."+max);
             }
 
-        }
+        }*/
         Map<String,List<String>> typeCodeMap = new HashMap<>();//A --> [1.0,1.1,1.2,1.3]
         Map<String,String> oldNewCodeMap = new HashMap<>();//1.0 -->A0
         for (Map.Entry<Integer, List<KlDiagnoseDetail>> tdd : typeDiagnoseDetails.entrySet()) {
@@ -152,6 +154,7 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
                 String code = kdl.getCode();
                 String formula = kdl.getFormula();
                 String typeName = DiagnoseLexiconTypeEnum.getName(type);//A:症状
+                String relation = kdl.getRelation();
 
                 ExportDiagnoseDTO exportDiagnoseDTO = new ExportDiagnoseDTO();
                 BeanUtil.copyProperties(kdl, exportDiagnoseDTO);
@@ -187,10 +190,14 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
                         exportDiagnoseDTO.setRule(kdl.getStandard());
                     }
                     if(code.startsWith("4.")){
-                        exportDiagnoseDTO.setRule(kdl.getRelation().replaceAll("\\、","|"));
+                        exportDiagnoseDTO.setRule(relation.replaceAll("\\、","|"));
                         exportDiagnoseDTO.setRelation(kdl.getStandard());
                     }
                     exportDiagnoseDTO.setEq(kdl.getMidResult());
+                    if(("G".equals(tType) || "H".equals(tType)) && StringUtil.isNotBlank(relation)){
+                        exportDiagnoseDTO.setRule(kdl.getStandard()+"|"+kdl.getRelation().replaceAll("\\、","|"));
+                        exportDiagnoseDTO.setRelation("");
+                    }
                 }else {
                     ReflectUtil.setProperty(exportDiagnoseDTO, "type", typeName);
                     for (Map.Entry<String,String> typeq:oldNewCodeMap.entrySet()){
@@ -239,10 +246,11 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
         List<String> regexData = getCodes(allFormula);
 
         //遍历病历
-        List<Integer> types = Stream.of(1, 2, 5, 6, 7, 8, 9).collect(Collectors.toList());
+        List<Integer> types = Stream.of(1, 2, 6).collect(Collectors.toList());//症状、体征、病史有关联词的把关联词添加到规则里
         Iterator<KlDiagnoseDetail> iterator = klDiagnoseDetails.iterator();
         while (iterator.hasNext()) {
             KlDiagnoseDetail next = iterator.next();
+            String standard = next.getStandard();
             String code = next.getCode();//1.0
             Integer type = next.getType();//1
             String relation = next.getRelation();
@@ -251,15 +259,18 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
             } else {
                 if (StringUtil.isNotBlank(relation) && types.contains(type)) {
                     List<String> relationNames = Lists.newArrayList(relation.split("\\、"));
-                    if (typeRelationNamesMap.containsKey(type)) {
+                    relationNames.add(0,standard);
+                    next.setStandard(String.join(CommonEnum.getName(1),relationNames));
+                    next.setRelation("");
+                    /*if (typeRelationNamesMap.containsKey(type)) {
                         List<String> contionNames = typeRelationNamesMap.get(type);
                         contionNames.addAll(relationNames);
                         typeRelationNamesMap.put(type, contionNames);
                     } else {
                         typeRelationNamesMap.put(type, relationNames);
-                    }
+                    }*/
                 }
-                if (StringUtil.isNotBlank(code)) {
+                /*if (StringUtil.isNotBlank(code)) {
                     if (typeCodeNewListMap.containsKey(type)) {
                         List<String> codes = typeCodeNewListMap.get(type);
                         codes.add(code);
@@ -269,7 +280,7 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
                         codes.add(code);
                         typeCodeNewListMap.put(type, codes);
                     }
-                }
+                }*/
             }
         }
         return typeRelationNamesMap;

+ 52 - 6
src/main/java/com/diagbot/facade/KlDiagnoseFacade.java

@@ -7,13 +7,16 @@ import com.diagbot.dto.DiagnosesFindDTO;
 import com.diagbot.dto.KlDiagnoseByIdDTO;
 import com.diagbot.dto.KlDiagnoseGroupDTO;
 import com.diagbot.dto.KlDiagnoseInfoDTO;
+import com.diagbot.dto.KlDiagnoseLibNameDTO;
 import com.diagbot.dto.KlDiagnoseTypeDTO;
 import com.diagbot.entity.KlDiagnose;
 import com.diagbot.entity.KlDiagnoseBase;
+import com.diagbot.entity.KlDiagnoseBaseRelation;
 import com.diagbot.entity.KlDiagnoseCondition;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
+import com.diagbot.service.KlDiagnoseBaseRelationService;
 import com.diagbot.service.impl.KlDiagnoseServiceImpl;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.ListUtil;
@@ -28,6 +31,7 @@ import com.diagbot.vo.KlDiagnoseSatarDisVO;
 import com.diagbot.vo.KlDiagnoseSaveVO;
 import com.diagbot.vo.KlDiagnoseTypeVO;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
@@ -49,6 +53,11 @@ public class KlDiagnoseFacade extends KlDiagnoseServiceImpl {
     KlDiagnoseBaseFacade klDiagnoseBaseFacade;
     @Autowired
     KlDictionaryInfoFacade klDictionaryInfoFacade;
+    @Autowired
+    @Qualifier("klDiagnoseBaseRelationServiceImpl")
+    KlDiagnoseBaseRelationService klDiagnoseBaseRelationService;
+    @Autowired
+    KlDiagnoseBaseRelationFacade klDiagnoseBaseRelationFacade;
 
 
     public IPage<KlDiagnoseInfoDTO> getKlDiagnoseInfoPage(KlDiagnoseInfoVO klDiagnoseInfoVO) {
@@ -58,6 +67,25 @@ public class KlDiagnoseFacade extends KlDiagnoseServiceImpl {
 
     public List<KlDiagnoseTypeDTO> getByIdDiagnoseAll(KlDiagnoseByIdVO klDiagnoseByIdVO) {
         List<KlDiagnoseByIdDTO> byIdDiagnoses = this.getByIdDiagnoses(klDiagnoseByIdVO);
+        //查询明细便准词
+        List<Long> basId = byIdDiagnoses.stream().filter(i -> i.getBasId()!=null).map(ac -> ac.getBasId()).collect(Collectors.toList());
+        if (ListUtil.isNotEmpty(basId)) {
+            List<KlDiagnoseLibNameDTO> libNameList = klDiagnoseBaseRelationFacade.getLibNameLists(basId);
+            if (ListUtil.isNotEmpty(libNameList)) {
+                Map<Long, List<KlDiagnoseLibNameDTO>> lixExMap = libNameList.stream().collect(Collectors.groupingBy(KlDiagnoseLibNameDTO::getBasId));
+                for (KlDiagnoseByIdDTO data : byIdDiagnoses) {
+                    List<KlDiagnoseLibNameDTO> klDiagnoseLibName = lixExMap.get(data.getBasId());
+                    if (ListUtil.isNotEmpty(klDiagnoseLibName)) {
+                        data.setBasLibType(klDiagnoseLibName.get(0).getBasLibType());
+                        data.setBasLename(klDiagnoseLibName.get(0).getBasLename());
+                        data.setLibNameList(klDiagnoseLibName);
+                    }
+                }
+            }
+
+        }
+
+
         //基础条件
         Map<Integer, List<KlDiagnoseByIdDTO>> baseGroupMap = byIdDiagnoses.stream().filter(i -> i.getConditionType().equals(1)).collect(Collectors.groupingBy(KlDiagnoseByIdDTO::getBaseGroup));
         //根据ConditionType 和 getConditionGroup两个添加分组
@@ -137,6 +165,7 @@ public class KlDiagnoseFacade extends KlDiagnoseServiceImpl {
 
     public Boolean saveDiagnoseAll(KlDiagnoseSaveVO klDiagnoseSaveVO) {
         Date now = DateUtil.now();
+        klDiagnoseSaveVO.setNow(now);
         boolean res = false;
         // 校验名称是否相同
         int count = this.count(new QueryWrapper<KlDiagnose>()
@@ -211,6 +240,9 @@ public class KlDiagnoseFacade extends KlDiagnoseServiceImpl {
             //删除kl_rule_base表数据
             res = klDiagnoseBaseFacade.remove(klDiagnoseBaseQuery);
 
+            // 删除kl_diagnose_base_relation
+            klDiagnoseBaseRelationService.remove(new QueryWrapper<KlDiagnoseBaseRelation>()
+                    .in("diagnose_base_id", baseId));
         }
         //删除kl_rule_condition表的数据
         res = klDiagnoseConditionFacade.remove(klDiagnoseQuery);
@@ -218,7 +250,7 @@ public class KlDiagnoseFacade extends KlDiagnoseServiceImpl {
     }
 
     public Boolean saveCommon(KlDiagnoseSaveVO klDiagnoseSaveVO) {
-        Date now = DateUtil.now();
+        Date now = klDiagnoseSaveVO.getNow();
         boolean res = false;
         int sum = 99;
         int baseGroup = 9;
@@ -235,6 +267,8 @@ public class KlDiagnoseFacade extends KlDiagnoseServiceImpl {
                     klDiagnoseCondition.setDiagnoseId(klDiagnoseSaveVO.getId());
                     klDiagnoseCondition.setBaseGroup(baseGroup);//
                     klDiagnoseCondition.setFitNo(data2.getFitNo());
+                    klDiagnoseCondition.setGmtCreate(now);
+                    klDiagnoseCondition.setGmtModified(now);
                     klDiagnoseConditionFacade.save(klDiagnoseCondition);
                     //明细
                     List<KlDiagnoseDetailVO> klDiagnoseDetail = data2.getKlDiagnoseDetail();
@@ -242,8 +276,6 @@ public class KlDiagnoseFacade extends KlDiagnoseServiceImpl {
                         for (KlDiagnoseDetailVO detailVO : klDiagnoseDetail) {
                             if (null != detailVO) {
                                 KlDiagnoseBase klDiagnoseBase = new KlDiagnoseBase();
-                                klDiagnoseBase.setGmtModified(now);
-                                klDiagnoseBase.setConceptId(detailVO.getBasConceptId());
                                 klDiagnoseBase.setType(detailVO.getBasType());
                                 klDiagnoseBase.setDescription(detailVO.getBasDescription());
                                 klDiagnoseBase.setMaxOperator(detailVO.getMaxOperator());
@@ -252,25 +284,39 @@ public class KlDiagnoseFacade extends KlDiagnoseServiceImpl {
                                 klDiagnoseBase.setMinOperator(detailVO.getMinOperator());
                                 klDiagnoseBase.setMinValue(detailVO.getMinVal());
                                 klDiagnoseBase.setMinUnit(detailVO.getMinUnit());
-                                klDiagnoseBase.setStatus(1);
                                 klDiagnoseBase.setEqValue(detailVO.getEqValue());
                                 klDiagnoseBase.setEqOperator(detailVO.getEqOperator());
                                 klDiagnoseBase.setEqUnit(detailVO.getEqUnit());
+                                klDiagnoseBase.setGmtCreate(now);
+                                klDiagnoseBase.setGmtModified(now);
                                 res = klDiagnoseBaseFacade.save(klDiagnoseBase);
+
+                                if (ListUtil.isNotEmpty(detailVO.getBasConceptId())) {
+                                    List<KlDiagnoseBaseRelation> klDiagnoseBaseRelationList = new ArrayList<>();
+                                    for (Long conceptId : detailVO.getBasConceptId()) {
+                                        KlDiagnoseBaseRelation baseRelation = new KlDiagnoseBaseRelation();
+                                        baseRelation.setConceptId(conceptId);
+                                        baseRelation.setDiagnoseBaseId(klDiagnoseBase.getId());
+                                        baseRelation.setGmtCreate(now);
+                                        baseRelation.setGmtModified(now);
+                                        klDiagnoseBaseRelationList.add(baseRelation);
+                                    }
+                                    klDiagnoseBaseRelationService.saveBatch(klDiagnoseBaseRelationList);
+                                }
                                 if (res) {
                                     KlDiagnoseCondition klDiagnoseConditionBase = new KlDiagnoseCondition();
                                     klDiagnoseConditionBase.setDiagnoseBaseId(klDiagnoseBase.getId());
                                     klDiagnoseConditionBase.setBaseGroup(baseGroup);
                                     klDiagnoseConditionBase.setConditionType(1);
                                     klDiagnoseConditionBase.setDiagnoseId(klDiagnoseSaveVO.getId());
+                                    klDiagnoseCondition.setGmtCreate(now);
+                                    klDiagnoseCondition.setGmtModified(now);
                                     res = klDiagnoseConditionFacade.save(klDiagnoseConditionBase);
                                 }
                             }
                         }
                     }
-
                 }
-
             }
         }
         return res;

+ 38 - 23
src/main/java/com/diagbot/facade/KlDiagnoseImportFacade.java

@@ -3,11 +3,13 @@ package com.diagbot.facade;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.entity.KlConcept;
 import com.diagbot.entity.KlDiagnose;
+import com.diagbot.enums.CommonEnum;
 import com.diagbot.enums.DiagnoseLexiconTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.LexiconEnum;
 import com.diagbot.enums.LexiconExtEnum;
 import com.diagbot.service.KlConceptService;
+import com.diagbot.util.CoreUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ExcelUtils;
 import com.diagbot.util.ListUtil;
@@ -33,7 +35,6 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.ListIterator;
@@ -60,7 +61,7 @@ public class KlDiagnoseImportFacade {
         Map<String, Object> message = new LinkedHashMap<>(); // 提示信息
         List<ImportDiagnoseResVO> allData = Lists.newArrayList();  // 最终需要保存的数据
         if (StringUtil.isNotBlank(diagnoseImportVO.getDiagStr())) {
-            List<String> diagList = Arrays.stream(diagnoseImportVO.getDiagStr().split("#")).map(r -> r.trim()).collect(Collectors.toList());
+            List<String> diagList = CoreUtil.getSplit(diagnoseImportVO.getDiagStr());
             diagnoseImportVO.setDiags(diagList);
         }
         // 校验数据
@@ -72,7 +73,7 @@ public class KlDiagnoseImportFacade {
             message.put("导入条数", allData.size() + "条");
             // 如果有指定诊断,提示导入的诊断;如果全部导入,提示“所有诊断”
             if (ListUtil.isNotEmpty(diagnoseImportVO.getDiags())) {
-                message.put("导入诊断", allData.stream().map(r -> r.getDiseaseName()).collect(Collectors.joining("#")));
+                message.put("导入诊断", allData.stream().map(r -> r.getDiseaseName()).collect(Collectors.joining(CommonEnum.splitSymbol.getName())));
             } else {
                 message.put("导入诊断", "所有诊断");
             }
@@ -94,29 +95,29 @@ public class KlDiagnoseImportFacade {
     public Boolean verifyData(MultipartFile file, DiagnoseImportVO diagnoseImportVO, Map<String, Object> diagMessage, List<ImportDiagnoseResVO> allData) {
         Boolean allFlag = true;
         List<String> diagtypes = Lists.newArrayList("拟诊", "确诊", "警惕");
+        List<String> splitType = Lists.newArrayList("症状", "体格检查结果", "疾病", "人群", "辅助检查结果");
         // 获取标准词库Map
         Map<String, KlConcept> concept_map = getConceptMap();
 
-        // 分组之后的数据
-        Map<String, List<ImportDiagnoseVO>> groupData = new LinkedHashMap<>();
-        // 获取全部数据,分组
+        // 获取表格数据
         List<ImportDiagnoseVO> data = ExcelUtils.importExcelMultiSheets(file, 0, 1, 0, ImportDiagnoseVO.class);
+
+        // 以疾病分组之后的数据
+        Map<String, List<ImportDiagnoseVO>> groupData = new LinkedHashMap<>();
         List<ImportDiagnoseVO> importDiagnoseVOList = null;
         String addDisName = "";
         for (ImportDiagnoseVO importDiagnoseVO : data) {
             String type = importDiagnoseVO.getType();
             if (type != null && type.startsWith("【") && type.endsWith("】")) {
                 if (StringUtil.isNotBlank(addDisName)) {
-                    addDisName = RegexUtil.getRegexData(addDisName, "【(.*?)】", 1);
-                    groupData.put(addDisName, importDiagnoseVOList);
+                    groupData.put(addDisName, importDiagnoseVOList); // 存放上一个疾病数据
                 }
                 importDiagnoseVOList = new ArrayList<>();
-                addDisName = type;
+                addDisName = RegexUtil.getRegexData(type, "【(.*?)】", 1);
             } else {
                 importDiagnoseVOList.add(importDiagnoseVO);
             }
         }
-        addDisName = RegexUtil.getRegexData(addDisName, "【(.*?)】", 1); // 获取名字
         groupData.put(addDisName, importDiagnoseVOList); // 添加最后一个
 
         int i = 0;
@@ -144,10 +145,10 @@ public class KlDiagnoseImportFacade {
 
             //处理公式(确诊)
             List<String> orderList = processFormula(curData, diagtypes);
-            dealVerify(currentErrMsg, orderList, diagtypes, curData, concept_map);
+            dealVerify(currentErrMsg, orderList, diagtypes, curData, concept_map, splitType);
             // 数据赋值
             if (ListUtil.isEmpty(currentErrMsg)) {
-                curData = dealImportDiagnose(diagtypes, curData, concept_map);
+                curData = dealImportDiagnose(diagtypes, curData, concept_map, splitType);
                 // 添加到正确数据列表
                 importDiagnoseResVO.setImportDiagnoseVOList(curData);
                 allData.add(importDiagnoseResVO);
@@ -235,7 +236,7 @@ public class KlDiagnoseImportFacade {
      * @param concept_map
      * @return
      */
-    private List<ImportDiagnoseVO> dealImportDiagnose(List<String> diagtypes, List<ImportDiagnoseVO> importDiagnoseVOS, Map<String, KlConcept> concept_map) {
+    private List<ImportDiagnoseVO> dealImportDiagnose(List<String> diagtypes, List<ImportDiagnoseVO> importDiagnoseVOS, Map<String, KlConcept> concept_map, List<String> splitType) {
         for (ImportDiagnoseVO idv : importDiagnoseVOS) {
             String type = idv.getType();
             String orderNo = idv.getOrderNo();
@@ -243,10 +244,17 @@ public class KlDiagnoseImportFacade {
             if (StringUtil.isBlank(type) && StringUtil.isBlank(orderNo)) {
                 continue;
             }
-            if (!type.contains("正则") && !diagtypes.contains(type)) {
-                KlConcept klConcept = concept_map.get(rule + "_" + String.valueOf(LexiconExtEnum.getEnum(type).getKey()));
-                if (klConcept != null) {
-                    idv.setConceptId(klConcept.getId());
+            if (!type.contains("正则") && !diagtypes.contains(type) && splitType.contains(type)) {
+                List<String> splits = CoreUtil.getSplit(rule);
+                if (ListUtil.isNotEmpty(splits)) {
+                    List<Long> conceptIds = Lists.newArrayList();
+                    for (String standName : splits) {
+                        KlConcept klConcept = concept_map.get(standName + "_" + String.valueOf(LexiconExtEnum.getEnum(type).getKey()));
+                        if (klConcept != null) {
+                            conceptIds.add(klConcept.getId());
+                        }
+                    }
+                    idv.setConceptId(conceptIds);
                 }
             }
         }
@@ -254,7 +262,7 @@ public class KlDiagnoseImportFacade {
     }
 
     //数据及格式校验
-    private void dealVerify(List<String> currentErrMsg, List<String> orderNums, List<String> diagtypes, List<ImportDiagnoseVO> data, Map<String, KlConcept> concept_map) {
+    private void dealVerify(List<String> currentErrMsg, List<String> orderNums, List<String> diagtypes, List<ImportDiagnoseVO> data, Map<String, KlConcept> concept_map, List<String> splitType) {
         //list元素计数
         Map<String, Long> orderNumMap = orderNums.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
         for (Map.Entry<String, Long> on : orderNumMap.entrySet()) {
@@ -284,10 +292,18 @@ public class KlDiagnoseImportFacade {
                         continue;
                     }
                     int key = anEnum.getKey();
-                    if (!type.contains("正则") &&
+                    if (!type.contains("正则") && splitType.contains(type)) {
+                        List<String> splits = CoreUtil.getSplit(rule);
+                        for (String standName : splits) {
+                            if (!concept_map.containsKey(standName + "_" + String.valueOf(key))) {
+                                currentErrMsg.add(String.format("第%d行【%s】不是标准词", rowNum, standName));
+                            }
+                        }
+                    }
+                    /*if (!type.contains("正则") &&
                             !concept_map.containsKey(rule + "_" + String.valueOf(key))) {
                         currentErrMsg.add(String.format("第%d行【%s】不是标准词", rowNum, rule));
-                    }
+                    }*/
                     String name = DiagnoseLexiconTypeEnum.getName(key);
                     Boolean regexRes = RegexUtil.getRegexRes(orderNo, name + "\\d+");
                     if (!regexRes) {
@@ -315,7 +331,7 @@ public class KlDiagnoseImportFacade {
                     currentErrMsg.add(String.format("第%d行【类型】不能为空", rowNum));
                 }
                 if (StringUtils.isNotBlank(type) && diagtypes.contains(type) && StringUtils.isBlank(rule)
-                && StringUtils.isBlank(orderNo)) {
+                        && StringUtils.isBlank(orderNo)) {
                     currentErrMsg.add(String.format("第%d行【诊断依据规则】不能为空", rowNum));
                 }
                 if (StringUtils.isNotBlank(type) && !diagtypes.contains(type) && StringUtils.isBlank(rule)) {
@@ -382,8 +398,6 @@ public class KlDiagnoseImportFacade {
                     String rule = importDiagnoseVO.getRule();
                     if (StringUtil.isNotBlank(type) && StringUtil.isNotBlank(rule)) {
                         if ("拟诊".equals(type) || "确诊".equals(type) || "警惕".equals(type)) {
-                            String[] splitGroup = rule.split("\\+");
-
                             KlDiagnoseTypeVO klDiagnoseTypeVO = new KlDiagnoseTypeVO();
                             if ("拟诊".equals(type)) {
                                 klDiagnoseTypeVO.setConditionType(2);
@@ -394,6 +408,7 @@ public class KlDiagnoseImportFacade {
                             }
 
                             //  第三层
+                            String[] splitGroup = rule.split("\\+");
                             List<KlDiagnoseGroupVO> groupVO = Lists.newArrayList();
                             for (String group : splitGroup) {
                                 KlDiagnoseGroupVO klDiagnoseGroupVO = generateDiagnoseGroup(group, map);

+ 14 - 0
src/main/java/com/diagbot/facade/KlRuleFacade.java

@@ -3,6 +3,7 @@ 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.dto.IndicationExportDTO;
 import com.diagbot.dto.KlRuleByIdDTO;
 import com.diagbot.dto.KlRuleByIdParDTO;
 import com.diagbot.dto.KlRuleByIdSubDTO;
@@ -16,6 +17,7 @@ import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.KlRuleServiceImpl;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
+import com.diagbot.util.ExcelUtils;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.KlRuleByIdVO;
@@ -27,6 +29,7 @@ import com.diagbot.vo.KlRuleSatartOrdisaVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -235,4 +238,15 @@ public class KlRuleFacade extends KlRuleServiceImpl {
                 .set("gmt_modified", now);
         return this.update(klRuleUpdate);
     }
+
+    /**
+     * 开单合理性导出
+     *
+     * @return
+     */
+    public void exportIndicationFac(HttpServletResponse response) {
+        List<IndicationExportDTO> indicationExportDTOS = exportIndication();
+        ExcelUtils.exportExcel(indicationExportDTOS, null, "开单合理性", IndicationExportDTO.class, "indication.xlsx",
+                response, 12.8f);
+    }
 }

+ 1 - 1
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -501,7 +501,7 @@ public class NeoFacade {
     }
 
     public void allBaseRegulation() {
-        List<BaseRegulationDTO> list = klRegulationBaseFacade.getAllBase();
+        List<BaseRegulationDTO> list = klRegulationBaseFacade.getSelectBase(new ArrayList<>());
         if (ListUtil.isNotEmpty(list)) {
             redisTemplate.opsForValue().set(RedisEnum.allBaseRegulation.getName(), list);
         }

+ 20 - 0
src/main/java/com/diagbot/mapper/KlDiagnoseBaseRelationMapper.java

@@ -0,0 +1,20 @@
+package com.diagbot.mapper;
+
+import com.diagbot.dto.KlDiagnoseLibNameDTO;
+import com.diagbot.entity.KlDiagnoseBaseRelation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 基础规则关联表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-06-30
+ */
+public interface KlDiagnoseBaseRelationMapper extends BaseMapper<KlDiagnoseBaseRelation> {
+
+    List<KlDiagnoseLibNameDTO> getLibNameList(List<Long> basId);
+}

+ 0 - 3
src/main/java/com/diagbot/mapper/KlRegulationBaseMapper.java

@@ -16,8 +16,5 @@ import java.util.List;
  */
 public interface KlRegulationBaseMapper extends BaseMapper<KlRegulationBase> {
 
-    // 获取所有去重的基础规则
-    List<BaseRegulationDTO> getAllBase();
-
     List<BaseRegulationDTO> getSelectBase(List<String> codeList);
 }

+ 3 - 0
src/main/java/com/diagbot/mapper/KlRuleMapper.java

@@ -1,6 +1,7 @@
 package com.diagbot.mapper;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.IndicationExportDTO;
 import com.diagbot.dto.KlRuleByIdDTO;
 import com.diagbot.dto.KlRuleInfoDTO;
 import com.diagbot.dto.RuleDTO;
@@ -26,4 +27,6 @@ public interface KlRuleMapper extends BaseMapper<KlRule> {
     IPage<KlRuleInfoDTO> getKlRuleInfoPage(KlRuleInfoVO klRuleInfoVO);
 
     List<KlRuleByIdDTO> getByIdRuleInfo(KlRuleByIdVO klRuleByIdVO);
+
+    List<IndicationExportDTO> exportIndication();
 }

+ 6 - 7
src/main/java/com/diagbot/rule/CommonRule.java

@@ -98,7 +98,7 @@ public class CommonRule {
                 Negative val = (Negative) CoreUtil.getFieldValue(d, "negative");
                 if (val == null) {
                     String c = (String) CoreUtil.getFieldValue(d, "standName");
-                    if (StringUtils.isNotBlank(c) && CoreUtil.compareName(ruleBaseDTO, c)) {
+                    if (StringUtils.isNotBlank(c) && CoreUtil.compareNameMulti(ruleBaseDTO, c)) {
                         CoreUtil.addSplitString(baseIdList, ids);
                     }
                 }
@@ -110,14 +110,14 @@ public class CommonRule {
      * 比较是否包含
      *
      * @param input
-     * @param ruleBaseDTO
+     * @param name
      * @return
      */
-    public <T> Boolean containsItem(List<T> input, RuleBaseDTO ruleBaseDTO) {
-        if (ListUtil.isNotEmpty(input) && ruleBaseDTO != null) {
+    public <T> Boolean containsItem(List<T> input, String name) {
+        if (ListUtil.isNotEmpty(input) && StringUtil.isNotBlank(name)) {
             for (T t : input) {
                 String c = (String) CoreUtil.getFieldValue(t, "uniqueName"); // 标准名称
-                if (c.contains(ruleBaseDTO.getBaseLibName())) {
+                if (c.contains(name)) {
                     return true;
                 }
             }
@@ -192,8 +192,7 @@ public class CommonRule {
         if (ListUtil.isNotEmpty(input)) {
             for (T t : input) {
                 String c = (String) CoreUtil.getFieldValue(t, "uniqueName"); // 标准名称
-                String c_name = (String) CoreUtil.getFieldValue(t, "name"); // 界面名称
-                if (CoreUtil.compareName(ruleBaseDTO, c)) {
+                if (CoreUtil.compareNameMulti(ruleBaseDTO, c)) {
                     CoreUtil.addSplitString(baseIdList, ids);
                 }
             }

+ 43 - 39
src/main/java/com/diagbot/rule/GroupRule.java

@@ -75,49 +75,53 @@ public class GroupRule {
         String symptom = wordCrfDTO.getSymptom(); // 现病史内容
         String menstrual = wordCrfDTO.getMenstrual(); // 月经史
         boolean flag = false;
-        switch (ruleBaseDTO.getBaseLibName()) {
-            case "妊娠":
-                Map map = gravidityRule(wordCrfDTO);
-                if (CoreUtil.getMapFlag(map) == true) {
-                    flag = true;
-                }
-                break;
-            case "流产":
-                flag = commonRule.containsItem(wordCrfDTO.getDiag(), ruleBaseDTO);
-                break;
-            case "月经期":
-                String regex = "月经第(([零一二三四五六七八九十]{0,3})||([0-9]{0,2}))天";
-                String regex2 = "(?<!上一次)经期";
-                if (RegexUtil.getRegexRes(symptom, regex) || RegexUtil.getRegexRes(menstrual, regex)
-                        || RegexUtil.getRegexRes(symptom, regex2) || RegexUtil.getRegexRes(menstrual, regex2)) {
-                    flag = true;
-                }
-                break;
-            case "幼儿":
-                if (age != null) {
-                    if (age < 6.0D && 1.0D <= age) {
+        List<String> nameList = CoreUtil.getSplit(ruleBaseDTO.getBaseLibName());
+        for (String name : nameList) {
+            switch (name) {
+                case "妊娠":
+                    Map map = gravidityRule(wordCrfDTO);
+                    if (CoreUtil.getMapFlag(map) == true) {
                         flag = true;
                     }
-                }
-                break;
-            case "儿童":
-                if (age != null) {
-                    if (age < 18.0D && age >= 6.0D) {
+                    break;
+                case "流产":
+                    flag = commonRule.containsItem(wordCrfDTO.getDiag(), name);
+                    break;
+                case "月经期":
+                    String regex = "月经第(([零一二三四五六七八九十]{0,3})||([0-9]{0,2}))天";
+                    String regex2 = "(?<!上一次)经期";
+                    if (RegexUtil.getRegexRes(symptom, regex) || RegexUtil.getRegexRes(menstrual, regex)
+                            || RegexUtil.getRegexRes(symptom, regex2) || RegexUtil.getRegexRes(menstrual, regex2)) {
                         flag = true;
                     }
-                }
-                break;
-            case "成人":
-                if (age >= 18) {
-                    flag = true;
-                }
-                break;
-            case "新生儿":
-                if (age <= 1) {
-                    flag = true;
-                }
-                break;
-            default: break;
+                    break;
+                case "幼儿":
+                    if (age != null) {
+                        if (age < 6.0D && 1.0D <= age) {
+                            flag = true;
+                        }
+                    }
+                    break;
+                case "儿童":
+                    if (age != null) {
+                        if (age < 18.0D && age >= 6.0D) {
+                            flag = true;
+                        }
+                    }
+                    break;
+                case "成人":
+                    if (age >= 18) {
+                        flag = true;
+                    }
+                    break;
+                case "新生儿":
+                    if (age <= 1) {
+                        flag = true;
+                    }
+                    break;
+                default:
+                    break;
+            }
         }
         res.put("flag", flag);
         res.put("msg", ruleBaseDTO.getBaseLibName());

+ 1 - 1
src/main/java/com/diagbot/rule/VitalRule.java

@@ -48,7 +48,7 @@ public class VitalRule {
      * @param ids
      */
     public void push(VitalLabel vitalLabel, RuleBaseDTO ruleBaseDTO, List<Long> baseIdList, String ids) {
-        Map<String, Object> map = CoreUtil.compareVital(ruleBaseDTO, vitalLabel);
+        Map<String, Object> map = CoreUtil.compareVitalMulti(ruleBaseDTO, vitalLabel);
         if (CoreUtil.getMapFlag(map)) {
             CoreUtil.addSplitString(baseIdList, ids);
         }

+ 19 - 0
src/main/java/com/diagbot/service/KlDiagnoseBaseRelationService.java

@@ -0,0 +1,19 @@
+package com.diagbot.service;
+
+import com.diagbot.dto.KlDiagnoseLibNameDTO;
+import com.diagbot.entity.KlDiagnoseBaseRelation;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 基础规则关联表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-06-30
+ */
+public interface KlDiagnoseBaseRelationService extends IService<KlDiagnoseBaseRelation> {
+    List<KlDiagnoseLibNameDTO> getLibNameList(List<Long> basId);
+}

+ 0 - 3
src/main/java/com/diagbot/service/KlRegulationBaseService.java

@@ -16,8 +16,5 @@ import java.util.List;
  */
 public interface KlRegulationBaseService extends IService<KlRegulationBase> {
 
-    // 获取所有去重的基础规则
-    List<BaseRegulationDTO> getAllBase();
-
     List<BaseRegulationDTO> getSelectBase(List<String> codeList);
 }

+ 3 - 4
src/main/java/com/diagbot/service/KlRuleService.java

@@ -1,14 +1,12 @@
 package com.diagbot.service;
 
-import com.baomidou.dynamic.datasource.annotation.DSTransactional;
-import com.baomidou.mybatisplus.extension.service.IService;
-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.IndicationExportDTO;
 import com.diagbot.dto.KlRuleByIdDTO;
 import com.diagbot.dto.KlRuleInfoDTO;
 import com.diagbot.dto.RuleDTO;
 import com.diagbot.entity.KlRule;
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.vo.KlRuleByIdVO;
 import com.diagbot.vo.KlRuleInfoVO;
 
@@ -26,4 +24,5 @@ public interface KlRuleService extends IService<KlRule> {
     List<RuleDTO> getAllRule();
     IPage<KlRuleInfoDTO> getKlRuleInfoPages(KlRuleInfoVO klRuleInfoVO);
     List<KlRuleByIdDTO> getByIdRuleInfo(KlRuleByIdVO klRuleByIdVO);
+    List<IndicationExportDTO> exportIndication();
 }

+ 25 - 0
src/main/java/com/diagbot/service/impl/KlDiagnoseBaseRelationServiceImpl.java

@@ -0,0 +1,25 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.KlDiagnoseLibNameDTO;
+import com.diagbot.entity.KlDiagnoseBaseRelation;
+import com.diagbot.mapper.KlDiagnoseBaseRelationMapper;
+import com.diagbot.service.KlDiagnoseBaseRelationService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 基础规则关联表 服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-06-30
+ */
+@Service
+public class KlDiagnoseBaseRelationServiceImpl extends ServiceImpl<KlDiagnoseBaseRelationMapper, KlDiagnoseBaseRelation> implements KlDiagnoseBaseRelationService {
+    public List<KlDiagnoseLibNameDTO> getLibNameList(List<Long> basId) {
+        return baseMapper.getLibNameList(basId);
+    }
+}

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

@@ -20,11 +20,6 @@ import java.util.List;
 @Service
 public class KlRegulationBaseServiceImpl extends ServiceImpl<KlRegulationBaseMapper, KlRegulationBase> implements KlRegulationBaseService {
 
-    @Override
-    public List<BaseRegulationDTO> getAllBase() {
-        return baseMapper.getAllBase();
-    }
-
     @Override
     public List<BaseRegulationDTO> getSelectBase(List<String> codeList) {
         return baseMapper.getSelectBase(codeList);

+ 6 - 1
src/main/java/com/diagbot/service/impl/KlRuleServiceImpl.java

@@ -1,8 +1,8 @@
 package com.diagbot.service.impl;
 
-import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.IndicationExportDTO;
 import com.diagbot.dto.KlRuleByIdDTO;
 import com.diagbot.dto.KlRuleInfoDTO;
 import com.diagbot.dto.RuleDTO;
@@ -38,4 +38,9 @@ public class KlRuleServiceImpl extends ServiceImpl<KlRuleMapper, KlRule> impleme
     public List<KlRuleByIdDTO> getByIdRuleInfo(KlRuleByIdVO klRuleByIdVO) {
         return baseMapper.getByIdRuleInfo(klRuleByIdVO);
     }
+
+    @Override
+    public List<IndicationExportDTO> exportIndication() {
+        return baseMapper.exportIndication();
+    }
 }

+ 112 - 0
src/main/java/com/diagbot/util/CoreUtil.java

@@ -4,6 +4,7 @@ import com.diagbot.biz.push.entity.Item;
 import com.diagbot.biz.push.entity.Lis;
 import com.diagbot.dto.PushBaseDTO;
 import com.diagbot.dto.RuleBaseDTO;
+import com.diagbot.enums.CommonEnum;
 import com.diagbot.enums.LexiconEnum;
 import com.diagbot.model.entity.BodyPart;
 import com.diagbot.model.entity.Clinical;
@@ -430,6 +431,72 @@ public class CoreUtil {
         return map;
     }
 
+    /**
+     * 比较查体是否匹配
+     *
+     * @param ruleBaseDTO
+     * @param vitalLabel
+     * @return
+     */
+    public static Map<String, Object> compareVitalMulti(RuleBaseDTO ruleBaseDTO, VitalLabel vitalLabel) {
+        Map<String, Object> map = new LinkedHashMap<>();
+        List<String> msgList = new ArrayList<>();
+        map.put("msgList", msgList);
+        List<Vital> vitalList = vitalLabel.getVitals(); // 体征数据
+        List<Clinical> clinicals = vitalLabel.getClinicals(); // 体征临床表现
+        boolean flag = false;
+        if (ruleBaseDTO == null) {
+            map.put("flag", flag);
+            return map;
+        }
+        // if (StringUtil.isBlank(ruleBaseDTO.getBaseMaxValue()) && StringUtil.isBlank(ruleBaseDTO.getBaseMinValue())) {
+        // 如果是体格检查结果,就用临床表现比较;如果是体格检查项目,用体征数值比较
+        if (ruleBaseDTO.getBaseLibType().equals(LexiconEnum.VitalResult.getKey())) {
+            // 体征名称比较(例如:喉头水肿)
+            String libNameMulti = ruleBaseDTO.getBaseLibName();
+            if (libNameMulti.contains(CommonEnum.splitSymbol.getName())) {
+                for (Clinical clinical : clinicals) {
+                    List<String> nameList = Lists.newArrayList(libNameMulti.split(CommonEnum.splitSymbol.getName()));
+                    if (nameList.contains(clinical.getStandName())) {
+                        msgList.add(clinical.getName());
+                        flag = true;
+                    }
+                }
+            } else {
+                for (Clinical clinical : clinicals) {
+                    if (ruleBaseDTO.getBaseLibName().equals(clinical.getStandName())) {
+                        msgList.add(clinical.getName());
+                        flag = true;
+                    }
+                }
+            }
+        } else {
+            // 体征数值比较(例如:体温,血压)
+            for (Vital vital : vitalList) {
+                List<Usual> usualList = vital.getUsualList();
+                if (ruleBaseDTO.getBaseLibName().equals(vital.getStandName()) && vital.getPd() != null
+                        && StringUtil.isNotBlank(vital.getPd().getValue())) {
+                    flag = compareNum(ruleBaseDTO, Double.parseDouble(vital.getPd().getValue()));
+                    if (flag) {
+                        msgList.add(vital.getName() + subZeroAndDot(String.valueOf(vital.getPd().getValue())));
+                    }
+                } else if (ListUtil.isNotEmpty(usualList)) { // 血压比较
+                    for (Usual usual : usualList) {
+                        if (ruleBaseDTO.getBaseLibName().equals(usual.getStandName())) {
+                            flag = compareNum(ruleBaseDTO, Double.parseDouble(usual.getValue()));
+                            if (flag) {
+                                msgList.add(vital.getName() + subZeroAndDot(String.valueOf(vital.getPd().getValue())));
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        map.put("flag", flag);
+        return map;
+    }
+
     /**
      * 比较数值大小(double)
      *
@@ -710,6 +777,27 @@ public class CoreUtil {
         return false;
     }
 
+    /**
+     * 比较名称是否匹配(多个名称用分隔符隔开)
+     *
+     * @param ruleBaseDTO
+     * @param input
+     * @return
+     */
+    public static Boolean compareNameMulti(RuleBaseDTO ruleBaseDTO, String input) {
+        if (StringUtil.isBlank(input) || ruleBaseDTO == null || StringUtil.isBlank(ruleBaseDTO.getBaseLibName())) {
+            return false;
+        }
+        // 多个名称用分隔符隔开,只需要满足一个即可
+        List<String> nameList = CoreUtil.getSplit(ruleBaseDTO.getBaseLibName());
+        for (String name : nameList) {
+            if (input.equals(name)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     /**
      * 获取所有阳性【T】,转成Item结构,放入列表
      *
@@ -1067,6 +1155,30 @@ public class CoreUtil {
         return res;
     }
 
+
+    /**
+     * 根据分隔符转成list
+     * @param name
+     * @return
+     */
+    public static List<String> getSplit(String name) {
+        return getSplit(name, CommonEnum.splitSymbol.getName());
+    }
+
+    /**
+     * 根据分隔符转成list
+     *
+     * @param name
+     * @param splitSymbol
+     * @return
+     */
+    public static List<String> getSplit(String name, String splitSymbol) {
+        if (StringUtil.isBlank(name)) {
+            return Lists.newArrayList();
+        }
+        return Lists.newArrayList(name.split(splitSymbol));
+    }
+
     public static void main(String[] args) {
         List<PushBaseDTO> pushBaseDTOList = ListUtil.newArrayList();
         PushBaseDTO pushBaseDTO = new PushBaseDTO();

+ 12 - 12
src/main/java/com/diagbot/vo/ImportDiagnoseVO.java

@@ -5,6 +5,7 @@ import cn.afterturn.easypoi.handler.inter.IExcelDataModel;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * <p>
@@ -19,29 +20,29 @@ public class ImportDiagnoseVO implements Serializable, IExcelDataModel {
 
     private static final long serialVersionUID = 1L;
 
-    @Excel(name="类型")
+    @Excel(name = "类型")
     private String type = "";
-    @Excel(name="序号")
+    @Excel(name = "序号")
     private String orderNo = "";
-    @Excel(name="规则")
+    @Excel(name = "规则")
     private String rule = "";
-    @Excel(name="等于")
+    @Excel(name = "等于")
     private String eq;
-    @Excel(name="最大值")
+    @Excel(name = "最大值")
     private String max;
-    @Excel(name="最大值符号")
+    @Excel(name = "最大值符号")
     private String maxSymbol;
-    @Excel(name="单位")
+    @Excel(name = "单位")
     private String unit;
-    @Excel(name="最小值")
+    @Excel(name = "最小值")
     private String min;
-    @Excel(name="最小值符号")
+    @Excel(name = "最小值符号")
     private String minSymbol;
     // @Excel(name="单位")
     // private String minUnit;
 
     // 规则标准词id
-    private Long conceptId;
+    private List<Long> conceptId;
     //行号
     private Integer rowNum;
     //确诊公式(带拟诊)
@@ -54,7 +55,6 @@ public class ImportDiagnoseVO implements Serializable, IExcelDataModel {
 
     @Override
     public void setRowNum(Integer rowNum) {
-        this.rowNum=rowNum+1;//表头占一行
-
+        this.rowNum = rowNum + 1;//表头占一行
     }
 }

+ 3 - 1
src/main/java/com/diagbot/vo/KlDiagnoseDetailVO.java

@@ -3,6 +3,8 @@ package com.diagbot.vo;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * @author wangfeng
  * @Description:
@@ -15,7 +17,7 @@ public class KlDiagnoseDetailVO {
      * 描述
      */
     private String basDescription;
-    private Long basConceptId;
+    private List<Long> basConceptId;
     private String basLibName;
     private Integer basLibType;
     private String basLename;

+ 2 - 1
src/main/java/com/diagbot/vo/KlDiagnoseSaveVO.java

@@ -3,6 +3,7 @@ package com.diagbot.vo;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -27,5 +28,5 @@ public class KlDiagnoseSaveVO {
 
     List<KlDiagnoseTypeVO> klDiagnoseTypeVO;
 
-
+    Date now;
 }

+ 33 - 0
src/main/java/com/diagbot/web/KlIndicationImportController.java

@@ -0,0 +1,33 @@
+package com.diagbot.web;
+
+import com.diagbot.facade.KlRuleFacade;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author zhoutg
+ * @Description:
+ * @date 2021-03-19 14:52
+ */
+@RestController
+@RequestMapping("/klIndicationImport")
+@Api(tags = { "开单导出API" })
+@SuppressWarnings("unchecked")
+public class KlIndicationImportController {
+
+    @Autowired
+    KlRuleFacade klRuleFacade;
+
+    @ApiOperation(value = "开单合理性导出API[zhoutg]")
+    @PostMapping("/exportIndication")
+    public void exportDiagnose(HttpServletResponse response) {
+        klRuleFacade.exportIndicationFac(response);
+    }
+
+}

+ 72 - 49
src/main/resources/mapper/KlDiagnoseBaseMapper.xml

@@ -10,7 +10,6 @@
         <result column="gmt_modified" property="gmtModified" />
         <result column="creator" property="creator" />
         <result column="modifier" property="modifier" />
-        <result column="concept_id" property="conceptId" />
         <result column="description" property="description" />
         <result column="type" property="type" />
         <result column="min_operator" property="minOperator" />
@@ -22,59 +21,83 @@
         <result column="eq_operator" property="eqOperator" />
         <result column="eq_value" property="eqValue" />
         <result column="eq_unit" property="eqUnit" />
-        <result column="status" property="status" />
     </resultMap>
 
     <select id="getAllBaseDiagnose" resultType="com.diagbot.dto.BaseDiagnoseDTO">
-        SELECT DISTINCT
-            CONCAT_WS(
-                "_",
-                t1.concept_id,
-                t1.type,
-                t1.max_operator,
-                t1.max_value,
-                t1.max_unit,
-                t1.min_operator,
-                t1.min_value,
-                t1.min_unit,
-                t1.eq_operator,
-                t1.eq_value,
-                t1.eq_unit
-            ) AS baseKey,
-            GROUP_CONCAT(t1.id) AS ids,
-            IFNULL(t2.lib_name, "") AS baseLibName,
-            IFNULL(t2.lib_type, 0) AS baseLibType,
-            t1.concept_id,
-            t1.type AS baseType,
-            t1.max_operator AS baseMaxOperator,
-            t1.max_value AS baseMaxValue,
-            t1.max_unit AS baseMaxUnit,
-            t1.min_operator AS baseMinOperator,
-            t1.min_value AS baseMinValue,
-            t1.min_unit AS baseMinUnit,
-            t1.eq_operator AS baseEqOperator,
-            t1.eq_value AS baseEqValue,
-            t1.eq_unit AS baseEqUnit
+        SELECT
+            t.type baseType,
+            t.max_operator baseMaxOperator,
+            t.max_value baseMaxValue,
+            t.max_unit baseMaxUnit,
+            t.min_operator baseMinOperator,
+            t.min_value baseMinValue,
+            t.min_unit baseMinUnit,
+            t.eq_operator baseEqOperator,
+            t.eq_value baseEqValue,
+            t.eq_unit baseEqUnit,
+            t.conceptids baseConceptids,
+            t.lib_name baseLibName,
+            t.lib_type baseLibType,
+            GROUP_CONCAT(t.id) ids
         FROM
-            kl_diagnose_base t1
-        LEFT JOIN kl_concept t2 ON t1.concept_id = t2.id
-        AND t2.is_deleted = "N"
-        AND t2.`status` = 1
-        WHERE
-            t1.is_deleted = "N"
-        AND t1.`status` = 1
+            (
+                SELECT
+                    t1.id,
+                    t1.type,
+                    t1.max_operator,
+                    t1.max_value,
+                    t1.max_unit,
+                    t1.min_operator,
+                    t1.min_value,
+                    t1.min_unit,
+                    t1.eq_operator,
+                    t1.eq_value,
+                    t1.eq_unit,
+                    IFNULL(t2.conceptids, 0) conceptids,
+                    IFNULL(t2.lib_name, '') lib_name,
+                    IFNULL(t2.lib_type, 0) lib_type
+                FROM
+                    kl_diagnose_base t1
+                LEFT JOIN (
+                    SELECT
+                        diagnose_base_id,
+                        lib_type,
+                        GROUP_CONCAT(
+                            concept_id
+                            ORDER BY
+                                concept_id
+                        ) conceptids,
+                        GROUP_CONCAT(
+                            lib_name
+                            ORDER BY
+                                concept_id SEPARATOR '#'
+                        ) lib_name
+                    FROM
+                        `kl_diagnose_base_relation` m,
+                        kl_concept c
+                    WHERE
+                        m.is_deleted = 'N'
+                    AND c.is_deleted = 'N'
+                    AND c. STATUS = 1
+                    AND m.concept_id = c.id
+                    GROUP BY m.diagnose_base_id, c.lib_type
+                ) t2 ON t1.id = t2.diagnose_base_id
+                WHERE
+                    t1.is_deleted = 'N'
+            ) t
         GROUP BY
-            t1.concept_id,
-            t1.type,
-            t1.max_operator,
-            t1.max_value,
-            t1.max_unit,
-            t1.min_operator,
-            t1.min_value,
-            t1.min_unit,
-            t1.eq_operator,
-            t1.eq_value,
-            t1.eq_unit;
+            t.type,
+            t.max_operator,
+            t.max_value,
+            t.max_unit,
+            t.min_operator,
+            t.min_value,
+            t.min_unit,
+            t.eq_operator,
+            t.eq_value,
+            t.eq_unit,
+            t.conceptids,
+            t.lib_name
     </select>
 
 </mapper>

+ 38 - 0
src/main/resources/mapper/KlDiagnoseBaseRelationMapper.xml

@@ -0,0 +1,38 @@
+<?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.KlDiagnoseBaseRelationMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.KlDiagnoseBaseRelation">
+        <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="diagnose_base_id" property="diagnoseBaseId"/>
+        <result column="concept_id" property="conceptId"/>
+        <result column="order_no" property="orderNo"/>
+    </resultMap>
+    <select id="getLibNameList" resultType="com.diagbot.dto.KlDiagnoseLibNameDTO">
+        SELECT
+        a.diagnose_base_id AS basId,
+        a.concept_id AS basConceptId,
+        d.lib_name AS basLibName,
+        f.name AS basLename,
+        d.lib_type AS basLibType
+        FROM
+        kl_diagnose_base_relation a
+        LEFT JOIN kl_concept d
+        ON a.concept_id = d.id
+        LEFT JOIN kl_lexicon f ON d.lib_type = f.code
+        WHERE
+        a.is_deleted = "N" and d.is_deleted = "N" and f.is_deleted = "N"
+        and a.diagnose_base_id IN
+        <foreach collection="list" open="(" close=")" separator="," item="basId">
+            #{basId}
+        </foreach>
+
+
+    </select>
+</mapper>

+ 1 - 1
src/main/resources/mapper/KlDiagnoseMapper.xml

@@ -149,7 +149,7 @@
         dico.base_group as baseGroup,
         dico.fit_no as fitNo,
         dico.condition_type as conditionType,
-        dibas.basid as basid,
+        dibas.basid as basId,
         dibas.basDescription as basDescription,
         dibas.basConceptId as basConceptId,
         dibas.basLibName as basLibName,

+ 66 - 102
src/main/resources/mapper/KlRegulationBaseMapper.xml

@@ -10,7 +10,6 @@
         <result column="gmt_modified" property="gmtModified" />
         <result column="creator" property="creator" />
         <result column="modifier" property="modifier" />
-        <result column="concept_id" property="conceptId" />
         <result column="description" property="description" />
         <result column="type" property="type" />
         <result column="min_operator" property="minOperator" />
@@ -24,46 +23,26 @@
         <result column="eq_unit" property="eqUnit" />
     </resultMap>
 
-    <select id="getAllBase" resultType="com.diagbot.dto.BaseRegulationDTO">
-        SELECT DISTINCT
-            CONCAT_WS(
-                "_",
-                t1.concept_id,
-                t1.type,
-                t1.max_operator,
-                t1.max_value,
-                t1.max_unit,
-                t1.min_operator,
-                t1.min_value,
-                t1.min_unit,
-                t1.eq_operator,
-                t1.eq_value,
-                t1.eq_unit
-            ) AS baseKey,
-            GROUP_CONCAT(t1.id) AS ids,
-            IFNULL(t2.lib_name, "") AS baseLibName,
-            IFNULL(t2.lib_type, 0) AS baseLibType,
-            t1.concept_id,
-            t1.type AS baseType,
-            t1.max_operator AS baseMaxOperator,
-            t1.max_value AS baseMaxValue,
-            t1.max_unit AS baseMaxUnit,
-            t1.min_operator AS baseMinOperator,
-            t1.min_value AS baseMinValue,
-            t1.min_unit AS baseMinUnit,
-            t1.eq_operator AS baseEqOperator,
-            t1.eq_value AS baseEqValue,
-            t1.eq_unit AS baseEqUnit
+    <select id="getSelectBase" resultType="com.diagbot.dto.BaseRegulationDTO">
+        SELECT
+            t.type baseType,
+            t.max_operator baseMaxOperator,
+            t.max_value baseMaxValue,
+            t.max_unit baseMaxUnit,
+            t.min_operator baseMinOperator,
+            t.min_value baseMinValue,
+            t.min_unit baseMinUnit,
+            t.eq_operator baseEqOperator,
+            t.eq_value baseEqValue,
+            t.eq_unit baseEqUnit,
+            t.conceptids baseConceptids,
+            t.lib_name baseLibName,
+            t.lib_type baseLibType,
+            GROUP_CONCAT(t.id) ids
         FROM
-            kl_regulation_base t1
-        LEFT JOIN kl_concept t2 ON t1.concept_id = t2.id
-        AND t2.is_deleted = "N"
-        AND t2.`status` = 1
-        WHERE
-            t1.is_deleted = "N"
-        AND t1.`status` = 1
-        GROUP BY
-            t1.concept_id,
+        (
+            SELECT
+            t1.id,
             t1.type,
             t1.max_operator,
             t1.max_value,
@@ -73,77 +52,62 @@
             t1.min_unit,
             t1.eq_operator,
             t1.eq_value,
-            t1.eq_unit
-    </select>
-
-    <select id="getSelectBase" resultType="com.diagbot.dto.BaseRegulationDTO">
-        SELECT DISTINCT
-            CONCAT_WS(
-                "_",
-                t1.concept_id,
-                t1.type,
-                t1.max_operator,
-                t1.max_value,
-                t1.max_unit,
-                t1.min_operator,
-                t1.min_value,
-                t1.min_unit,
-                t1.eq_operator,
-                t1.eq_value,
-                t1.eq_unit
-            ) AS baseKey,
-            GROUP_CONCAT(t1.id) AS ids,
-            IFNULL(t2.lib_name, "") AS baseLibName,
-            IFNULL(t2.lib_type, 0) AS baseLibType,
-            t1.concept_id,
-            t1.type AS baseType,
-            t1.max_operator AS baseMaxOperator,
-            t1.max_value AS baseMaxValue,
-            t1.max_unit AS baseMaxUnit,
-            t1.min_operator AS baseMinOperator,
-            t1.min_value AS baseMinValue,
-            t1.min_unit AS baseMinUnit,
-            t1.eq_operator AS baseEqOperator,
-            t1.eq_value AS baseEqValue,
-            t1.eq_unit AS baseEqUnit
-        FROM
-            kl_regulation_base t1
-        LEFT JOIN kl_concept t2 ON t1.concept_id = t2.id
-        AND t2.is_deleted = "N"
-        AND t2.`status` = 1
-        WHERE
-            t1.is_deleted = "N"
-        AND t1.`status` = 1
-        AND t1.id in
-        (
-            SELECT
-            b.regulation_base_id
+            t1.eq_unit,
+            IFNULL(t2.conceptids, 0) conceptids,
+            IFNULL(t2.lib_name, '') lib_name,
+            IFNULL(t2.lib_type, 0) lib_type
             FROM
-            `kl_regulation` a,
-            kl_regulation_condition b
+            kl_regulation_base t1
+            LEFT JOIN (
+                SELECT
+                regulation_base_id,
+                lib_type,
+                GROUP_CONCAT(concept_id ORDER BY concept_id) conceptids,
+                GROUP_CONCAT(lib_name ORDER BY concept_id SEPARATOR '#') lib_name
+                FROM
+                `kl_regulation_base_relation` m,
+                kl_concept c
+                WHERE
+                m.is_deleted = 'N'
+                AND c.is_deleted = 'N'
+                AND c. STATUS = 1
+                AND m.concept_id = c.id
+                GROUP BY m.regulation_base_id, c.lib_type
+            ) t2 ON t1.id = t2.regulation_base_id
             WHERE
-            a.id = b.regulation_id
+            t1.is_deleted = 'N'
             <if test="list != null and list.size > 0">
+                AND t1.id in
+                (
+                SELECT
+                b.regulation_base_id
+                FROM
+                `kl_regulation` a,
+                kl_regulation_condition b
+                WHERE
+                a.id = b.regulation_id
                 and a.`code` in
                 <foreach item="code" collection="list" open="(" separator="," close=")">
                     #{code}
                 </foreach>
+                AND a.`status` = 1
+                AND b.condition_type = 1
+                )
             </if>
-            AND a.`status` = 1
-            AND b.condition_type = 1
-        )
+        ) t
         GROUP BY
-            t1.concept_id,
-            t1.type,
-            t1.max_operator,
-            t1.max_value,
-            t1.max_unit,
-            t1.min_operator,
-            t1.min_value,
-            t1.min_unit,
-            t1.eq_operator,
-            t1.eq_value,
-            t1.eq_unit
+            t.type,
+            t.max_operator,
+            t.max_value,
+            t.max_unit,
+            t.min_operator,
+            t.min_value,
+            t.min_unit,
+            t.eq_operator,
+            t.eq_value,
+            t.eq_unit,
+            t.conceptids,
+            t.lib_name
     </select>
 
 </mapper>

+ 66 - 0
src/main/resources/mapper/KlRuleMapper.xml

@@ -226,4 +226,70 @@
         AND d.lib_type = f.code) sub
         ON sub.subId = ruco.rule_base_id
     </select>
+
+    <select id="exportIndication" resultType="com.diagbot.dto.IndicationExportDTO">
+        SELECT
+            tt1.par_name,
+            tt1.par_type,
+            tt2.lib_name base_name,
+            xx2.NAME base_type,
+            CASE tt1.type
+                when '4' then '过敏原'
+                when '5' then '辅检开单互斥'
+                else '' end other_type,
+            tt1.eq_value,
+            tt1.min_value,
+            tt1.min_operator,
+            tt1.min_unit,
+            tt1.max_value,
+            tt1.max_operator,
+            tt1.max_unit,
+            tt1.rule_id,
+            tt1.description
+        FROM
+            (
+                SELECT
+                    c1.lib_name par_name,
+                    c1.id par_id,
+                    x1.`name` par_type,
+                    t1.id rule_id,
+                    t1.description,
+                    t1.rule_type,
+                    t1.has_sub_cond,
+                    t1.msg,
+                    t3.type,
+                    t3.concept_id base_id,
+                    t3.eq_value,
+                    t3.min_value,
+                    t3.min_operator,
+                    t3.min_unit,
+                    t3.max_value,
+                    t3.max_operator,
+                    t3.max_unit
+                FROM
+                    kl_concept c1,
+                    kl_lexicon x1,
+                    kl_rule t1,
+                    kl_rule_condition t2,
+                    kl_rule_base t3
+                WHERE
+                    c1.is_deleted = 'N'
+                AND t1.is_deleted = 'N'
+                AND t2.is_deleted = 'N'
+                AND t3.is_deleted = 'N'
+                AND c1.`status` = 1
+                AND t1.`status` = 1
+                AND c1.id = t1.concept_id
+                AND t1.id = t2.rule_id
+                AND t2.rule_base_id = t3.id
+                AND t1.rule_type = 1
+                AND x1.`code` = c1.lib_type
+            ) tt1
+        LEFT JOIN kl_concept tt2 ON tt2.is_deleted = 'N'
+        AND tt2.`status` = 1
+        AND tt1.base_id = tt2.id
+        LEFT JOIN kl_lexicon xx2 ON tt2.lib_type = xx2. CODE
+        ORDER BY
+            rule_id
+    </select>
 </mapper>

+ 2 - 2
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("gaodm");// 作者
+        gc.setAuthor("zhoutg");// 作者
 
         // 自定义文件命名,注意 %s 会自动填充表实体属性!
         gc.setControllerName("%sController");
@@ -56,7 +56,7 @@ public class CodeGeneration {
         StrategyConfig strategy = new StrategyConfig();
         // strategy.setTablePrefix(new String[] { "demo_" });// 此处可以修改为您的表前缀
         strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
-        strategy.setInclude(new String[] { "kl_regulation","kl_regulation_base","kl_regulation_condition"}); // 需要生成的表
+        strategy.setInclude(new String[] { "kl_diagnose_base_relation"}); // 需要生成的表
 
         strategy.setSuperServiceClass(null);
         strategy.setSuperServiceImplClass(null);