Browse Source

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

wangfeng 4 years ago
parent
commit
834e0733e6

File diff suppressed because it is too large
+ 150 - 952
cdssman-service/src/main/java/com/diagbot/aggregate/RuleTestAggregate.java


+ 2 - 1
cdssman-service/src/main/java/com/diagbot/dto/RuleDTO.java

@@ -11,6 +11,7 @@ import lombok.Setter;
 @Getter
 @Setter
 public class RuleDTO {
+    private Long ruleOrderNo;
     private Integer ruleLibType;
     private String ruleLibTypeName;
     private String ruleLibName;
@@ -24,7 +25,7 @@ public class RuleDTO {
     private String ruleBaseDescription;
     private String ruleBaseEqOperator;
     private String ruleBaseEqUnit;
-    private Double ruleBaseEqValue;
+    private String ruleBaseEqValue;
     private String ruleBaseMaxOperator;
     private String ruleBaseMaxUnit;
     private Double ruleBaseMaxValue;

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

@@ -1,12 +1,11 @@
 package com.diagbot.entity;
 
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
 import java.util.Date;
+import java.io.Serializable;
 
 /**
  * <p>
@@ -14,7 +13,7 @@ import java.util.Date;
  * </p>
  *
  * @author zhaops
- * @since 2021-03-09
+ * @since 2021-03-11
  */
 @TableName("test_result_rule")
 public class ResultRule implements Serializable {
@@ -24,7 +23,7 @@ public class ResultRule implements Serializable {
     /**
      * 主键
      */
-    @TableId(value = "id", type = IdType.AUTO)
+    @TableId(value = "id", type = IdType.INPUT)
     private Long id;
 
     /**
@@ -57,11 +56,21 @@ public class ResultRule implements Serializable {
      */
     private Long resultId;
 
+    /**
+     * 规则序号
+     */
+    private Long ruleOrderNo;
+
     /**
      * 规则类型(1:开单-通用,2:开单-输血,3:危急值-检验,4:危急值-检查,5:高危药品,6:高危手术,7:其他值提醒-检验,8-其他值提醒-检查,9-其他值提醒-输血,10:正常项目重复开立)
      */
     private Integer ruleType;
 
+    /**
+     * 规则id
+     */
+    private Long ruleId;
+
     /**
      * 开单项类型(编码)
      */
@@ -92,6 +101,11 @@ public class ResultRule implements Serializable {
      */
     private Integer hasSubCond;
 
+    /**
+     * 基础规则id
+     */
+    private Long ruleBaseId;
+
     /**
      * 规则组别
      */
@@ -189,7 +203,6 @@ public class ResultRule implements Serializable {
     public void setId(Long id) {
         this.id = id;
     }
-
     public String getIsDeleted() {
         return isDeleted;
     }
@@ -197,7 +210,6 @@ public class ResultRule implements Serializable {
     public void setIsDeleted(String isDeleted) {
         this.isDeleted = isDeleted;
     }
-
     public Date getGmtCreate() {
         return gmtCreate;
     }
@@ -205,7 +217,6 @@ public class ResultRule implements Serializable {
     public void setGmtCreate(Date gmtCreate) {
         this.gmtCreate = gmtCreate;
     }
-
     public Date getGmtModified() {
         return gmtModified;
     }
@@ -213,7 +224,6 @@ public class ResultRule implements Serializable {
     public void setGmtModified(Date gmtModified) {
         this.gmtModified = gmtModified;
     }
-
     public String getCreator() {
         return creator;
     }
@@ -221,7 +231,6 @@ public class ResultRule implements Serializable {
     public void setCreator(String creator) {
         this.creator = creator;
     }
-
     public String getModifier() {
         return modifier;
     }
@@ -229,7 +238,6 @@ public class ResultRule implements Serializable {
     public void setModifier(String modifier) {
         this.modifier = modifier;
     }
-
     public Long getResultId() {
         return resultId;
     }
@@ -237,7 +245,13 @@ public class ResultRule implements Serializable {
     public void setResultId(Long resultId) {
         this.resultId = resultId;
     }
+    public Long getRuleOrderNo() {
+        return ruleOrderNo;
+    }
 
+    public void setRuleOrderNo(Long ruleOrderNo) {
+        this.ruleOrderNo = ruleOrderNo;
+    }
     public Integer getRuleType() {
         return ruleType;
     }
@@ -245,7 +259,13 @@ public class ResultRule implements Serializable {
     public void setRuleType(Integer ruleType) {
         this.ruleType = ruleType;
     }
+    public Long getRuleId() {
+        return ruleId;
+    }
 
+    public void setRuleId(Long ruleId) {
+        this.ruleId = ruleId;
+    }
     public Integer getRuleLibType() {
         return ruleLibType;
     }
@@ -253,7 +273,6 @@ public class ResultRule implements Serializable {
     public void setRuleLibType(Integer ruleLibType) {
         this.ruleLibType = ruleLibType;
     }
-
     public String getRuleLibTypeName() {
         return ruleLibTypeName;
     }
@@ -261,7 +280,6 @@ public class ResultRule implements Serializable {
     public void setRuleLibTypeName(String ruleLibTypeName) {
         this.ruleLibTypeName = ruleLibTypeName;
     }
-
     public String getRuleLibName() {
         return ruleLibName;
     }
@@ -269,7 +287,6 @@ public class ResultRule implements Serializable {
     public void setRuleLibName(String ruleLibName) {
         this.ruleLibName = ruleLibName;
     }
-
     public String getRuleHisName() {
         return ruleHisName;
     }
@@ -277,7 +294,6 @@ public class ResultRule implements Serializable {
     public void setRuleHisName(String ruleHisName) {
         this.ruleHisName = ruleHisName;
     }
-
     public String getRuleHisDetailName() {
         return ruleHisDetailName;
     }
@@ -285,7 +301,6 @@ public class ResultRule implements Serializable {
     public void setRuleHisDetailName(String ruleHisDetailName) {
         this.ruleHisDetailName = ruleHisDetailName;
     }
-
     public Integer getHasSubCond() {
         return hasSubCond;
     }
@@ -293,7 +308,13 @@ public class ResultRule implements Serializable {
     public void setHasSubCond(Integer hasSubCond) {
         this.hasSubCond = hasSubCond;
     }
+    public Long getRuleBaseId() {
+        return ruleBaseId;
+    }
 
+    public void setRuleBaseId(Long ruleBaseId) {
+        this.ruleBaseId = ruleBaseId;
+    }
     public Integer getGroupType() {
         return groupType;
     }
@@ -301,7 +322,6 @@ public class ResultRule implements Serializable {
     public void setGroupType(Integer groupType) {
         this.groupType = groupType;
     }
-
     public Integer getRuleBaseType() {
         return ruleBaseType;
     }
@@ -309,7 +329,6 @@ public class ResultRule implements Serializable {
     public void setRuleBaseType(Integer ruleBaseType) {
         this.ruleBaseType = ruleBaseType;
     }
-
     public Integer getRuleBaseLibType() {
         return ruleBaseLibType;
     }
@@ -317,7 +336,6 @@ public class ResultRule implements Serializable {
     public void setRuleBaseLibType(Integer ruleBaseLibType) {
         this.ruleBaseLibType = ruleBaseLibType;
     }
-
     public String getRuleBaseLibTypeName() {
         return ruleBaseLibTypeName;
     }
@@ -325,7 +343,6 @@ public class ResultRule implements Serializable {
     public void setRuleBaseLibTypeName(String ruleBaseLibTypeName) {
         this.ruleBaseLibTypeName = ruleBaseLibTypeName;
     }
-
     public String getRuleBaseLibName() {
         return ruleBaseLibName;
     }
@@ -333,7 +350,6 @@ public class ResultRule implements Serializable {
     public void setRuleBaseLibName(String ruleBaseLibName) {
         this.ruleBaseLibName = ruleBaseLibName;
     }
-
     public String getRuleBaseHisName() {
         return ruleBaseHisName;
     }
@@ -341,7 +357,6 @@ public class ResultRule implements Serializable {
     public void setRuleBaseHisName(String ruleBaseHisName) {
         this.ruleBaseHisName = ruleBaseHisName;
     }
-
     public String getRuleBaseHisDetailName() {
         return ruleBaseHisDetailName;
     }
@@ -349,7 +364,6 @@ public class ResultRule implements Serializable {
     public void setRuleBaseHisDetailName(String ruleBaseHisDetailName) {
         this.ruleBaseHisDetailName = ruleBaseHisDetailName;
     }
-
     public BigDecimal getRuleBaseMaxValue() {
         return ruleBaseMaxValue;
     }
@@ -357,7 +371,6 @@ public class ResultRule implements Serializable {
     public void setRuleBaseMaxValue(BigDecimal ruleBaseMaxValue) {
         this.ruleBaseMaxValue = ruleBaseMaxValue;
     }
-
     public BigDecimal getRuleBaseMinValue() {
         return ruleBaseMinValue;
     }
@@ -365,7 +378,6 @@ public class ResultRule implements Serializable {
     public void setRuleBaseMinValue(BigDecimal ruleBaseMinValue) {
         this.ruleBaseMinValue = ruleBaseMinValue;
     }
-
     public String getRuleBaseUnit() {
         return ruleBaseUnit;
     }
@@ -373,7 +385,6 @@ public class ResultRule implements Serializable {
     public void setRuleBaseUnit(String ruleBaseUnit) {
         this.ruleBaseUnit = ruleBaseUnit;
     }
-
     public String getRuleBaseInputValue() {
         return ruleBaseInputValue;
     }
@@ -381,7 +392,6 @@ public class ResultRule implements Serializable {
     public void setRuleBaseInputValue(String ruleBaseInputValue) {
         this.ruleBaseInputValue = ruleBaseInputValue;
     }
-
     public String getReferenceValue() {
         return referenceValue;
     }
@@ -389,7 +399,6 @@ public class ResultRule implements Serializable {
     public void setReferenceValue(String referenceValue) {
         this.referenceValue = referenceValue;
     }
-
     public String getOutput() {
         return output;
     }
@@ -397,7 +406,6 @@ public class ResultRule implements Serializable {
     public void setOutput(String output) {
         this.output = output;
     }
-
     public String getExpectedOutput() {
         return expectedOutput;
     }
@@ -405,7 +413,6 @@ public class ResultRule implements Serializable {
     public void setExpectedOutput(String expectedOutput) {
         this.expectedOutput = expectedOutput;
     }
-
     public Integer getSuccess() {
         return success;
     }
@@ -413,7 +420,6 @@ public class ResultRule implements Serializable {
     public void setSuccess(Integer success) {
         this.success = success;
     }
-
     public String getMessage() {
         return message;
     }
@@ -421,7 +427,6 @@ public class ResultRule implements Serializable {
     public void setMessage(String message) {
         this.message = message;
     }
-
     public String getInputParams() {
         return inputParams;
     }
@@ -429,7 +434,6 @@ public class ResultRule implements Serializable {
     public void setInputParams(String inputParams) {
         this.inputParams = inputParams;
     }
-
     public String getOutputParams() {
         return outputParams;
     }
@@ -441,38 +445,41 @@ public class ResultRule implements Serializable {
     @Override
     public String toString() {
         return "ResultRule{" +
-                "id=" + id +
-                ", isDeleted=" + isDeleted +
-                ", gmtCreate=" + gmtCreate +
-                ", gmtModified=" + gmtModified +
-                ", creator=" + creator +
-                ", modifier=" + modifier +
-                ", resultId=" + resultId +
-                ", ruleType=" + ruleType +
-                ", ruleLibType=" + ruleLibType +
-                ", ruleLibTypeName=" + ruleLibTypeName +
-                ", ruleLibName=" + ruleLibName +
-                ", ruleHisName=" + ruleHisName +
-                ", ruleHisDetailName=" + ruleHisDetailName +
-                ", hasSubCond=" + hasSubCond +
-                ", groupType=" + groupType +
-                ", ruleBaseType=" + ruleBaseType +
-                ", ruleBaseLibType=" + ruleBaseLibType +
-                ", ruleBaseLibTypeName=" + ruleBaseLibTypeName +
-                ", ruleBaseLibName=" + ruleBaseLibName +
-                ", ruleBaseHisName=" + ruleBaseHisName +
-                ", ruleBaseHisDetailName=" + ruleBaseHisDetailName +
-                ", ruleBaseMaxValue=" + ruleBaseMaxValue +
-                ", ruleBaseMinValue=" + ruleBaseMinValue +
-                ", ruleBaseUnit=" + ruleBaseUnit +
-                ", ruleBaseInputValue=" + ruleBaseInputValue +
-                ", referenceValue=" + referenceValue +
-                ", output=" + output +
-                ", expectedOutput=" + expectedOutput +
-                ", success=" + success +
-                ", message=" + message +
-                ", inputParams=" + inputParams +
-                ", outputParams=" + outputParams +
-                "}";
+            "id=" + id +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+            ", resultId=" + resultId +
+            ", ruleOrderNo=" + ruleOrderNo +
+            ", ruleType=" + ruleType +
+            ", ruleId=" + ruleId +
+            ", ruleLibType=" + ruleLibType +
+            ", ruleLibTypeName=" + ruleLibTypeName +
+            ", ruleLibName=" + ruleLibName +
+            ", ruleHisName=" + ruleHisName +
+            ", ruleHisDetailName=" + ruleHisDetailName +
+            ", hasSubCond=" + hasSubCond +
+            ", ruleBaseId=" + ruleBaseId +
+            ", groupType=" + groupType +
+            ", ruleBaseType=" + ruleBaseType +
+            ", ruleBaseLibType=" + ruleBaseLibType +
+            ", ruleBaseLibTypeName=" + ruleBaseLibTypeName +
+            ", ruleBaseLibName=" + ruleBaseLibName +
+            ", ruleBaseHisName=" + ruleBaseHisName +
+            ", ruleBaseHisDetailName=" + ruleBaseHisDetailName +
+            ", ruleBaseMaxValue=" + ruleBaseMaxValue +
+            ", ruleBaseMinValue=" + ruleBaseMinValue +
+            ", ruleBaseUnit=" + ruleBaseUnit +
+            ", ruleBaseInputValue=" + ruleBaseInputValue +
+            ", referenceValue=" + referenceValue +
+            ", output=" + output +
+            ", expectedOutput=" + expectedOutput +
+            ", success=" + success +
+            ", message=" + message +
+            ", inputParams=" + inputParams +
+            ", outputParams=" + outputParams +
+        "}";
     }
 }

+ 80 - 0
cdssman-service/src/main/java/com/diagbot/enums/ConEnum.java

@@ -0,0 +1,80 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @author zhoutg
+ * @Description: 禁忌枚举类型
+ * @date 2018年10月11日 下午3:33:22
+ */
+
+public enum ConEnum implements KeyedNamed {
+
+    gender(1, "禁忌性别"),
+    age(2, "禁忌年龄"),
+    clinicfindings(3, "禁忌临床表现"),
+    oralmeds(4, "禁忌服用药品"),
+    allergicmeds(5, "禁忌过敏药品"),
+    operations(6, "禁忌手术"),
+    procedures(7, "禁忌操作"),
+    lis(8, "禁忌实验室检查"),
+    pacs(9, "禁忌辅助检查"),
+    disease(10, "禁忌疾病"),
+    group(11, "禁忌人群"),
+    conflictmeds(12, "配伍禁忌"),
+    vitals(13, "禁忌查体"),
+    pacsDesc(14, "禁忌辅助检查描述"),
+    medEqu(15, "禁忌医疗器械及物品"),
+    exclusion(16, "开单项互斥"),
+    otherAllergy(17, "禁忌其他过敏原"),
+    repeat24(18, "24小时重复开立"),
+    repeat(19, "正常项目重复开立"),
+    ;
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    ConEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static ConEnum getEnum(int key) {
+        for (ConEnum item : ConEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        ConEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    public static ConEnum getEnum(String value) {
+        for (ConEnum item : ConEnum.values()) {
+            if (item.getName().equals(value)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+
+}

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

@@ -20,7 +20,7 @@ public enum TypeEnum implements KeyedNamed {
     vital(7, "查体"),
     transfusion(8, "输血"),
     age(9,"年龄"),
-    pacsDecs(10,"辅检结果描述");
+    group(10, "人群");
 
     @Setter
     private int key;

File diff suppressed because it is too large
+ 675 - 385
cdssman-service/src/main/java/com/diagbot/facade/MedRuleConvertFacade.java


+ 246 - 133
cdssman-service/src/main/java/com/diagbot/facade/MedSearchDataFacade.java

@@ -11,6 +11,15 @@ import com.diagbot.vo.Drug;
 import com.diagbot.vo.IndicationPushVO;
 import com.diagbot.vo.ItemExt;
 import org.springframework.stereotype.Component;
+import org.springframework.util.NumberUtils;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @Description:
@@ -22,152 +31,256 @@ public class MedSearchDataFacade {
     /**
      * 生成开单合理性入参
      *
-     * @param result
+     * @param list
      * @return
      */
-    public IndicationPushVO createBillVO(ResultRule result) {
+    public IndicationPushVO createBillVO(List<ResultRule> list) {
         IndicationPushVO indicationPushVO = new IndicationPushVO();
         indicationPushVO.setAge("20");
         indicationPushVO.setSex(3);
         indicationPushVO.setRuleType("2");
 
-        //开单项
-        if (result.getRuleLibType().equals(LexiconEnum.LisName.getKey())) {
-            //检验开单项
-            Lis lis = new Lis();
-            lis.setName(result.getRuleHisName());
-            lis.setUniqueName(result.getRuleLibName());
-            indicationPushVO.getLisOrder().add(lis);
-        }
-        if (result.getRuleLibType().equals(LexiconEnum.PacsName.getKey())
-                || result.getRuleLibType().equals(LexiconEnum.PacsSubName.getKey())) {
-            Pacs pacs = new Pacs();
-            pacs.setName(result.getRuleHisName());
-            pacs.setUniqueName(result.getRuleLibName());
-            indicationPushVO.getPacsOrder().add(pacs);
-        }
-        if (result.getRuleLibType().equals(LexiconEnum.Operation.getKey())) {
-            Item operation = new Item();
-            operation.setName(result.getRuleHisName());
-            operation.setUniqueName(result.getRuleLibName());
-            indicationPushVO.getOperationOrder().add(operation);
-        }
-        if (result.getRuleLibType().equals(LexiconEnum.Medicine.getKey())) {
-            Drug drug = new Drug();
-            drug.setName(result.getRuleHisName());
-            drug.setUniqueName(result.getRuleLibName());
-            indicationPushVO.getDrugOrder().add(drug);
-        }
-        if (result.getRuleLibType().equals(LexiconEnum.Transfusion.getKey())) {
-            ItemExt itemExt = new ItemExt();
-            itemExt.setName(result.getRuleHisName());
-            itemExt.setUniqueName(result.getRuleLibName());
-            indicationPushVO.getTransfusionOrder().add(itemExt);
-        }
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String now = formatter.format(new Date());
+        Calendar calendar = Calendar.getInstance();
+        calendar.add(Calendar.DATE, -1);
+        String lastDate = formatter.format(calendar.getTime());
 
-        if (result.getRuleBaseLibType().equals(LexiconEnum.Disease.getKey())) {
-            if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
-                Item diag = new Item();
-                diag.setName(result.getRuleBaseHisName());
-                diag.setUniqueName(result.getRuleBaseLibName());
-                indicationPushVO.getDiag().add(diag);
-            }
-        } else if (result.getRuleBaseLibType().equals(LexiconEnum.Medicine.getKey())) {
-            if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
-                indicationPushVO.setSymptom(indicationPushVO.getSymptom() +
-                        (StringUtil.isNotBlank(result.getRuleBaseHisName())
-                                ? ("一直服用" + result.getRuleBaseHisName() + ",")
-                                : ""));
-            } else if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Allergen.getKey())) {
-                indicationPushVO.setPasts(indicationPushVO.getPasts() +
-                        (StringUtil.isNotBlank(result.getRuleBaseHisName())
-                                ? ("对" + result.getRuleBaseHisName() + "过敏,")
-                                : ""));
-            }
-        } else if (result.getRuleBaseLibType().equals(LexiconEnum.Symptom.getKey())) {
-            if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
-                indicationPushVO.setSymptom(indicationPushVO.getSymptom() + result.getRuleBaseLibName() + ",");
-            }
-        } else if (result.getRuleBaseLibType().equals(LexiconEnum.Vital.getKey())) {
-            if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Compare.getKey())) {
-                indicationPushVO.setVital(result.getRuleBaseLibName() + result.getRuleBaseInputValue()
-                        + (StringUtil.isNotBlank(result.getRuleBaseUnit()) ? result.getRuleBaseUnit() : "")
-                        + ",");
-            }
-        } else if (result.getRuleBaseLibType().equals(LexiconEnum.VitalResult.getKey())) {
-            if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
-                indicationPushVO.setVital(result.getRuleBaseLibName() + result.getRuleBaseInputValue() + ",");
-            }
-        } else if (result.getRuleBaseLibType().equals(LexiconEnum.Operation.getKey())) {
-            if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
-                Item operation = new Item();
-                operation.setName(result.getRuleBaseHisName());
-                operation.setUniqueName(result.getRuleBaseLibName());
-                indicationPushVO.getOperation().add(operation);
-            }
-        } else if (result.getRuleBaseLibType().equals(LexiconEnum.LisSubName.getKey())) {
-            if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Compare.getKey())) {
-                Lis lis = new Lis();
-                lis.setName(result.getRuleBaseHisName());
-                lis.setDetailName(result.getRuleBaseHisDetailName());
-                lis.setUniqueName(result.getRuleBaseLibName());
-                lis.setUnits(result.getRuleBaseUnit());
-                if (result.getRuleBaseMinValue() != null || result.getRuleBaseMaxValue() != null) {
-                    lis.setValue(Double.valueOf(result.getRuleBaseInputValue()));
-                } else {
-                    lis.setOtherValue(result.getRuleBaseInputValue());
+        for (ResultRule result : list) {
+            //医学规则
+            if (result.getRuleType().equals(1)) {
+                if (result.getRuleLibType().equals(LexiconEnum.Medicine.getKey())) {
+                    Drug drug = new Drug();
+                    drug.setName(result.getRuleHisName());
+                    drug.setUniqueName(result.getRuleLibName());
+                    indicationPushVO.getDrugOrder().add(drug);
+                } else if (result.getRuleLibType().equals(LexiconEnum.Operation.getKey())) {
+                    Item operation = new Item();
+                    operation.setName(result.getRuleHisName());
+                    operation.setUniqueName(result.getRuleLibName());
+                    indicationPushVO.getOperationOrder().add(operation);
+                } else if (result.getRuleLibType().equals(LexiconEnum.LisName.getKey())) {
+                    //检验开单项
+                    Lis lis = new Lis();
+                    lis.setName(result.getRuleHisName());
+                    lis.setUniqueName(result.getRuleLibName());
+                    indicationPushVO.getLisOrder().add(lis);
+                } else if (result.getRuleLibType().equals(LexiconEnum.PacsName.getKey())
+                        || result.getRuleLibType().equals(LexiconEnum.PacsSubName.getKey())) {
+                    Pacs pacs = new Pacs();
+                    pacs.setName(result.getRuleHisName());
+                    pacs.setUniqueName(result.getRuleLibName());
+                    indicationPushVO.getPacsOrder().add(pacs);
+                } else if (result.getRuleLibType().equals(LexiconEnum.Transfusion.getKey())) {
+                    ItemExt itemExt = new ItemExt();
+                    itemExt.setName(result.getRuleHisName());
+                    itemExt.setUniqueName(result.getRuleLibName());
+                    indicationPushVO.getTransfusionOrder().add(itemExt);
                 }
-                if (result.getRuleBaseMaxValue() != null) {
-                    lis.setMaxValue(result.getRuleBaseMaxValue().doubleValue());
+            } else if (result.getRuleType().equals(2)) {
+                //高危
+                if (result.getRuleLibType().equals(LexiconEnum.Medicine.getKey())) {
+                    Drug drug = new Drug();
+                    drug.setName(result.getRuleHisName());
+                    drug.setUniqueName(result.getRuleLibName());
+                    drug.setForm(result.getRuleBaseLibName());
+                    indicationPushVO.getDrugOrder().add(drug);
+                } else if (result.getRuleLibType().equals(LexiconEnum.Operation.getKey())) {
+                    Item operation = new Item();
+                    operation.setName(result.getRuleHisName());
+                    operation.setUniqueName(result.getRuleLibName());
+                    indicationPushVO.getOperationOrder().add(operation);
                 }
-                if (result.getRuleBaseMinValue() != null) {
-                    lis.setMinValue(result.getRuleBaseMinValue().doubleValue());
+            } else if (result.getRuleType().equals(3)) {
+                //危急值
+                if (result.getRuleLibType().equals(LexiconEnum.LisSubName.getKey())) {
+                    //检验开单项
+                    Lis lis = new Lis();
+                    lis.setName(result.getRuleHisName());
+                    lis.setDetailName(result.getRuleHisDetailName());
+                    lis.setUniqueName(result.getRuleLibName());
+                    indicationPushVO.getLis().add(lis);
+                } else if (result.getRuleLibType().equals(LexiconEnum.PacsResult.getKey())) {
+                    Pacs pacs = new Pacs();
+                    pacs.setDesc(result.getRuleLibName());
+                    pacs.setResult(result.getRuleLibName());
+                    indicationPushVO.getPacs().add(pacs);
                 }
-                indicationPushVO.getLis().add(lis);
-            }
-        } else if (result.getRuleBaseLibType().equals(LexiconEnum.PacsName.getKey())) {
-            if (result.getRuleBaseType().equals(RuleBaseTypeEnum.BillItem.getKey())) {
-                Pacs pacs = new Pacs();
-                pacs.setName(result.getRuleBaseHisName());
-                pacs.setUniqueName(result.getRuleBaseLibName());
-                indicationPushVO.getPacsOrder().add(pacs);
-            }
-        } else if (result.getRuleBaseLibType().equals(LexiconEnum.PacsResult.getKey())) {
-            if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
-                Pacs pacs = new Pacs();
-                pacs.setDesc(result.getRuleBaseLibName());
-                pacs.setResult(result.getRuleBaseLibName());
-                indicationPushVO.getPacs().add(pacs);
-            }
-        } else if (result.getRuleBaseLibType().equals(LexiconEnum.Gender.getKey())) {
-            if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
-                if (result.getRuleBaseLibName().equals("男")) {
-                    indicationPushVO.setSex(1);
-                } else if (result.getRuleBaseLibName().equals("女")) {
-                    indicationPushVO.setSex(2);
-                } else {
-                    indicationPushVO.setSex(3);
+            } else if (result.getRuleType().equals(4)) {
+                //其他值-检验、检查
+                if (result.getRuleLibType().equals(LexiconEnum.LisSubName.getKey())) {
+                    //基础规则中生成测试数据
+                }
+                if (result.getRuleLibType().equals(LexiconEnum.PacsResult.getKey())) {
+                    Pacs pacs = new Pacs();
+                    String pacsResult = result.getRuleLibName();
+                    /*if (result.getHasSubCond().equals(1)
+                            && result.getRuleBaseLibType().equals(LexiconEnum.PacsResult.getKey())
+                            && result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
+                        pacsResult += "," + result.getRuleBaseLibName();
+                    }*/
+                    pacs.setDesc(pacsResult);
+                    pacs.setResult(pacsResult);
+                    indicationPushVO.getPacs().add(pacs);
+                }
+            } else if (result.getRuleType().equals(5)) {
+                //其他值-检验、检查
+                if (result.getRuleLibType().equals(LexiconEnum.LisSubName.getKey())) {
+                    //基础规则中生成测试数据
+                }
+            } else if (result.getRuleType().equals(6)) {
+                //正常项目重复开立处理
+                if (result.getRuleLibType().equals(LexiconEnum.PacsName.getKey())
+                        || result.getRuleLibType().equals(LexiconEnum.PacsSubName.getKey())) {
+                    Pacs pacs = new Pacs();
+                    pacs.setName(result.getRuleHisName());
+                    pacs.setUniqueName(result.getRuleLibName());
+                    pacs.setDateValue(now);
+                    indicationPushVO.getPacsOrder().add(pacs);
                 }
             }
-        } else if (result.getRuleBaseLibType().equals(LexiconEnum.Group.getKey())) {
-            if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
-                indicationPushVO.setSymptom(indicationPushVO.getSymptom() +
-                        result.getRuleBaseLibName() +
-                        (result.getRuleBaseInputValue() != null ? result.getRuleBaseInputValue() : "") +
-                        (StringUtil.isNotBlank(result.getRuleBaseUnit()) ? result.getRuleBaseUnit() : "") +
-                        ",");
-            }
-        } else if (result.getRuleBaseLibType().equals(LexiconEnum.Allergen.getKey())) {
-            if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Allergen.getKey())) {
-                indicationPushVO.setPasts(indicationPushVO.getPasts() + "对" + result.getRuleBaseLibName() + "过敏,");
-            }
-        } else if (result.getRuleBaseLibType().equals(LexiconEnum.Device.getKey())) {
-            if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
-                indicationPushVO.setPasts(indicationPushVO.getPasts() + "有" + result.getRuleBaseLibName() + ",");
-            }
-        } else if (result.getRuleBaseLibType().equals(LexiconEnum.Age.getKey())) {
-            if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Compare.getKey())) {
-                indicationPushVO.setAge(result.getRuleBaseInputValue());
+
+            //基础规则
+            if (result.getHasSubCond().equals(1)) {
+                if (result.getRuleBaseLibType().equals(LexiconEnum.Disease.getKey())) {
+                    if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
+                        Item diag = new Item();
+                        diag.setName(result.getRuleBaseHisName());
+                        diag.setUniqueName(result.getRuleBaseLibName());
+                        indicationPushVO.getDiag().add(diag);
+                    }
+                } else if (result.getRuleBaseLibType().equals(LexiconEnum.Medicine.getKey())) {
+                    if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
+                        indicationPushVO.setSymptom(indicationPushVO.getSymptom() +
+                                (StringUtil.isNotBlank(result.getRuleBaseHisName())
+                                        ? ("一直服用" + result.getRuleBaseHisName() + ",")
+                                        : ""));
+                    } else if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Allergen.getKey())) {
+                        indicationPushVO.setPasts(indicationPushVO.getPasts() +
+                                (StringUtil.isNotBlank(result.getRuleBaseHisName())
+                                        ? ("对" + result.getRuleBaseHisName() + "过敏,")
+                                        : ""));
+                    }
+                } else if (result.getRuleBaseLibType().equals(LexiconEnum.Symptom.getKey())) {
+                    if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
+                        indicationPushVO.setSymptom(indicationPushVO.getSymptom() + result.getRuleBaseLibName() + ",");
+                    }
+                } else if (result.getRuleBaseLibType().equals(LexiconEnum.Vital.getKey())) {
+                    if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Compare.getKey())) {
+                        indicationPushVO.setVital(result.getRuleBaseLibName() + result.getRuleBaseInputValue()
+                                + (StringUtil.isNotBlank(result.getRuleBaseUnit()) ? result.getRuleBaseUnit() : "")
+                                + ",");
+                    }
+                } else if (result.getRuleBaseLibType().equals(LexiconEnum.VitalResult.getKey())) {
+                    if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
+                        indicationPushVO.setVital(result.getRuleBaseLibName() + ",");
+                    }
+                } else if (result.getRuleBaseLibType().equals(LexiconEnum.Operation.getKey())) {
+                    if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
+                        Item operation = new Item();
+                        operation.setName(result.getRuleBaseHisName());
+                        operation.setUniqueName(result.getRuleBaseLibName());
+                        indicationPushVO.getOperation().add(operation);
+                    }
+                } else if (result.getRuleBaseLibType().equals(LexiconEnum.LisSubName.getKey())) {
+                    if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Compare.getKey())) {
+                        Lis lis = new Lis();
+                        lis.setName(result.getRuleBaseHisName());
+                        lis.setDetailName(result.getRuleBaseHisDetailName());
+                        lis.setUniqueName(result.getRuleBaseLibName());
+                        lis.setUnits(result.getRuleBaseUnit());
+                        Pattern pattern = Pattern.compile("^\\d+(\\.\\d+)?$");
+                        if (StringUtil.isNotBlank(result.getRuleBaseInputValue())) {
+                            Matcher isNum = pattern.matcher(result.getRuleBaseInputValue());
+                            if (isNum.matches()) {
+                                lis.setValue(Double.valueOf(result.getRuleBaseInputValue()));
+                            } else {
+                                lis.setOtherValue(result.getRuleBaseInputValue());
+                            }
+                        }
+                        if (result.getRuleBaseMaxValue() != null) {
+                            lis.setMaxValue(result.getRuleBaseMaxValue().doubleValue());
+                        }
+                        if (result.getRuleBaseMinValue() != null) {
+                            lis.setMinValue(result.getRuleBaseMinValue().doubleValue());
+                        }
+                        indicationPushVO.getLis().add(lis);
+                    }
+                } else if (result.getRuleBaseLibType().equals(LexiconEnum.PacsName.getKey())
+                        || result.getRuleBaseLibType().equals(LexiconEnum.PacsSubName.getKey())) {
+                    if (result.getRuleBaseType().equals(RuleBaseTypeEnum.BillItem.getKey())) {
+                        Pacs pacs = new Pacs();
+                        pacs.setName(result.getRuleBaseHisName());
+                        pacs.setUniqueName(result.getRuleBaseLibName());
+                        indicationPushVO.getPacsOrder().add(pacs);
+                    }
+                } else if (result.getRuleBaseLibType().equals(LexiconEnum.PacsResult.getKey())) {
+                    if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
+                        Pacs pacs = new Pacs();
+                        if (result.getRuleType().equals(6)) {
+                            pacs.setName(result.getRuleBaseHisName());
+                            pacs.setUniqueName(result.getRuleBaseLibName());
+                            pacs.setDesc(result.getRuleBaseInputValue());
+                            pacs.setResult(result.getRuleBaseInputValue());
+                            pacs.setDateValue(lastDate);
+                        } else {
+                            pacs.setDesc(result.getRuleBaseLibName());
+                            pacs.setResult(result.getRuleBaseLibName());
+                        }
+                        indicationPushVO.getPacs().add(pacs);
+                    } else if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Ne.getKey())) {
+                    }
+                } else if (result.getRuleBaseLibType().equals(LexiconEnum.Gender.getKey())) {
+                    if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
+                        if (result.getRuleBaseLibName().equals("男")) {
+                            indicationPushVO.setSex(1);
+                        } else if (result.getRuleBaseLibName().equals("女")) {
+                            indicationPushVO.setSex(2);
+                        } else {
+                            indicationPushVO.setSex(3);
+                        }
+                    }
+                } else if (result.getRuleBaseLibType().equals(LexiconEnum.Group.getKey())) {
+                    if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
+                        switch (result.getRuleBaseLibName()) {
+                            case "新生儿":
+                                indicationPushVO.setAge(result.getRuleBaseInputValue());
+                                break;
+                            case "幼儿":
+                                indicationPushVO.setAge(result.getRuleBaseInputValue());
+                                break;
+                            case "儿童":
+                                indicationPushVO.setAge(result.getRuleBaseInputValue());
+                                break;
+                            case "成人":
+                                indicationPushVO.setAge(result.getRuleBaseInputValue());
+                                break;
+                            case "月经期":
+                                indicationPushVO.setSymptom(indicationPushVO.getSymptom() +
+                                        "月经第" + result.getRuleBaseInputValue() + "天,");
+                                break;
+                            default:
+                                indicationPushVO.setSymptom(indicationPushVO.getSymptom() +
+                                        result.getRuleBaseLibName() +
+                                        (result.getRuleBaseInputValue() != null ? result.getRuleBaseInputValue() : "") +
+                                        (StringUtil.isNotBlank(result.getRuleBaseUnit()) ? result.getRuleBaseUnit() : "") +
+                                        ",");
+                                break;
+                        }
+                    }
+                } else if (result.getRuleBaseLibType().equals(LexiconEnum.Allergen.getKey())) {
+                    if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Allergen.getKey())) {
+                        indicationPushVO.setPasts(indicationPushVO.getPasts() + "对" + result.getRuleBaseLibName() + "过敏,");
+                    }
+                } else if (result.getRuleBaseLibType().equals(LexiconEnum.Device.getKey())) {
+                    if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Eq.getKey())) {
+                        indicationPushVO.setPasts(indicationPushVO.getPasts() + "有" + result.getRuleBaseLibName() + ",");
+                    }
+                } else if (result.getRuleBaseLibType().equals(LexiconEnum.Age.getKey())) {
+                    if (result.getRuleBaseType().equals(RuleBaseTypeEnum.Compare.getKey())) {
+                        indicationPushVO.setAge(result.getRuleBaseInputValue());
+                    }
+                }
             }
         }
         return indicationPushVO;

+ 101 - 50
cdssman-service/src/main/java/com/diagbot/facade/RuleConvertFacade.java

@@ -1,3 +1,4 @@
+/*
 package com.diagbot.facade;
 
 import com.alibaba.fastjson.JSONObject;
@@ -51,11 +52,13 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+*/
 /**
  * @Description:
  * @Author:zhaops
  * @time: 2021/1/8 10:27
- */
+ *//*
+
 @Component
 public class RuleConvertFacade {
     @Autowired
@@ -76,13 +79,15 @@ public class RuleConvertFacade {
     @Autowired
     private DrugTypeFacade drugTypeFacade;
 
-    /**
+    */
+/**
      * 开单规则转换
      *
      * @param billItems
      * @param hospitalId
      * @return
-     */
+     *//*
+
     public List<ResultBill> billRuleConvert(List<BillItem> billItems, Long hospitalId) {
         List<ResultBill> retList = Lists.newLinkedList();
         List<ResultBill> resultBillList = Lists.newLinkedList();
@@ -311,13 +316,15 @@ public class RuleConvertFacade {
         return retList;
     }
 
-    /**
+    */
+/**
      * 开单规则转换-输血
      *
      * @param items
      * @param hospitalId
      * @return
-     */
+     *//*
+
     public List<ResultBill> billRuleConvert_transfusion(List<TransfusionRemind> items, Long hospitalId) {
         List<ResultBill> retList = Lists.newLinkedList();
         List<ResultBill> resultBillList = Lists.newLinkedList();
@@ -425,13 +432,15 @@ public class RuleConvertFacade {
         return retList;
     }
 
-    /**
+    */
+/**
      * 危急值规则转换-检验
      *
      * @param items
      * @param hospitalId
      * @return
-     */
+     *//*
+
     public List<ResultCritical> criticalRuleConvert_lis(List<LisCritical> items, Long hospitalId) {
         List<ResultCritical> retList = Lists.newLinkedList();
         List<ResultCritical> resultList = Lists.newLinkedList();
@@ -517,13 +526,15 @@ public class RuleConvertFacade {
         return retList;
     }
 
-    /**
+    */
+/**
      * 危急值规则转换-检查
      *
      * @param items
      * @param hospitalId
      * @return
-     */
+     *//*
+
     public List<ResultCritical> criticalRuleConvert_pacs(List<PacsCritical> items, Long hospitalId) {
         List<ResultCritical> retList = Lists.newLinkedList();
         List<ResultCritical> resultList = Lists.newLinkedList();
@@ -572,13 +583,15 @@ public class RuleConvertFacade {
         return retList;
     }
 
-    /**
+    */
+/**
      * 高危药品转换
      *
      * @param items
      * @param hospitalId
      * @return
-     */
+     *//*
+
     public List<ResultHighriskDrug> highriskRuleConvert_drug(List<MedRegName> items, Long hospitalId) {
         List<ResultHighriskDrug> retList = Lists.newLinkedList();
         List<ResultHighriskDrug> retMedList = Lists.newLinkedList();
@@ -656,13 +669,15 @@ public class RuleConvertFacade {
         return retList;
     }
 
-    /**
+    */
+/**
      * 高危手术转换
      *
      * @param items
      * @param hospitalId
      * @return
-     */
+     *//*
+
     public List<ResultHighriskOperation> highriskRuleConvert_operation(List<YiBaoOperationName> items, Long hospitalId) {
         List<ResultHighriskOperation> retList = Lists.newLinkedList();
         List<ResultHighriskOperation> retOptList = Lists.newLinkedList();
@@ -1013,13 +1028,15 @@ public class RuleConvertFacade {
         return retList;
     }
 
-    /**
+    */
+/**
      * 其他值提醒-化验
      *
      * @param items
      * @param hospitalId
      * @return
-     */
+     *//*
+
     public List<ResultOtherLis> otherRuleConvert_lis(List<LisRemind> items, Long hospitalId) {
         List<ResultOtherLis> retList = Lists.newLinkedList();
         List<ResultOtherLis> retOtherList = Lists.newLinkedList();
@@ -1160,13 +1177,15 @@ public class RuleConvertFacade {
         return retList;
     }
 
-    /**
+    */
+/**
      * 其他值提醒-辅检
      *
      * @param items
      * @param hospitalId
      * @return
-     */
+     *//*
+
     public List<ResultOtherPacs> otherRuleConvert_pacs(List<PacsRemind> items, Long hospitalId) {
         List<ResultOtherPacs> retList = Lists.newLinkedList();
         List<ResultOtherPacs> retOtherList = Lists.newLinkedList();
@@ -1261,13 +1280,15 @@ public class RuleConvertFacade {
         return retList;
     }
 
-    /**
+    */
+/**
      * 其他值提醒-输血
      *
      * @param items
      * @param hospitalId
      * @return
-     */
+     *//*
+
     public List<ResultOtherTransfusion> otherRuleConvert_transfusion(List<TransfusionSuggest> items, Long hospitalId) {
         List<ResultOtherTransfusion> retList = Lists.newLinkedList();
         List<ResultOtherTransfusion> retOtherList = Lists.newLinkedList();
@@ -1429,12 +1450,14 @@ public class RuleConvertFacade {
         return item;
     }
 
-    /**
+    */
+/**
      * 模拟输入数值
      *
      * @param resultList
      * @return
-     */
+     *//*
+
     public List<ResultBill> createInputValue(List<ResultBill> resultList) {
         List<ResultBill> retList = Lists.newLinkedList();
         if (ListUtil.isEmpty(resultList)) {
@@ -1481,12 +1504,14 @@ public class RuleConvertFacade {
         return retList;
     }
 
-    /**
+    */
+/**
      * 模拟输入数值-危急值
      *
      * @param resultList
      * @return
-     */
+     *//*
+
     public List<ResultCritical> createCriticalInputValue(List<ResultCritical> resultList) {
         List<ResultCritical> retList = Lists.newLinkedList();
         if (ListUtil.isEmpty(resultList)) {
@@ -1533,12 +1558,14 @@ public class RuleConvertFacade {
         return retList;
     }
 
-    /**
+    */
+/**
      * 模拟输入数值-高危手术
      *
      * @param resultList
      * @return
-     */
+     *//*
+
     public List<ResultHighriskOperation> createHighriskOperationInputValue(List<ResultHighriskOperation> resultList) {
         List<ResultHighriskOperation> retList = Lists.newLinkedList();
         if (ListUtil.isEmpty(resultList)) {
@@ -1597,12 +1624,14 @@ public class RuleConvertFacade {
         return retList;
     }
 
-    /**
+    */
+/**
      * 模拟输入数值-其他值-化验
      *
      * @param resultList
      * @return
-     */
+     *//*
+
     public List<ResultOtherLis> createOhterLisInputValue(List<ResultOtherLis> resultList) {
         List<ResultOtherLis> retList = Lists.newLinkedList();
         if (ListUtil.isEmpty(resultList)) {
@@ -1649,12 +1678,14 @@ public class RuleConvertFacade {
         return retList;
     }
 
-    /**
+    */
+/**
      * 模拟输入数值-其他值-输血
      *
      * @param resultList
      * @return
-     */
+     *//*
+
     public List<ResultOtherTransfusion> createOhterTransfusionInputValue(List<ResultOtherTransfusion> resultList) {
         List<ResultOtherTransfusion> retList = Lists.newLinkedList();
         if (ListUtil.isEmpty(resultList)) {
@@ -1701,12 +1732,14 @@ public class RuleConvertFacade {
         return retList;
     }
 
-    /**
+    */
+/**
      * 模拟提示信息
      *
      * @param resultBill
      * @return
-     */
+     *//*
+
     public BillMsg getBillMsg(ResultBill resultBill) {
         BillMsg billMsg = new BillMsg();
         String orderType = getOrderType(resultBill.getBillItemType());
@@ -1836,12 +1869,14 @@ public class RuleConvertFacade {
         return billMsg;
     }
 
-    /**
+    */
+/**
      * 模拟提示信息-危急值
      *
      * @param resultCritical
      * @return
-     */
+     *//*
+
     public BillMsg getCriticalMsg(ResultCritical resultCritical) {
         BillMsg billMsg = new BillMsg();
         if (resultCritical.getCriticalItemType().equals(GraphLabelEnum.LisCritical.getName())) {
@@ -1863,12 +1898,14 @@ public class RuleConvertFacade {
         return billMsg;
     }
 
-    /**
+    */
+/**
      * 模拟提示信息-高危手术
      *
      * @param result
      * @return
-     */
+     *//*
+
     public BillMsg getHighriskOperationMsg(ResultHighriskOperation result) {
         BillMsg billMsg = new BillMsg();
         if (StringUtil.isNotBlank(result.getLevel()) && result.getLevel().equals("2")) {
@@ -1917,12 +1954,14 @@ public class RuleConvertFacade {
         return billMsg;
     }
 
-    /**
+    */
+/**
      * 模拟提示信息-其他值-化验
      *
      * @param result
      * @return
-     */
+     *//*
+
     public BillMsg getOtherLisMsg(ResultOtherLis result) {
         BillMsg billMsg = new BillMsg();
         String content = result.getOtherItemHisName();
@@ -1943,12 +1982,14 @@ public class RuleConvertFacade {
         return billMsg;
     }
 
-    /**
+    */
+/**
      * 模拟提示信息-其他值-输血
      *
      * @param result
      * @return
-     */
+     *//*
+
     public BillMsg getOtherTransfusionMsg(ResultOtherTransfusion result) {
         BillMsg billMsg = new BillMsg();
         if (StringUtil.isNotBlank(result.getConflictItemType())) {
@@ -1996,13 +2037,15 @@ public class RuleConvertFacade {
         return billMsg;
     }
 
-    /**
+    */
+/**
      * 生成随机数
      *
      * @param min
      * @param max
      * @return
-     */
+     *//*
+
     public BigDecimal random(BigDecimal min, BigDecimal max) {
         if (min == null) {
             min = BigDecimal.ZERO;
@@ -2014,13 +2057,15 @@ public class RuleConvertFacade {
         return randomVal.setScale(2, BigDecimal.ROUND_HALF_UP);
     }
 
-    /**
+    */
+/**
      * 生成随机-整数
      *
      * @param min
      * @param max
      * @return
-     */
+     *//*
+
     public Integer random_int(Integer min, Integer max) {
         if (min == null) {
             min = 0;
@@ -2032,12 +2077,14 @@ public class RuleConvertFacade {
         return random_int;
     }
 
-    /**
+    */
+/**
      * 开单类型转换
      *
      * @param type
      * @return
-     */
+     *//*
+
     public String getOrderType(String type) {
         String orderType = "";
         if (type.equals(GraphLabelEnum.LisSet.getName())) {
@@ -2073,12 +2120,14 @@ public class RuleConvertFacade {
         return orderType;
     }
 
-    /**
+    */
+/**
      * 去除小数点末位的0,如果都是0同时去除小数点
      *
      * @param s
      * @return
-     */
+     *//*
+
     public String trimZero(String s) {
         if (s.indexOf(".") > 0) {
             //正则表达
@@ -2088,12 +2137,14 @@ public class RuleConvertFacade {
         return s;
     }
 
-    /**
+    */
+/**
      * 手术高危条件
      *
      * @param highriskCond
      * @return
-     */
+     *//*
+
     Map<Integer, Map<String, Object>> getHighriskCondMap(String highriskCond) {
         Map<Integer, Map<String, Object>> retMap = new LinkedHashMap<>();
         if (StringUtil.isBlank(highriskCond)) {
@@ -2211,4 +2262,4 @@ public class RuleConvertFacade {
         }
         return retMap;
     }
-}
+}*/

+ 47 - 43
cdssman-service/src/main/java/com/diagbot/facade/RuleTestFacade.java

@@ -30,11 +30,8 @@ import com.diagbot.repository.TransfusionSuggestRepository;
 import com.diagbot.repository.YiBaoOperationNameRepository;
 import com.diagbot.util.ExcelUtils;
 import com.diagbot.util.ListUtil;
-import com.diagbot.vo.BillRuleVO;
-import com.diagbot.vo.CriticalRuleVO;
-import com.diagbot.vo.HighriskRuleVO;
 import com.diagbot.vo.HospitalIdVO;
-import com.diagbot.vo.OtherRuleVO;
+import com.diagbot.vo.RuleTestVO;
 import com.google.common.collect.Lists;
 import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -102,50 +99,45 @@ public class RuleTestFacade {
     public Boolean ruleTest(HospitalIdVO hospitalIdVO) {
         Boolean retFlag = false;
         //开单合理性规则-通用
-        BillRuleVO billRuleVO = new BillRuleVO();
+        RuleTestVO billRuleVO = new RuleTestVO();
         billRuleVO.setHospitalId(hospitalIdVO.getHospitalId());
-        billRuleVO.setBillType(1);
         billRuleVO.setCaseId(1L);
         //开单合理性规则-输血
-        BillRuleVO billTransfusionRuleVO = new BillRuleVO();
+        RuleTestVO billTransfusionRuleVO = new RuleTestVO();
         billTransfusionRuleVO.setHospitalId(hospitalIdVO.getHospitalId());
-        billTransfusionRuleVO.setBillType(2);
         billTransfusionRuleVO.setCaseId(2L);
         //危急值规则-检验
-        CriticalRuleVO criticalLisRuleVO = new CriticalRuleVO();
+        RuleTestVO criticalLisRuleVO = new RuleTestVO();
         criticalLisRuleVO.setHospitalId(hospitalIdVO.getHospitalId());
-        criticalLisRuleVO.setCriticalType(1);
         criticalLisRuleVO.setCaseId(3L);
         //危急值规则-检查
-        CriticalRuleVO criticalPacsRuleVO = new CriticalRuleVO();
+        RuleTestVO criticalPacsRuleVO = new RuleTestVO();
         criticalPacsRuleVO.setHospitalId(hospitalIdVO.getHospitalId());
-        criticalPacsRuleVO.setCriticalType(2);
         criticalPacsRuleVO.setCaseId(4L);
         //高危药品
-        HighriskRuleVO highriskDrugRuleVO = new HighriskRuleVO();
+        RuleTestVO highriskDrugRuleVO = new RuleTestVO();
         highriskDrugRuleVO.setHospitalId(hospitalIdVO.getHospitalId());
-        highriskDrugRuleVO.setHighriskType(1);
         highriskDrugRuleVO.setCaseId(5L);
         //高危手术
-        HighriskRuleVO highriskOperationRuleVO = new HighriskRuleVO();
+        RuleTestVO highriskOperationRuleVO = new RuleTestVO();
         highriskOperationRuleVO.setHospitalId(hospitalIdVO.getHospitalId());
-        highriskOperationRuleVO.setHighriskType(2);
         highriskOperationRuleVO.setCaseId(6L);
         //化验其他值提醒
-        OtherRuleVO otherLisRuleVO = new OtherRuleVO();
+        RuleTestVO otherLisRuleVO = new RuleTestVO();
         otherLisRuleVO.setHospitalId(hospitalIdVO.getHospitalId());
-        otherLisRuleVO.setOtherType(1);
         otherLisRuleVO.setCaseId(7L);
         //辅检其他值提醒
-        OtherRuleVO otherPacsRuleVO = new OtherRuleVO();
+        RuleTestVO otherPacsRuleVO = new RuleTestVO();
         otherPacsRuleVO.setHospitalId(hospitalIdVO.getHospitalId());
-        otherPacsRuleVO.setOtherType(2);
         otherPacsRuleVO.setCaseId(8L);
         //输血其他值提醒
-        OtherRuleVO otherTransfusionRuleVO = new OtherRuleVO();
+        RuleTestVO otherTransfusionRuleVO = new RuleTestVO();
         otherTransfusionRuleVO.setHospitalId(hospitalIdVO.getHospitalId());
-        otherTransfusionRuleVO.setOtherType(3);
         otherTransfusionRuleVO.setCaseId(9L);
+        //正常项重复开单
+        RuleTestVO reBillRuleVO = new RuleTestVO();
+        reBillRuleVO.setHospitalId(hospitalIdVO.getHospitalId());
+        reBillRuleVO.setCaseId(15L);
 
         try {
             Map<String, Object> invokeParams = new HashMap<>();
@@ -158,6 +150,7 @@ public class RuleTestFacade {
             invokeParams.put("otherLisRuleVO", otherLisRuleVO);
             invokeParams.put("otherPacsRuleVO", otherPacsRuleVO);
             invokeParams.put("otherTransfusionRuleVO", otherTransfusionRuleVO);
+            invokeParams.put("reBillRuleVO", reBillRuleVO);
 
             retFlag
                     = dataBeanAggregateQueryFacade.get("ruleTest", invokeParams, Boolean.class);
@@ -173,7 +166,7 @@ public class RuleTestFacade {
      *
      * @param billRuleVO
      */
-    public Boolean billRuleTest(BillRuleVO billRuleVO) {
+    public Boolean billRuleTest(RuleTestVO billRuleVO) {
         ruleTestAggregate.billRuleTest(billRuleVO);
         return true;
     }
@@ -183,7 +176,7 @@ public class RuleTestFacade {
      *
      * @param billRuleVO
      */
-    public Boolean billTransfusionRuleTest(BillRuleVO billRuleVO) {
+    public Boolean billTransfusionRuleTest(RuleTestVO billRuleVO) {
         ruleTestAggregate.billTransfusionRuleTest(billRuleVO);
         return true;
     }
@@ -191,20 +184,20 @@ public class RuleTestFacade {
     /**
      * 危急值规则测试-检验
      *
-     * @param criticalRuleVO
+     * @param billRuleVO
      */
-    public Boolean criticalLisRuleTest(CriticalRuleVO criticalRuleVO) {
-        ruleTestAggregate.criticalLisRuleTest(criticalRuleVO);
+    public Boolean criticalLisRuleTest(RuleTestVO billRuleVO) {
+        ruleTestAggregate.criticalLisRuleTest(billRuleVO);
         return true;
     }
 
     /**
      * 危急值规则测试-检查
      *
-     * @param criticalRuleVO
+     * @param billRuleVO
      */
-    public Boolean criticalPacsRuleTest(CriticalRuleVO criticalRuleVO) {
-        ruleTestAggregate.criticalPacsRuleTest(criticalRuleVO);
+    public Boolean criticalPacsRuleTest(RuleTestVO billRuleVO) {
+        ruleTestAggregate.criticalPacsRuleTest(billRuleVO);
         return true;
     }
 
@@ -213,8 +206,8 @@ public class RuleTestFacade {
      *
      * @return
      */
-    public Boolean highriskDrugRuleTest(HighriskRuleVO highriskRuleVO) {
-        ruleTestAggregate.highriskDrugRuleTest(highriskRuleVO);
+    public Boolean highriskDrugRuleTest(RuleTestVO billRuleVO) {
+        ruleTestAggregate.highriskDrugRuleTest(billRuleVO);
         return true;
     }
 
@@ -223,41 +216,52 @@ public class RuleTestFacade {
      *
      * @return
      */
-    public Boolean highriskOperationRuleTest(HighriskRuleVO highriskRuleVO) {
-        ruleTestAggregate.highriskOperationRuleTest(highriskRuleVO);
+    public Boolean highriskOperationRuleTest(RuleTestVO billRuleVO) {
+        ruleTestAggregate.highriskOperationRuleTest(billRuleVO);
         return true;
     }
 
     /**
      * 其他值提醒-化验
      *
-     * @param otherRuleVO
+     * @param billRuleVO
      * @return
      */
-    public Boolean otherLisRuleTest(OtherRuleVO otherRuleVO) {
-        ruleTestAggregate.otherLisRuleTest(otherRuleVO);
+    public Boolean otherLisRuleTest(RuleTestVO billRuleVO) {
+        ruleTestAggregate.otherLisRuleTest(billRuleVO);
         return true;
     }
 
     /**
      * 其他值提醒-辅检
      *
-     * @param otherRuleVO
+     * @param billRuleVO
      * @return
      */
-    public Boolean otherPacsRuleTest(OtherRuleVO otherRuleVO) {
-        ruleTestAggregate.otherPacsRuleTest(otherRuleVO);
+    public Boolean otherPacsRuleTest(RuleTestVO billRuleVO) {
+        ruleTestAggregate.otherPacsRuleTest(billRuleVO);
         return true;
     }
 
     /**
      * 其他值提醒-输血
      *
-     * @param otherRuleVO
+     * @param billRuleVO
+     * @return
+     */
+    public Boolean otherTransfusionRuleTest(RuleTestVO billRuleVO) {
+        ruleTestAggregate.otherTransfusionRuleTest(billRuleVO);
+        return true;
+    }
+
+    /**
+     * 正常项重复开单
+     *
+     * @param billRuleVO
      * @return
      */
-    public Boolean otherTransfusionRuleTest(OtherRuleVO otherRuleVO) {
-        ruleTestAggregate.otherTransfusionRuleTest(otherRuleVO);
+    public Boolean reBillRuleTest(RuleTestVO billRuleVO) {
+        ruleTestAggregate.reBillRuleTest(billRuleVO);
         return true;
     }
 

+ 41 - 20
cdssman-service/src/main/java/com/diagbot/facade/SearchDataFacade.java

@@ -1,3 +1,4 @@
+/*
 package com.diagbot.facade;
 
 import com.diagbot.biz.push.entity.Item;
@@ -20,20 +21,24 @@ import org.springframework.stereotype.Component;
 
 import java.util.Random;
 
+*/
 /**
  * @Description:
  * @Author:zhaops
  * @time: 2021/1/11 11:37
- */
+ *//*
+
 @Component
 public class SearchDataFacade {
 
-    /**
+    */
+/**
      * 生成开单合理性入参
      *
      * @param resultBill
      * @return
-     */
+     *//*
+
     public IndicationPushVO createBillVO(ResultBill resultBill) {
         IndicationPushVO indicationPushVO = new IndicationPushVO();
         indicationPushVO.setAge("20");
@@ -168,12 +173,14 @@ public class SearchDataFacade {
         return indicationPushVO;
     }
 
-    /**
+    */
+/**
      * 生成危急值入参
      *
      * @param resultCritical
      * @return
-     */
+     *//*
+
     public IndicationPushVO createCriticalVO(ResultCritical resultCritical) {
         IndicationPushVO indicationPushVO = new IndicationPushVO();
         indicationPushVO.setSex(3);
@@ -217,12 +224,14 @@ public class SearchDataFacade {
         return indicationPushVO;
     }
 
-    /**
+    */
+/**
      * 生成高危药品入参
      *
      * @param result
      * @return
-     */
+     *//*
+
     public IndicationPushVO createHighriskVO_drug(ResultHighriskDrug result) {
         IndicationPushVO indicationPushVO = new IndicationPushVO();
         indicationPushVO.setSex(3);
@@ -238,12 +247,14 @@ public class SearchDataFacade {
         return indicationPushVO;
     }
 
-    /**
+    */
+/**
      * 生成高危手术入参
      *
      * @param result
      * @return
-     */
+     *//*
+
     public IndicationPushVO createHighriskVO_operation(ResultHighriskOperation result) {
         IndicationPushVO indicationPushVO = new IndicationPushVO();
         indicationPushVO.setSex(3);
@@ -260,9 +271,11 @@ public class SearchDataFacade {
             if (result.getFactorItemType().equals(TypeEnum.age.getName())) {
                 indicationPushVO.setAge(result.getInputValue());
             } else if (result.getFactorItemType().equals(TypeEnum.vital.getName())) {
-                /*if (result.getFactorItemName().equals("体温")) {
+                */
+/*if (result.getFactorItemName().equals("体温")) {
                     indicationPushVO.setVital(result.getFactorItemName() + result.getInputValue() + "℃,");
-                } else */
+                } else *//*
+
                 if (result.getFactorItemName().equals("收缩压")) {
                     indicationPushVO.setVital("血压" + result.getInputValue() + "/80" +
                             (StringUtil.isNotBlank(result.getFactorItemUnit()) ? result.getFactorItemUnit() : "mmHg")
@@ -313,12 +326,14 @@ public class SearchDataFacade {
         return indicationPushVO;
     }
 
-    /**
+    */
+/**
      * 生成其他值提醒(化验)入参
      *
      * @param result
      * @return
-     */
+     *//*
+
     public IndicationPushVO createOther_lis(ResultOtherLis result) {
         IndicationPushVO indicationPushVO = new IndicationPushVO();
         indicationPushVO.setSex(3);
@@ -363,12 +378,14 @@ public class SearchDataFacade {
         return indicationPushVO;
     }
 
-    /**
+    */
+/**
      * 生成其他值提醒(辅检)入参
      *
      * @param result
      * @return
-     */
+     *//*
+
     public IndicationPushVO createOther_pacs(ResultOtherPacs result) {
         IndicationPushVO indicationPushVO = new IndicationPushVO();
         indicationPushVO.setSex(3);
@@ -377,12 +394,14 @@ public class SearchDataFacade {
 
         Pacs pacs = new Pacs();
         pacs.setResult(result.getPacsResult());
-        /*if (StringUtil.isNotBlank(result.getPostoken())) {
+        */
+/*if (StringUtil.isNotBlank(result.getPostoken())) {
             pacs.setResult(pacs.getResult() + "," + result.getPostoken());
         }
         if (StringUtil.isNotBlank(result.getNegtoken())) {
             pacs.setResult(pacs.getResult() + ",无" + result.getNegtoken());
-        }*/
+        }*//*
+
         indicationPushVO.getPacs().add(pacs);
 
         if (StringUtil.isNotBlank(result.getGender())) {
@@ -407,12 +426,14 @@ public class SearchDataFacade {
         return indicationPushVO;
     }
 
-    /**
+    */
+/**
      * 生成其他值提醒(输血)入参
      *
      * @param result
      * @return
-     */
+     *//*
+
     public IndicationPushVO createOther_transfusion(ResultOtherTransfusion result) {
         IndicationPushVO indicationPushVO = new IndicationPushVO();
         indicationPushVO.setSex(3);
@@ -452,4 +473,4 @@ public class SearchDataFacade {
         }
         return indicationPushVO;
     }
-}
+}*/

+ 83 - 203
cdssman-service/src/main/java/com/diagbot/util/MsgUtil.java

@@ -1,6 +1,7 @@
 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;
 
@@ -14,18 +15,29 @@ public class MsgUtil {
     /**
      * 高危药品、手术通用提示信息
      *
-     * @param name
-     * @param highLevel
-     * @param type
+     * @param content
+     * @param name    名称
+     * @param type    类型
      * @return
      */
-    public static BillMsg getCommonHighRiskMsg(String name, String highLevel, String type) {
+    public static BillMsg getCommonHighRiskMsg(String content, String name, String type) {
         BillMsg billMsg = new BillMsg();
+        String msg = "";
         if (TypeEnum.operation.getName().equals(type)) {
-            billMsg.setMsg(name + "为高风险手术,请留意");
+            if (StringUtil.isBlank(content)) {
+                // 本身高危手术
+                msg = String.format("%s为高风险手术,请留意", name);
+            } else {
+                // 复杂情况高危手术
+                msg = String.format("该患者%s,%s为高风险手术,请留意", content, name);
+                billMsg.setContent(content);
+            }
         } else if (TypeEnum.drug.getName().equals(type)) {
-            billMsg.setMsg(name + "为" + highLevel + "药品,请留意");
+            msg = String.format("%s为%s药品,请留意", name, content);
+            billMsg.setContent(content);
         }
+        billMsg.setOrderName(name);
+        billMsg.setMsg(msg);
         billMsg.setType(type);
         return billMsg;
     }
@@ -34,7 +46,7 @@ public class MsgUtil {
      * 危急值通用提示信息
      *
      * @param content 匹配内容
-     * @param type 类型
+     * @param type    类型
      * @return
      */
     public static BillMsg getCommonCriticalMsg(String content, String type) {
@@ -50,88 +62,7 @@ public class MsgUtil {
     }
 
     /**
-     * 开单合理性通用提示信息
-     *
-     * @param orderName 原开单项
-     * @param orderStandName 标准开单项
-     * @param content 匹配内容
-     * @param type 类型
-     * @param type 开单项类型
-     * @return
-     */
-    public static BillMsg getCommonBillMsg(String orderName, String orderStandName, String content, String type, String orderType) {
-        BillMsg billMsg = new BillMsg();
-        String msg = String.format("该患者%s,不宜开%s", content, orderName);
-        // 输血提示语是另一种写法
-        if (TypeEnum.transfusion.getName().equals(orderType)) {
-            msg = String.format("该患者%s,谨慎输注%s", content, orderName);
-        }
-        billMsg.setMsg(msg);
-        billMsg.setOrderName(orderName);
-        billMsg.setOrderStandName(orderStandName);
-        billMsg.setContent(content);
-        billMsg.setType(type);
-        return billMsg;
-    }
-
-    /**
-     * 开单合理性通用提示信息
-     *
-     * @param orderName 原开单项
-     * @param orderStandName 标准开单项
-     * @param content 匹配内容
-     * @param type 类型
-     * @return
-     */
-    public static BillMsg getBillLisOrderMsg(String orderName, String orderStandName, String content, String type) {
-        BillMsg billMsg = new BillMsg();
-        String msg = String.format("该患者可能正在用药%s,会影响%s结果,请留意", content, orderName);
-        billMsg.setMsg(msg);
-        billMsg.setOrderName(orderName);
-        billMsg.setOrderStandName(orderStandName);
-        billMsg.setContent(content);
-        billMsg.setType(type);
-        return billMsg;
-    }
-
-    /**
-     * 开单合理性——互斥提示信息
-     *
-     * @param complexOrderName 多个开单项
-     * @param orderName 原开单项
-     * @param content 匹配内容
-     * @param type 类型
-     * @return
-     */
-    public static BillMsg getBillExclusionMsg(String orderName, String content, String complexOrderName, String type) {
-        BillMsg billMsg = new BillMsg();
-        String msg = String.format("检查项目互斥:%s与%s不宜同时进行", orderName, content);
-        billMsg.setMsg(msg);
-        billMsg.setOrderName(complexOrderName);
-        billMsg.setContent(content);
-        billMsg.setType(type);
-        return billMsg;
-    }
-
-    /**
-     * 复杂情况高危手术提示
-     *
-     * @param content
-     * @param name
-     * @param type
-     * @return
-     */
-    public static BillMsg getComplexOperationMsg(String name, String content, String type) {
-        BillMsg billMsg = new BillMsg();
-        String msg = String.format("该患者%s,%s为高风险手术,请留意", name, content);
-        billMsg.setMsg(msg);
-        billMsg.setContent(content);
-        billMsg.setType(type);
-        return billMsg;
-    }
-
-    /**
-     * 其他提醒——化验
+     * 其他值通用提示信息
      *
      * @param content
      * @param name
@@ -139,141 +70,90 @@ public class MsgUtil {
      * @param lis
      * @return
      */
-    public static BillMsg getCommonOtherTipLisMsg(String content, String name, String type, Lis lis) {
+    public static BillMsg getCommonOtherMsg(String otherType, String content, String name, String type, Lis lis) {
         BillMsg billMsg = new BillMsg();
         String msg = "";
-        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 (NeoEnum.group.getName().equals(type)) {
-            msg = String.format("该患者%s,%s,请留意", content, name);
+        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);
+                }
+                billMsg.setType(type);
+                billMsg.setOrderName(lis.getName());
+                billMsg.setOrderDetailName(lis.getDetailName());
+                break;
+            case pacs: // 其他值提醒——辅检
+                msg = content;
+                break;
+            case transfusion: // 其他值提醒——输血
+                msg = String.format("该患者%s,建议输注%s", content, name);
+                break;
+            default:
+                break;
         }
         billMsg.setMsg(msg);
         billMsg.setContent(content);
-        billMsg.setType(type);
-        billMsg.setOrderName(lis.getName());
-        billMsg.setOrderDetailName(lis.getDetailName());
-        return billMsg;
-    }
-
-    /**
-     * 其他提醒——辅检
-     *
-     * @param content
-     * @return
-     */
-    public static BillMsg getCommonOtherTipPacsMsg(String content) {
-        BillMsg billMsg = new BillMsg();
-        billMsg.setMsg(content);
-        billMsg.setContent(content);
-        return billMsg;
-    }
-
-    /**
-     * 其他提醒——输血
-     *
-     * @param content
-     * @param name
-     * @return
-     */
-    public static BillMsg getCommonOtherTipTransfusionMsg(String content, String name) {
-        BillMsg billMsg = new BillMsg();
-        String msg = String.format("该患者%s,建议输注%s", content, name);
-        billMsg.setMsg(msg);
-        billMsg.setContent(content);
-        return billMsg;
-    }
-
-    /**
-     * 开单合理性24小时重复开通用提示信息
-     *
-     * @param orderName 原开单项
-     * @param orderStandName 标准开单项
-     * @param content 匹配内容
-     * @param type 类型
-     * @return
-     */
-    public static BillMsg getBill24RepeatMsg(String orderName, String orderStandName, String content, String type) {
-        BillMsg billMsg = new BillMsg();
-        String msg = String.format("%s重复开立", orderName);
-        billMsg.setMsg(msg);
-        billMsg.setOrderName(orderName);
-        billMsg.setOrderStandName(orderStandName);
-        billMsg.setContent(content);
-        billMsg.setType(type);
-        return billMsg;
-    }
-
-    /**
-     * 无需重复辅检开单项
-     *
-     * @param orderName 原开单项
-     * @param orderStandName 标准开单项
-     * @param content 匹配内容
-     * @param type 类型
-     * @return
-     */
-    public static BillMsg getNeedlessRepeatOrderMsg(String orderName, String orderStandName, String content, String type) {
-        BillMsg billMsg = new BillMsg();
-        String msg = String.format("重复开立:该患者近期做过%s,且结果无异常", content);
-        billMsg.setMsg(msg);
-        billMsg.setOrderName(orderName);
-        billMsg.setOrderStandName(orderStandName);
-        billMsg.setContent(content);
-        billMsg.setType(type);
         return billMsg;
     }
 
-
     /**
-     * 开单合理性禁忌医疗器械及物品提示信息
+     * 开单合理性通用提示信息
      *
-     * @param orderName 原开单项
+     * @param orderName      原开单项
      * @param orderStandName 标准开单项
-     * @param content 匹配内容
-     * @param type 类型
+     * @param content        匹配内容
+     * @param conType        禁忌类型
+     * @param orderType      开单项类型
      * @return
      */
-    public static BillMsg getBillMedEquMsg(String orderName, String orderStandName, String content, String type, String orderType) {
+    public static BillMsg getCommonBillMsg(String orderName, String orderStandName, String content, String conType, String orderType) {
         BillMsg billMsg = new BillMsg();
-        if (content.startsWith("具有")) {
-            content = content.replaceFirst("具有", ""); // 将“具有”替换成空
-        }
-        String msg = String.format("该患者具有%s,不宜开%s", content, orderName);
-        // 输血提示语是另一种写法
-        if (TypeEnum.transfusion.getName().equals(orderType)) {
-            msg = String.format("该患者具有%s,谨慎输注%s", content, orderName);
+        // 禁忌项拼接提示语
+        switch (ConEnum.getEnum(conType)) {
+            case oralmeds: // 服用药品
+                content = "可能正在用药" + content;
+                break;
+            case allergicmeds: // 禁忌药品
+                content = content + "过敏";
+                break;
+            case operations: // 手术
+                content = "有" + content + "史";
+                break;
+            case medEqu: // 禁忌医疗器械及物品
+                if (!content.startsWith("具有")) {
+                    content = "具有" + content;
+                }
+                break;
         }
-        billMsg.setMsg(msg);
-        billMsg.setOrderName(orderName);
-        billMsg.setOrderStandName(orderStandName);
-        billMsg.setContent(content);
-        billMsg.setType(type);
-        return billMsg;
-    }
-
-    /**
-     * 开单合理性手术提示信息
-     *
-     * @param orderName 原开单项
-     * @param orderStandName 标准开单项
-     * @param content 匹配内容
-     * @param type 类型
-     * @return
-     */
-    public static BillMsg getCommonSurgeryMsg(String orderName, String orderStandName, String content, String type, String orderType) {
-        BillMsg billMsg = new BillMsg();
-        String msg = String.format("该患者有%s史,不宜开%s", content, orderName);
-        // 输血提示语是另一种写法
+        // 通用提示语
+        String msg = String.format("该患者%s,不宜开%s", content, orderName);
+        // 特殊情况下提示语
         if (TypeEnum.transfusion.getName().equals(orderType)) {
-            msg = String.format("该患者有%s史,谨慎输注%s", content, orderName);
+            // 输血开单项提示语
+            msg = String.format("该患者%s,谨慎输注%s", content, orderName);
+        } else if (TypeEnum.lis.getName().equals(orderType) && ConEnum.oralmeds.getName().equals(conType)) {
+            // 化验开单项 + 禁忌服用药品提示语
+            msg = String.format("该患者%s,会影响%s结果,请留意", content, orderName);
+        } else if (ConEnum.repeat24.getName().equals(conType)) {
+            // 24小时重复开立
+            msg = String.format("%s重复开立", orderName);
+        } else if (ConEnum.repeat.getName().equals(conType)) {
+            // 辅检正常项目无需重复开立
+            msg = String.format("重复开立:该患者近期做过%s,且结果无异常", content);
+        } else  if (ConEnum.exclusion.getName().equals(conType)) {
+            // 开单项互斥
+            msg = String.format("检查项目互斥:%s与%s不宜同时进行", orderName, content);
+            billMsg.setMsg(msg);
         }
         billMsg.setMsg(msg);
         billMsg.setOrderName(orderName);
         billMsg.setOrderStandName(orderStandName);
         billMsg.setContent(content);
-        billMsg.setType(type);
+        billMsg.setType(conType);
         return billMsg;
     }
 }

+ 3 - 3
cdssman-service/src/main/java/com/diagbot/vo/BillRuleVO.java

@@ -12,7 +12,7 @@ import javax.validation.constraints.NotNull;
  */
 @Getter
 @Setter
-public class BillRuleVO extends HospitalIdVO {
+public class RuleTestVO extends HospitalIdVO {
     /**
      * 测试类型
      */
@@ -21,6 +21,6 @@ public class BillRuleVO extends HospitalIdVO {
     /**
      * 开单类型(1:通用,2:输血)
      */
-    @NotNull(message = "请输入开单项测试规则类型(1:通用,2:输血)")
-    private Integer billType;
+    /*@NotNull(message = "请输入开单项测试规则类型(1:通用,2:输血)")
+    private Integer billType;*/
 }

+ 24 - 29
cdssman-service/src/main/java/com/diagbot/web/RuleTestController.java

@@ -20,11 +20,8 @@ import com.diagbot.facade.ResultOtherLisFacade;
 import com.diagbot.facade.ResultOtherPacsFacade;
 import com.diagbot.facade.ResultOtherTransfusionFacade;
 import com.diagbot.facade.RuleTestFacade;
-import com.diagbot.vo.BillRuleVO;
-import com.diagbot.vo.CriticalRuleVO;
-import com.diagbot.vo.HighriskRuleVO;
+import com.diagbot.vo.RuleTestVO;
 import com.diagbot.vo.HospitalIdVO;
-import com.diagbot.vo.OtherRuleVO;
 import com.diagbot.vo.ResultBillPageVO;
 import com.diagbot.vo.ResultCriticalPageVO;
 import com.diagbot.vo.ResultHighriskDrugPageVO;
@@ -99,13 +96,13 @@ public class RuleTestController {
                     "billType: 开单项测试规则类型(1:通用,2:输血) <br>")
     @PostMapping("/billRuleTest")
     @SysLogger("billRuleTest")
-    public RespDTO<Boolean> billRuleTest(@Valid @RequestBody BillRuleVO billRuleVO) {
+    public RespDTO<Boolean> billRuleTest(@Valid @RequestBody RuleTestVO billRuleVO) {
         Boolean data = false;
-        if (billRuleVO.getBillType().equals(1)) {
+        //if (billRuleVO.getBillType().equals(1)) {
             data = ruleTestFacade.billRuleTest(billRuleVO);
-        } else if (billRuleVO.getBillType().equals(2)) {
-            data = ruleTestFacade.billTransfusionRuleTest(billRuleVO);
-        }
+        //} else if (billRuleVO.getBillType().equals(2)) {
+           // data = ruleTestFacade.billTransfusionRuleTest(billRuleVO);
+       // }
         return RespDTO.onSuc(data);
     }
 
@@ -115,13 +112,11 @@ public class RuleTestController {
                     "criticalType: 危急值测试规则类型(1:检验,2:检查) <br>")
     @PostMapping("/criticalRuleTest")
     @SysLogger("criticalRuleTest")
-    public RespDTO<Boolean> criticalRuleTest(@Valid @RequestBody CriticalRuleVO criticalRuleVO) {
+    public RespDTO<Boolean> criticalRuleTest(@Valid @RequestBody RuleTestVO billRuleVO) {
         Boolean data = false;
-        if (criticalRuleVO.getCriticalType().equals(1)) {
-            data = ruleTestFacade.criticalLisRuleTest(criticalRuleVO);
-        } else if (criticalRuleVO.getCriticalType().equals(2)) {
-            data = ruleTestFacade.criticalPacsRuleTest(criticalRuleVO);
-        }
+        data = ruleTestFacade.criticalLisRuleTest(billRuleVO);
+        data = ruleTestFacade.criticalPacsRuleTest(billRuleVO);
+
         return RespDTO.onSuc(data);
     }
 
@@ -131,13 +126,13 @@ public class RuleTestController {
                     "highriskType:高危测试规则类型(1:药品,2:手术) <br>")
     @PostMapping("/highRiskRuleTest")
     @SysLogger("highRiskRuleTest")
-    public RespDTO<Boolean> highRiskRuleTest(@Valid @RequestBody HighriskRuleVO highriskRuleVO) {
+    public RespDTO<Boolean> highRiskRuleTest(@Valid @RequestBody RuleTestVO billRuleVO) {
         Boolean data = false;
-        if (highriskRuleVO.getHighriskType().equals(1)) {
-            data = ruleTestFacade.highriskDrugRuleTest(highriskRuleVO);
-        } else if (highriskRuleVO.getHighriskType().equals(2)) {
-            data = ruleTestFacade.highriskOperationRuleTest(highriskRuleVO);
-        }
+
+        data = ruleTestFacade.highriskDrugRuleTest(billRuleVO);
+
+        data = ruleTestFacade.highriskOperationRuleTest(billRuleVO);
+
         return RespDTO.onSuc(data);
     }
 
@@ -147,15 +142,15 @@ public class RuleTestController {
                     "otherType:其他提醒测试规则类型(1:化验,2:辅检,3:输血) <br>")
     @PostMapping("/otherRuleTest")
     @SysLogger("otherRuleTest")
-    public RespDTO<Boolean> otherRuleTest(@Valid @RequestBody OtherRuleVO otherRuleVO) {
+    public RespDTO<Boolean> otherRuleTest(@Valid @RequestBody RuleTestVO billRuleVO) {
         Boolean data = false;
-        if (otherRuleVO.getOtherType().equals(1)) {
-            data = ruleTestFacade.otherLisRuleTest(otherRuleVO);
-        } else if (otherRuleVO.getOtherType().equals(2)) {
-            data = ruleTestFacade.otherPacsRuleTest(otherRuleVO);
-        } else if (otherRuleVO.getOtherType().equals(3)) {
-            data = ruleTestFacade.otherTransfusionRuleTest(otherRuleVO);
-        }
+
+        data = ruleTestFacade.otherLisRuleTest(billRuleVO);
+
+        data = ruleTestFacade.otherPacsRuleTest(billRuleVO);
+
+        data = ruleTestFacade.otherTransfusionRuleTest(billRuleVO);
+
         return RespDTO.onSuc(data);
     }
     //endregion --------------------------规则测试------------------------------

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

@@ -11,13 +11,16 @@
         <result column="creator" property="creator" />
         <result column="modifier" property="modifier" />
         <result column="result_id" property="resultId" />
+        <result column="rule_order_no" property="ruleOrderNo" />
         <result column="rule_type" property="ruleType" />
+        <result column="rule_id" property="ruleId" />
         <result column="rule_lib_type" property="ruleLibType" />
         <result column="rule_lib_type_name" property="ruleLibTypeName" />
         <result column="rule_lib_name" property="ruleLibName" />
         <result column="rule_his_name" property="ruleHisName" />
         <result column="rule_his_detail_name" property="ruleHisDetailName" />
         <result column="has_sub_cond" property="hasSubCond" />
+        <result column="rule_base_id" property="ruleBaseId" />
         <result column="group_type" property="groupType" />
         <result column="rule_base_type" property="ruleBaseType" />
         <result column="rule_base_lib_type" property="ruleBaseLibType" />