zhao_gqing 4 днів тому
батько
коміт
0267b9a40c

+ 15 - 8
src/main/java/com/sundata/internalevaluation/calc/calcUnit/RuleCalcUnit.java

@@ -18,6 +18,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Created by IntelliJ IDEA.
@@ -83,8 +84,9 @@ public class RuleCalcUnit extends CalcUnit {
     @Override
     public List<CalcUnit> getSourceCalcUnits() {
         List<IndexConfigModel> indexConfigModels = indexConfigService.selectIndexListByRuleNo(this.reqRule.getRuleNo());
-        return indexConfigModels.stream()
+        List<CalcUnit> collect =indexConfigModels.stream()
                 .map(item -> new IndexCalcUnit(item.getIndexNo(), item.getIndexName(), Map.of(), item)).collect(Collectors.toList());
+        return collect;
     }
 
     /**
@@ -129,10 +131,12 @@ public class RuleCalcUnit extends CalcUnit {
         // 所有规则计算的结果
         Map<String, Object> indexResMap = new HashMap<>();
 
+        AtomicReference<Object> indexResult = new AtomicReference<>("");
         sourceResults.forEach((calcUnit, calcResult) -> {
             String key = indexParamMap.get(calcUnit.getCalcCode());
             Object value = calcResult.get(calcUnit.getCalcCode());
             indexResMap.put(key, value);
+            indexResult.set(value);
         });
 
         // 规则的模板
@@ -144,15 +148,18 @@ public class RuleCalcUnit extends CalcUnit {
         // 执行脚本结果
         Object res = ScriptUtil.executeScript("script-rule-" + getCalcCode(), script, indexResMap);
 
-
         Map<String, Object> resMap = new HashMap<>();
 
-        resMap.put("scriptRes",res);
-        resMap.put("ruleNo", getCalcCode());
-        resMap.put("indexRes", indexResMap);
-        resMap.put("resultType", reqRule.getRuleResult());
-        resMap.put("ruleDesc",reqRule.getTemplateDesc());
-        resMap.put("ruleResult",TemplateUtil.execute("template-ruleConclusion-" + getCalcCode(),reqRule.getRuleConclusionTemplate(), indexResMap));
+        resMap.put("resCalc",res);//计算结果 true false
+        resMap.put("ruleNo", getCalcCode());//规则编号
+        resMap.put("indexRes", indexResMap);//指标结果
+        resMap.put("resultType", reqRule.getRuleResult());//规则的结果 0=无 1=拦截 2=预警
+        //resMap.put("ruleDesc",reqRule.getTemplateDesc());//规则描述
+        resMap.put("datasource",reqRule.getRuleDatasour());
+        //规则结论
+        Map<String,Object> tempMap=new HashMap<>()(resMap);
+        tempMap.putAll(indexResMap);
+        resMap.put("ruleResult",TemplateUtil.execute("template-ruleConclusion-" + getCalcCode(),reqRule.getRuleConclusionTemplate(), tempMap));
 
         // 放计算结果
         thisResult.put(this.getCalcCode(), resMap);

+ 17 - 8
src/main/java/com/sundata/internalevaluation/calc/calcUnit/RulesCalcUnit.java

@@ -156,21 +156,30 @@ public class RulesCalcUnit extends CalcUnit {
 
         List<Map<String, Object>> hitRule = list.stream().filter(map -> {
                     boolean isTrigger = false;
-                    Object o = map.get("scriptRes");
+                    Object o = map.get("resCalc");
                     if (o instanceof Boolean) {
                         isTrigger = (Boolean) o;
                     } else {
-                        isTrigger = "true".equals(map.get("scriptRes"));
+                        isTrigger = "true".equals(map.get("resCalc"));
                     }
-                    boolean intercept = "1".equals(map.get("resultType"));
-                    boolean warn = "2".equals(map.get("resultType"));
-                    if (intercept) {
-                        isIntercept.set(true);
+
+                    if(!isTrigger){
+                        return false;
                     }
-                    if (warn) {
+
+                    //触发了
+
+                    Object resultType=map.get("resultType");
+
+                    //规则结果为 无 的情况
+                    if("0".equals(resultType)){
+                        return false;
+                    }else if ("1".equals(resultType)){
+                        isIntercept.set(true);
+                    }else if ("2".equals(resultType)){
                         isWarn.set(true);
                     }
-                    return isTrigger && (intercept || warn);
+                    return true;
                 }
         ).collect(Collectors.toList());