瀏覽代碼

自动化测试

zhaops 4 年之前
父節點
當前提交
495b2eae73

+ 4 - 4
cdssman-service/pom.xml

@@ -191,10 +191,10 @@
             <scope>runtime</scope>
         </dependency>
 
-        <dependency>
+        <!--<dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-neo4j</artifactId>
-        </dependency>
+        </dependency>-->
 
         <!--<dependency>-->
         <!--<groupId>org.neo4j</groupId>-->
@@ -203,10 +203,10 @@
         <!--<scope>compile</scope>-->
         <!--</dependency>-->
 
-        <dependency>
+        <!--<dependency>
             <groupId>org.neo4j</groupId>
             <artifactId>neo4j-ogm-http-driver</artifactId>
-        </dependency>
+        </dependency>-->
 
         <!-- 文件上传相关架包 -->
         <dependency>

+ 17 - 2
cdssman-service/src/main/java/com/diagbot/aggregate/RuleTestAggregate.java

@@ -221,7 +221,7 @@ public class RuleTestAggregate {
             return true;
         }
         //远程调用推理
-        List<ResultRule> saveList = callBill(resultList, hospitalId);
+        List<ResultRule> saveList = callIndication(resultList, hospitalId);
         //保存测试结果
         saveResultRule(saveList, billRuleVO);
 
