Browse Source

医学规则测试

zhaops 4 years ago
parent
commit
1cb373fa3c
1 changed files with 263 additions and 5 deletions
  1. 263 5
      cdssman-service/src/main/java/com/diagbot/facade/RuleConvertFacade.java

+ 263 - 5
cdssman-service/src/main/java/com/diagbot/facade/RuleConvertFacade.java

@@ -663,15 +663,273 @@ public class RuleConvertFacade {
         }
 
         List<String> conds = items.stream().map(i -> i.getHighriskcond()).filter(i -> StringUtil.isNotBlank(i)).distinct().collect(Collectors.toList());
-        Map<Integer, Map<String, Object>> condMap = new LinkedHashMap<>();
+        /*Map<Integer, Map<String, Object>> condMap = new LinkedHashMap<>();
         if (ListUtil.isNotEmpty(conds)) {
             for (String cond : conds) {
                 condMap.putAll(getHighriskCondMap(cond));
             }
+        }*/
+
+        //过滤非高危手术
+        items = items
+                .stream()
+                .filter(item -> !(StringUtil.isBlank(item.getOpgrade()) || item.getOpgrade().equals("0") || item.getOpgrade().equals("1")))
+                .collect(Collectors.toList());
+        //按高危条件分类
+        items.forEach(item -> {
+            if (StringUtil.isBlank(item.getHighriskcond())) {
+                item.setHighriskcond("");
+            }
+        });
+        Map<String, List<YiBaoOperationName>> condItemMap = EntityUtil.makeEntityListMap(items, "highriskcond");
+
+        for (Map.Entry<String, List<YiBaoOperationName>> entry : condItemMap.entrySet()) {
+            if (entry.getKey().equals("")) {
+                if (ListUtil.isNotEmpty(entry.getValue())) {
+                    entry.getValue().forEach(item -> {
+                        ResultHighriskOperation result = new ResultHighriskOperation();
+                        result.setHighriskItemName(item.getName());
+                        result.setLevel(item.getOpgrade());
+                        if (item.getOpgrade().equals("2")) {
+                            result.setSuccess(0);
+                            result.setMessage("缺少高危条件");
+                        }
+                        retOptList.add(result);
+                    });
+                }
+            } else {
+                if (ListUtil.isEmpty(entry.getValue())) {
+                    continue;
+                }
+
+                Map<Integer, Map<String, Object>> condMap = new LinkedHashMap<>();
+                condMap.putAll(getHighriskCondMap(entry.getKey()));
+
+                //条件相同的规则条数大于条件数,1对1遍历
+                if (entry.getValue().size() > condMap.size()) {
+                    Integer condIndex = 0;
+                    for (YiBaoOperationName item : entry.getValue()) {
+                        ResultHighriskOperation result = new ResultHighriskOperation();
+                        result.setHighriskItemName(item.getName());
+                        result.setLevel(item.getOpgrade());
+                        //带条件高危手术
+                        if (item.getOpgrade().equals("2")) {
+                            result.setFactorItemCond(item.getHighriskcond());
+                            Map<String, Object> subCondMap = condMap.get(condIndex++);
+                            if (condIndex.equals(condMap.size())) {
+                                condIndex = 0;
+                            }
+                            String type = subCondMap.get("type").toString();
+                            if (type.equals(TypeEnum.age.getName())) {
+                                ResultHighriskOperation ageResult = new ResultHighriskOperation();
+                                BeanUtil.copyProperties(result, ageResult);
+                                ageResult.setFactorItemType(TypeEnum.age.getName());
+                                ageResult.setFactorItemName(subCondMap.get("name").toString());
+                                if (subCondMap.containsKey("最大值")) {
+                                    ageResult.setFactorItemMaxValue((BigDecimal) subCondMap.get("最大值"));
+                                }
+                                if (subCondMap.containsKey("最小值")) {
+                                    ageResult.setFactorItemMinValue((BigDecimal) subCondMap.get("最小值"));
+                                }
+                                if (subCondMap.containsKey("单位")) {
+                                    ageResult.setFactorItemUnit(subCondMap.get("单位").toString());
+                                }
+                                if (subCondMap.containsKey("范围")) {
+                                    ageResult.setFactorItemRange((Integer) subCondMap.get("范围"));
+                                }
+                                retOptList.add(ageResult);
+                            } else if (type.equals(TypeEnum.vital.getName())) {
+                                ResultHighriskOperation vitalResult = new ResultHighriskOperation();
+                                BeanUtil.copyProperties(result, vitalResult);
+                                vitalResult.setFactorItemName(subCondMap.get("name").toString());
+                                vitalResult.setFactorItemType(TypeEnum.vital.getName());
+                                if (subCondMap.containsKey("最大值")) {
+                                    vitalResult.setFactorItemMaxValue((BigDecimal) subCondMap.get("最大值"));
+                                }
+                                if (subCondMap.containsKey("最小值")) {
+                                    vitalResult.setFactorItemMinValue((BigDecimal) subCondMap.get("最小值"));
+                                }
+                                if (subCondMap.containsKey("单位")) {
+                                    vitalResult.setFactorItemUnit((String) subCondMap.get("单位"));
+                                }
+                                if (subCondMap.containsKey("范围")) {
+                                    vitalResult.setFactorItemRange((Integer) subCondMap.get("范围"));
+                                }
+                                retOptList.add(vitalResult);
+                            } else if (type.equals(TypeEnum.disease.getName())) {
+                                ResultHighriskOperation diagResult = new ResultHighriskOperation();
+                                BeanUtil.copyProperties(result, diagResult);
+                                diagResult.setFactorItemType(TypeEnum.disease.getName());
+                                diagResult.setFactorItemName(subCondMap.get("name").toString());
+                                retOptList.add(diagResult);
+                            } else if (type.equals(TypeEnum.lis.getName())) {
+                                ResultHighriskOperation lisResult = new ResultHighriskOperation();
+                                BeanUtil.copyProperties(result, lisResult);
+                                lisResult.setFactorItemType(TypeEnum.lis.getName());
+                                lisResult.setFactorItemName(subCondMap.get("name").toString());
+                                if (subCondMap.containsKey("最大值")) {
+                                    lisResult.setFactorItemMaxValue((BigDecimal) subCondMap.get("最大值"));
+                                }
+                                if (subCondMap.containsKey("最小值")) {
+                                    lisResult.setFactorItemMinValue((BigDecimal) subCondMap.get("最小值"));
+                                }
+                                if (subCondMap.containsKey("单位")) {
+                                    lisResult.setFactorItemUnit((String) subCondMap.get("单位"));
+                                }
+                                if (subCondMap.containsKey("范围")) {
+                                    lisResult.setFactorItemRange((Integer) subCondMap.get("范围"));
+                                }
+                                if (subCondMap.containsKey("结果")) {
+                                    lisResult.setInputValue((String) subCondMap.get("结果"));
+                                }
+                                retOptList.add(lisResult);
+                            } else if (type.equals(TypeEnum.pacsDecs.getName())) {
+                                ResultHighriskOperation pacsDescResult = new ResultHighriskOperation();
+                                BeanUtil.copyProperties(result, pacsDescResult);
+                                pacsDescResult.setFactorItemType(TypeEnum.pacsDecs.getName());
+                                pacsDescResult.setInputValue(subCondMap.get("name").toString());
+                                retOptList.add(pacsDescResult);
+                            }
+                        } else {
+                            retOptList.add(result);
+                        }
+                    }
+                } else {
+                    for (YiBaoOperationName item : entry.getValue()) {
+                        ResultHighriskOperation result = new ResultHighriskOperation();
+                        result.setHighriskItemName(item.getName());
+                        result.setLevel(item.getOpgrade());
+                        //带条件高危手术
+                        if (item.getOpgrade().equals("2")) {
+                            String highriskcond = item.getHighriskcond();
+                            JSONObject jobj = JSONObject.parseObject(highriskcond);
+                            if (null != jobj) {
+                                // 判断年龄
+                                JSONObject ageobj = jobj.getJSONObject("年龄");
+                                if (ageobj != null) {
+                                    ResultHighriskOperation ageResult = new ResultHighriskOperation();
+                                    BeanUtil.copyProperties(result, ageResult);
+                                    ageResult.setFactorItemType(TypeEnum.age.getName());
+                                    ageResult.setFactorItemName("年龄");
+                                    if (ageobj.containsKey("最大值")) {
+                                        ageResult.setFactorItemMaxValue(ageobj.getBigDecimal("最大值"));
+                                    }
+                                    if (ageobj.containsKey("最小值")) {
+                                        ageResult.setFactorItemMinValue(ageobj.getBigDecimal("最小值"));
+                                    }
+                                    if (ageobj.containsKey("单位")) {
+                                        ageResult.setFactorItemUnit(ageobj.getString("单位"));
+                                    }
+                                    if (ageobj.containsKey("范围")) {
+                                        ageResult.setFactorItemRange(ageobj.getInteger("范围"));
+                                    }
+                                    retOptList.add(ageResult);
+                                }
+                                // 判断生命体征和查体
+                                JSONObject vitalObj = jobj.getJSONObject("生命体征及查体");
+                                if (null != vitalObj) {
+                                    for (Map.Entry<String, Object> subEntry : vitalObj.entrySet()) {
+                                        ResultHighriskOperation vitalResult = new ResultHighriskOperation();
+                                        BeanUtil.copyProperties(result, vitalResult);
+                                        vitalResult.setFactorItemName(subEntry.getKey());
+                                        vitalResult.setFactorItemType(TypeEnum.vital.getName());
+                                        if (ObjectUtils.isEmpty(subEntry.getValue())) {
+                                            retOptList.add(vitalResult);
+                                            continue;
+                                        }
+                                        JSONObject subVitalObj = (JSONObject) subEntry.getValue();
+                                        if (null != subVitalObj) {
+                                            if (subVitalObj.containsKey("最大值")) {
+                                                vitalResult.setFactorItemMaxValue(subVitalObj.getBigDecimal("最大值"));
+                                            }
+                                            if (subVitalObj.containsKey("最小值")) {
+                                                vitalResult.setFactorItemMinValue(subVitalObj.getBigDecimal("最小值"));
+                                            }
+                                            if (subVitalObj.containsKey("单位")) {
+                                                vitalResult.setFactorItemUnit(subVitalObj.getString("单位"));
+                                            }
+                                            if (subVitalObj.containsKey("范围")) {
+                                                vitalResult.setFactorItemRange(subVitalObj.getInteger("范围"));
+                                            }
+                                        }
+                                        retOptList.add(vitalResult);
+                                    }
+                                }
+
+                                // 判断合并疾病
+                                JSONObject diagobj = jobj.getJSONObject("合并疾病");
+                                if (null != diagobj) {
+                                    for (Map.Entry<String, Object> subEntry : diagobj.entrySet()) {
+                                        ResultHighriskOperation diagResult = new ResultHighriskOperation();
+                                        BeanUtil.copyProperties(result, diagResult);
+                                        diagResult.setFactorItemType(TypeEnum.disease.getName());
+                                        diagResult.setFactorItemName(subEntry.getKey());
+                                        retOptList.add(diagResult);
+                                    }
+                                }
+
+                                // 判断化验结果
+                                JSONObject lisobj = jobj.getJSONObject("化验结果");
+                                if (null != lisobj) {
+                                    for (Map.Entry<String, Object> subEntry : lisobj.entrySet()) {
+                                        ResultHighriskOperation lisResult = new ResultHighriskOperation();
+                                        BeanUtil.copyProperties(result, lisResult);
+                                        lisResult.setFactorItemType(TypeEnum.lis.getName());
+                                        lisResult.setFactorItemName(subEntry.getKey());
+                                        if (ObjectUtils.isEmpty(subEntry.getValue())) {
+                                            retOptList.add(lisResult);
+                                            continue;
+                                        }
+                                        JSONObject subLisObj = (JSONObject) subEntry.getValue();
+                                        if (null != subLisObj) {
+                                            if (subLisObj.containsKey("最大值")) {
+                                                lisResult.setFactorItemMaxValue(subLisObj.getBigDecimal("最大值"));
+                                            }
+                                            if (subLisObj.containsKey("最小值")) {
+                                                lisResult.setFactorItemMinValue(subLisObj.getBigDecimal("最小值"));
+                                            }
+                                            if (subLisObj.containsKey("单位")) {
+                                                lisResult.setFactorItemUnit(subLisObj.getString("单位"));
+                                            }
+                                            if (subLisObj.containsKey("范围")) {
+                                                lisResult.setFactorItemRange(subLisObj.getInteger("范围"));
+                                            }
+                                            if (subLisObj.containsKey("结果")) {
+                                                lisResult.setInputValue(subLisObj.getString("结果"));
+                                            }
+                                        }
+                                        retOptList.add(lisResult);
+                                    }
+                                }
+
+                                // 判断辅检结果,暂不处理
+                                JSONObject pacsObj = jobj.getJSONObject("辅检结果");
+                                // 判断辅检结果描述
+                                JSONObject pacsDescObj = jobj.getJSONObject("辅检结果描述");
+                                if (null != pacsDescObj) {
+                                    for (Map.Entry<String, Object> subEntry : pacsDescObj.entrySet()) {
+                                        ResultHighriskOperation pacsDescResult = new ResultHighriskOperation();
+                                        BeanUtil.copyProperties(result, pacsDescResult);
+                                        pacsDescResult.setFactorItemType(TypeEnum.pacsDecs.getName());
+                                        pacsDescResult.setFactorItemName("胸部CT");
+                                        pacsDescResult.setFactorItemHisName("胸部CT");
+                                        pacsDescResult.setInputValue(subEntry.getKey());
+                                        retOptList.add(pacsDescResult);
+                                    }
+                                }
+                            }
+
+                        } else {
+                            retOptList.add(result);
+                        }
+                    }
+                }
+            }
         }
 
+
         //转换高危手术记录
-        Integer condIndex = 0;
+        /*Integer condIndex = 0;
         for (YiBaoOperationName item : items) {
             //非高危手术
             if (StringUtil.isBlank(item.getOpgrade()) || item.getOpgrade().equals("0") || item.getOpgrade().equals("1")) {
@@ -763,7 +1021,7 @@ public class RuleConvertFacade {
                     pacsDescResult.setFactorItemType(TypeEnum.pacsDecs.getName());
                     pacsDescResult.setInputValue(subCondMap.get("name").toString());
                     retOptList.add(pacsDescResult);
-                }
+                }*/
                /* String highriskcond = item.getHighriskcond();
                 JSONObject jobj = JSONObject.parseObject(highriskcond);
                 if (null != jobj) {
@@ -881,10 +1139,10 @@ public class RuleConvertFacade {
                         }
                     }
                 }*/
-            } else {
+           /* } else {
                 retOptList.add(result);
             }
-        }
+        }*/
 
         //手术名称映射
         for (ResultHighriskOperation result : retOptList) {