浏览代码

自动化测试

zhaops 4 年之前
父节点
当前提交
70c5e4589f

+ 11 - 3
cdssman-service/src/main/java/com/diagbot/aggregate/RuleTestAggregate.java

@@ -26,6 +26,8 @@ import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.NeoEnum;
 import com.diagbot.enums.StatusEnum;
 import com.diagbot.enums.TypeEnum;
+import com.diagbot.facade.MedRuleConvertFacade;
+import com.diagbot.facade.MedSearchDataFacade;
 import com.diagbot.facade.RuleConvertFacade;
 import com.diagbot.facade.RunningInfoFacade;
 import com.diagbot.facade.SearchDataFacade;
@@ -129,9 +131,13 @@ public class RuleTestAggregate {
 
     @Autowired
     private RuleConvertFacade ruleConvertFacade;
+    @Autowired
+    private MedRuleConvertFacade medRuleConvertFacade;
 
     @Autowired
     private SearchDataFacade searchDataFacade;
+    @Autowired
+    private MedSearchDataFacade medSearchDataFacade;
 
     @DataProvider("ruleTest")
     public Boolean ruleTest(
@@ -182,9 +188,10 @@ public class RuleTestAggregate {
     public Boolean billRuleTestExe(BillRuleVO billRuleVO) {
         Long hospitalId = billRuleVO.getHospitalId();
 
-        List<BillItem> billRules = billManRepository.getAllRules();
+        //List<BillItem> billRules = billManRepository.getAllRules();
         //生成测试规则
-        List<ResultBill> resultList = ruleConvertFacade.billRuleConvert(billRules, hospitalId);
+        //List<ResultBill> resultList = ruleConvertFacade.billRuleConvert(billRules, hospitalId);
+        List<ResultBill> resultList = medRuleConvertFacade.billCommonConvert(hospitalId);
         if (ListUtil.isEmpty(resultList)) {
             return true;
         }
@@ -485,7 +492,8 @@ public class RuleTestAggregate {
                 retList.add(resultBill);
                 continue;
             }
-            IndicationPushVO indicationPushVO = searchDataFacade.createBillVO(resultBill);
+            //IndicationPushVO indicationPushVO = searchDataFacade.createBillVO(resultBill);
+            IndicationPushVO indicationPushVO = medSearchDataFacade.createBillVO(resultBill);
             indicationPushVO.setHospitalId(hospitalId);
 
             resultBill.setInputParams(FastJsonUtils.getBeanToJson(indicationPushVO));

+ 14 - 0
cdssman-service/src/main/java/com/diagbot/entity/ResultBill.java

@@ -86,6 +86,11 @@ public class ResultBill implements Serializable {
      */
     private String billItemHisDetailName;
 
+    /**
+     *
+     */
+    private Integer conflictType;
+
     /**
      * 禁忌项类型(编码)
      */
@@ -269,6 +274,14 @@ public class ResultBill implements Serializable {
         this.billItemHisDetailName = billItemHisDetailName;
     }
 
+    public Integer getConflictType() {
+        return conflictType;
+    }
+
+    public void setConflictType(Integer conflictType) {
+        this.conflictType = conflictType;
+    }
+
     public Integer getConflictItemTypeCode() {
         return conflictItemTypeCode;
     }
@@ -413,6 +426,7 @@ public class ResultBill implements Serializable {
                 ", billItemName=" + billItemName +
                 ", billItemHisName=" + billItemHisName +
                 ", billItemHisDetailName=" + billItemHisDetailName +
+                ", conflictType=" + conflictType +
                 ", conflictItemTypeCode=" + conflictItemTypeCode +
                 ", conflictItemType=" + conflictItemType +
                 ", conflictItemName=" + conflictItemName +

+ 62 - 0
cdssman-service/src/main/java/com/diagbot/enums/RuleBaseTypeEnum.java

@@ -0,0 +1,62 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/3/4 13:21
+ */
+public enum RuleBaseTypeEnum implements KeyedNamed {
+    Eq(1, "开单外等于术语本身"),
+    Compare(2, "开单外存在比较"),
+    Ne(3, "开单外不等于术语本身"),
+    Allergen(4, "过敏原"),
+    BillItem(5, "开单项"),
+    Regex(6, "检查结果正则表达式");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    RuleBaseTypeEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static RuleBaseTypeEnum getEnum(int key) {
+        for (RuleBaseTypeEnum item : RuleBaseTypeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static RuleBaseTypeEnum getEnum(String value) {
+        for (RuleBaseTypeEnum item : RuleBaseTypeEnum.values()) {
+            if (item.getName().equals(value)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        RuleBaseTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

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

@@ -47,7 +47,7 @@ public class MedRuleConvertFacade {
     @Autowired
     private TransfusionConfigFacade transfusionConfigFacade;
 
-    public List<ResultBill> billCommon(Long hospitalId) {
+    public List<ResultBill> billCommonConvert(Long hospitalId) {
         List<ResultBill> retList = Lists.newLinkedList();
         List<ResultBill> inputList = Lists.newLinkedList();
         List<ResultBill> medicineList = Lists.newLinkedList();
@@ -65,7 +65,7 @@ public class MedRuleConvertFacade {
         List<RuleDTO> list = klRuleFacade.getRules(ruleVO);
 
         if (ListUtil.isEmpty(list)) {
-
+            return retList;
         }
 
         Map<String, Map<String, Map<String, List<Long>>>> lisConfigMap = lisConfigFacade.getUniqueConfigMap(hospitalId, null, null);
@@ -84,6 +84,7 @@ public class MedRuleConvertFacade {
             resultBill.setBillItemHisName("");
             resultBill.setBillItemHisDetailName("");
 
+            resultBill.setConflictType(record.getRuleBaseType());
             resultBill.setConflictItemName(record.getRuleBaseLibName());
             resultBill.setConflictItemTypeCode(record.getRuleBaseLibType());
             resultBill.setConflictItemType(record.getRuleBaseLibTypeName());
@@ -107,9 +108,7 @@ public class MedRuleConvertFacade {
                     valResult.setUnit(StringUtil.isNotBlank(record.getRuleBaseMinUnit()) ? record.getRuleBaseMinUnit()
                             : (StringUtil.isNotBlank(record.getRuleBaseMaxUnit()) ? record.getRuleBaseMaxUnit() : ""));
                     inputList.add(valResult);
-
                 } else {
-
                     ResultBill minResult = new ResultBill();
                     BeanUtil.copyProperties(resultBill, minResult);
                     minResult.setConflictItemRange(1);
@@ -126,11 +125,10 @@ public class MedRuleConvertFacade {
                     maxResult.setInputValue(random(new BigDecimal(record.getRuleBaseMaxValue()),
                             null,
                             (record.getRuleBaseMaxOperator().equals("<=") ? true : false),
-                            null).toString());
+                            false).toString());
                     maxResult.setUnit(StringUtil.isNotBlank(record.getRuleBaseMaxUnit()) ? record.getRuleBaseMaxUnit() : "");
                     inputList.add(maxResult);
                 }
-
             } else if (StringUtil.isNotBlank(record.getRuleBaseMinOperator())
                     && StringUtil.isBlank(record.getRuleBaseMaxOperator())) {
                 ResultBill minResult = new ResultBill();
@@ -148,7 +146,7 @@ public class MedRuleConvertFacade {
                 maxResult.setInputValue(random(new BigDecimal(record.getRuleBaseMaxValue()),
                         null,
                         (record.getRuleBaseMaxOperator().equals("<=") ? true : false),
-                        null).toString());
+                        false).toString());
                 maxResult.setUnit(StringUtil.isNotBlank(record.getRuleBaseMaxUnit()) ? record.getRuleBaseMaxUnit() : "");
                 inputList.add(maxResult);
             } else if (StringUtil.isNotBlank(record.getRuleBaseEqOperator())) {
@@ -219,10 +217,11 @@ public class MedRuleConvertFacade {
             }
         }
 
+        retList = BeanUtil.listCopyTo(conflictMappingList, ResultBill.class);
         return retList;
     }
 
-    public void billTransfusion() {
+    public void billTransfusionConvert() {
         RuleVO ruleVO = new RuleVO();
         ruleVO.setRuleType(1);
         ruleVO.setLibTypes(Arrays.asList(new Integer[] { LexiconEnum.Transfusion.getKey() }));
@@ -309,7 +308,8 @@ public class MedRuleConvertFacade {
         }
 
         List<String> hisNames = configMap.containsKey(keyName)
-                ? configMap.get(keyName).values().stream().map(i -> i.keySet()).flatMap(Collection::stream).distinct().collect(Collectors.toList())
+                //? configMap.get(keyName).values().stream().map(i -> i.keySet()).flatMap(Collection::stream).distinct().collect(Collectors.toList())
+                ? new ArrayList<>(configMap.get(keyName).keySet())
                 : new ArrayList<>();
         if (ListUtil.isNotEmpty(hisNames)) {
             for (String hisName : hisNames) {

+ 172 - 0
cdssman-service/src/main/java/com/diagbot/facade/MedSearchDataFacade.java

@@ -0,0 +1,172 @@
+package com.diagbot.facade;
+
+import com.diagbot.biz.push.entity.Item;
+import com.diagbot.biz.push.entity.Lis;
+import com.diagbot.biz.push.entity.Pacs;
+import com.diagbot.entity.ResultBill;
+import com.diagbot.enums.LexiconEnum;
+import com.diagbot.enums.RuleBaseTypeEnum;
+import com.diagbot.util.StringUtil;
+import com.diagbot.vo.Drug;
+import com.diagbot.vo.IndicationPushVO;
+import com.diagbot.vo.ItemExt;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/3/4 9:57
+ */
+@Component
+public class MedSearchDataFacade {
+    /**
+     * 生成开单合理性入参
+     *
+     * @param resultBill
+     * @return
+     */
+    public IndicationPushVO createBillVO(ResultBill resultBill) {
+        IndicationPushVO indicationPushVO = new IndicationPushVO();
+        indicationPushVO.setAge("20");
+        indicationPushVO.setSex(3);
+        indicationPushVO.setRuleType("2");
+
+        //开单项
+        if (resultBill.getBillItemTypeCode().equals(LexiconEnum.LisName.getKey())) {
+            //检验开单项
+            Lis lis = new Lis();
+            lis.setName(resultBill.getBillItemHisName());
+            lis.setUniqueName(resultBill.getBillItemName());
+            indicationPushVO.getLisOrder().add(lis);
+        }
+        if (resultBill.getBillItemTypeCode().equals(LexiconEnum.PacsName.getKey())
+                || resultBill.getBillItemTypeCode().equals(LexiconEnum.PacsSubName.getKey())) {
+            Pacs pacs = new Pacs();
+            pacs.setName(resultBill.getBillItemHisName());
+            pacs.setUniqueName(resultBill.getBillItemName());
+            indicationPushVO.getPacsOrder().add(pacs);
+        }
+        if (resultBill.getBillItemTypeCode().equals(LexiconEnum.Operation.getKey())) {
+            Item operation = new Item();
+            operation.setName(resultBill.getBillItemHisName());
+            operation.setUniqueName(resultBill.getBillItemName());
+            indicationPushVO.getOperationOrder().add(operation);
+        }
+        if (resultBill.getBillItemTypeCode().equals(LexiconEnum.Medicine.getKey())) {
+            Drug drug = new Drug();
+            drug.setName(resultBill.getBillItemHisName());
+            drug.setUniqueName(resultBill.getBillItemName());
+            indicationPushVO.getDrugOrder().add(drug);
+        }
+        if (resultBill.getBillItemTypeCode().equals(LexiconEnum.Transfusion.getKey())) {
+            ItemExt itemExt = new ItemExt();
+            itemExt.setName(resultBill.getBillItemHisName());
+            itemExt.setUniqueName(resultBill.getBillItemName());
+            indicationPushVO.getTransfusionOrder().add(itemExt);
+        }
+
+        /**
+         * 100	疾病	1
+         * 101	药品通用名	1
+         * 101	药品通用名	4
+         * 103	症状	1
+         * 104	体格检查项目	2
+         * 105	体格检查结果	1
+         * 106	手术和操作	1
+         * 108	实验室检查子项目	2
+         * 109	辅助检查项目	5
+         * 112	辅助检查结果	1
+         * 116	性别	1
+         * 117	人群	1
+         * 119	其他过敏原	4
+         * 120	医疗器械及物品	1
+         * 301	药品化学物质类别	4
+         * 302	药品治疗学类别	4
+         * 303	药品药理学类别	4
+         * 410	年龄	2
+         */
+        if (resultBill.getConflictItemTypeCode().equals(LexiconEnum.Disease.getKey())) {
+            Item diag = new Item();
+            diag.setName(resultBill.getConflictItemHisName());
+            diag.setUniqueName(resultBill.getConflictItemName());
+            indicationPushVO.getDiag().add(diag);
+        } else if (resultBill.getConflictItemTypeCode().equals(LexiconEnum.Medicine.getKey())) {
+            if (resultBill.getConflictType().equals(RuleBaseTypeEnum.Eq.getKey())) {
+                indicationPushVO.setSymptom(indicationPushVO.getSymptom() +
+                        (StringUtil.isNotBlank(resultBill.getConflictItemHisName())
+                                ? ("一直服用" + resultBill.getConflictItemHisName() + ",")
+                                : ""));
+            } else if (resultBill.getConflictType().equals(RuleBaseTypeEnum.Allergen.getKey())) {
+                indicationPushVO.setPasts(indicationPushVO.getPasts() +
+                        (StringUtil.isNotBlank(resultBill.getConflictItemHisName())
+                                ? ("对" + resultBill.getConflictItemHisName() + "过敏,")
+                                : ""));
+            }
+        } else if (resultBill.getConflictItemTypeCode().equals(LexiconEnum.Symptom.getKey())) {
+            indicationPushVO.setSymptom(indicationPushVO.getSymptom() + resultBill.getConflictItemName() + ",");
+        } else if (resultBill.getConflictItemTypeCode().equals(LexiconEnum.Vital.getKey())) {
+            indicationPushVO.setVital(resultBill.getConflictItemName() + resultBill.getInputValue()
+                    + (StringUtil.isNotBlank(resultBill.getUnit()) ? resultBill.getUnit() : "")
+                    + ",");
+        } else if (resultBill.getConflictItemTypeCode().equals(LexiconEnum.VitalResult.getKey())) {
+            indicationPushVO.setVital(resultBill.getConflictItemName() + resultBill.getInputValue() + ",");
+        } else if (resultBill.getConflictItemTypeCode().equals(LexiconEnum.Operation.getKey())) {
+            Item operation = new Item();
+            operation.setName(resultBill.getConflictItemHisName());
+            operation.setUniqueName(resultBill.getConflictItemName());
+            indicationPushVO.getOperation().add(operation);
+        } else if (resultBill.getConflictItemTypeCode().equals(LexiconEnum.LisSubName.getKey())) {
+            Lis lis = new Lis();
+            lis.setName(resultBill.getConflictItemHisName());
+            lis.setDetailName(resultBill.getConflictItemHisDetailName());
+            lis.setUniqueName(resultBill.getConflictItemName());
+            lis.setUnits(resultBill.getUnit());
+            if (resultBill.getMinValue() != null || resultBill.getMaxValue() != null) {
+                lis.setValue(Double.valueOf(resultBill.getInputValue()));
+            } else {
+                lis.setOtherValue(resultBill.getInputValue());
+            }
+            if (resultBill.getMaxValue() != null) {
+                lis.setMaxValue(resultBill.getMaxValue().doubleValue());
+            }
+            if (resultBill.getMinValue() != null) {
+                lis.setMinValue(resultBill.getMinValue().doubleValue());
+            }
+            indicationPushVO.getLis().add(lis);
+        } else if (resultBill.getConflictItemTypeCode().equals(LexiconEnum.PacsName.getKey())) {
+            if (resultBill.getConflictType().equals(RuleBaseTypeEnum.BillItem.getKey())) {
+                Pacs pacs = new Pacs();
+                pacs.setName(resultBill.getConflictItemHisName());
+                pacs.setUniqueName(resultBill.getConflictItemName());
+                indicationPushVO.getPacsOrder().add(pacs);
+            }
+        } else if (resultBill.getConflictItemTypeCode().equals(LexiconEnum.PacsResult.getKey())) {
+            Pacs pacs = new Pacs();
+            pacs.setDesc(resultBill.getConflictItemName());
+            pacs.setResult(resultBill.getConflictItemName());
+            indicationPushVO.getPacs().add(pacs);
+        } else if (resultBill.getConflictItemTypeCode().equals(LexiconEnum.Gender.getKey())) {
+            if (resultBill.getConflictItemName().equals("男")) {
+                indicationPushVO.setSex(1);
+            } else if (resultBill.getConflictItemName().equals("女")) {
+                indicationPushVO.setSex(2);
+            } else {
+                indicationPushVO.setSex(3);
+            }
+        } else if (resultBill.getConflictItemTypeCode().equals(LexiconEnum.Group.getKey())) {
+            indicationPushVO.setSymptom(indicationPushVO.getSymptom() +
+                    resultBill.getConflictItemName() +
+                    (resultBill.getInputValue() != null ? resultBill.getInputValue() : "") +
+                    (StringUtil.isNotBlank(resultBill.getUnit()) ? resultBill.getUnit() : "") +
+                    ",");
+        } else if (resultBill.getConflictItemTypeCode().equals(LexiconEnum.Allergen.getKey())) {
+            indicationPushVO.setPasts(indicationPushVO.getPasts() + "对" + resultBill.getConflictItemName() + "过敏,");
+        } else if (resultBill.getConflictItemTypeCode().equals(LexiconEnum.Device.getKey())) {
+            indicationPushVO.setPasts(indicationPushVO.getPasts() + "有" + resultBill.getConflictItemName() + ",");
+        } else if (resultBill.getConflictItemTypeCode().equals(LexiconEnum.Age.getKey())) {
+            indicationPushVO.setAge(resultBill.getInputValue());
+        }
+
+        return indicationPushVO;
+    }
+}

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

@@ -69,7 +69,7 @@
         AND a.lib_type = c.code
         <if test="libTypes != null and libTypes.size > 0">
             <foreach item="libType" collection="libTypes" open="and(" separator="or" close=")" >
-                a.lib_type = #{typeId}
+                a.lib_type = #{libType}
             </foreach>
         </if>
         <if test="ruleType != null">

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

@@ -12,10 +12,13 @@
         <result column="modifier" property="modifier" />
         <result column="result_id" property="resultId" />
         <result column="bill_type" property="billType" />
+        <result column="bill_item_type_code" property="billItemTypeCode" />
         <result column="bill_item_type" property="billItemType" />
         <result column="bill_item_name" property="billItemName" />
         <result column="bill_item_his_name" property="billItemHisName" />
         <result column="bill_item_his_detail_name" property="billItemHisDetailName" />
+        <result column="conflict_type" property="conflictType" />
+        <result column="conflict_item_type_code" property="conflictItemTypeCode" />
         <result column="conflict_item_type" property="conflictItemType" />
         <result column="conflict_item_name" property="conflictItemName" />
         <result column="conflict_item_his_name" property="conflictItemHisName" />