|
|
@@ -111,7 +111,7 @@ public class FactorMatch {
|
|
|
boolean useFlag;
|
|
|
if(!Objects.isNull(ruleAttrMappingVo.getValue())) {
|
|
|
// useFlag = attrEqual(ptlAgreementProductCostsAttrLink, ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue(), false);
|
|
|
- useFlag = attrEqual(ptlAgreementProductCostsAttrLink, ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue(), false, nameToCodeMap);
|
|
|
+ useFlag = attrEqual(ptlAgreementProductCostsAttrLink, ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue(), false);
|
|
|
}else{
|
|
|
useFlag = false;
|
|
|
}
|
|
|
@@ -220,12 +220,6 @@ public class FactorMatch {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- PtlAgreementUndwrtRulesAttr attrMeta = undwrtRulesAttrList.stream()
|
|
|
- .filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
|
|
|
- .findFirst().orElse(null);
|
|
|
-
|
|
|
- Map<String, String> nameToCodeMap = buildNameToCodeMap(attrMeta, undwrtRulesDictList);
|
|
|
-
|
|
|
|
|
|
//查找 费用因子规则
|
|
|
PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream()
|
|
|
@@ -239,7 +233,7 @@ public class FactorMatch {
|
|
|
ptlAgreementCostRule.setMax(ptlAgreementProductCostsAttrLink.getMax());
|
|
|
ptlAgreementCostRule.setOperator(ptlAgreementProductCostsAttrLink.getOperator());
|
|
|
ptlAgreementCostRule.setAttrCode(ptlAgreementProductCostsAttrLink.getAttrCode());
|
|
|
- useFlag = attrEqual(ptlAgreementCostRule, ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue(), true, nameToCodeMap);
|
|
|
+ useFlag = attrEqual(ptlAgreementCostRule, ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue(), true);
|
|
|
log.info("承保规则校验-单属性匹配: attrCode={}, attrType={}, 规则值(min={}, max={}, operator={}), 传入值={}, useFlag={}",
|
|
|
ptlAgreementProductCostsAttrLink.getAttrCode(), ptlAgreementUndwrtRulesAttr.getAttrType(),
|
|
|
ptlAgreementProductCostsAttrLink.getMin(), ptlAgreementProductCostsAttrLink.getMax(),
|
|
|
@@ -262,35 +256,14 @@ public class FactorMatch {
|
|
|
List<PtlAgreementUndwrtRulesAttr> collect = undwrtRulesAttrList.stream()
|
|
|
.filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
|
|
|
.toList();
|
|
|
-
|
|
|
+ Integer dictId = collect.get(0).getDictId();
|
|
|
Map<String, String> codeToNameMap = new HashMap<>();
|
|
|
if (CollUtil.isNotEmpty(undwrtRulesDictList)) {
|
|
|
- String minStr = ptlAgreementProductCostsAttrLink.getMin();
|
|
|
- String maxStr = ptlAgreementProductCostsAttrLink.getMax();
|
|
|
- Set<String> ruleCodes = new HashSet<>();
|
|
|
- if (minStr != null) {
|
|
|
- for (String s : minStr.split(",")) {
|
|
|
- if (!s.trim().isEmpty()) ruleCodes.add(s.trim());
|
|
|
- }
|
|
|
- }
|
|
|
- if (maxStr != null) {
|
|
|
- for (String s : maxStr.split(",")) {
|
|
|
- if (!s.trim().isEmpty()) ruleCodes.add(s.trim());
|
|
|
- }
|
|
|
- }
|
|
|
for (PtlAgreementUndwrtRulesDictLabal label : undwrtRulesDictList) {
|
|
|
- if (ruleCodes.contains(label.getCode())) {
|
|
|
+ if (Objects.equals(label.getDictId(), dictId)) {
|
|
|
codeToNameMap.put(label.getCode(), label.getName());
|
|
|
}
|
|
|
}
|
|
|
- if (codeToNameMap.isEmpty() && ptlAgreementUndwrtRulesAttr != null && ptlAgreementUndwrtRulesAttr.getDictId() != null) {
|
|
|
- Integer dictId = ptlAgreementUndwrtRulesAttr.getDictId();
|
|
|
- for (PtlAgreementUndwrtRulesDictLabal label : undwrtRulesDictList) {
|
|
|
- if (Objects.equals(label.getDictId(), dictId)) {
|
|
|
- codeToNameMap.put(label.getCode(), label.getName());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
if (ptlAgreementProductCostsAttrLink.getMin() != null) {
|
|
|
String min = codeToNameMap.getOrDefault(ptlAgreementProductCostsAttrLink.getMin(), StrUtil.EMPTY);
|
|
|
@@ -307,40 +280,23 @@ public class FactorMatch {
|
|
|
if (CollUtil.isNotEmpty(collect)) {
|
|
|
logs.append("<span style=\"color:red;\">规则匹配失败:" + collect.get(0).getAttrName() + "</span>\n");
|
|
|
}
|
|
|
+ //如果有一个匹配上就返回
|
|
|
+ return true;
|
|
|
}
|
|
|
}
|
|
|
log.info("承保规则校验-所有条件均未命中, 规则组通过, useFlag={}", useFlag);
|
|
|
return groupUseFlag;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 把传入的 value 标准化成"与规则同一形态":
|
|
|
- * - 如果 value 是字典名称,先翻成 code
|
|
|
- * - 如果 value 是 code,保持原样
|
|
|
- * - 如果是"是/否"类,做归一化
|
|
|
- */
|
|
|
- private static String normalizeValue(String value, PtlAgreementUndwrtRulesAttr attrMeta,
|
|
|
- Map<String, String> nameToCodeMap) {
|
|
|
- if (value == null) return null;
|
|
|
- String v = value.trim();
|
|
|
- if (CollUtil.isNotEmpty(nameToCodeMap) && nameToCodeMap.containsKey(v)) {
|
|
|
- return nameToCodeMap.get(v);
|
|
|
- }
|
|
|
- return v;
|
|
|
- }
|
|
|
-
|
|
|
private static boolean attrEqual(PtlAgreementCostRule ptlAgreementCostRule,
|
|
|
- PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, String value,boolean isUnderwrite,
|
|
|
- Map<String, String> nameToCodeMap) {
|
|
|
-
|
|
|
- String normalizedValue = normalizeValue(value, ptlAgreementUndwrtRulesAttr, nameToCodeMap);
|
|
|
+ PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, String value,boolean isUnderwrite) {
|
|
|
|
|
|
if (ptlAgreementUndwrtRulesAttr == null || ptlAgreementUndwrtRulesAttr.getAttrType() == null) {
|
|
|
// 没有元数据:无法得知 attrType,按"包含"语义做纯文本兜底比较
|
|
|
// (BrandandModel 等 inputTag 大多是 contains 语义,与原逻辑 inputTextEqual 默认分支一致)
|
|
|
log.warn("attrEqual 因子元数据缺失,按纯文本兜底比较, attrCode={}", ptlAgreementCostRule.getAttrCode());
|
|
|
- if (ptlAgreementCostRule.getMin() == null || normalizedValue == null) return false;
|
|
|
- String finalNormalizedValue = normalizedValue;
|
|
|
+ if (ptlAgreementCostRule.getMin() == null || value == null) return false;
|
|
|
+ String finalNormalizedValue = value;
|
|
|
boolean contains = Arrays.stream(ptlAgreementCostRule.getMin().split(","))
|
|
|
.anyMatch(o -> finalNormalizedValue.contains(o.trim()));
|
|
|
return isUnderwrite ? !contains : contains;
|
|
|
@@ -348,32 +304,32 @@ public class FactorMatch {
|
|
|
|
|
|
boolean result = false;
|
|
|
if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")) {
|
|
|
- result = checkBoxEqual(ptlAgreementCostRule, normalizedValue);
|
|
|
+ result = checkBoxEqual(ptlAgreementCostRule, value);
|
|
|
} else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("inputNumber")) {
|
|
|
- result = inputNumberEqual(ptlAgreementCostRule, normalizedValue);
|
|
|
+ result = inputNumberEqual(ptlAgreementCostRule, value);
|
|
|
} else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("input") || ptlAgreementUndwrtRulesAttr.getAttrType().equals("inputTag")) {
|
|
|
//截取身份证号码
|
|
|
if (ptlAgreementCostRule.getAttrCode().equals("CarOwnersIDNumber") || ptlAgreementCostRule.getAttrCode().equals("ApplicantIDNumber") ||
|
|
|
ptlAgreementCostRule.getAttrCode().equals("InsuredIDNumber")) {
|
|
|
- normalizedValue = normalizedValue.substring(0, ptlAgreementCostRule.getMin().length());
|
|
|
+ value = value.substring(0, ptlAgreementCostRule.getMin().length());
|
|
|
}
|
|
|
- result = inputTextEqual(ptlAgreementCostRule, normalizedValue);
|
|
|
+ result = inputTextEqual(ptlAgreementCostRule, value);
|
|
|
} else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("select")) {
|
|
|
//截取车牌
|
|
|
if (ptlAgreementUndwrtRulesAttr.getAttrCode().equals("LicenseNo")) {
|
|
|
- normalizedValue = normalizedValue.substring(0, 2);
|
|
|
+ value = value.substring(0, 4);
|
|
|
}
|
|
|
- result = selectEqual(ptlAgreementCostRule, normalizedValue);
|
|
|
+ result = selectEqual(ptlAgreementCostRule, value);
|
|
|
//车龄
|
|
|
if (ptlAgreementUndwrtRulesAttr.getAttrCode().equals("VehicleAge")) {
|
|
|
- result = inputNumberEqual(ptlAgreementCostRule, normalizedValue);
|
|
|
+ result = inputNumberEqual(ptlAgreementCostRule, value);
|
|
|
}
|
|
|
} else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio")) {
|
|
|
- result = radioEqual(ptlAgreementCostRule, normalizedValue);
|
|
|
+ result = radioEqual(ptlAgreementCostRule, value);
|
|
|
} else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("datetime")){ // 时间
|
|
|
- result = dateTimeEqual(ptlAgreementCostRule, normalizedValue);
|
|
|
+ result = dateTimeEqual(ptlAgreementCostRule, value);
|
|
|
} else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("date")){
|
|
|
- result = dateEqual(ptlAgreementCostRule, normalizedValue);
|
|
|
+ result = dateEqual(ptlAgreementCostRule, value);
|
|
|
}
|
|
|
// 判断是否是承保规则
|
|
|
if(isUnderwrite){
|