|
@@ -10,8 +10,10 @@ import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
@@ -139,47 +141,53 @@ public class RulesCalcUnit extends CalcUnit {
|
|
|
Map<String, Object> context,
|
|
|
Map<CalcUnit, CalcResult<String, Object>> sourceResults) {
|
|
|
|
|
|
- log.debug("计算{}:编号:{},名称:{},流水号:{}", getCalcType().getName(),getCalcCode(),getCalcName(),calculateInstanceNumber);
|
|
|
-
|
|
|
- // 规则结果为 true 的规则
|
|
|
- List<Map.Entry<CalcUnit, CalcResult<String, Object>>> resIsTrue = sourceResults.entrySet().stream()
|
|
|
- .filter(entry -> entry.getValue().get(entry.getKey().getCalcCode()).equals(true))
|
|
|
- .collect(Collectors.toList());
|
|
|
-
|
|
|
- //
|
|
|
- Map<String, List<SysReqRule>> ruleListMap = resIsTrue.stream()
|
|
|
- .collect(Collectors.groupingBy(e1 -> {
|
|
|
- SysReqRule o = (SysReqRule) e1.getValue().get("entity");
|
|
|
- return o.getRuleResult();
|
|
|
- }, Collectors.mapping(e ->
|
|
|
- (SysReqRule) e.getValue().get("entity"), Collectors.toList()
|
|
|
- )));
|
|
|
-
|
|
|
-
|
|
|
- List<SysReqRule> interceptRuleList = ruleListMap.get("intercept");
|
|
|
- List<SysReqRule> warnRuleList = ruleListMap.get("warn");
|
|
|
-
|
|
|
- if (interceptRuleList != null && !interceptRuleList.isEmpty()) {
|
|
|
- // 存在拦截的规则
|
|
|
- // TODO 拦截处理
|
|
|
- List<String> resList = interceptRuleList.stream().map(rule -> String.format("【%s】%s 触发 %s", rule.getRuleNo(), rule.getRuleName(), "拦截")).collect(Collectors.toList());
|
|
|
- thisResult.put(getCalcCode(),resList);
|
|
|
- return;
|
|
|
+ log.debug("计算{}:编号:{},名称:{},流水号:{}", getCalcType().getName(), getCalcCode(), getCalcName(), calculateInstanceNumber);
|
|
|
+
|
|
|
+ AtomicBoolean isIntercept = new AtomicBoolean(false);
|
|
|
+ AtomicBoolean isWarn = new AtomicBoolean(false);
|
|
|
+
|
|
|
+
|
|
|
+ List<Map<String, Object>> list = new ArrayList<>();
|
|
|
+
|
|
|
+
|
|
|
+ sourceResults.forEach((calcUnit, calcResult) -> {
|
|
|
+ list.add((Map) calcResult.get(calcUnit.getCalcCode()));
|
|
|
+ });
|
|
|
+
|
|
|
+ List<Map<String, Object>> hitRule = list.stream().filter(map -> {
|
|
|
+ boolean isTrigger = false;
|
|
|
+ Object o = map.get("scriptRes");
|
|
|
+ if (o instanceof Boolean) {
|
|
|
+ isTrigger = (Boolean) o;
|
|
|
+ } else {
|
|
|
+ isTrigger = "true".equals(map.get("scriptRes"));
|
|
|
+ }
|
|
|
+ boolean intercept = "1".equals(map.get("resultType"));
|
|
|
+ boolean warn = "2".equals(map.get("resultType"));
|
|
|
+ if (intercept) {
|
|
|
+ isIntercept.set(true);
|
|
|
+ }
|
|
|
+ if (warn) {
|
|
|
+ isWarn.set(true);
|
|
|
+ }
|
|
|
+ return isTrigger && (intercept || warn);
|
|
|
+ }
|
|
|
+ ).collect(Collectors.toList());
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, Object> resMap = new HashMap<>();
|
|
|
+ resMap.put("hitRule", hitRule);
|
|
|
+ if (isIntercept.get()) {
|
|
|
+ // 表示拒绝
|
|
|
+ resMap.put("approResult", "2");
|
|
|
+ } else {
|
|
|
+ // 表示通过
|
|
|
+ resMap.put("approResult", "1");
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
- if (warnRuleList != null && !warnRuleList.isEmpty()) {
|
|
|
- // 存在预警的规则
|
|
|
- // TODO 预警处理
|
|
|
- List<String> resList = warnRuleList.stream().map(rule -> String.format("【%s】%s 触发 %s", rule.getRuleNo(), rule.getRuleName(), "预警")).collect(Collectors.toList());
|
|
|
- thisResult.put(getCalcCode(),resList);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- // 无拦截和预警
|
|
|
- thisResult.put(this.getCalcCode(), "无拦截");
|
|
|
-
|
|
|
+ // TODO 获取规则集结论
|
|
|
+ String rulesConclusionTemplate = reqRules.getRulesConclusionTemplate();
|
|
|
+ resMap.put("approResultMsg", "【TODO...】" + rulesConclusionTemplate);
|
|
|
+ thisResult.put(getCalcCode(), resMap);
|
|
|
}
|
|
|
}
|