|
|
@@ -35,8 +35,38 @@ public class FactorMatch {
|
|
|
*/
|
|
|
public static boolean judgements(List<PtlAgreementCostRule> ptlAgreementCostRuleList, List<RuleAttrMappingVo> ruleAttrMappingVoList,
|
|
|
List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList, StringBuilder logs, List<PtlAgreementUndwrtRulesDictLabal> undwrtRulesDictList) {
|
|
|
- boolean useFlag = true;
|
|
|
- for (PtlAgreementCostRule ptlAgreementProductCostsAttrLink : ptlAgreementCostRuleList) {
|
|
|
+ if (ptlAgreementCostRuleList == null || ptlAgreementCostRuleList.isEmpty()) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ // 按batch分组:不同batch之间为OR关系,同batch内为AND关系
|
|
|
+ Map<String, List<PtlAgreementCostRule>> batchMap = ptlAgreementCostRuleList.stream()
|
|
|
+ .collect(Collectors.groupingBy(rule -> rule.getBatch() != null ? rule.getBatch() : "default",
|
|
|
+ LinkedHashMap::new, Collectors.toList()));
|
|
|
+
|
|
|
+ StringBuilder errorLogs = new StringBuilder();
|
|
|
+ for (Map.Entry<String, List<PtlAgreementCostRule>> entry : batchMap.entrySet()) {
|
|
|
+ List<PtlAgreementCostRule> batchRules = entry.getValue();
|
|
|
+ StringBuilder batchLogs = new StringBuilder();
|
|
|
+ boolean batchMatched = doJudgementsMatch(batchRules, ruleAttrMappingVoList, undwrtRulesAttrList,
|
|
|
+ batchLogs, undwrtRulesDictList);
|
|
|
+ if (batchMatched) {
|
|
|
+ // OR关系:只要任一个batch匹配即通过
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ errorLogs.append(batchLogs);
|
|
|
+ }
|
|
|
+ // 所有batch都未匹配,输出错误日志
|
|
|
+ logs.append(errorLogs);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断一个batch内的规则是否全部匹配(AND关系)
|
|
|
+ */
|
|
|
+ private static boolean doJudgementsMatch(List<PtlAgreementCostRule> batchRules, List<RuleAttrMappingVo> ruleAttrMappingVoList,
|
|
|
+ List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList, StringBuilder logs,
|
|
|
+ List<PtlAgreementUndwrtRulesDictLabal> undwrtRulesDictList) {
|
|
|
+ for (PtlAgreementCostRule ptlAgreementProductCostsAttrLink : batchRules) {
|
|
|
//查找规则中的 传值属性
|
|
|
RuleAttrMappingVo ruleAttrMappingVo = ruleAttrMappingVoList.stream()
|
|
|
.filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
|
|
|
@@ -59,8 +89,9 @@ public class FactorMatch {
|
|
|
.findFirst()
|
|
|
.get();
|
|
|
|
|
|
+ boolean useFlag;
|
|
|
if(!Objects.isNull(ruleAttrMappingVo.getValue())) {
|
|
|
- useFlag = attrEqual(ptlAgreementProductCostsAttrLink, ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue(),false);
|
|
|
+ useFlag = attrEqual(ptlAgreementProductCostsAttrLink, ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue(), false);
|
|
|
}else{
|
|
|
useFlag = false;
|
|
|
}
|
|
|
@@ -97,14 +128,13 @@ public class FactorMatch {
|
|
|
logs.append("传入的值:" + (StrUtil.isNotBlank(val) ? val : ruleAttrMappingVo.getValue()) + "\n");
|
|
|
|
|
|
if (CollUtil.isNotEmpty(collect)) {
|
|
|
-// logs.append("<span style=\"color:red;\">规则匹配失败:" + collect.get(0).getAttrName() + "</span>\n");
|
|
|
logs.append("规则匹配失败:" + collect.get(0).getAttrName() + "\n");
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
- return useFlag;
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -119,8 +149,8 @@ public class FactorMatch {
|
|
|
.orElse(null);
|
|
|
//如果查找不到 传值属性 直接费用对比失败
|
|
|
if (ruleAttrMappingVo == null) {
|
|
|
- log.info("传入的值找不到该属性:" + ptlAgreementProductCostsAttrLink.getAttrCode());
|
|
|
- log.info("规则匹配失败:" + ptlAgreementProductCostsAttrLink.getAttrCode());
|
|
|
+ log.info("承保规则校验-属性未找到: attrCode={}", ptlAgreementProductCostsAttrLink.getAttrCode());
|
|
|
+ log.info("承保规则校验-规则匹配失败: attrCode={}", ptlAgreementProductCostsAttrLink.getAttrCode());
|
|
|
|
|
|
List<PtlAgreementUndwrtRulesAttr> collect = undwrtRulesAttrList.stream()
|
|
|
.filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
|
|
|
@@ -144,14 +174,20 @@ public class FactorMatch {
|
|
|
ptlAgreementCostRule.setOperator(ptlAgreementProductCostsAttrLink.getOperator());
|
|
|
ptlAgreementCostRule.setAttrCode(ptlAgreementProductCostsAttrLink.getAttrCode());
|
|
|
useFlag = attrEqual(ptlAgreementCostRule, ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue(), true);
|
|
|
+ log.info("承保规则校验-单属性匹配: attrCode={}, attrType={}, 规则值(min={}, max={}, operator={}), 传入值={}, useFlag={}",
|
|
|
+ ptlAgreementProductCostsAttrLink.getAttrCode(), ptlAgreementUndwrtRulesAttr.getAttrType(),
|
|
|
+ ptlAgreementProductCostsAttrLink.getMin(), ptlAgreementProductCostsAttrLink.getMax(),
|
|
|
+ ptlAgreementProductCostsAttrLink.getOperator(), ruleAttrMappingVo.getValue(), useFlag);
|
|
|
}else{
|
|
|
useFlag = false;
|
|
|
+ log.info("承保规则校验-传入值为null: attrCode={}, useFlag=false", ptlAgreementProductCostsAttrLink.getAttrCode());
|
|
|
}
|
|
|
|
|
|
- if (!useFlag) {
|
|
|
- log.info("检验的值:" + ptlAgreementProductCostsAttrLink.getMin());
|
|
|
- log.info("传入的值:" + ruleAttrMappingVo.getValue());
|
|
|
- log.info("规则匹配失败:" + ptlAgreementProductCostsAttrLink.getAttrCode());
|
|
|
+ if (useFlag) {
|
|
|
+ log.info("承保规则校验-条件命中! attrCode={}, 传入值={}, 规则min={}, max={}, operator={}",
|
|
|
+ ptlAgreementProductCostsAttrLink.getAttrCode(), ruleAttrMappingVo.getValue(),
|
|
|
+ ptlAgreementProductCostsAttrLink.getMin(), ptlAgreementProductCostsAttrLink.getMax(),
|
|
|
+ ptlAgreementProductCostsAttrLink.getOperator());
|
|
|
|
|
|
List<PtlAgreementUndwrtRulesAttr> collect = undwrtRulesAttrList.stream()
|
|
|
.filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
|
|
|
@@ -173,10 +209,10 @@ public class FactorMatch {
|
|
|
}
|
|
|
if (ptlAgreementProductCostsAttrLink.getMin() != null) {
|
|
|
String min = codeToNameMap.getOrDefault(ptlAgreementProductCostsAttrLink.getMin(), StrUtil.EMPTY);
|
|
|
- logs.append("检验的值4:" + (StrUtil.isNotBlank(min) ? min : ptlAgreementProductCostsAttrLink.getMin()) + "\n");
|
|
|
+ logs.append("检验的值:" + (StrUtil.isNotBlank(min) ? min : ptlAgreementProductCostsAttrLink.getMin()) + "\n");
|
|
|
} else {
|
|
|
String max = codeToNameMap.getOrDefault(ptlAgreementProductCostsAttrLink.getMax(), StrUtil.EMPTY);
|
|
|
- logs.append("检验的值5:" + (StrUtil.isNotBlank(max) ? max : ptlAgreementProductCostsAttrLink.getMax()) + "\n");
|
|
|
+ logs.append("检验的值:" + (StrUtil.isNotBlank(max) ? max : ptlAgreementProductCostsAttrLink.getMax()) + "\n");
|
|
|
}
|
|
|
|
|
|
String val = codeToNameMap.getOrDefault(ruleAttrMappingVo.getValue(), StrUtil.EMPTY);
|
|
|
@@ -189,6 +225,7 @@ public class FactorMatch {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
+ log.info("承保规则校验-所有条件均未命中, 规则组通过, useFlag={}", useFlag);
|
|
|
return useFlag;
|
|
|
}
|
|
|
|