Browse Source

Merge branch 'dev/neo2mysql20210120' into dev/diagnose20210315

gaodm 4 years ago
parent
commit
e41831a220

+ 181 - 0
cdssman-service/doc/002.20210325自动化测试脚本/cdss_init.sql

@@ -0,0 +1,181 @@
+use `cdss`;
+
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : 192.168.2.236
+ Source Server Type    : MySQL
+ Source Server Version : 50731
+ Source Host           : 192.168.2.236:3306
+ Source Schema         : cdss
+
+ Target Server Type    : MySQL
+ Target Server Version : 50731
+ File Encoding         : 65001
+
+ Date: 25/03/2021 09:51:07
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for test_case_info
+-- ----------------------------
+DROP TABLE IF EXISTS `test_case_info`;
+CREATE TABLE `test_case_info`  (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime(0) NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime(0) NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `case_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '测试案例',
+  `case_group` int(4) NOT NULL COMMENT '测试组',
+  `case_no` int(4) NOT NULL COMMENT '测试编号',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of test_case_info
+-- ----------------------------
+INSERT INTO `test_case_info` VALUES (1, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '开单合理性提醒_通用规则', 1, 1);
+INSERT INTO `test_case_info` VALUES (2, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '开单合理性提醒_输血规则', 1, 2);
+INSERT INTO `test_case_info` VALUES (3, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '危急值提醒_实验室检查规则', 1, 3);
+INSERT INTO `test_case_info` VALUES (4, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '危急值提醒_辅助检查规则', 1, 4);
+INSERT INTO `test_case_info` VALUES (5, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '高风险提醒_高危药品规则', 1, 5);
+INSERT INTO `test_case_info` VALUES (6, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '高风险提醒_高危手术规则', 1, 6);
+INSERT INTO `test_case_info` VALUES (7, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '其他提醒_化验规则', 1, 7);
+INSERT INTO `test_case_info` VALUES (8, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '其他提醒_辅检规则', 1, 8);
+INSERT INTO `test_case_info` VALUES (9, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '其他提醒_输血规则', 1, 9);
+INSERT INTO `test_case_info` VALUES (10, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '诊断', 2, 1);
+INSERT INTO `test_case_info` VALUES (11, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '检验', 2, 2);
+INSERT INTO `test_case_info` VALUES (12, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '检查', 2, 3);
+INSERT INTO `test_case_info` VALUES (13, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '药品', 2, 4);
+INSERT INTO `test_case_info` VALUES (14, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '手术/操作', 2, 5);
+INSERT INTO `test_case_info` VALUES (15, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '正常项目重复开立规则', 1, 10);
+
+SET FOREIGN_KEY_CHECKS = 1;
+
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : 192.168.2.236
+ Source Server Type    : MySQL
+ Source Server Version : 50731
+ Source Host           : 192.168.2.236:3306
+ Source Schema         : cdss
+
+ Target Server Type    : MySQL
+ Target Server Version : 50731
+ File Encoding         : 65001
+
+ Date: 25/03/2021 09:52:13
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for test_result_info
+-- ----------------------------
+DROP TABLE IF EXISTS `test_result_info`;
+CREATE TABLE `test_result_info`  (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime(0) NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime(0) NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `hospital_id` bigint(20) NOT NULL COMMENT '医院id',
+  `case_id` bigint(20) NOT NULL COMMENT '测试案例id',
+  `rule_num` int(7) NULL DEFAULT NULL COMMENT '规则条数',
+  `rule_success_num` int(7) NULL DEFAULT NULL COMMENT '规则执行成功条数',
+  `rule_failed_num` int(7) NULL DEFAULT NULL COMMENT '规则执行失败条数',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+SET FOREIGN_KEY_CHECKS = 1;
+
+
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : 192.168.2.236
+ Source Server Type    : MySQL
+ Source Server Version : 50731
+ Source Host           : 192.168.2.236:3306
+ Source Schema         : cdss
+
+ Target Server Type    : MySQL
+ Target Server Version : 50731
+ File Encoding         : 65001
+
+ Date: 25/03/2021 09:52:55
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for test_result_rule
+-- ----------------------------
+DROP TABLE IF EXISTS `test_result_rule`;
+CREATE TABLE `test_result_rule`  (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime(0) NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime(0) NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `result_id` bigint(20) NOT NULL COMMENT '测试结果id',
+  `rule_order_no` bigint(20) NULL DEFAULT NULL COMMENT '规则序号',
+  `rule_type` int(4) NOT NULL COMMENT '规则类型(1:开单合理性;2:高危;3:危急值;4:其他值提醒;5:其他值提醒输血;6:正常项目重复开立)',
+  `rule_id` bigint(20) NULL DEFAULT NULL COMMENT '规则id',
+  `rule_lib_type` int(4) NULL DEFAULT NULL COMMENT '规则术语类型编码',
+  `rule_lib_type_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '规则术语类型',
+  `rule_lib_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规则医学标准术语',
+  `rule_his_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规则医院术语',
+  `rule_his_detail_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规则医院术语细项',
+  `has_sub_cond` int(1) NOT NULL DEFAULT 0 COMMENT '是否有子条件(0:无,1:有)',
+  `rule_base_id` bigint(20) NULL DEFAULT NULL COMMENT '基础规则id',
+  `group_type` int(4) NULL DEFAULT NULL COMMENT '规则组别',
+  `rule_base_type` int(4) NULL DEFAULT NULL COMMENT '基础规则类型(1:开单外等于术语本身;2:开单外存在比较;3:开单外不等于术语本身;4:过敏原;5:开单项;6:检查结果正则表达式)',
+  `rule_base_lib_type` int(4) NULL DEFAULT NULL COMMENT '基础规则术语类型(编码)',
+  `rule_base_lib_type_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '基础规则术语类型',
+  `rule_base_lib_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '基础规则医学标准术语',
+  `rule_base_his_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '基础规则医院术语',
+  `rule_base_his_detail_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '基础规则医院术语细则',
+  `rule_base_max_value` decimal(10, 4) NULL DEFAULT NULL COMMENT '基础规则参考值(最大值)',
+  `rule_base_min_value` decimal(10, 4) NULL DEFAULT NULL COMMENT '基础规则参考值(最小值)',
+  `rule_base_unit` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '基础规则单位',
+  `rule_base_input_value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '基础规则输入值',
+  `reference_value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '基础规则参考值',
+  `output` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '实际输出结果(提醒文本)',
+  `expected_output` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '期望输出结果(提醒文本)',
+  `success` int(4) NULL DEFAULT NULL COMMENT '成功标志(1:成功,0:失败)',
+  `message` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '提示信息(异常提醒)',
+  `input_params` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '模拟入参',
+  `output_params` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '模拟出参',
+  `rule_msg` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '附加信息',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+SET FOREIGN_KEY_CHECKS = 1;
+
+
+
+-- 删除表
+DROP TABLE IF EXISTS `test_result_bill`;
+DROP TABLE IF EXISTS `test_result_critical`;
+DROP TABLE IF EXISTS `test_result_highrisk_drug`;
+DROP TABLE IF EXISTS `test_result_highrisk_operation`;
+DROP TABLE IF EXISTS `test_result_other_lis`;
+DROP TABLE IF EXISTS `test_result_other_pacs`;
+DROP TABLE IF EXISTS `test_result_other_transfusion`;
+
+
+use `sys-user`;
+
+UPDATE `sys-user`.`sys_menu` SET `id`='91', `is_deleted`='N', `gmt_create`='1970-01-01 12:00:00', `gmt_modified`='1970-01-01 12:00:00', `creator`='0', `modifier`='0', `name`='规则测试', `parent_id`='90', `code`='LT-YYSYZDHCS-ZSTPGZCS', `order_no`='10', `remark`='朗通-医院术语自动化测试-规则测试' WHERE (`id`='91');
+

+ 7 - 4
cdssman-service/src/main/java/com/diagbot/aggregate/CallIndicationAggregate.java

@@ -174,10 +174,13 @@ public class CallIndicationAggregate {
                     for (ResultRule result : entry.getValue()) {
                         Integer count = 1;
                         result.setSuccess(0);
-                        result.setMessage(result.getMessage() + "提示内容("
-                                + (count++) + "、"
-                                + msgList.stream().map(i -> i.getMsg()).collect(Collectors.joining(";" + (count++) + "、"))
-                                + ")与预期不符");
+                        String message = result.getMessage() + "提示内容(";
+                        for (BillMsg msg : msgList) {
+                            message += (count++) + "、";
+                            message += msg.getMsg() + ";";
+                        }
+                        message += ")与预期不符";
+                        result.setMessage(message);
                         retList.add(result);
                     }
                 }

+ 14 - 12
cdssman-service/src/main/java/com/diagbot/aggregate/RuleTestAggregate.java

@@ -208,19 +208,21 @@ public class RuleTestAggregate {
         runningInfoVO.setStatus(1);
         runningInfoFacade.updateStatus(runningInfoVO);
 
-        //生成测试规则
-        List<ResultRule> resultList = medRuleConvertFacade.billConvert(hospitalId, ruleTestVO.getCaseId());
-        if (ListUtil.isEmpty(resultList)) {
-            return true;
+        try {
+            //生成测试规则
+            List<ResultRule> resultList = medRuleConvertFacade.billConvert(hospitalId, ruleTestVO.getCaseId());
+            if (ListUtil.isEmpty(resultList)) {
+                return true;
+            }
+            //远程调用推理
+            List<ResultRule> saveList = callIndication(resultList, hospitalId);
+            //保存测试结果
+            saveResultRule(saveList, ruleTestVO);
+        } finally {
+            //结束运行
+            runningInfoVO.setStatus(0);
+            runningInfoFacade.updateStatus(runningInfoVO);
         }
-        //远程调用推理
-        List<ResultRule> saveList = callIndication(resultList, hospitalId);
-        //保存测试结果
-        saveResultRule(saveList, ruleTestVO);
-
-        //结束运行
-        runningInfoVO.setStatus(0);
-        runningInfoFacade.updateStatus(runningInfoVO);
         return true;
     }
 

+ 12 - 12
cdssman-service/src/main/java/com/diagbot/entity/ResultRule.java

@@ -1,13 +1,13 @@
 package com.diagbot.entity;
 
-import java.math.BigDecimal;
-
 import cn.afterturn.easypoi.excel.annotation.Excel;
-import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableName;
+
 import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * <p>
@@ -116,7 +116,7 @@ public class ResultRule implements Serializable {
     /**
      * 基础规则类型(1:开单外等于术语本身;2:开单外存在比较;3:开单外不等于术语本身;4:过敏原;5:开单项;6:检查结果正则表达式)
      */
-    @Excel(name = "基础规则类型", width = 40, orderNum = "1",replace = {"开单外等于术语本身_1","开单外存在比较_2","开单外不等于术语本身_3","过敏原_4","开单项_5","检查结果正则表达式_6"})
+    @Excel(name = "基础规则类型", width = 40, orderNum = "1", replace = { "_null", "开单外等于术语本身_1", "开单外存在比较_2", "开单外不等于术语本身_3", "过敏原_4", "开单项_5", "检查结果正则表达式_6" })
     private Integer ruleBaseType;
 
     /**
@@ -127,25 +127,25 @@ public class ResultRule implements Serializable {
     /**
      * 禁忌项类型(名称)
      */
-    @Excel(name = "基础规则术语类型", width = 40, orderNum = "2")
+    @Excel(name = "基础规则术语类型", width = 40, replace = { "_null" }, orderNum = "2")
     private String ruleBaseLibTypeName;
 
     /**
      * 禁忌项名称
      */
-    @Excel(name = "基础规则医学标准术语", width = 40, orderNum = "3")
+    @Excel(name = "基础规则医学标准术语", width = 40, replace = { "_null" }, orderNum = "3")
     private String ruleBaseLibName;
 
     /**
      * 禁忌项名称(医院端)
      */
-    @Excel(name = "基础规则医院术语", width = 40, orderNum = "4")
+    @Excel(name = "基础规则医院术语", width = 40, replace = { "_null" }, orderNum = "4")
     private String ruleBaseHisName;
 
     /**
      * 禁忌项名称-细项(医院端)
      */
-    @Excel(name = "基础规则医院术语细则", width = 40, orderNum = "5")
+    @Excel(name = "基础规则医院术语细则", width = 40, replace = { "_null" }, orderNum = "5")
     private String ruleBaseHisDetailName;
 
     /**
@@ -166,13 +166,13 @@ public class ResultRule implements Serializable {
     /**
      * 禁忌项输入值(文本/数值)
      */
-    @Excel(name = "基础规则输入值", width = 40, orderNum = "6")
+    @Excel(name = "基础规则输入值", width = 40, replace = { "_null" }, orderNum = "6")
     private String ruleBaseInputValue;
 
     /**
      * 参考值(参考范围拼接/药品分类保存)
      */
-    @Excel(name = "基础规则参考值", width = 40, orderNum = "7")
+    @Excel(name = "基础规则参考值", width = 40, replace = { "_null" }, orderNum = "7")
     private String referenceValue;
 
     /**
@@ -539,4 +539,4 @@ public class ResultRule implements Serializable {
                 ", ruleMsg=" + ruleMsg +
                 "}";
     }
-}
+}

+ 2 - 1
cdssman-service/src/main/java/com/diagbot/enums/TypeEnum.java

@@ -20,7 +20,8 @@ public enum TypeEnum implements KeyedNamed {
     vital(7, "查体"),
     transfusion(8, "输血"),
     age(9,"年龄"),
-    group(10, "人群");
+    group(10, "人群"),
+    lisSelf(1, "化验本身");
 
     @Setter
     private int key;

+ 13 - 0
cdssman-service/src/main/java/com/diagbot/facade/KlConceptDetailFacade.java

@@ -0,0 +1,13 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.KlConceptDetailServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/3/29 10:48
+ */
+@Component
+public class KlConceptDetailFacade extends KlConceptDetailServiceImpl {
+}

+ 70 - 10
cdssman-service/src/main/java/com/diagbot/facade/KlConceptFacade.java

@@ -11,9 +11,14 @@ import com.diagbot.dto.KlConceptInfoDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.KlConcept;
 import com.diagbot.entity.KlConceptCommon;
+import com.diagbot.entity.KlConceptStatic;
 import com.diagbot.entity.KlLexicon;
 import com.diagbot.entity.KlLibraryInfo;
+import com.diagbot.entity.KlRelation;
+import com.diagbot.entity.KlRule;
+import com.diagbot.entity.KlRuleBase;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.StatusEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.KlConceptServiceImpl;
@@ -62,6 +67,15 @@ public class KlConceptFacade extends KlConceptServiceImpl {
     KlDiseaseFacade klDiseaseFacade;
     @Autowired
     KlLexiconFacade klLexiconFacade;
+    @Autowired
+    KlConceptStaticFacade klConceptStaticFacade;
+    @Autowired
+    KlRelationFacade klRelationFacade;
+    @Autowired
+    KlRuleFacade klRuleFacade;
+    @Autowired
+    KlRuleBaseFacade klRuleBaseFacade;
+
 
     /**
      * @param klConceptInfoVO
@@ -110,14 +124,7 @@ public class KlConceptFacade extends KlConceptServiceImpl {
         Date now = DateUtil.now();
         boolean res = false;
         // 校验名称是否相同
-        int count = this.count(new QueryWrapper<KlConcept>()
-                .eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("lib_type", klConceptSaveVO.getLibType())
-                .eq("lib_name", klConceptSaveVO.getLibName())
-                .ne("id", klConceptSaveVO.getConceptId() == null ? -1 : klConceptSaveVO.getConceptId()));
-        if (count > 0) {
-            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "医学标准术语名称已存在");
-        }
+        checkConcept(klConceptSaveVO);
         //校验
         KlConceptSaveSubVO paesubVO = new KlConceptSaveSubVO();
         paesubVO.setConceptId(klConceptSaveVO.getConceptId());
@@ -149,7 +156,7 @@ public class KlConceptFacade extends KlConceptServiceImpl {
                                 .set("type_id", subVO.getLibType())
                                 .set("name", subVO.getSynonymName())
                                 .set("spell", subVO.getSpell())
-                                .set("remark",subVO.getRemark());
+                                .set("remark", subVO.getRemark());
                         res = klLibraryInfoFacade.update(new KlLibraryInfo(), klLibraryInfoQuerySub);
                     }
                 }
@@ -290,6 +297,7 @@ public class KlConceptFacade extends KlConceptServiceImpl {
                     .eq("is_deleted", IsDeleteEnum.N.getKey())
                     .like(StringUtil.isNotBlank(getAllForRelationVO.getName()), "lib_name", getAllForRelationVO.getName().trim())
                     .eq(getAllForRelationVO.getTypeId() != null, "lib_type", getAllForRelationVO.getTypeId())
+                    .eq("status", StatusEnum.Enable.getKey())
                     .notIn(ListUtil.isNotEmpty(getAllForRelationVO.getExcludedConceptIds()), "id", getAllForRelationVO.getExcludedConceptIds())
             );
             //            retList = BeanUtil.listCopyTo(conceptList, GetAllForRelationDTO.class);
@@ -318,6 +326,7 @@ public class KlConceptFacade extends KlConceptServiceImpl {
                     .eq("is_deleted", IsDeleteEnum.N.getKey())
                     .like(StringUtil.isNotBlank(name), "lib_name", name.trim())
                     .eq("lib_type", libType)
+                    .eq("status", StatusEnum.Enable.getKey())
                     .notIn(ListUtil.isNotEmpty(excludedConceptIds), "id", excludedConceptIds));
             if (ListUtil.isNotEmpty(conceptList)) {
                 getAllForRelationDTOS = conceptList.stream().map(x -> {
@@ -370,9 +379,39 @@ public class KlConceptFacade extends KlConceptServiceImpl {
         if (sum == 0) {
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该数据已不存!");
         }
+        if (status == StatusEnum.Disable.getKey()) {
+            //kl_concept_static 静态信息
+            int conceptStaticSum = klConceptStaticFacade.count(new QueryWrapper<KlConceptStatic>().eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("concept_id", klConceptSatarOrdisaVO.getConceptId()));
+            if (conceptStaticSum > 0) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该医学标准术语与静态信息存在关系!");
+            }
+
+            //kl_relation
+            int relationsum = klRelationFacade.count(new QueryWrapper<KlRelation>().eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("start_id", klConceptSatarOrdisaVO.getConceptId()).or()
+                    .eq("end_id", klConceptSatarOrdisaVO.getConceptId()));
+            if (relationsum > 0) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该医学标准术语与树形结构或疾病相关存在关系!");
+            }
+            //kl_rule
+            int rulesum = klRuleFacade.count(new QueryWrapper<KlRule>().eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("concept_id", klConceptSatarOrdisaVO.getConceptId()));
+            if (rulesum > 0) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该医学标准术语与规则维护存在关系!");
+            }
+            //kl_rule_base
+            int ruleBasesum = klRuleBaseFacade.count(new QueryWrapper<KlRuleBase>().eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("concept_id", klConceptSatarOrdisaVO.getConceptId()));
+            if (ruleBasesum > 0) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该医学标准术语与规则维护明细存在关系!");
+            }
+        }
         UpdateWrapper<KlConcept> klLibraryUpdate = new UpdateWrapper<>();
         klLibraryUpdate.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("id", klConceptSatarOrdisaVO.getConceptId()).set("status", status).set("gmt_modified", now);
+                .eq("id", klConceptSatarOrdisaVO.getConceptId())
+                .set("status", status).set("gmt_modified", now)
+                .set("modifier", UserUtils.getCurrentPrincipleID());
         return this.update(klLibraryUpdate);
 
     }
@@ -391,4 +430,25 @@ public class KlConceptFacade extends KlConceptServiceImpl {
             }
         }
     }
+
+    public void checkConcept(KlConceptSaveVO klConceptSaveVO) {
+        // 校验名称是否相同
+        int count = this.count(new QueryWrapper<KlConcept>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("lib_type", klConceptSaveVO.getLibType())
+                .eq("lib_name", klConceptSaveVO.getLibName())
+                .ne("id", klConceptSaveVO.getConceptId() == null ? -1 : klConceptSaveVO.getConceptId()));
+        if (count > 0) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "医学标准术语名称已存在");
+        }
+        //校验标准词是否存在同义词
+        int countLib = klLibraryInfoFacade.count(new QueryWrapper<KlLibraryInfo>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("name", klConceptSaveVO.getLibName())
+                .eq("type_id", klConceptSaveVO.getLibType())
+                .eq("is_concept", 0));
+        if (countLib > 0) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "医学标准术语名称已存在同义词");
+        }
+    }
 }

+ 40 - 0
cdssman-service/src/main/java/com/diagbot/facade/KlConceptStaticFacade.java

@@ -1,5 +1,6 @@
 package com.diagbot.facade;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.diagbot.client.CdssCoreClient;
@@ -8,7 +9,13 @@ import com.diagbot.dto.KlConceptStaticDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.StaticKnowledgeDTO;
 import com.diagbot.dto.StaticKnowledgeIndexDTO;
+import com.diagbot.entity.KlConcept;
+import com.diagbot.entity.KlConceptDetail;
+import com.diagbot.entity.KlConceptStatic;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.StatusEnum;
 import com.diagbot.service.impl.KlConceptStaticServiceImpl;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.UserUtils;
 import com.diagbot.vo.ChangeStatusVO;
@@ -37,6 +44,10 @@ public class KlConceptStaticFacade extends KlConceptStaticServiceImpl {
     private CdssCoreClient cdssCoreClient;
     @Autowired
     private UserServiceClient userServiceClient;
+    @Autowired
+    private KlConceptDetailFacade klConceptDetailFacade;
+    @Autowired
+    private KlConceptFacade klConceptFacade;
 
     /**
      * 静态知识检索
@@ -172,4 +183,33 @@ public class KlConceptStaticFacade extends KlConceptStaticServiceImpl {
         }
         return exist;
     }
+
+    /**
+     * 获取全静态知识
+     *
+     * @return
+     */
+    public List<KlConcept> getAllConcept() {
+        List<KlConcept> retList = Lists.newLinkedList();
+        QueryWrapper<KlConceptStatic> staticQueryWrapper = new QueryWrapper<>();
+        staticQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("status", StatusEnum.Enable.getKey());
+        List<KlConceptStatic> staticList = this.list(staticQueryWrapper);
+
+        if (ListUtil.isNotEmpty(staticList)) {
+            List<Long> conceptIds = staticList.stream().map(i -> i.getConceptId()).distinct().collect(Collectors.toList());
+            QueryWrapper<KlConceptDetail> detailQueryWrapper = new QueryWrapper<>();
+            detailQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .in("concept_id", conceptIds);
+            List<KlConceptDetail> detailsList = klConceptDetailFacade.list(detailQueryWrapper);
+            if (ListUtil.isNotEmpty(detailsList)) {
+                conceptIds = detailsList.stream().map(i -> i.getConceptId()).distinct().collect(Collectors.toList());
+                retList = klConceptFacade.list(new QueryWrapper<KlConcept>()
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .eq("status", StatusEnum.Enable.getKey())
+                        .in("id", conceptIds));
+            }
+        }
+        return retList;
+    }
 }

+ 13 - 0
cdssman-service/src/main/java/com/diagbot/facade/KlRuleBaseFacade.java

@@ -0,0 +1,13 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.KlRuleBaseServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2021-03-26 11:40
+ */
+@Component
+public class KlRuleBaseFacade extends KlRuleBaseServiceImpl {
+}

+ 314 - 150
cdssman-service/src/main/java/com/diagbot/facade/MedRuleConvertFacade.java

@@ -6,14 +6,17 @@ import com.diagbot.dto.BillMsg;
 import com.diagbot.dto.MedClassMedDTO;
 import com.diagbot.dto.RuleDTO;
 import com.diagbot.entity.KlConcept;
+import com.diagbot.entity.KlRuleBase;
 import com.diagbot.entity.ResultRule;
 import com.diagbot.enums.ConEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.LexiconEnum;
 import com.diagbot.enums.RuleBaseTypeEnum;
+import com.diagbot.enums.RuleTypeEnum;
 import com.diagbot.enums.StatusEnum;
 import com.diagbot.enums.TypeEnum;
 import com.diagbot.util.BeanUtil;
+import com.diagbot.util.FastJsonUtils;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.MsgUtil;
 import com.diagbot.util.StringUtil;
@@ -46,6 +49,8 @@ public class MedRuleConvertFacade {
     private KlRuleFacade klRuleFacade;
     @Autowired
     private KlRelationFacade klRelationFacade;
+    @Autowired
+    private KlRuleBaseFacade klRuleBaseFacade;
 
     @Autowired
     private LisConfigFacade lisConfigFacade;
@@ -161,6 +166,7 @@ public class MedRuleConvertFacade {
             Map<Integer, List<ResultRule>> tempMap = new HashMap<>();
             Integer num = 1;
             for (RuleDTO record : entry.getValue()) {
+                System.out.println(FastJsonUtils.getBeanToJson(record));
                 List<ResultRule> tempList = Lists.newLinkedList();
 
                 ResultRule result = new ResultRule();
@@ -185,26 +191,27 @@ public class MedRuleConvertFacade {
                     result.setRuleBaseHisDetailName("");
                     result.setGroupType(record.getGroupType());
 
-                    //年龄转换数值
-                    switch (result.getRuleBaseLibName()) {
-                        case "新生儿":
-                            result.setRuleBaseInputValue(random_int(1, 12, true, true).toString());
-                            result.setRuleBaseUnit("月");
-                            break;
-                        case "幼儿":
-                            result.setRuleBaseInputValue(random_int(1, 6, true, false).toString());
-                            break;
-                        case "儿童":
-                            result.setRuleBaseInputValue(random_int(1, 6, true, false).toString());
-                            break;
-                        case "成人":
-                            result.setRuleBaseInputValue(random_int(18, 200, true, false).toString());
-                            break;
-                        case "月经期":
-                            result.setRuleBaseInputValue(random_int(0, 99, true, true).toString());
-                            break;
-                        default:
-                            break;
+                    if (StringUtil.isNotBlank(result.getRuleBaseLibName())) {
+                        switch (result.getRuleBaseLibName()) {
+                            case "新生儿":
+                                result.setRuleBaseInputValue(random_int(1, 12, true, true).toString());
+                                result.setRuleBaseUnit("月");
+                                break;
+                            case "幼儿":
+                                result.setRuleBaseInputValue(random_int(1, 6, true, false).toString());
+                                break;
+                            case "儿童":
+                                result.setRuleBaseInputValue(random_int(6, 18, true, false).toString());
+                                break;
+                            case "成人":
+                                result.setRuleBaseInputValue(random_int(18, 200, true, false).toString());
+                                break;
+                            case "月经期":
+                                result.setRuleBaseInputValue(random_int(0, 99, true, true).toString());
+                                break;
+                            default:
+                                break;
+                        }
                     }
                 }
 
@@ -213,18 +220,18 @@ public class MedRuleConvertFacade {
                 result.setRuleMsg(record.getRuleMsg());
 
                 //其他值提醒辅检
-                if (result.getRuleType().equals(4)) {
+                if (result.getRuleType().equals(RuleTypeEnum.OtherValReminders.getKey())) {
                     result.setExpectedOutput(record.getRuleMsg());
                 }
 
                 //高危药品
-                if (result.getRuleType().equals(2)
+                if (result.getRuleType().equals(RuleTypeEnum.HighRisk.getKey())
                         && result.getRuleLibType().equals(LexiconEnum.Medicine.getKey())) {
                     result.setReferenceValue(record.getRuleMsg());
                 }
 
                 //输血其他值提醒
-                if (result.getRuleType().equals(5)) {
+                if (result.getRuleType().equals(RuleTypeEnum.Transfusion.getKey())) {
                     result.setReferenceValue(record.getRuleMsg());
                 }
                 //比较关系
@@ -235,8 +242,8 @@ public class MedRuleConvertFacade {
                         if (record.getRuleBaseMaxValue() >= record.getRuleBaseMinValue()) {
                             ResultRule valResult = new ResultRule();
                             BeanUtil.copyProperties(result, valResult);
-                            valResult.setRuleBaseMinValue(new BigDecimal(record.getRuleBaseMinValue()));
-                            valResult.setRuleBaseMaxValue(new BigDecimal(record.getRuleBaseMaxValue()));
+                            valResult.setRuleBaseMinValue(new BigDecimal(record.getRuleBaseMinValue()).setScale(3, BigDecimal.ROUND_HALF_UP));
+                            valResult.setRuleBaseMaxValue(new BigDecimal(record.getRuleBaseMaxValue()).setScale(3, BigDecimal.ROUND_HALF_UP));
                             if (valResult.getRuleBaseLibName().equals("年龄")
                                     && valResult.getRuleBaseMinValue().doubleValue() > 1D) {
                                 valResult.setRuleBaseInputValue(random_int(record.getRuleBaseMinValue().intValue(),
@@ -262,7 +269,7 @@ public class MedRuleConvertFacade {
                             //大于最小值inputValue>minValue
                             ResultRule gtResult = new ResultRule();
                             BeanUtil.copyProperties(result, gtResult);
-                            gtResult.setRuleBaseMinValue(new BigDecimal(record.getRuleBaseMinValue()));
+                            gtResult.setRuleBaseMinValue(new BigDecimal(record.getRuleBaseMinValue()).setScale(3, BigDecimal.ROUND_HALF_UP));
                             if (gtResult.getRuleBaseLibName().equals("年龄")
                                     && gtResult.getRuleBaseMinValue().doubleValue() > 1D) {
                                 gtResult.setRuleBaseInputValue(random_int(record.getRuleBaseMinValue().intValue(),
@@ -285,7 +292,7 @@ public class MedRuleConvertFacade {
                             ResultRule ltResult = new ResultRule();
                             BeanUtil.copyProperties(result, ltResult);
                             //inputValue>minValue
-                            ltResult.setRuleBaseMaxValue(new BigDecimal(record.getRuleBaseMaxValue()));
+                            ltResult.setRuleBaseMaxValue(new BigDecimal(record.getRuleBaseMaxValue()).setScale(3, BigDecimal.ROUND_HALF_UP));
                             if (ltResult.getRuleBaseLibName().equals("年龄")
                                     && ltResult.getRuleBaseMaxValue().doubleValue() > 1D) {
                                 ltResult.setRuleBaseInputValue(random_int(null,
@@ -308,7 +315,7 @@ public class MedRuleConvertFacade {
                             && StringUtil.isBlank(record.getRuleBaseMaxOperator())) {
                         ResultRule gtResult = new ResultRule();
                         BeanUtil.copyProperties(result, gtResult);
-                        gtResult.setRuleBaseMinValue(new BigDecimal(record.getRuleBaseMinValue()));
+                        gtResult.setRuleBaseMinValue(new BigDecimal(record.getRuleBaseMinValue()).setScale(3, BigDecimal.ROUND_HALF_UP));
                         if (gtResult.getRuleBaseLibName().equals("年龄")
                                 && gtResult.getRuleBaseMinValue().doubleValue() > 1D) {
                             gtResult.setRuleBaseInputValue(random_int(record.getRuleBaseMinValue().intValue(),
@@ -331,7 +338,7 @@ public class MedRuleConvertFacade {
                         ResultRule ltResult = new ResultRule();
                         BeanUtil.copyProperties(result, ltResult);
                         //inputValue>minValue
-                        ltResult.setRuleBaseMaxValue(new BigDecimal(record.getRuleBaseMaxValue()));
+                        ltResult.setRuleBaseMaxValue(new BigDecimal(record.getRuleBaseMaxValue()).setScale(3, BigDecimal.ROUND_HALF_UP));
                         if (ltResult.getRuleBaseLibName().equals("年龄")
                                 && ltResult.getRuleBaseMaxValue().doubleValue() > 1D) {
                             ltResult.setRuleBaseInputValue(random_int(null,
@@ -388,9 +395,11 @@ public class MedRuleConvertFacade {
             for (ResultRule result : entry.getValue()) {
                 List<ResultRule> tempList = Lists.newLinkedList();
                 if (result.getHasSubCond() != null && result.getHasSubCond().equals(1)) {
-                    if (result.getRuleBaseLibType().equals(LexiconEnum.MedChemClass.getKey())
+                    if (result.getRuleBaseLibType() != null
+                            && (result.getRuleBaseLibType().equals(LexiconEnum.MedChemClass.getKey())
                             || result.getRuleBaseLibType().equals(LexiconEnum.MedZhiLiaoClass.getKey())
-                            || result.getRuleBaseLibType().equals(LexiconEnum.MedYaoLiClass.getKey())) {
+                            || result.getRuleBaseLibType().equals(LexiconEnum.MedYaoLiClass.getKey())
+                            || result.getRuleBaseLibType().equals(LexiconEnum.MedJiePouClass.getKey()))) {
                         List<String> medicines = medClassMedMap.get(result.getRuleBaseLibName());
                         if (ListUtil.isNotEmpty(medicines)) {
                             for (String med : medicines) {
@@ -427,7 +436,7 @@ public class MedRuleConvertFacade {
             Integer num = 1;
             for (ResultRule result : entry.getValue()) {
                 List<ResultRule> tempList = Lists.newLinkedList();
-                if (result.getRuleType().equals(4)) {
+                if (result.getRuleType().equals(RuleTypeEnum.OtherValReminders.getKey())) {
                     if (StringUtil.isNotBlank(result.getRuleBaseLibName())
                             && result.getRuleBaseLibName().equals("流产")) {
                         List<String> conflictDiseases = Lists.newLinkedList();
@@ -447,7 +456,7 @@ public class MedRuleConvertFacade {
                         for (String conflictDisease : conflictDiseases) {
                             ResultRule convertResult = new ResultRule();
                             BeanUtil.copyProperties(result, convertResult);
-                            convertResult.setReferenceValue(convertResult.getRuleBaseLibType() + "_" + convertResult.getRuleBaseLibName() + "_" + convertResult.getRuleBaseLibName());
+                            convertResult.setReferenceValue(convertResult.getRuleBaseLibType() + "_" + convertResult.getRuleBaseLibTypeName() + "_" + convertResult.getRuleBaseLibName());
                             convertResult.setRuleBaseLibName(conflictDisease);
                             convertResult.setRuleBaseLibType(LexiconEnum.Disease.getKey());
                             convertResult.setRuleBaseLibTypeName(LexiconEnum.Disease.getName());
@@ -473,7 +482,7 @@ public class MedRuleConvertFacade {
             Integer num = 1;
             for (ResultRule result : entry.getValue()) {
                 List<ResultRule> tempList = Lists.newLinkedList();
-                if (result.getRuleType().equals(6)) {
+                if (result.getRuleType().equals(RuleTypeEnum.Repeatedly.getKey())) {
                     if (StringUtil.isNotBlank(result.getRuleBaseInputValue())) {
                         List<String> pacsResultArr = Arrays.asList(result.getRuleBaseInputValue().split("\\|"));
                         for (String pacsResult : pacsResultArr) {
@@ -503,76 +512,84 @@ public class MedRuleConvertFacade {
             for (Map.Entry<Long, List<ResultRule>> entry : billMappingMap.entrySet()) {
                 Map<Integer, List<ResultRule>> tempMap = new HashMap<>();
                 Integer num = 1;
-                for (ResultRule result : entry.getValue()) {
+                for (int i = 0; i < entry.getValue().size(); i++) {
+                    //for (ResultRule result : entry.getValue()) {
+                    ResultRule result = entry.getValue().get(i);
                     List<ResultRule> tempList = Lists.newLinkedList();
-                    if (result.getRuleLibType().equals(LexiconEnum.Medicine.getKey())) {
-                        List<ResultRule> mappingList = getMappingResult_medicine(result, drugConfigMap, 1);
-                        if (result.getRuleLibType().equals(result.getRuleBaseLibType())
-                                && result.getRuleLibName().equals(result.getRuleBaseLibName())) {
-                            mappingList.forEach(item -> {
-                                item.setRuleBaseHisName(item.getRuleHisName());
-                            });
-                        }
-                        tempList.addAll(mappingList);
-                    } else if (result.getRuleLibType().equals(LexiconEnum.Operation.getKey())) {
-                        List<ResultRule> mappingList = getMappingResult(result, operationConfigMap, 1);
-                        if (result.getRuleLibType().equals(result.getRuleBaseLibType())
-                                && result.getRuleLibName().equals(result.getRuleBaseLibName())) {
-                            mappingList.forEach(item -> {
-                                item.setRuleBaseHisName(item.getRuleHisName());
-                            });
-                        }
-                        tempList.addAll(mappingList);
-                    } else if (result.getRuleLibType().equals(LexiconEnum.LisName.getKey())) {
-                        List<ResultRule> mappingList = getMappingResult_lis(result, lisConfigMap, 1);
-                        if (result.getRuleLibType().equals(result.getRuleBaseLibType())
-                                && result.getRuleLibName().equals(result.getRuleBaseLibName())) {
-                            mappingList.forEach(item -> {
-                                item.setRuleBaseHisName(item.getRuleHisName());
-                                item.setRuleBaseHisDetailName(item.getRuleHisDetailName());
-                            });
-                        }
-                        tempList.addAll(mappingList);
-                    } else if (result.getRuleLibType().equals(LexiconEnum.LisSubName.getKey())) {
-                        List<ResultRule> mappingList = getMappingResult_lis(result, lisConfigMap, 1);
-                        if (result.getRuleLibType().equals(result.getRuleBaseLibType())
-                                && result.getRuleLibName().equals(result.getRuleBaseLibName())) {
-                            mappingList.forEach(item -> {
-                                item.setRuleBaseHisName(item.getRuleHisName());
-                                item.setRuleBaseHisDetailName(item.getRuleHisDetailName());
-                            });
-                        }
-                        tempList.addAll(mappingList);
-                    } else if (result.getRuleLibType().equals(LexiconEnum.PacsName.getKey())) {
-                        List<ResultRule> mappingList = getMappingResult(result, pacsConfigMap, 1);
-                        if (result.getRuleLibType().equals(result.getRuleBaseLibType())
-                                && result.getRuleLibName().equals(result.getRuleBaseLibName())) {
-                            mappingList.forEach(item -> {
-                                item.setRuleBaseHisName(item.getRuleHisName());
-                            });
-                        }
-                        tempList.addAll(mappingList);
-                    } else if (result.getRuleLibType().equals(LexiconEnum.PacsSubName.getKey())) {
-                        List<ResultRule> mappingList = getMappingResult(result, pacsConfigMap, 1);
-                        if (result.getRuleLibType().equals(result.getRuleBaseLibType())
-                                && result.getRuleLibName().equals(result.getRuleBaseLibName())) {
-                            mappingList.forEach(item -> {
-                                item.setRuleBaseHisName(item.getRuleHisName());
-                            });
-                        }
-                        tempList.addAll(mappingList);
-                    } else if (result.getRuleLibType().equals(LexiconEnum.Transfusion.getKey())) {
-                        List<ResultRule> mappingList = getMappingResult(result, transfusionConfigMap, 1);
-                        if (result.getRuleLibType().equals(result.getRuleBaseLibType())
-                                && result.getRuleLibName().equals(result.getRuleBaseLibName())) {
-                            mappingList.forEach(item -> {
-                                item.setRuleBaseHisName(item.getRuleHisName());
-                            });
+                    if (i == 0) {
+                        if (result.getRuleLibType().equals(LexiconEnum.Medicine.getKey())) {
+                            List<ResultRule> mappingList = getMappingResult_medicine(result, drugConfigMap, 1, result.getRuleType());
+                            if (result.getRuleLibType().equals(result.getRuleBaseLibType())
+                                    && result.getRuleLibName().equals(result.getRuleBaseLibName())) {
+                                mappingList.forEach(item -> {
+                                    item.setRuleBaseHisName(item.getRuleHisName());
+                                });
+                            }
+                            tempList.addAll(mappingList);
+                        } else if (result.getRuleLibType().equals(LexiconEnum.Operation.getKey())) {
+                            List<ResultRule> mappingList = getMappingResult(result, operationConfigMap, 1);
+                            if (result.getRuleLibType().equals(result.getRuleBaseLibType())
+                                    && result.getRuleLibName().equals(result.getRuleBaseLibName())) {
+                                mappingList.forEach(item -> {
+                                    item.setRuleBaseHisName(item.getRuleHisName());
+                                });
+                            }
+                            tempList.addAll(mappingList);
+                        } else if (result.getRuleLibType().equals(LexiconEnum.LisName.getKey())) {
+                            List<ResultRule> mappingList = getMappingResult_lis(result, lisConfigMap, 1);
+                            if (result.getRuleLibType().equals(result.getRuleBaseLibType())
+                                    && result.getRuleLibName().equals(result.getRuleBaseLibName())) {
+                                mappingList.forEach(item -> {
+                                    item.setRuleBaseHisName(item.getRuleHisName());
+                                    item.setRuleBaseHisDetailName(item.getRuleHisDetailName());
+                                });
+                            }
+                            tempList.addAll(mappingList);
+                        } else if (result.getRuleLibType().equals(LexiconEnum.LisSubName.getKey())) {
+                            List<ResultRule> mappingList = getMappingResult_lis(result, lisConfigMap, 1);
+                            if (result.getRuleLibType().equals(result.getRuleBaseLibType())
+                                    && result.getRuleLibName().equals(result.getRuleBaseLibName())) {
+                                mappingList.forEach(item -> {
+                                    item.setRuleBaseHisName(item.getRuleHisName());
+                                    item.setRuleBaseHisDetailName(item.getRuleHisDetailName());
+                                });
+                            }
+                            tempList.addAll(mappingList);
+                        } else if (result.getRuleLibType().equals(LexiconEnum.PacsName.getKey())) {
+                            List<ResultRule> mappingList = getMappingResult(result, pacsConfigMap, 1);
+                            if (result.getRuleLibType().equals(result.getRuleBaseLibType())
+                                    && result.getRuleLibName().equals(result.getRuleBaseLibName())) {
+                                mappingList.forEach(item -> {
+                                    item.setRuleBaseHisName(item.getRuleHisName());
+                                });
+                            }
+                            tempList.addAll(mappingList);
+                        } else if (result.getRuleLibType().equals(LexiconEnum.PacsSubName.getKey())) {
+                            List<ResultRule> mappingList = getMappingResult(result, pacsConfigMap, 1);
+                            if (result.getRuleLibType().equals(result.getRuleBaseLibType())
+                                    && result.getRuleLibName().equals(result.getRuleBaseLibName())) {
+                                mappingList.forEach(item -> {
+                                    item.setRuleBaseHisName(item.getRuleHisName());
+                                });
+                            }
+                            tempList.addAll(mappingList);
+                        } else if (result.getRuleLibType().equals(LexiconEnum.Transfusion.getKey())) {
+                            List<ResultRule> mappingList = getMappingResult(result, transfusionConfigMap, 1);
+                            if (result.getRuleLibType().equals(result.getRuleBaseLibType())
+                                    && result.getRuleLibName().equals(result.getRuleBaseLibName())) {
+                                mappingList.forEach(item -> {
+                                    item.setRuleBaseHisName(item.getRuleHisName());
+                                });
+                            }
+                            tempList.addAll(mappingList);
+                        } else if (result.getRuleLibType().equals(LexiconEnum.PacsResult.getKey())) {
+                            tempList.add(result);
+                        } else {
+                            tempList.add(result);
                         }
-                        tempList.addAll(mappingList);
-                    } else if (result.getRuleLibType().equals(LexiconEnum.PacsResult.getKey())) {
-                        tempList.add(result);
                     } else {
+                        result.setRuleHisName(entry.getValue().get(0).getRuleHisName());
+                        result.setRuleHisDetailName(entry.getValue().get(0).getRuleHisDetailName());
                         tempList.add(result);
                     }
                     tempMap.put(num++, tempList);
@@ -598,7 +615,7 @@ public class MedRuleConvertFacade {
                                 List<ResultRule> mappingList = getMappingResult(result, diseaseConfigMap, 2);
                                 tempList.addAll(mappingList);
                             } else if (result.getRuleBaseLibType().equals(LexiconEnum.Medicine.getKey())) {
-                                List<ResultRule> mappingList = getMappingResult_medicine(result, drugConfigMap, 2);
+                                List<ResultRule> mappingList = getMappingResult_medicine(result, drugConfigMap, 2, result.getRuleType());
                                 tempList.addAll(mappingList);
                             } else if (result.getRuleBaseLibType().equals(LexiconEnum.LisSubName.getKey())) {
                                 List<ResultRule> mappingList = getMappingResult_lis(result, lisConfigMap, 2);
@@ -671,7 +688,7 @@ public class MedRuleConvertFacade {
         return retList;
     }
 
-    public List<ResultRule> addRuleOrderNo(Map<Integer, List<ResultRule>> map, Integer index, List<ResultRule> tempList,  List<ResultRule> retList) {
+    public List<ResultRule> addRuleOrderNo(Map<Integer, List<ResultRule>> map, Integer index, List<ResultRule> tempList, List<ResultRule> retList) {
         if (index < map.size()) {
             List<ResultRule> list = map.get(index++);
             for (ResultRule subResult : list) {
@@ -723,10 +740,87 @@ public class MedRuleConvertFacade {
                 .collect(Collectors.toList()));
 
         //带子条件的规则
-        Map<Long, List<RuleDTO>> ruleIdMap = list.stream()
+        List<RuleDTO> listWithCond = list.stream()
                 .filter(i -> i.getHasSubCond() != null && i.getHasSubCond().equals(1))
+                .collect(Collectors.toList());
+        if (ListUtil.isEmpty(listWithCond)) {
+            return retList;
+        }
+        List<Long> ruleBaseIds = listWithCond.stream()
+                .map(i -> i.getRuleBaseId())
+                .distinct()
+                .collect(Collectors.toList());
+        List<KlRuleBase> ruleBaseList = klRuleBaseFacade.list(new QueryWrapper<KlRuleBase>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("status", StatusEnum.Enable.getKey()));
+        //.in("id", ruleBaseIds));
+        Map<Long, String> ruleBaseMap = ruleBaseList.stream()
+                .collect(Collectors.toMap(k -> k.getId(), v -> v.getConceptId() + "_"
+                        + v.getType() + "_"
+                        + v.getMaxOperator() + "_"
+                        + v.getMaxValue() + "_"
+                        + v.getMaxUnit() + "_"
+                        + v.getMinOperator() + "_"
+                        + v.getMinValue() + "_"
+                        + v.getMinUnit() + "_"
+                        + v.getEqOperator() + "_"
+                        + v.getEqValue() + "_"
+                        + v.getEqUnit()));
+        /*Map<String, String> sameCondMap = ruleBaseList.stream()
+                .collect(Collectors.groupingBy(k -> k.getConceptId() + "_"
+                                + k.getType() + "_"
+                                + k.getMaxOperator() + "_"
+                                + k.getMaxValue() + "_"
+                                + k.getMaxUnit() + "_"
+                                + k.getMinOperator() + "_"
+                                + k.getMinValue() + "_"
+                                + k.getMinUnit() + "_"
+                                + k.getEqOperator() + "_"
+                                + k.getEqValue() + "_"
+                                + k.getEqUnit(),
+                        Collectors.mapping(v -> v.getId().toString(), Collectors.joining("|"))));
+        Map<String, Boolean> usedCondMap = new HashMap<>();
+        for (Map.Entry<String, String> entry : sameCondMap.entrySet()) {
+            usedCondMap.put(entry.getValue(), false);
+        }*/
+
+        Map<Long, List<RuleDTO>> ruleIdMap = listWithCond.stream()
                 .collect(Collectors.groupingBy(RuleDTO::getRuleId));
-        //Map<ruleId,Map<groupType_ruleBaseId,RuleDTO>>
+        Map<Long, Map<String, RuleDTO>> baseNestMap = new HashMap<>();
+        Map<Long, String> baseCondMap = new HashMap<>();
+        for (Map.Entry<Long, List<RuleDTO>> entry : ruleIdMap.entrySet()) {
+            Map<String, RuleDTO> subMap = new HashMap<>();
+            for (RuleDTO result : entry.getValue()) {
+                subMap.put(ruleBaseMap.get(result.getRuleBaseId()), result);
+            }
+            baseNestMap.put(entry.getKey(), subMap);
+            baseCondMap.put(entry.getKey(), subMap.keySet().stream().sorted().collect(Collectors.joining("|")));
+        }
+        Map<String, List<Long>> baseReversedMap = new HashMap<>();
+        for (Map.Entry<Long, String> entry : baseCondMap.entrySet()) {
+            List<Long> ruleIds = Lists.newLinkedList();
+            if (baseReversedMap.containsKey(entry.getValue())) {
+                ruleIds = baseReversedMap.get(entry.getValue());
+            }
+            ruleIds.add(entry.getKey());
+            baseReversedMap.put(entry.getValue(), ruleIds);
+        }
+
+        for (Map.Entry<String, List<Long>> entry : baseReversedMap.entrySet()) {
+            if (ListUtil.isEmpty(entry.getValue())) {
+                continue;
+            }
+            Integer num = 0;
+            List<String> baseIdList = Arrays.asList(entry.getKey().split("\\|"));
+            for (Long ruleId : entry.getValue()) {
+                retList.add(baseNestMap.get(ruleId).get(baseIdList.get(num++)));
+                if (num == baseIdList.size()) {
+                    num = 0;
+                }
+            }
+        }
+
+        /*//Map<ruleId,Map<groupType_ruleBaseId,RuleDTO>>
         Map<Long, Map<String, RuleDTO>> nestMap = new HashMap<>();
         //Map<ruleId,groupType_ruleBaseId|groupType_ruleBaseId|groupType_ruleBaseId……>
         Map<Long, String> conditionMap = new HashMap<>();
@@ -739,6 +833,7 @@ public class MedRuleConvertFacade {
                             .map(i -> i.getGroupType() + "_" + i.getRuleBaseId())
                             .collect(Collectors.joining("|")));
         }
+
         //Map<groupType_ruleBaseId,List<ruleId>
         Map<String, List<Long>> reversedMap = new HashMap<>();
         for (Map.Entry<Long, String> entry : conditionMap.entrySet()) {
@@ -762,7 +857,7 @@ public class MedRuleConvertFacade {
                     num = 0;
                 }
             }
-        }
+        }*/
 
         return retList;
     }
@@ -824,7 +919,8 @@ public class MedRuleConvertFacade {
      * @param type
      * @return
      */
-    public List<ResultRule> getMappingResult_medicine(ResultRule result, Map<String, Map<String, Map<String, List<Long>>>> configMap, Integer type) {
+    public List<ResultRule> getMappingResult_medicine(ResultRule result, Map<String, Map<String,
+            Map<String, List<Long>>>> configMap, Integer type, Integer ruleType) {
         List<ResultRule> retList = Lists.newLinkedList();
         if (configMap == null || configMap.size() == 0) {
             result.setSuccess(0);
@@ -843,29 +939,90 @@ public class MedRuleConvertFacade {
             keyName = result.getRuleBaseLibName();
         }
 
-        List<String> hisNames = configMap.containsKey(keyName)
-                //? configMap.get(keyName).values().stream().map(i -> i.keySet()).flatMap(Collection::stream).distinct().collect(Collectors.toList())
-                ? new ArrayList<>(configMap.get(keyName).keySet())
-                : new ArrayList<>();
-        if (ListUtil.isNotEmpty(hisNames)) {
-            for (String hisName : hisNames) {
-                ResultRule bmResult = new ResultRule();
-                BeanUtil.copyProperties(result, bmResult);
+        if (ruleType.equals(RuleTypeEnum.HighRisk.getKey())) {
+            Map<String, Map<String, List<Long>>> hisMap = configMap.containsKey(keyName)
+                    ? configMap.get(keyName)
+                    : new HashMap<>();
+            if (hisMap.size() > 0) {
+                for (Map.Entry<String, Map<String, List<Long>>> hisEntry : hisMap.entrySet()) {
+                    if (result.getRuleBaseLibType().equals(LexiconEnum.Form.getKey())
+                            && StringUtil.isNotBlank(result.getRuleBaseLibName())) {
+                        if (hisEntry.getValue() == null || hisEntry.getValue().size() == 0) {
+                            ResultRule bmResult = new ResultRule();
+                            BeanUtil.copyProperties(result, bmResult);
+                            bmResult.setSuccess(0);
+                            if (type.equals(1)) {
+                                bmResult.setMessage(result.getMessage() + result.getRuleLibName() + "(" + result.getRuleLibTypeName()
+                                        + ")+" + result.getRuleBaseLibName() + "(" + result.getRuleBaseLibTypeName() + ")缺少医院端映射;");
+                            } else if (type.equals(2)) {
+                                bmResult.setMessage(result.getMessage() + result.getRuleBaseLibName() + "(" + result.getRuleBaseLibTypeName() + ")缺少医院端映射;");
+                            }
+                            retList.add(bmResult);
+                        } else {
+                            ResultRule bmResult = new ResultRule();
+                            BeanUtil.copyProperties(result, bmResult);
+                            if (hisEntry.getValue().containsKey(result.getRuleBaseLibName())) {
+                                if (type.equals(1)) {
+                                    bmResult.setRuleHisName(hisEntry.getKey());
+                                } else if (type.equals(2)) {
+                                    bmResult.setRuleBaseHisName(hisEntry.getKey());
+                                }
+                            } else {
+                                bmResult.setSuccess(0);
+                                if (type.equals(1)) {
+                                    bmResult.setMessage(result.getMessage() + result.getRuleLibName() + "(" + result.getRuleLibTypeName()
+                                            + ")+" + result.getRuleBaseLibName() + "(" + result.getRuleBaseLibTypeName() + ")缺少医院端映射;");
+                                } else if (type.equals(2)) {
+                                    bmResult.setMessage(result.getMessage() + result.getRuleBaseLibName() + "(" + result.getRuleBaseLibTypeName() + ")缺少医院端映射;");
+                                }
+                            }
+                            retList.add(bmResult);
+                        }
+                    } else {
+                        ResultRule bmResult = new ResultRule();
+                        BeanUtil.copyProperties(result, bmResult);
+                        if (type.equals(1)) {
+                            bmResult.setRuleHisName(hisEntry.getKey());
+                        } else if (type.equals(2)) {
+                            bmResult.setRuleBaseHisName(hisEntry.getKey());
+                        }
+                        retList.add(bmResult);
+                    }
+                }
+            } else {
+                result.setSuccess(0);
                 if (type.equals(1)) {
-                    bmResult.setRuleHisName(hisName);
+                    result.setMessage(result.getMessage() + result.getRuleLibName() + "(" + result.getRuleLibTypeName() + ")缺少医院端映射;");
                 } else if (type.equals(2)) {
-                    bmResult.setRuleBaseHisName(hisName);
+                    result.setMessage(result.getMessage() + result.getRuleBaseLibName() + "(" + result.getRuleBaseLibTypeName() + ")缺少医院端映射;");
                 }
-                retList.add(bmResult);
+                retList.add(result);
             }
         } else {
-            result.setSuccess(0);
-            if (type.equals(1)) {
-                result.setMessage(result.getMessage() + result.getRuleLibName() + "(" + result.getRuleLibTypeName() + ")缺少医院端映射;");
-            } else if (type.equals(2)) {
-                result.setMessage(result.getMessage() + result.getRuleBaseLibName() + "(" + result.getRuleBaseLibTypeName() + ")缺少医院端映射;");
+            List<String> hisNames = configMap.containsKey(keyName)
+                    //? configMap.get(keyName).values().stream().map(i -> i.keySet()).flatMap(Collection::stream).distinct().collect(Collectors.toList())
+                    ? new ArrayList<>(configMap.get(keyName).keySet())
+                    : new ArrayList<>();
+            if (ListUtil.isNotEmpty(hisNames)) {
+                for (String hisName : hisNames) {
+                    ResultRule bmResult = new ResultRule();
+                    BeanUtil.copyProperties(result, bmResult);
+                    if (type.equals(1)) {
+                        bmResult.setRuleHisName(hisName);
+                    } else if (type.equals(2)) {
+                        bmResult.setRuleBaseHisName(hisName);
+                    }
+                    retList.add(bmResult);
+                }
+            } else {
+                result.setSuccess(0);
+                if (type.equals(1)) {
+                    result.setMessage(result.getMessage() + result.getRuleLibName() + "(" + result.getRuleLibTypeName() + ")缺少医院端映射;");
+                } else if (type.equals(2)) {
+                    result.setMessage(result.getMessage() + result.getRuleBaseLibName() + "(" + result.getRuleBaseLibTypeName() + ")缺少医院端映射;");
+                }
+                retList.add(result);
             }
-            retList.add(result);
         }
         return retList;
     }
@@ -941,7 +1098,7 @@ public class MedRuleConvertFacade {
                 conType = getConType(resultRule.getRuleBaseLibTypeName(), resultRule.getRuleType(), resultRule.getRuleBaseType());
             }
             //开单合理性
-            if (resultRule.getRuleType().equals(1)) {
+            if (resultRule.getRuleType().equals(RuleTypeEnum.Rationality.getKey())) {
                 if (resultRule.getHasSubCond() != null && resultRule.getHasSubCond().equals(1)) {
                     if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Disease.getKey())) {
                         //禁忌疾病
@@ -1071,14 +1228,14 @@ public class MedRuleConvertFacade {
                         if (StringUtil.isNotBlank(resultRule.getRuleBaseInputValue())) {
                             content += trimZero(resultRule.getRuleBaseInputValue());
                         }
-                        billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
+                        /*billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
                                 resultRule.getRuleLibName(),
                                 content,
                                 conType,
-                                orderType);
+                                orderType);*/
                     }
                 }
-            } else if (resultRule.getRuleType().equals(2)) {
+            } else if (resultRule.getRuleType().equals(RuleTypeEnum.HighRisk.getKey())) {
                 if (resultRule.getHasSubCond() != null && resultRule.getHasSubCond().equals(1)) {
                     if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Disease.getKey())) {
                         billMsg = MsgUtil.getCommonHighRiskMsg(resultRule.getRuleBaseHisName(), resultRule.getRuleHisName(), orderType);
@@ -1126,7 +1283,7 @@ public class MedRuleConvertFacade {
                 } else {
                     billMsg = MsgUtil.getCommonHighRiskMsg("", resultRule.getRuleHisName(), orderType);
                 }
-            } else if (resultRule.getRuleType().equals(3)) {
+            } else if (resultRule.getRuleType().equals(RuleTypeEnum.Critical.getKey())) {
                 if (resultRule.getRuleLibType().equals(LexiconEnum.LisSubName.getKey())) {
                     String content = "";
                     if (StringUtil.isNotBlank(resultRule.getRuleBaseHisName())) {
@@ -1143,7 +1300,7 @@ public class MedRuleConvertFacade {
                 } else if (resultRule.getRuleLibType().equals(LexiconEnum.PacsResult.getKey())) {
                     billMsg = MsgUtil.getCommonCriticalMsg(resultRule.getRuleLibName(), orderType);
                 }
-            } else if (resultRule.getRuleType().equals(4)) {
+            } else if (resultRule.getRuleType().equals(RuleTypeEnum.OtherValReminders.getKey())) {
                 if (resultRule.getRuleLibType().equals(LexiconEnum.LisSubName.getKey())) {
                     Lis lis = new Lis();
                     lis.setName(resultRule.getRuleHisName());
@@ -1159,7 +1316,7 @@ public class MedRuleConvertFacade {
                         if (StringUtil.isNotBlank(resultRule.getRuleBaseInputValue())) {
                             content += trimZero(resultRule.getRuleBaseInputValue());
                         }
-                        billMsg = MsgUtil.getCommonOtherMsg(orderType, content, resultRule.getRuleHisName(), conType, lis);
+                        billMsg = MsgUtil.getCommonOtherMsg(TypeEnum.lisSelf.getName(), content, resultRule.getRuleHisName(), conType, lis);
                     } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Group.getKey())) {
                         billMsg = MsgUtil.getCommonOtherMsg(orderType, resultRule.getRuleBaseLibName(), resultRule.getRuleHisName(), ConEnum.group.getName(), lis);
                     }
@@ -1178,7 +1335,7 @@ public class MedRuleConvertFacade {
                         billMsg = MsgUtil.getCommonOtherMsg(orderType, resultRule.getExpectedOutput(), resultRule.getRuleLibName(), conType, null);
                     }
                 }
-            } else if (resultRule.getRuleType().equals(5)) {
+            } else if (resultRule.getRuleType().equals(RuleTypeEnum.Transfusion.getKey())) {
                 if (resultRule.getRuleBaseLibType().equals(LexiconEnum.LisSubName.getKey())) {
                     String content = "";
                     content += resultRule.getRuleHisName();
@@ -1191,7 +1348,7 @@ public class MedRuleConvertFacade {
                     }
                     billMsg = MsgUtil.getCommonOtherMsg(TypeEnum.transfusion.getName(), content, resultRule.getRuleMsg(), ConEnum.lis.getName(), null);
                 }
-            } else if (resultRule.getRuleType().equals(6)) {
+            } else if (resultRule.getRuleType().equals(RuleTypeEnum.Repeatedly.getKey())) {
                 billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(), resultRule.getRuleLibName(), resultRule.getRuleBaseHisName(), conType, orderType);
             }
         } else if (list.size() > 1) {
@@ -1259,9 +1416,9 @@ public class MedRuleConvertFacade {
                     } else if (ListUtil.isNotEmpty(medicineResults)) {
                         billMsg = MsgUtil.getCommonOtherMsg(orderType, content, medicineResults.get(0).getRuleBaseHisName(), TypeEnum.drug.getName(), lis);
                     } else if (ListUtil.isNotEmpty(groupResults)) {
-                        billMsg = MsgUtil.getCommonOtherMsg(orderType, content, groupResults.get(0).getRuleBaseLibName(), ConEnum.group.getName(), lis);
+                        billMsg = MsgUtil.getCommonOtherMsg(orderType, content, groupResults.get(0).getRuleBaseLibName(), TypeEnum.group.getName(), lis);
                     } else {
-                        billMsg = MsgUtil.getCommonOtherMsg(orderType, content, "", ConEnum.lis.getName(), lis);
+                        billMsg = MsgUtil.getCommonOtherMsg(orderType, content, "", TypeEnum.lis.getName(), lis);
                     }
                 } else if (ruleLibType.equals(LexiconEnum.PacsResult.getKey())) {
                     billMsg = MsgUtil.getCommonOtherMsg(orderType, list.get(0).getExpectedOutput(), "", "", null);
@@ -1318,7 +1475,7 @@ public class MedRuleConvertFacade {
                 conType = getConType(resultRule.getRuleBaseLibTypeName(), resultRule.getRuleType(), resultRule.getRuleBaseType());
             }
             //开单合理性
-            if (resultRule.getRuleType().equals(1)) {
+            if (resultRule.getRuleType().equals(RuleTypeEnum.Rationality.getKey())) {
                 if (resultRule.getHasSubCond() != null && resultRule.getHasSubCond().equals(1)) {
                     if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Disease.getKey())) {
                         //禁忌疾病
@@ -1444,14 +1601,14 @@ public class MedRuleConvertFacade {
                         if (StringUtil.isNotBlank(resultRule.getRuleBaseInputValue())) {
                             content += trimZero(resultRule.getRuleBaseInputValue());
                         }
-                        billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleLibName(),
+                        /*billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleLibName(),
                                 resultRule.getRuleLibName(),
                                 content,
                                 conType,
-                                orderType);
+                                orderType);*/
                     }
                 }
-            } else if (resultRule.getRuleType().equals(2)) {
+            } else if (resultRule.getRuleType().equals(RuleTypeEnum.HighRisk.getKey())) {
                 if (resultRule.getHasSubCond() != null && resultRule.getHasSubCond().equals(1)) {
                     if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Disease.getKey())) {
                         billMsg = MsgUtil.getCommonHighRiskMsg(resultRule.getRuleBaseLibName(), resultRule.getRuleLibName(), orderType);
@@ -1495,7 +1652,7 @@ public class MedRuleConvertFacade {
                 } else {
                     billMsg = MsgUtil.getCommonHighRiskMsg("", resultRule.getRuleLibName(), orderType);
                 }
-            } else if (resultRule.getRuleType().equals(3)) {
+            } else if (resultRule.getRuleType().equals(RuleTypeEnum.Critical.getKey())) {
                 if (resultRule.getRuleLibType().equals(LexiconEnum.LisSubName.getKey())) {
                     String content = "";
                     if (StringUtil.isNotBlank(resultRule.getRuleBaseLibName())) {
@@ -1508,7 +1665,7 @@ public class MedRuleConvertFacade {
                 } else if (resultRule.getRuleLibType().equals(LexiconEnum.PacsResult.getKey())) {
                     billMsg = MsgUtil.getCommonCriticalMsg(resultRule.getRuleLibName(), orderType);
                 }
-            } else if (resultRule.getRuleType().equals(4)) {
+            } else if (resultRule.getRuleType().equals(RuleTypeEnum.OtherValReminders.getKey())) {
                 if (resultRule.getRuleLibType().equals(LexiconEnum.LisSubName.getKey())) {
                     Lis lis = new Lis();
                     lis.setUniqueName(resultRule.getRuleLibName());
@@ -1518,7 +1675,7 @@ public class MedRuleConvertFacade {
                         if (StringUtil.isNotBlank(resultRule.getRuleBaseInputValue())) {
                             content += trimZero(resultRule.getRuleBaseInputValue());
                         }
-                        billMsg = MsgUtil.getCommonOtherMsg(orderType, content, resultRule.getRuleLibName(), conType, lis);
+                        billMsg = MsgUtil.getCommonOtherMsg(TypeEnum.lisSelf.getName(), content, resultRule.getRuleLibName(), conType, lis);
                     } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Group.getKey())) {
                         billMsg = MsgUtil.getCommonOtherMsg(orderType, resultRule.getRuleBaseLibName(), resultRule.getRuleLibName(), ConEnum.group.getName(), lis);
                     }
@@ -1537,7 +1694,7 @@ public class MedRuleConvertFacade {
                         billMsg = MsgUtil.getCommonOtherMsg(orderType, resultRule.getExpectedOutput(), resultRule.getRuleLibName(), conType, null);
                     }
                 }
-            } else if (resultRule.getRuleType().equals(5)) {
+            } else if (resultRule.getRuleType().equals(RuleTypeEnum.Transfusion.getKey())) {
                 if (resultRule.getRuleBaseLibType().equals(LexiconEnum.LisSubName.getKey())) {
                     String content = "";
                     content += resultRule.getRuleLibName();
@@ -1546,7 +1703,7 @@ public class MedRuleConvertFacade {
                     }
                     billMsg = MsgUtil.getCommonOtherMsg(TypeEnum.transfusion.getName(), content, resultRule.getRuleMsg(), ConEnum.lis.getName(), null);
                 }
-            } else if (resultRule.getRuleType().equals(6)) {
+            } else if (resultRule.getRuleType().equals(RuleTypeEnum.Repeatedly.getKey())) {
                 billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleLibName(), resultRule.getRuleLibName(), resultRule.getRuleBaseLibName(), conType, orderType);
             }
         } else if (list.size() > 1) {
@@ -1604,9 +1761,9 @@ public class MedRuleConvertFacade {
                     } else if (ListUtil.isNotEmpty(medicineResults)) {
                         billMsg = MsgUtil.getCommonOtherMsg(orderType, content, medicineResults.get(0).getRuleBaseLibName(), TypeEnum.drug.getName(), lis);
                     } else if (ListUtil.isNotEmpty(groupResults)) {
-                        billMsg = MsgUtil.getCommonOtherMsg(orderType, content, groupResults.get(0).getRuleBaseLibName(), ConEnum.group.getName(), lis);
+                        billMsg = MsgUtil.getCommonOtherMsg(orderType, content, groupResults.get(0).getRuleBaseLibName(), TypeEnum.group.getName(), lis);
                     } else {
-                        billMsg = MsgUtil.getCommonOtherMsg(orderType, content, "", ConEnum.lis.getName(), lis);
+                        billMsg = MsgUtil.getCommonOtherMsg(orderType, content, "", TypeEnum.lis.getName(), lis);
                     }
                 } else if (ruleLibType.equals(LexiconEnum.PacsResult.getKey())) {
                     billMsg = MsgUtil.getCommonOtherMsg(orderType, list.get(0).getExpectedOutput(), "", "", null);
@@ -1659,12 +1816,19 @@ public class MedRuleConvertFacade {
             max = min.add(BigDecimal.TEN);
         }
         BigDecimal randomVal = new BigDecimal(Math.random() * (max.doubleValue() - min.doubleValue()) + min.doubleValue());
-        BigDecimal random_dec = randomVal.setScale(2, BigDecimal.ROUND_HALF_UP);
+        BigDecimal random_dec = randomVal.setScale(3, BigDecimal.ROUND_HALF_UP);
         //是否包含边界值
-        if (!minBoundary || maxBoundary) {
-            random_dec.add(new BigDecimal(0.01d));
+        if (!minBoundary) {
+            if (maxBoundary) {
+                if (randomVal.setScale(3, BigDecimal.ROUND_UP).doubleValue() <= max.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue()) {
+                    random_dec = randomVal.setScale(3, BigDecimal.ROUND_UP);
+                }
+            } else {
+                if (randomVal.setScale(3, BigDecimal.ROUND_UP).doubleValue() < max.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue()) {
+                    random_dec = randomVal.setScale(3, BigDecimal.ROUND_UP);
+                }
+            }
         }
-        random_dec = randomVal.setScale(2, BigDecimal.ROUND_HALF_UP);
         return random_dec;
     }
 

+ 19 - 24
cdssman-service/src/main/java/com/diagbot/facade/ResultStaticKnowledgeFacade.java

@@ -9,7 +9,6 @@ import com.diagbot.dto.ExportCommonTestDTO;
 import com.diagbot.dto.ExportLisStaticTestDTO;
 import com.diagbot.dto.ExportLisTestDTO;
 import com.diagbot.dto.RespDTO;
-import com.diagbot.entity.ConceptInfo;
 import com.diagbot.entity.DiseaseConfig;
 import com.diagbot.entity.DrugConfig;
 import com.diagbot.entity.KlConcept;
@@ -21,7 +20,6 @@ import com.diagbot.entity.PacsConfig;
 import com.diagbot.entity.ResultStaticInfo;
 import com.diagbot.entity.ResultStaticKnowledge;
 import com.diagbot.enums.ConceptTypeEnum;
-import com.diagbot.enums.GraphLabelEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.LexiconEnum;
 import com.diagbot.enums.StatusEnum;
@@ -64,9 +62,6 @@ import java.util.stream.Collectors;
 public class ResultStaticKnowledgeFacade extends ResultStaticKnowledgeServiceImpl {
     @Autowired
     private CdssCoreClient cdssCoreClient;
-    @Autowired
-    private ConceptInfoFacade conceptInfoFacade;
-
     @Autowired
     private KlConceptFacade klConceptFacade;
     @Autowired
@@ -229,18 +224,18 @@ public class ResultStaticKnowledgeFacade extends ResultStaticKnowledgeServiceImp
         }
 
         //验证静态知识
-        List<ConceptInfo> infoList = conceptInfoFacade.getAllConceptInfo();
+        List<KlConcept> infoList = klConceptStaticFacade.getAllConcept();
         if (ListUtil.isEmpty(infoList)) {
             infoList = Lists.newLinkedList();
         }
         List<String> lisStaticNames = infoList.stream()
-                .filter(i -> i.getType().equals(GraphLabelEnum.LisName.getName()))
-                .map(i -> i.getName())
+                .filter(i -> i.getLibType().equals(LexiconEnum.LisSubName.getKey()))
+                .map(i -> i.getLibName())
                 .distinct()
                 .collect(Collectors.toList());
         List<String> lisPackStaticNames = infoList.stream()
-                .filter(i -> i.getType().equals(GraphLabelEnum.LisSet.getName()))
-                .map(i -> i.getName())
+                .filter(i -> i.getLibType().equals(LexiconEnum.LisName.getKey()))
+                .map(i -> i.getLibName())
                 .distinct()
                 .collect(Collectors.toList());
 
@@ -419,18 +414,18 @@ public class ResultStaticKnowledgeFacade extends ResultStaticKnowledgeServiceImp
         }
 
         //静态知识
-        List<ConceptInfo> infoList = conceptInfoFacade.getAllConceptInfo();
+        List<KlConcept> infoList = klConceptStaticFacade.getAllConcept();
         if (ListUtil.isEmpty(infoList)) {
             infoList = Lists.newLinkedList();
         }
         List<String> pacsStaticNames = infoList.stream()
-                .filter(i -> i.getType().equals(GraphLabelEnum.PacsName.getName()))
-                .map(i -> i.getName())
+                .filter(i -> i.getLibType().equals(LexiconEnum.PacsName.getKey()))
+                .map(i -> i.getLibName())
                 .distinct()
                 .collect(Collectors.toList());
         List<String> subPacsPackStaticNames = infoList.stream()
-                .filter(i -> i.getType().equals(GraphLabelEnum.PacsSubName.getName()))
-                .map(i -> i.getName())
+                .filter(i -> i.getLibType().equals(LexiconEnum.PacsSubName.getKey()))
+                .map(i -> i.getLibName())
                 .distinct()
                 .collect(Collectors.toList());
 
@@ -610,13 +605,13 @@ public class ResultStaticKnowledgeFacade extends ResultStaticKnowledgeServiceImp
         }
 
         //验证静态知识
-        List<ConceptInfo> infoList = conceptInfoFacade.getAllConceptInfo();
+        List<KlConcept> infoList = klConceptStaticFacade.getAllConcept();
         if (ListUtil.isEmpty(infoList)) {
             infoList = Lists.newLinkedList();
         }
         List<String> drugStaticNames = infoList.stream()
-                .filter(i -> i.getType().equals(GraphLabelEnum.Medicine.getName()))
-                .map(i -> i.getName())
+                .filter(i -> i.getLibType().equals(LexiconEnum.Medicine.getKey()))
+                .map(i -> i.getLibName())
                 .distinct()
                 .collect(Collectors.toList());
 
@@ -766,13 +761,13 @@ public class ResultStaticKnowledgeFacade extends ResultStaticKnowledgeServiceImp
         }
 
         //验证静态知识
-        List<ConceptInfo> infoList = conceptInfoFacade.getAllConceptInfo();
+        List<KlConcept> infoList = klConceptStaticFacade.getAllConcept();
         if (ListUtil.isEmpty(infoList)) {
             infoList = Lists.newLinkedList();
         }
         List<String> diseaseStaticNames = infoList.stream()
-                .filter(i -> i.getType().equals(GraphLabelEnum.YiBaoDiseaseName.getName()))
-                .map(i -> i.getName())
+                .filter(i -> i.getLibName().equals(LexiconEnum.Disease.getKey()))
+                .map(i -> i.getLibName())
                 .distinct()
                 .collect(Collectors.toList());
 
@@ -922,13 +917,13 @@ public class ResultStaticKnowledgeFacade extends ResultStaticKnowledgeServiceImp
         }
 
         //验证静态知识
-        List<ConceptInfo> infoList = conceptInfoFacade.getAllConceptInfo();
+        List<KlConcept> infoList = klConceptStaticFacade.getAllConcept();
         if (ListUtil.isEmpty(infoList)) {
             infoList = Lists.newLinkedList();
         }
         List<String> diseaseStaticNames = infoList.stream()
-                .filter(i -> i.getType().equals(GraphLabelEnum.YiBaoOperationName.getName()))
-                .map(i -> i.getName())
+                .filter(i -> i.getLibType().equals(LexiconEnum.Operation.getKey()))
+                .map(i -> i.getLibName())
                 .distinct()
                 .collect(Collectors.toList());
 

+ 16 - 7
cdssman-service/src/main/java/com/diagbot/util/MsgUtil.java

@@ -1,8 +1,8 @@
 package com.diagbot.util;
+
 import com.diagbot.biz.push.entity.Lis;
 import com.diagbot.dto.BillMsg;
 import com.diagbot.enums.ConEnum;
-import com.diagbot.enums.NeoEnum;
 import com.diagbot.enums.TypeEnum;
 
 /**
@@ -75,12 +75,20 @@ public class MsgUtil {
         String msg = "";
         switch (TypeEnum.getEnum(otherType)) {
             case lis: // 其他值提醒——化验
-                if (TypeEnum.disease.getName().equals(type)) {
-                    msg = String.format("该患者%s,患有%s,请留意", content, name);
-                } else if (TypeEnum.drug.getName().equals(type)) {
-                    msg = String.format("该患者%s,可能正在服用%s,请留意", content, name);
-                } else if (ConEnum.group.getName().equals(type)) {
-                    msg = String.format("该患者%s,%s,请留意", content, name);
+                switch (TypeEnum.getEnum(type)) {
+                    case disease: // 诊断
+                        msg = String.format("该患者%s,患有%s,请留意", content, name);
+                        break;
+                    case drug: // 药品
+                        msg = String.format("该患者%s,可能正在服用%s,请留意", content, name);
+                        break;
+                    case group: // 人群
+                    case lis: // 化验
+                        msg = String.format("该患者%s,%s,请留意", content, name);
+                        break;
+                    case lisSelf: // 就化验本身一个条件
+                        msg = String.format("该患者%s,请留意", content);
+                        break;
                 }
                 billMsg.setType(type);
                 billMsg.setOrderName(lis.getName());
@@ -118,6 +126,7 @@ public class MsgUtil {
                 content = "可能正在用药" + content;
                 break;
             case allergicmeds: // 禁忌药品
+            case otherAllergy: // 禁忌其他过敏原
                 content = content + "过敏";
                 break;
             case operations: // 手术

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

@@ -73,5 +73,6 @@
         <if test="hospitalInfoPageVO.name!=null and hospitalInfoPageVO.name!=''">
             AND a.name Like concat("%",#{hospitalInfoPageVO.name},"%")
         </if>
+        order by a.gmt_create asc
     </select>
 </mapper>

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

@@ -25,7 +25,7 @@
         GROUP_CONCAT(
         a.name
         ORDER BY
-        a.concept_id ASC
+        a.is_concept DESC,a.concept_id ASC
         ) AS synonymName,
         b.status,
         b.modifier AS modifierId,