Преглед на файлове

Merge remote-tracking branch 'origin/dev/neo2mysql20210120' into debug

zhaops преди 4 години
родител
ревизия
95d7f11c3b

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

@@ -0,0 +1,175 @@
+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:高危手术,7:其他值提醒-检验,8-其他值提醒-检查,9-其他值提醒-输血,10:正常项目重复开立)',
+  `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`;

+ 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;
     }
 

+ 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;

+ 66 - 9
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);
                     }
                 }
@@ -318,6 +325,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,6 +378,34 @@ 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);
@@ -391,4 +427,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, "医学标准术语名称已存在同义词");
+        }
+    }
 }

+ 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 {
+}

+ 50 - 39
cdssman-service/src/main/java/com/diagbot/facade/MedRuleConvertFacade.java

@@ -14,6 +14,7 @@ import com.diagbot.enums.RuleBaseTypeEnum;
 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;
@@ -161,6 +162,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 +187,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(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;
+                        }
                     }
                 }
 
@@ -235,8 +238,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 +265,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 +288,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 +311,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 +334,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 +391,10 @@ 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()))) {
                         List<String> medicines = medClassMedMap.get(result.getRuleBaseLibName());
                         if (ListUtil.isNotEmpty(medicines)) {
                             for (String med : medicines) {
@@ -671,7 +675,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) {
@@ -1159,7 +1163,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);
                     }
@@ -1259,9 +1263,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);
@@ -1518,7 +1522,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);
                     }
@@ -1604,9 +1608,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 +1663,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;
     }
 

+ 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>