@@ -239,7 +239,7 @@ public class RuleTestAggregate {
      * @param hospitalId
      * @return
      */
-    public List<ResultRule> callBill(List<ResultRule> list, Long hospitalId) {
+    public List<ResultRule> callIndication(List<ResultRule> list, Long hospitalId) {
         List<ResultRule> retList = Lists.newLinkedList();
         if (ListUtil.isEmpty(list)) {
             return retList;
@@ -299,7 +299,13 @@ public class RuleTestAggregate {
                     continue;
                 }
 
+                Boolean success = false;
                 for (BillMsg msg : msgList) {
+                    if (!msg.getMsg().equals(entry.getValue().get(0).getExpectedOutput())) {
+                        continue;
+                    } else {
+                        success = true;
+                    }
                     for (ResultRule result : entry.getValue()) {
                         ResultRule saveResult = new ResultRule();
                         BeanUtil.copyProperties(result, saveResult);
@@ -313,6 +319,15 @@ public class RuleTestAggregate {
                         retList.add(saveResult);
                     }
                 }
+                if (!success) {
+                    for (ResultRule result : entry.getValue()) {
+                        result.setSuccess(0);
+                        result.setMessage(result.getMessage() + "提示内容("
+                                + msgList.stream().map(i -> i.getMsg()).collect(Collectors.joining(";"))
+                                + ")与预期不符");
+                        retList.add(result);
+                    }
+                }
             } else {
                 for (ResultRule result : entry.getValue()) {
                     result.setInputParams(FastJsonUtils.getBeanToJson(indicationPushVO));

+ 13 - 5
cdssman-service/src/main/java/com/diagbot/config/TransactionAspect.java

@@ -1,3 +1,4 @@
+/*
 package com.diagbot.config;
 import org.neo4j.ogm.session.SessionFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,11 +15,13 @@ import org.springframework.transaction.TransactionStatus;
 import javax.sql.DataSource;
 
 
+*/
 /**
  * @Description:
  * @Author:zhaops
  * @time: 2021/1/19 12:39
- */
+ *//*
+
 @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
 @Configuration
 @DependsOn("sessionFactory")
@@ -26,24 +29,28 @@ public class TransactionAspect {
 
     ThreadLocal<TransactionStatus> transactionStatusThreadLocal = new ThreadLocal<>();
 
-    /**
+    */
+/**
      * 定义mysql事务管理器,必须有transactionManager作为默认事务管理器
      *
      * @param dataSource
      * @return
-     */
+     *//*
+
     @Bean("transactionManager")
     @Primary
     public DataSourceTransactionManager transactionManager(DataSource dataSource) {
         return new DataSourceTransactionManager(dataSource);
     }
 
-    /**
+    */
+/**
      * 定义neo4j事务管理器
      *
      * @param sessionFactory
      * @return
-     */
+     *//*
+
     @Bean("neo4jTransactionManager")
     public Neo4jTransactionManager neo4jTransactionManager(SessionFactory sessionFactory) {
         return new Neo4jTransactionManager(sessionFactory);
@@ -61,3 +68,4 @@ public class TransactionAspect {
 }
 
 
+*/

+ 118 - 0
cdssman-service/src/main/java/com/diagbot/dto/ResultRulePageDTO.java

@@ -0,0 +1,118 @@
+package com.diagbot.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import cn.afterturn.easypoi.excel.annotation.ExcelCollection;
+import com.diagbot.entity.ResultRule;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/3/15 13:32
+ */
+@Getter
+@Setter
+public class ResultRulePageDTO {
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    @Excel(name = "测试时间", width = 40, orderNum = "1", format = "yyyy-MM-dd HH:mm:ss", needMerge = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date gmtModified;
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 测试结果id
+     */
+    private Long resultId;
+
+    /**
+     * 规则序号
+     */
+    private Long ruleOrderNo;
+
+    /**
+     * 规则类型(1:开单-通用,2:开单-输血,3:危急值-检验,4:危急值-检查,5:高危药品,6:高危手术,7:其他值提醒-检验,8-其他值提醒-检查,9-其他值提醒-输血,10:正常项目重复开立)
+     */
+    private Integer ruleType;
+
+    /**
+     * 规则id
+     */
+    private Long ruleId;
+
+    /**
+     * 开单项类型(编码)
+     */
+    private Integer ruleLibType;
+
+    /**
+     * 开单项类型(名称)
+     */
+    @Excel(name = "规则术语类型", width = 40, orderNum = "2", needMerge = true)
+    private String ruleLibTypeName;
+
+    /**
+     * 开单项名称
+     */
+    @Excel(name = "规则医学标准术语", width = 40, orderNum = "3", needMerge = true)
+    private String ruleLibName;
+
+    /**
+     * 开单项名称(医院端)
+     */
+    @Excel(name = "规则医院术语", width = 40, orderNum = "4", needMerge = true)
+    private String ruleHisName;
+
+    /**
+     * 开单项名称-细项(医院端)
+     */
+    @Excel(name = "规则医院术语细项", width = 40, orderNum = "5", needMerge = true)
+    private String ruleHisDetailName;
+
+    /**
+     * 规则组别
+     */
+    @Excel(name = "规则组别", width = 40, orderNum = "6", needMerge = true)
+    private Integer groupType;
+
+    /**
+     * 基础规则
+     */
+    @ExcelCollection(name = "", orderNum = "7")
+    private List<ResultRule> baseRules;
+
+    /**
+     * 实际输出结果(提醒文本)
+     */
+    @Excel(name = "实际结果", width = 60, orderNum = "8", needMerge = true)
+    private String output;
+
+    /**
+     * 期望输出结果(提醒文本)
+     */
+    @Excel(name = "预期结果", width = 60, orderNum = "9", needMerge = true)
+    private String expectedOutput;
+
+    /**
+     * 成功标志(1:成功,0:失败)
+     */
+    @Excel(name = "测试结果", width = 20, orderNum = "10", replace = { "失败_0", "成功_1" }, needMerge = true)
+    private Integer success;
+
+    /**
+     * 提示信息(异常提醒)
+     */
+    @Excel(name = "失败原因", width = 60, orderNum = "11", needMerge = true)
+    private String message;
+
+    private String ids;
+}

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

@@ -1,6 +1,8 @@
 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;
@@ -114,6 +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"})
     private Integer ruleBaseType;
 
     /**
@@ -124,21 +127,25 @@ public class ResultRule implements Serializable {
     /**
      * 禁忌项类型(名称)
      */
+    @Excel(name = "基础规则术语类型", width = 40, orderNum = "2")
     private String ruleBaseLibTypeName;
 
     /**
      * 禁忌项名称
      */
+    @Excel(name = "基础规则医学标准术语", width = 40, orderNum = "3")
     private String ruleBaseLibName;
 
     /**
      * 禁忌项名称(医院端)
      */
+    @Excel(name = "基础规则医院术语", width = 40, orderNum = "4")
     private String ruleBaseHisName;
 
     /**
      * 禁忌项名称-细项(医院端)
      */
+    @Excel(name = "基础规则医院术语细则", width = 40, orderNum = "5")
     private String ruleBaseHisDetailName;
 
     /**
@@ -159,11 +166,13 @@ public class ResultRule implements Serializable {
     /**
      * 禁忌项输入值(文本/数值)
      */
+    @Excel(name = "基础规则输入值", width = 40, orderNum = "6")
     private String ruleBaseInputValue;
 
     /**
      * 参考值(参考范围拼接/药品分类保存)
      */
+    @Excel(name = "基础规则参考值", width = 40, orderNum = "7")
     private String referenceValue;
 
     /**

+ 147 - 135
cdssman-service/src/main/java/com/diagbot/facade/MedRuleConvertFacade.java

@@ -231,16 +231,17 @@ public class MedRuleConvertFacade {
                         if (record.getRuleBaseMaxValue() >= record.getRuleBaseMinValue()) {
                             ResultRule valResult = new ResultRule();
                             BeanUtil.copyProperties(result, valResult);
-                            valResult.setRuleBaseMinValue(new BigDecimal(record.getRuleBaseMinValue()).setScale(2, BigDecimal.ROUND_HALF_UP));
-                            valResult.setRuleBaseMaxValue(new BigDecimal(record.getRuleBaseMaxValue()).setScale(2, BigDecimal.ROUND_HALF_UP));
-                            if (valResult.getRuleBaseLibName().equals("年龄")) {
+                            valResult.setRuleBaseMinValue(new BigDecimal(record.getRuleBaseMinValue()));
+                            valResult.setRuleBaseMaxValue(new BigDecimal(record.getRuleBaseMaxValue()));
+                            if (valResult.getRuleBaseLibName().equals("年龄")
+                                    && valResult.getRuleBaseMinValue().doubleValue() > 1D) {
                                 valResult.setRuleBaseInputValue(random_int(record.getRuleBaseMinValue().intValue(),
                                         record.getRuleBaseMaxValue().intValue(),
                                         (record.getRuleBaseMaxOperator().equals("<=") ? true : false),
                                         (record.getRuleBaseMinOperator().equals(">=") ? true : false)).toString());
                             } else {
-                                valResult.setRuleBaseInputValue(random(new BigDecimal(record.getRuleBaseMinValue()).setScale(2, BigDecimal.ROUND_HALF_UP),
-                                        new BigDecimal(record.getRuleBaseMaxValue()).setScale(2, BigDecimal.ROUND_HALF_UP),
+                                valResult.setRuleBaseInputValue(random(new BigDecimal(record.getRuleBaseMinValue()),
+                                        new BigDecimal(record.getRuleBaseMaxValue()),
                                         (record.getRuleBaseMaxOperator().equals("<=") ? true : false),
                                         (record.getRuleBaseMinOperator().equals(">=") ? true : false)).toString());
                             }
@@ -257,14 +258,15 @@ public class MedRuleConvertFacade {
                             //大于最小值inputValue>minValue
                             ResultRule gtResult = new ResultRule();
                             BeanUtil.copyProperties(result, gtResult);
-                            gtResult.setRuleBaseMinValue(new BigDecimal(record.getRuleBaseMinValue()).setScale(2, BigDecimal.ROUND_HALF_UP));
-                            if (gtResult.getRuleBaseLibName().equals("年龄")) {
+                            gtResult.setRuleBaseMinValue(new BigDecimal(record.getRuleBaseMinValue()));
+                            if (gtResult.getRuleBaseLibName().equals("年龄")
+                                    && gtResult.getRuleBaseMinValue().doubleValue() > 1D) {
                                 gtResult.setRuleBaseInputValue(random_int(record.getRuleBaseMinValue().intValue(),
                                         null,
                                         (record.getRuleBaseMinOperator().equals(">=") ? true : false),
                                         false).toString());
                             } else {
-                                gtResult.setRuleBaseInputValue(random(new BigDecimal(record.getRuleBaseMinValue()).setScale(2, BigDecimal.ROUND_HALF_UP),
+                                gtResult.setRuleBaseInputValue(random(new BigDecimal(record.getRuleBaseMinValue()),
                                         null,
                                         (record.getRuleBaseMinOperator().equals(">=") ? true : false),
                                         false).toString());
@@ -279,15 +281,16 @@ public class MedRuleConvertFacade {
                             ResultRule ltResult = new ResultRule();
                             BeanUtil.copyProperties(result, ltResult);
                             //inputValue>minValue
-                            ltResult.setRuleBaseMaxValue(new BigDecimal(record.getRuleBaseMaxValue()).setScale(2, BigDecimal.ROUND_HALF_UP));
-                            if (ltResult.getRuleBaseLibName().equals("年龄")) {
+                            ltResult.setRuleBaseMaxValue(new BigDecimal(record.getRuleBaseMaxValue()));
+                            if (ltResult.getRuleBaseLibName().equals("年龄")
+                                    && ltResult.getRuleBaseMaxValue().doubleValue() > 1D) {
                                 ltResult.setRuleBaseInputValue(random_int(null,
                                         record.getRuleBaseMaxValue().intValue(),
                                         false,
                                         (record.getRuleBaseMaxOperator().equals("<=") ? true : false)).toString());
                             } else {
                                 ltResult.setRuleBaseInputValue(random(null,
-                                        new BigDecimal(record.getRuleBaseMaxValue()).setScale(2, BigDecimal.ROUND_HALF_UP),
+                                        new BigDecimal(record.getRuleBaseMaxValue()),
                                         false,
                                         (record.getRuleBaseMaxOperator().equals("<=") ? true : false)).toString());
                             }
@@ -301,14 +304,15 @@ public class MedRuleConvertFacade {
                             && StringUtil.isBlank(record.getRuleBaseMaxOperator())) {
                         ResultRule gtResult = new ResultRule();
                         BeanUtil.copyProperties(result, gtResult);
-                        gtResult.setRuleBaseMinValue(new BigDecimal(record.getRuleBaseMinValue()).setScale(2, BigDecimal.ROUND_HALF_UP));
-                        if (gtResult.getRuleBaseLibName().equals("年龄")) {
+                        gtResult.setRuleBaseMinValue(new BigDecimal(record.getRuleBaseMinValue()));
+                        if (gtResult.getRuleBaseLibName().equals("年龄")
+                                && gtResult.getRuleBaseMinValue().doubleValue() > 1D) {
                             gtResult.setRuleBaseInputValue(random_int(record.getRuleBaseMinValue().intValue(),
                                     null,
                                     (record.getRuleBaseMinOperator().equals(">=") ? true : false),
                                     false).toString());
                         } else {
-                            gtResult.setRuleBaseInputValue(random(new BigDecimal(record.getRuleBaseMinValue()).setScale(2, BigDecimal.ROUND_HALF_UP),
+                            gtResult.setRuleBaseInputValue(random(new BigDecimal(record.getRuleBaseMinValue()),
                                     null,
                                     (record.getRuleBaseMinOperator().equals(">=") ? true : false),
                                     false).toString());
@@ -323,15 +327,16 @@ public class MedRuleConvertFacade {
                         ResultRule ltResult = new ResultRule();
                         BeanUtil.copyProperties(result, ltResult);
                         //inputValue>minValue
-                        ltResult.setRuleBaseMaxValue(new BigDecimal(record.getRuleBaseMaxValue()).setScale(2, BigDecimal.ROUND_HALF_UP));
-                        if (ltResult.getRuleBaseLibName().equals("年龄")) {
+                        ltResult.setRuleBaseMaxValue(new BigDecimal(record.getRuleBaseMaxValue()));
+                        if (ltResult.getRuleBaseLibName().equals("年龄")
+                                && ltResult.getRuleBaseMaxValue().doubleValue() > 1D) {
                             ltResult.setRuleBaseInputValue(random_int(null,
                                     record.getRuleBaseMaxValue().intValue(),
                                     false,
                                     (record.getRuleBaseMaxOperator().equals("<=") ? true : false)).toString());
                         } else {
                             ltResult.setRuleBaseInputValue(random(null,
-                                    new BigDecimal(record.getRuleBaseMaxValue()).setScale(2, BigDecimal.ROUND_HALF_UP),
+                                    new BigDecimal(record.getRuleBaseMaxValue()),
                                     false,
                                     (record.getRuleBaseMaxOperator().equals("<=") ? true : false)).toString());
                         }
@@ -641,6 +646,11 @@ public class MedRuleConvertFacade {
                         item.setExpectedOutput(billMsg.getMsg());
                     }
                 });
+            } else {
+                entry.getValue().forEach(item -> {
+                    item.setSuccess(0);
+                    item.setMessage(item.getMessage() + "未生成预期结果;");
+                });
             }
             retList.addAll(entry.getValue());
         }
@@ -916,139 +926,141 @@ public class MedRuleConvertFacade {
             }
             //开单合理性
             if (resultRule.getRuleType().equals(1)) {
-                if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Disease.getKey())) {
-                    //禁忌疾病
-                    billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
-                            resultRule.getRuleLibName(),
-                            resultRule.getRuleBaseHisName(),
-                            conType,
-                            orderType);
-                } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Medicine.getKey())) {
-                    //禁忌服用药品
-                    if (resultRule.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
+                if (resultRule.getHasSubCond() != null && resultRule.getHasSubCond().equals(1)) {
+                    if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Disease.getKey())) {
+                        //禁忌疾病
                         billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
                                 resultRule.getRuleLibName(),
                                 resultRule.getRuleBaseHisName(),
                                 conType,
                                 orderType);
-                    } else if (resultRule.getRuleBaseType().equals(RuleBaseTypeEnum.Allergen.getKey())) {
+                    } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Medicine.getKey())) {
+                        //禁忌服用药品
+                        if (resultRule.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
+                            billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
+                                    resultRule.getRuleLibName(),
+                                    resultRule.getRuleBaseHisName(),
+                                    conType,
+                                    orderType);
+                        } else if (resultRule.getRuleBaseType().equals(RuleBaseTypeEnum.Allergen.getKey())) {
+                            billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
+                                    resultRule.getRuleLibName(),
+                                    resultRule.getRuleBaseHisName(),
+                                    conType,
+                                    orderType);
+                        }
+                    } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Symptom.getKey())) {
+                        //禁忌症状
                         billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
                                 resultRule.getRuleLibName(),
-                                resultRule.getRuleBaseHisName(),
+                                resultRule.getRuleBaseLibName(),
                                 conType,
                                 orderType);
-                    }
-                } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Symptom.getKey())) {
-                    //禁忌症状
-                    billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
-                            resultRule.getRuleLibName(),
-                            resultRule.getRuleBaseLibName(),
-                            conType,
-                            orderType);
-                } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Vital.getKey())) {
-                    String content = resultRule.getRuleBaseLibName();
-                    if (StringUtil.isNotBlank(resultRule.getRuleBaseInputValue())) {
-                        content += trimZero(resultRule.getRuleBaseInputValue());
-                    }
-                    billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
-                            resultRule.getRuleLibName(),
-                            content,
-                            conType,
-                            orderType);
-                } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.VitalResult.getKey())) {
-                    billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
-                            resultRule.getRuleLibName(),
-                            resultRule.getRuleBaseLibName(),
-                            conType,
-                            orderType);
-                } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Operation.getKey())) {
-                    //禁忌手术
-                    billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
-                            resultRule.getRuleLibName(),
-                            resultRule.getRuleBaseHisName(),
-                            conType,
-                            orderType);
-                } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.LisSubName.getKey())) {
-                    //禁忌实验室检查
-                    String content = resultRule.getRuleBaseHisName();
-                    if (StringUtil.isNotBlank(resultRule.getRuleBaseHisDetailName())
-                            && !resultRule.getRuleBaseHisName().equals(resultRule.getRuleBaseHisDetailName())) {
-                        content += resultRule.getRuleBaseHisDetailName();
-                    }
-                    if (StringUtil.isNotBlank(resultRule.getRuleBaseInputValue())) {
-                        content += trimZero(resultRule.getRuleBaseInputValue());
-                    }
-                    billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
-                            resultRule.getRuleLibName(),
-                            content,
-                            conType,
-                            orderType);
-                } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.PacsName.getKey())) {
-                    //互斥项
-                    if (resultRule.getRuleBaseType().equals(RuleBaseTypeEnum.BillItem.getKey())) {
+                    } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Vital.getKey())) {
+                        String content = resultRule.getRuleBaseLibName();
+                        if (StringUtil.isNotBlank(resultRule.getRuleBaseInputValue())) {
+                            content += trimZero(resultRule.getRuleBaseInputValue());
+                        }
+                        billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
+                                resultRule.getRuleLibName(),
+                                content,
+                                conType,
+                                orderType);
+                    } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.VitalResult.getKey())) {
+                        billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
+                                resultRule.getRuleLibName(),
+                                resultRule.getRuleBaseLibName(),
+                                conType,
+                                orderType);
+                    } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Operation.getKey())) {
+                        //禁忌手术
                         billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
                                 resultRule.getRuleLibName(),
                                 resultRule.getRuleBaseHisName(),
                                 conType,
                                 orderType);
+                    } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.LisSubName.getKey())) {
+                        //禁忌实验室检查
+                        String content = resultRule.getRuleBaseHisName();
+                        if (StringUtil.isNotBlank(resultRule.getRuleBaseHisDetailName())
+                                && !resultRule.getRuleBaseHisName().equals(resultRule.getRuleBaseHisDetailName())) {
+                            content += resultRule.getRuleBaseHisDetailName();
+                        }
+                        if (StringUtil.isNotBlank(resultRule.getRuleBaseInputValue())) {
+                            content += trimZero(resultRule.getRuleBaseInputValue());
+                        }
+                        billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
+                                resultRule.getRuleLibName(),
+                                content,
+                                conType,
+                                orderType);
+                    } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.PacsName.getKey())) {
+                        //互斥项
+                        if (resultRule.getRuleBaseType().equals(RuleBaseTypeEnum.BillItem.getKey())) {
+                            billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
+                                    resultRule.getRuleLibName(),
+                                    resultRule.getRuleBaseHisName(),
+                                    conType,
+                                    orderType);
+                        }
+                    } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.PacsResult.getKey())) {
+                        //禁忌辅助检查结果
+                        billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
+                                resultRule.getRuleLibName(),
+                                resultRule.getRuleBaseLibName(),
+                                conType,
+                                orderType);
+                    } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Gender.getKey())) {
+                        //禁忌性别
+                        billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
+                                resultRule.getRuleLibName(),
+                                resultRule.getRuleBaseLibName(),
+                                conType,
+                                orderType);
+                    } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Group.getKey())) {
+                        //禁忌禁忌人群
+                        billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
+                                resultRule.getRuleLibName(),
+                                resultRule.getRuleBaseLibName(),
+                                conType,
+                                orderType);
+                    } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Allergen.getKey())) {
+                        //其他过敏原
+                        billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
+                                resultRule.getRuleLibName(),
+                                resultRule.getRuleBaseLibName(),
+                                conType,
+                                orderType);
+                    } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Device.getKey())) {
+                        //禁忌医疗器械及物品提示信息
+                        billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
+                                resultRule.getRuleLibName(),
+                                resultRule.getRuleBaseLibName(),
+                                conType,
+                                orderType);
+                    } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Age.getKey())) {
+                        //年龄
+                        String content = resultRule.getRuleBaseLibName();
+                        if (StringUtil.isNotBlank(resultRule.getRuleBaseInputValue())) {
+                            content += trimZero(resultRule.getRuleBaseInputValue());
+                        }
+                        billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
+                                resultRule.getRuleLibName(),
+                                content,
+                                conType,
+                                orderType);
+                    } else {
+                        //通用
+                        String content = resultRule.getRuleBaseLibName();
+                        if (StringUtil.isNotBlank(resultRule.getRuleBaseInputValue())) {
+                            content += trimZero(resultRule.getRuleBaseInputValue());
+                        }
+                        billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
+                                resultRule.getRuleLibName(),
+                                content,
+                                conType,
+                                orderType);
                     }
-                } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.PacsResult.getKey())) {
-                    //禁忌辅助检查结果
-                    billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
-                            resultRule.getRuleLibName(),
-                            resultRule.getRuleBaseLibName(),
-                            conType,
-                            orderType);
-                } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Gender.getKey())) {
-                    //禁忌性别
-                    billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
-                            resultRule.getRuleLibName(),
-                            resultRule.getRuleBaseLibName(),
-                            conType,
-                            orderType);
-                } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Group.getKey())) {
-                    //禁忌禁忌人群
-                    billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
-                            resultRule.getRuleLibName(),
-                            resultRule.getRuleBaseLibName(),
-                            conType,
-                            orderType);
-                } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Allergen.getKey())) {
-                    //其他过敏原
-                    billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
-                            resultRule.getRuleLibName(),
-                            resultRule.getRuleBaseLibName(),
-                            conType,
-                            orderType);
-                } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Device.getKey())) {
-                    //禁忌医疗器械及物品提示信息
-                    billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
-                            resultRule.getRuleLibName(),
-                            resultRule.getRuleBaseLibName(),
-                            conType,
-                            orderType);
-                } else if (resultRule.getRuleBaseLibType().equals(LexiconEnum.Age.getKey())) {
-                    //年龄
-                    String content = resultRule.getRuleBaseLibName();
-                    if (StringUtil.isNotBlank(resultRule.getRuleBaseInputValue())) {
-                        content += trimZero(resultRule.getRuleBaseInputValue());
-                    }
-                    billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
-                            resultRule.getRuleLibName(),
-                            content,
-                            conType,
-                            orderType);
-                } else {
-                    //通用
-                    String content = resultRule.getRuleBaseLibName();
-                    if (StringUtil.isNotBlank(resultRule.getRuleBaseInputValue())) {
-                        content += trimZero(resultRule.getRuleBaseInputValue());
-                    }
-                    billMsg = MsgUtil.getCommonBillMsg(resultRule.getRuleHisName(),
-                            resultRule.getRuleLibName(),
-                            content,
-                            conType,
-                            orderType);
                 }
             } else if (resultRule.getRuleType().equals(2)) {
                 if (resultRule.getHasSubCond() != null && resultRule.getHasSubCond().equals(1)) {

+ 75 - 0
cdssman-service/src/main/java/com/diagbot/facade/ResultRuleFacade.java

@@ -1,8 +1,22 @@
 package com.diagbot.facade;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.ResultRulePageDTO;
+import com.diagbot.entity.ResultRule;
 import com.diagbot.service.impl.ResultRuleServiceImpl;
+import com.diagbot.util.ExcelUtils;
+import com.diagbot.util.ListUtil;
+import com.diagbot.vo.ResultRulePageVO;
+import com.google.common.collect.Lists;
 import org.springframework.stereotype.Component;
 
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 /**
  * @Description:
  * @Author:zhaops
@@ -10,4 +24,65 @@ import org.springframework.stereotype.Component;
  */
 @Component
 public class ResultRuleFacade extends ResultRuleServiceImpl {
+    public IPage<ResultRulePageDTO> getPage(ResultRulePageVO resultRulePageVO) {
+        IPage<ResultRulePageDTO> page = super.getPage(resultRulePageVO);
+        List<ResultRulePageDTO> records = page.getRecords();
+        List<Long> ids = records.stream()
+                .map(ResultRulePageDTO::getIds)
+                .flatMap(i -> Arrays.stream(i.split(",")))
+                .map(Long::parseLong)
+                .collect(Collectors.toList());
+        if (ListUtil.isEmpty(ids)) {
+            return page;
+        }
+
+        List<ResultRule> baseRules = this.list(new QueryWrapper<ResultRule>()
+                .in("id", ids));
+        if (ListUtil.isEmpty(baseRules)) {
+            return page;
+        }
+
+        Map<Long, ResultRule> baseRuleMap = baseRules.stream().collect(Collectors.toMap(ResultRule::getId, v -> v));
+
+        records.forEach(record -> {
+            List<Long> resultIds = Arrays.asList(record.getIds().split(",")).stream().map(Long::parseLong).collect(Collectors.toList());
+            resultIds.forEach(id -> {
+                if (ListUtil.isEmpty(record.getBaseRules())) {
+                    record.setBaseRules(Lists.newLinkedList());
+                }
+                record.getBaseRules().add(baseRuleMap.get(id));
+            });
+        });
+        page.setRecords(records);
+        return page;
+    }
+
+    /**
+     * 数据导出
+     *
+     * @param response
+     * @param resultRulePageVO
+     */
+    public void exportExcel(HttpServletResponse response, ResultRulePageVO resultRulePageVO) {
+        resultRulePageVO.setSize(-1L);
+        IPage<ResultRulePageDTO> page = this.getPage(resultRulePageVO);
+        List<ResultRulePageDTO> records = page.getRecords();
+        List<ResultRule> baseRules = this.list(new QueryWrapper<ResultRule>()
+                .eq("success", resultRulePageVO.getSuccess()));
+
+        Map<Long, ResultRule> baseRuleMap = baseRules.stream().collect(Collectors.toMap(ResultRule::getId, v -> v));
+
+        records.forEach(record -> {
+            List<Long> resultIds = Arrays.asList(record.getIds().split(",")).stream().map(Long::parseLong).collect(Collectors.toList());
+            resultIds.forEach(id -> {
+                if (ListUtil.isEmpty(record.getBaseRules())) {
+                    record.setBaseRules(Lists.newLinkedList());
+                }
+                record.getBaseRules().add(baseRuleMap.get(id));
+            });
+        });
+
+        String fileName = "规则测试结果导出.xls";
+        ExcelUtils.exportExcelUser(records, null, "sheet1", ResultRulePageDTO.class, fileName, response);
+    }
 }

+ 6 - 1
cdssman-service/src/main/java/com/diagbot/mapper/ResultRuleMapper.java

@@ -1,7 +1,11 @@
 package com.diagbot.mapper;
 
-import com.diagbot.entity.ResultRule;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.ResultRulePageDTO;
+import com.diagbot.entity.ResultRule;
+import com.diagbot.vo.ResultRulePageVO;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ResultRuleMapper extends BaseMapper<ResultRule> {
 
+    IPage<ResultRulePageDTO> getPage(@Param("resultRulePageVO") ResultRulePageVO resultRulePageVO);
 }

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

@@ -1,7 +1,11 @@
 package com.diagbot.service;
 
-import com.diagbot.entity.ResultRule;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.ResultRulePageDTO;
+import com.diagbot.entity.ResultRule;
+import com.diagbot.vo.ResultRulePageVO;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ResultRuleService extends IService<ResultRule> {
 
+    IPage<ResultRulePageDTO> getPage(@Param("resultRulePageVO") ResultRulePageVO resultRulePageVO);
 }

+ 66 - 0
cdssman-service/src/main/java/com/diagbot/service/impl/ExcelExportStylerUserImpl.java

@@ -0,0 +1,66 @@
+package com.diagbot.service.impl;
+
+import cn.afterturn.easypoi.excel.export.styler.AbstractExcelExportStyler;
+import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
+import org.apache.poi.ss.usermodel.Workbook;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/6/3 11:45
+ */
+public class ExcelExportStylerUserImpl extends AbstractExcelExportStyler implements IExcelExportStyler {
+    public ExcelExportStylerUserImpl(Workbook workbook) {
+        super.createStyles(workbook);
+    }
+
+    public CellStyle getTitleStyle(short color) {
+        CellStyle titleStyle = this.workbook.createCellStyle();
+        titleStyle.setAlignment(HorizontalAlignment.CENTER);
+        titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        titleStyle.setWrapText(true);
+        return titleStyle;
+    }
+
+    public CellStyle stringSeptailStyle(Workbook workbook, boolean isWarp) {
+        CellStyle style = workbook.createCellStyle();
+        style.setAlignment(HorizontalAlignment.CENTER);
+        style.setVerticalAlignment(VerticalAlignment.CENTER);
+        style.setDataFormat(STRING_FORMAT);
+        if (isWarp) {
+            style.setWrapText(true);
+        } else {
+            style.setAlignment(HorizontalAlignment.LEFT);
+        }
+
+        return style;
+    }
+
+    public CellStyle getHeaderStyle(short color) {
+        CellStyle titleStyle = this.workbook.createCellStyle();
+        Font font = this.workbook.createFont();
+        font.setFontHeightInPoints((short) 12);
+        titleStyle.setFont(font);
+        titleStyle.setAlignment(HorizontalAlignment.CENTER);
+        titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        return titleStyle;
+    }
+
+    public CellStyle stringNoneStyle(Workbook workbook, boolean isWarp) {
+        CellStyle style = workbook.createCellStyle();
+        style.setAlignment(HorizontalAlignment.CENTER);
+        style.setVerticalAlignment(VerticalAlignment.CENTER);
+        style.setDataFormat(STRING_FORMAT);
+        if (isWarp) {
+            style.setWrapText(true);
+        } else {
+            style.setAlignment(HorizontalAlignment.LEFT);
+        }
+
+        return style;
+    }
+}

+ 8 - 1
cdssman-service/src/main/java/com/diagbot/service/impl/ResultRuleServiceImpl.java

@@ -1,9 +1,13 @@
 package com.diagbot.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.ResultRulePageDTO;
 import com.diagbot.entity.ResultRule;
 import com.diagbot.mapper.ResultRuleMapper;
 import com.diagbot.service.ResultRuleService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.vo.ResultRulePageVO;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Service;
 
 /**
@@ -17,4 +21,7 @@ import org.springframework.stereotype.Service;
 @Service
 public class ResultRuleServiceImpl extends ServiceImpl<ResultRuleMapper, ResultRule> implements ResultRuleService {
 
+    public IPage<ResultRulePageDTO> getPage(@Param("resultRulePageVO") ResultRulePageVO resultRulePageVO) {
+        return baseMapper.getPage(resultRulePageVO);
+    }
 }

+ 8 - 0
cdssman-service/src/main/java/com/diagbot/util/ExcelUtils.java

@@ -10,6 +10,7 @@ import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
 import cn.afterturn.easypoi.exception.excel.ExcelImportException;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
+import com.diagbot.service.impl.ExcelExportStylerUserImpl;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
@@ -40,6 +41,13 @@ public class ExcelUtils {
         defaultExport(list, pojoClass, fileName, response, exportParams);
     }
 
+    public static void exportExcelUser(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName,
+                                       HttpServletResponse response) {
+        ExportParams exportParams = new ExportParams(title, sheetName);
+        exportParams.setStyle(ExcelExportStylerUserImpl.class);
+        userExport(list, pojoClass, fileName, response, exportParams);
+    }
+
     public static void exportExcelDynamicCol(List<ExcelExportEntity> entityList, Collection<?> dataSet, String title, String sheetName, String fileName,
                                              HttpServletResponse response) {
         ExportParams exportParams = new ExportParams(title, sheetName);

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

@@ -0,0 +1,17 @@
+package com.diagbot.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/3/15 14:46
+ */
+@Getter
+@Setter
+public class ResultRulePageVO extends Page {
+    private Integer success;
+    private Long resultId;
+}

+ 7 - 0
cdssman-service/src/main/java/com/diagbot/vo/RuleTestVO.java

@@ -1,5 +1,6 @@
 package com.diagbot.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -18,4 +19,10 @@ public class RuleTestVO extends HospitalIdVO {
      */
     @NotNull(message = "请输入测试案例id")
     private Long caseId;
+    /**
+     * 测试序号
+     */
+    @NotNull(message = "请输入测试序号")
+    @ApiModelProperty(hidden = true)
+    private Integer caseNo;
 }

+ 1 - 1
cdssman-service/src/main/java/com/diagbot/web/ConceptInfoController.java

@@ -55,7 +55,7 @@ public class ConceptInfoController {
     @ApiOperation(value = "获取静态知识列表[zhaops]",
             notes = "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验明细、5-检查、6-手术和操作 <br>" +
                     "name: 术语名称<br>" +
-                    "isDeleted: 启用状态:N-启用中、Y-已删除<br>")
+                    "status: 启用状态:1-启用、0-禁用<br>")
     @PostMapping("/getPage")
     @SysLogger("getPage")
     public RespDTO<IPage<KlConceptStaticDTO>> getPage(@Valid @RequestBody KlConceptStaticPageVO klConceptStaticPageVO) {

+ 26 - 179
cdssman-service/src/main/java/com/diagbot/web/RuleTestController.java

@@ -4,28 +4,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.CaseResultDTO;
 import com.diagbot.dto.RespDTO;
-import com.diagbot.entity.ResultBill;
-import com.diagbot.entity.ResultCritical;
-import com.diagbot.entity.ResultHighriskDrug;
-import com.diagbot.entity.ResultHighriskOperation;
-import com.diagbot.entity.ResultOtherLis;
-import com.diagbot.entity.ResultOtherPacs;
-import com.diagbot.entity.ResultOtherTransfusion;
-import com.diagbot.facade.ResultBillFacade;
-import com.diagbot.facade.ResultCriticalFacade;
-import com.diagbot.facade.ResultHighriskDrugFacade;
-import com.diagbot.facade.ResultHighriskOperationFacade;
+import com.diagbot.dto.ResultRulePageDTO;
 import com.diagbot.facade.ResultInfoFacade;
-import com.diagbot.facade.ResultOtherLisFacade;
-import com.diagbot.facade.ResultOtherPacsFacade;
-import com.diagbot.facade.ResultOtherTransfusionFacade;
+import com.diagbot.facade.ResultRuleFacade;
 import com.diagbot.facade.RuleTestFacade;
 import com.diagbot.vo.HospitalIdVO;
-import com.diagbot.vo.ResultBillPageVO;
-import com.diagbot.vo.ResultCriticalPageVO;
-import com.diagbot.vo.ResultHighriskDrugPageVO;
-import com.diagbot.vo.ResultHighriskOperationPageVO;
-import com.diagbot.vo.ResultPageVO;
+import com.diagbot.vo.ResultRulePageVO;
 import com.diagbot.vo.RuleTestVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -53,30 +37,8 @@ public class RuleTestController {
     @Autowired
     private ResultInfoFacade resultInfoFacade;
     @Autowired
-    private ResultBillFacade resultBillFacade;
-    @Autowired
-    private ResultCriticalFacade resultCriticalFacade;
-    @Autowired
-    private ResultHighriskDrugFacade resultHighriskDrugFacade;
-    @Autowired
-    private ResultHighriskOperationFacade resultHighriskOperationFacade;
-    @Autowired
-    private ResultOtherLisFacade resultOtherLisFacade;
-    @Autowired
-    private ResultOtherPacsFacade resultOtherPacsFacade;
-    @Autowired
-    private ResultOtherTransfusionFacade resultOtherTransfusionFacade;
-
+    private ResultRuleFacade resultRuleFacade;
 
-    @ApiOperation(value = "全规则测试[zhaops]",
-            notes = "hospitalId: 医院Id <br>" +
-                    "caseId: 测试用例id<br>")
-    @PostMapping("/allRuleTest")
-    @SysLogger("allRuleTest")
-    public RespDTO<Boolean> allRuleTest(@Valid @RequestBody HospitalIdVO hospitalIdVO) {
-        Boolean data = ruleTestFacade.allRuleTest(hospitalIdVO);
-        return RespDTO.onSuc(data);
-    }
 
     @ApiOperation(value = "医院规则测试结果列表[zhaops]",
             notes = "hospitalId: 医院Id <br>")
@@ -89,13 +51,22 @@ public class RuleTestController {
 
     //region --------------------------规则测试------------------------------
 
+    @ApiOperation(value = "全规则测试[zhaops]",
+            notes = "hospitalId: 医院Id <br>")
+    @PostMapping("/allRuleTest")
+    @SysLogger("allRuleTest")
+    public RespDTO<Boolean> allRuleTest(@Valid @RequestBody HospitalIdVO hospitalIdVO) {
+        Boolean data = ruleTestFacade.allRuleTest(hospitalIdVO);
+        return RespDTO.onSuc(data);
+    }
+
     @ApiOperation(value = "规则测试[zhaops]",
             notes = "hospitalId: 医院Id <br>" +
                     "caseId: 测试用例id<br>")
     @PostMapping("/ruleTest")
     @SysLogger("ruleTest")
-    public RespDTO<Boolean> ruleTest(@Valid @RequestBody RuleTestVO billRuleVO) {
-        Boolean data = ruleTestFacade.billRuleTest(billRuleVO);
+    public RespDTO<Boolean> ruleTest(@Valid @RequestBody RuleTestVO ruleTestVO) {
+        Boolean data = ruleTestFacade.billRuleTest(ruleTestVO);
         return RespDTO.onSuc(data);
     }
 
@@ -103,79 +74,16 @@ public class RuleTestController {
 
     //region --------------------------分页查询------------------------------
 
-    @ApiOperation(value = "开单合理性测试列表[zhaops]",
-            notes = "success: 成功标志(0:失败,1:成功) <br>" +
-                    "resultId: 结果id <br>" +
-                    "billType: 开单项类型(1:通用,2:输血) <br>")
-    @PostMapping("/getResultBillPage")
-    @SysLogger("getResultBillPage")
-    public RespDTO<IPage<ResultBill>> getResultBillPage(@Valid @RequestBody ResultBillPageVO resultBillPageVO) {
-        IPage<ResultBill> data = resultBillFacade.getPage(resultBillPageVO);
-        return RespDTO.onSuc(data);
-    }
-
-
-    @ApiOperation(value = "危急值测试列表[zhaops]",
-            notes = "success: 成功标志(0:失败,1:成功) <br>" +
-                    "resultId: 结果id <br>" +
-                    "criticalType: 危急值测试规则类型(1:检验,2:检查) <br>")
-    @PostMapping("/getResultCriticalPage")
-    @SysLogger("getResultCriticalPage")
-    public RespDTO<IPage<ResultCritical>> getResultCriticalPage(@Valid @RequestBody ResultCriticalPageVO resultCriticalPageVO) {
-        IPage<ResultCritical> data = resultCriticalFacade.getPage(resultCriticalPageVO);
-        return RespDTO.onSuc(data);
-    }
-
-
-    @ApiOperation(value = "高危药品测试列表[zhaops]",
-            notes = "success: 成功标志(0:失败,1:成功) <br>" +
-                    "resultId: 结果id <br>")
-    @PostMapping("/getResultHighriskDrugPage")
-    @SysLogger("getResultHighriskDrugPage")
-    public RespDTO<IPage<ResultHighriskDrug>> getResultHighriskDrugPage(@Valid @RequestBody ResultHighriskDrugPageVO resultHighriskDrugPageVO) {
-        IPage<ResultHighriskDrug> data = resultHighriskDrugFacade.getPage(resultHighriskDrugPageVO);
-        return RespDTO.onSuc(data);
-    }
-
-    @ApiOperation(value = "高危手术测试列表[zhaops]",
-            notes = "success: 成功标志(0:失败,1:成功) <br>" +
-                    "resultId: 结果id <br>")
-    @PostMapping("/getResultHighriskOperationPage")
-    @SysLogger("getResultHighriskOperationPage")
-    public RespDTO<IPage<ResultHighriskOperation>> getResultHighriskOperationPage(@Valid @RequestBody ResultHighriskOperationPageVO resultHighriskOperationPageVO) {
-        IPage<ResultHighriskOperation> data = resultHighriskOperationFacade.getPage(resultHighriskOperationPageVO);
-        return RespDTO.onSuc(data);
-    }
-
-    @ApiOperation(value = "其他值提醒(化验)测试列表[zhaops]",
-            notes = "success: 成功标志(0:失败,1:成功) <br>" +
-                    "resultId: 结果id <br>")
-    @PostMapping("/getResultOtherLisPage")
-    @SysLogger("getResultOtherLisPage")
-    public RespDTO<IPage<ResultOtherLis>> getResultOtherLisPage(@Valid @RequestBody ResultPageVO resultPageVO) {
-        IPage<ResultOtherLis> data = resultOtherLisFacade.getPage(resultPageVO);
-        return RespDTO.onSuc(data);
-    }
-
-    @ApiOperation(value = "其他值提醒(辅检)测试列表[zhaops]",
+    @ApiOperation(value = "分页查询列表[zhaops]",
             notes = "success: 成功标志(0:失败,1:成功) <br>" +
                     "resultId: 结果id <br>")
-    @PostMapping("/getResultOtherPacsPage")
-    @SysLogger("getResultOtherPacsPage")
-    public RespDTO<IPage<ResultOtherPacs>> getResultOtherPacsPage(@Valid @RequestBody ResultPageVO resultPageVO) {
-        IPage<ResultOtherPacs> data = resultOtherPacsFacade.getPage(resultPageVO);
+    @PostMapping("/getResultRulePage")
+    @SysLogger("getResultRulePage")
+    public RespDTO<IPage<ResultRulePageDTO>> getResultRulePage(@Valid @RequestBody ResultRulePageVO resultRulePageVO) {
+        IPage<ResultRulePageDTO> data = resultRuleFacade.getPage(resultRulePageVO);
         return RespDTO.onSuc(data);
     }
 
-    @ApiOperation(value = "其他值提醒(输血)测试列表[zhaops]",
-            notes = "success: 成功标志(0:失败,1:成功) <br>" +
-                    "resultId: 结果id <br>")
-    @PostMapping("/getResultOtherTransfusionPage")
-    @SysLogger("getResultOtherTransfusionPage")
-    public RespDTO<IPage<ResultOtherTransfusion>> getResultOtherTransfusionPage(@Valid @RequestBody ResultPageVO resultPageVO) {
-        IPage<ResultOtherTransfusion> data = resultOtherTransfusionFacade.getPage(resultPageVO);
-        return RespDTO.onSuc(data);
-    }
     //endregion --------------------------分页查询------------------------------
 
     //region --------------------------导出------------------------------
@@ -188,74 +96,13 @@ public class RuleTestController {
         ruleTestFacade.exportExcel(response, hospitalIdVO);
     }*/
 
-    @ApiOperation(value = "开单合理性规则测试结果导出[by:zhaops]",
-            notes = "hospitalId: 医院Id <br>" +
-                    "caseId: 测试用例id<br>" +
-                    "billType: 开单项测试规则类型(1:通用,2:输血) <br>")
-    @PostMapping("/billExportExcel")
-    @SysLogger("billExportExcel")
-    public void billExportExcel(HttpServletResponse response, @RequestBody @Valid ResultBillPageVO resultBillPageVO) {
-        resultBillFacade.exportExcel(response, resultBillPageVO);
-    }
-
-    @ApiOperation(value = "危急值规则测试结果导出[by:zhaops]",
-            notes = "hospitalId: 医院Id <br>" +
-                    "caseId: 测试用例id<br>" +
-                    "criticalType: 危急值测试规则类型(1:检验,2:检查) <br>")
-    @PostMapping("/criticalExportExcel")
-    @SysLogger("criticalExportExcel")
-    public void criticalExportExcel(HttpServletResponse response, @RequestBody @Valid ResultCriticalPageVO resultCriticalPageVO) {
-        resultCriticalFacade.exportExcel(response, resultCriticalPageVO);
-    }
-
-    @ApiOperation(value = "高危药品规则测试结果导出[by:zhaops]",
-            notes = "hospitalId: 医院Id <br>" +
-                    "success: 成功标志(0:失败,1:成功) <br>" +
-                    "resultId: 结果id <br>")
-    @PostMapping("/highriskDrugExportExcel")
-    @SysLogger("highriskDrugExportExcel")
-    public void highriskDrugExportExcel(HttpServletResponse response, @RequestBody @Valid ResultHighriskDrugPageVO resultHighriskDrugPageVO) {
-        resultHighriskDrugFacade.exportExcel(response, resultHighriskDrugPageVO);
-    }
-
-    @ApiOperation(value = "高危手术规则测试结果导出[by:zhaops]",
-            notes = "hospitalId: 医院Id <br>" +
-                    "success: 成功标志(0:失败,1:成功) <br>" +
-                    "resultId: 结果id <br>")
-    @PostMapping("/highriskOperationExportExcel")
-    @SysLogger("highriskOperationExportExcel")
-    public void highriskOperationExportExcel(HttpServletResponse response, @RequestBody @Valid ResultHighriskOperationPageVO resultHighriskOperationPageVO) {
-        resultHighriskOperationFacade.exportExcel(response, resultHighriskOperationPageVO);
-    }
-
-    @ApiOperation(value = "化验其他提醒规则测试结果导出[by:zhaops]",
-            notes = "hospitalId: 医院Id <br>" +
-                    "success: 成功标志(0:失败,1:成功) <br>" +
-                    "resultId: 结果id <br>")
-    @PostMapping("/otherLisExportExcel")
-    @SysLogger("otherLisExportExcel")
-    public void otherLisExportExcel(HttpServletResponse response, @RequestBody @Valid ResultPageVO resultPageVO) {
-        resultOtherLisFacade.exportExcel(response, resultPageVO);
-    }
-
-    @ApiOperation(value = "辅检其他提醒规则测试结果导出[by:zhaops]",
-            notes = "hospitalId: 医院Id <br>" +
-                    "success: 成功标志(0:失败,1:成功) <br>" +
-                    "resultId: 结果id <br>")
-    @PostMapping("/otherPacsExportExcel")
-    @SysLogger("otherPacsExportExcel")
-    public void otherPacsExportExcel(HttpServletResponse response, @RequestBody @Valid ResultPageVO resultPageVO) {
-        resultOtherPacsFacade.exportExcel(response, resultPageVO);
-    }
-
-    @ApiOperation(value = "输血其他提醒规则测试结果导出[by:zhaops]",
-            notes = "hospitalId: 医院Id <br>" +
-                    "success: 成功标志(0:失败,1:成功) <br>" +
+    @ApiOperation(value = "规则测试结果导出[by:zhaops]",
+            notes = "success: 成功标志(0:失败,1:成功) <br>" +
                     "resultId: 结果id <br>")
-    @PostMapping("/otherTransfusionExportExcel")
-    @SysLogger("otherTransfusionExportExcel")
-    public void otherTransfusionExportExcel(HttpServletResponse response, @RequestBody @Valid ResultPageVO resultPageVO) {
-        resultOtherTransfusionFacade.exportExcel(response, resultPageVO);
+    @PostMapping("/ruleExportExcel")
+    @SysLogger("ruleExportExcel")
+    public void ruleExportExcel(HttpServletResponse response, @RequestBody @Valid ResultRulePageVO resultRulePageVO) {
+        resultRuleFacade.exportExcel(response, resultRulePageVO);
     }
 
     //endregion --------------------------导出------------------------------

+ 7 - 10
cdssman-service/src/main/resources/mapper/KlRuleMapper.xml

@@ -78,15 +78,12 @@
         AND a.`status` = 1
         AND b.`status` = 1
         ) t1
-        LEFT JOIN kl_rule_condition t2 ON t1.rule_id = t2.rule_id
-        AND t2.is_deleted = 'N'
-        LEFT JOIN kl_rule_base t3 ON t2.rule_base_id = t3.id
-        AND t3.is_deleted = 'N'
-        AND t3.`status` = 1
-        LEFT JOIN kl_concept t4 ON t3.concept_id = t4.id
-        AND t4.is_deleted = 'N'
-        AND t4.`status` = 1
-        LEFT JOIN kl_lexicon t5 ON t4.lib_type = t5.code
-        AND t5.is_deleted = 'N'
+        LEFT JOIN ( SELECT * FROM kl_rule_condition WHERE is_deleted = 'N' ) t2 ON t1.rule_id = t2.rule_id
+        LEFT JOIN ( SELECT * FROM kl_rule_base WHERE is_deleted = 'N' ) t3 ON t2.rule_base_id = t3.id
+        LEFT JOIN ( SELECT * FROM kl_concept WHERE is_deleted = 'N' ) t4 ON t3.concept_id = t4.id
+        LEFT JOIN ( SELECT * FROM kl_lexicon WHERE is_deleted = 'N' ) t5 ON t4.lib_type = t5.CODE
+        WHERE
+        ( t3.`status` IS NULL OR t3.`status` = 1 )
+        AND ( t4.`status` IS NULL OR t4.`status` = 1 )
     </select>
 </mapper>

+ 37 - 0
cdssman-service/src/main/resources/mapper/ResultRuleMapper.xml

@@ -42,4 +42,41 @@
         <result column="rule_msg" property="ruleMsg" />
     </resultMap>
 
+    <select id="getPage" resultType="com.diagbot.dto.ResultRulePageDTO">
+        SELECT
+        a.gmt_modified AS gmtModified,
+        a.modifier AS modifier,
+        a.result_id AS resultId,
+        a.rule_order_no AS ruleOrderNo,
+        a.rule_type AS ruleType,
+        a.rule_id AS ruleId,
+        a.rule_lib_type AS ruleLibType,
+        a.rule_lib_type_name AS ruleLibTypeName,
+        a.rule_lib_name AS ruleLibName,
+        a.rule_his_name AS ruleHisName,
+        a.rule_his_detail_name AS ruleHisDetailName,
+        a.group_type AS groupType,
+        a.output AS output,
+        a.expected_output AS expectedOutput,
+        a.success AS success,
+        a.message AS message,
+        group_concat(id) as ids
+        FROM
+        test_result_rule a
+        WHERE
+        a.is_deleted = 'N'
+        <if test="resultRulePageVO.success != null">
+            and a.success = #{resultRulePageVO.success}
+        </if>
+        <if test="resultRulePageVO.resultId != null">
+            and a.result_id = #{resultRulePageVO.resultId}
+        </if>
+        GROUP BY
+        a.result_id,
+        a.rule_order_no
+        ORDER BY
+        a.result_id,
+        a.rule_order_no
+    </select>
+
 </mapper>