|
|
@@ -108,7 +108,7 @@ public class FactorMatch {
|
|
|
boolean useFlag;
|
|
|
if(!Objects.isNull(ruleAttrMappingVo.getValue())) {
|
|
|
useFlag = attrEqual(ptlAgreementProductCostsAttrLink, ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue(),
|
|
|
- ruleAttrMappingVo.getAttrCode(), false, undwrtRulesAttrList, undwrtRulesDictList);
|
|
|
+ false, undwrtRulesDictList);
|
|
|
}else{
|
|
|
useFlag = false;
|
|
|
}
|
|
|
@@ -176,25 +176,6 @@ public class FactorMatch {
|
|
|
// 字典映射
|
|
|
// ============================================================
|
|
|
|
|
|
- /**
|
|
|
- * 把 attrMeta 的 dictLabal 构造成 name->code 反向索引,用于把传入的"家庭自用"还原成"04"。
|
|
|
- */
|
|
|
- /**
|
|
|
- * 按因子 attrCode 在 undwrtRulesAttrList 里找到对应的 dictId(该因子挂的是哪个字典)。
|
|
|
- * 找不到或无 dictId 时返回 null。
|
|
|
- */
|
|
|
- private static Integer getDictIdByAttrCode(String attrCode, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
|
|
|
- if (attrCode == null || CollUtil.isEmpty(undwrtRulesAttrList)) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- return undwrtRulesAttrList.stream()
|
|
|
- .filter(a -> attrCode.equals(a.getAttrCode()))
|
|
|
- .map(PtlAgreementUndwrtRulesAttr::getDictId)
|
|
|
- .filter(Objects::nonNull)
|
|
|
- .findFirst()
|
|
|
- .orElse(null);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 展示"检验的值":规则里存的是 code(如 04),翻成 name(如 家庭自用)方便对账。
|
|
|
* 支持多选逗号分隔,逐个翻译;翻译不到的保留原 code。
|
|
|
@@ -253,7 +234,7 @@ public class FactorMatch {
|
|
|
ptlAgreementCostRule.setOperator(ptlAgreementProductCostsAttrLink.getOperator());
|
|
|
ptlAgreementCostRule.setAttrCode(ptlAgreementProductCostsAttrLink.getAttrCode());
|
|
|
useFlag = attrEqual(ptlAgreementCostRule, ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue(),
|
|
|
- ruleAttrMappingVo.getAttrCode(), true, undwrtRulesAttrList, undwrtRulesDictList);
|
|
|
+ true, undwrtRulesDictList);
|
|
|
log.info("承保规则校验-单属性匹配: attrCode={}, attrType={}, 规则值(min={}, max={}, operator={}), 传入值={}, useFlag={}",
|
|
|
ptlAgreementProductCostsAttrLink.getAttrCode(), ptlAgreementUndwrtRulesAttr.getAttrType(),
|
|
|
ptlAgreementProductCostsAttrLink.getMin(), ptlAgreementProductCostsAttrLink.getMax(),
|
|
|
@@ -332,8 +313,8 @@ public class FactorMatch {
|
|
|
}
|
|
|
|
|
|
private static boolean attrEqual(PtlAgreementCostRule ptlAgreementCostRule,
|
|
|
- PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, String value, String attrCode, boolean isUnderwrite,
|
|
|
- List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList, List<PtlAgreementUndwrtRulesDictLabal> undwrtRulesDictList) {
|
|
|
+ PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, String value, boolean isUnderwrite,
|
|
|
+ List<PtlAgreementUndwrtRulesDictLabal> undwrtRulesDictList) {
|
|
|
|
|
|
if (ptlAgreementUndwrtRulesAttr == null || ptlAgreementUndwrtRulesAttr.getAttrType() == null) {
|
|
|
// 没有元数据:无法得知 attrType,按"包含"语义做纯文本兜底比较
|
|
|
@@ -346,9 +327,13 @@ public class FactorMatch {
|
|
|
return isUnderwrite ? !contains : contains;
|
|
|
}
|
|
|
|
|
|
+ // 字典还原依据:参与比较的这条因子元数据 ptlAgreementUndwrtRulesAttr 自身挂的 dictId,
|
|
|
+ // 再到 undwrtRulesDictList 中按 name 找 code(如 "家庭自用" -> "04")。
|
|
|
+ Integer dictId = ptlAgreementUndwrtRulesAttr.getDictId();
|
|
|
+
|
|
|
boolean result = false;
|
|
|
if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")) {
|
|
|
- result = checkBoxEqual(ptlAgreementCostRule, value, attrCode, undwrtRulesAttrList, undwrtRulesDictList);
|
|
|
+ result = checkBoxEqual(ptlAgreementCostRule, value, dictId, undwrtRulesDictList);
|
|
|
} else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("inputNumber")) {
|
|
|
result = inputNumberEqual(ptlAgreementCostRule, value);
|
|
|
} else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("input") || ptlAgreementUndwrtRulesAttr.getAttrType().equals("inputTag")) {
|
|
|
@@ -370,10 +355,10 @@ public class FactorMatch {
|
|
|
} else if (ptlAgreementUndwrtRulesAttr.getAttrCode().equals("LicenseArea")) {
|
|
|
result = inputTextEqual(ptlAgreementCostRule, value);
|
|
|
} else {
|
|
|
- result = selectEqual(ptlAgreementCostRule, value, attrCode, undwrtRulesAttrList, undwrtRulesDictList);
|
|
|
+ result = selectEqual(ptlAgreementCostRule, value, dictId, undwrtRulesDictList);
|
|
|
}
|
|
|
} else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio")) {
|
|
|
- result = radioEqual(ptlAgreementCostRule, value, attrCode, undwrtRulesAttrList, undwrtRulesDictList);
|
|
|
+ result = radioEqual(ptlAgreementCostRule, value, dictId, undwrtRulesDictList);
|
|
|
} else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("datetime")){ // 时间
|
|
|
result = dateTimeEqual(ptlAgreementCostRule, value);
|
|
|
} else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("date")){
|
|
|
@@ -388,27 +373,25 @@ public class FactorMatch {
|
|
|
}
|
|
|
|
|
|
|
|
|
- private static boolean checkBoxEqual(PtlAgreementCostRule ptlAgreementCostRule, String value, String attrCode,
|
|
|
- List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList, List<PtlAgreementUndwrtRulesDictLabal> undwrtRulesDictList) {
|
|
|
+ private static boolean checkBoxEqual(PtlAgreementCostRule ptlAgreementCostRule, String value, Integer dictId,
|
|
|
+ List<PtlAgreementUndwrtRulesDictLabal> undwrtRulesDictList) {
|
|
|
if (ptlAgreementCostRule.getMin() == null || value == null) {
|
|
|
return false;
|
|
|
}
|
|
|
- // attrCode 在 undwrtRulesAttrList 里的 dictId,再到 undwrtRulesDictList 中按 name 找 code。
|
|
|
- String codeValue = value;
|
|
|
- Integer dictId = getDictIdByAttrCode(attrCode, undwrtRulesAttrList);
|
|
|
- if (dictId != null && CollUtil.isNotEmpty(undwrtRulesDictList)) {
|
|
|
- for (PtlAgreementUndwrtRulesDictLabal label : undwrtRulesDictList) {
|
|
|
- if (Objects.equals(label.getDictId(), dictId) && value.equals(label.getName())) {
|
|
|
- codeValue = label.getCode();
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ // dictId 为空时(无字典):把 min 里的 code 翻成 name,再用实际 value(汉字)与 name 比较
|
|
|
String[] split = ptlAgreementCostRule.getMin().split(",");
|
|
|
for (String sp : split) {
|
|
|
- if (sp.trim().equals(value.trim()) || sp.trim().equals(codeValue.trim())) {
|
|
|
+ String spTrim = sp.trim();
|
|
|
+ if (spTrim.equals(value.trim())) {
|
|
|
return true;
|
|
|
}
|
|
|
+ if (dictId == null && CollUtil.isNotEmpty(undwrtRulesDictList)) {
|
|
|
+ for (PtlAgreementUndwrtRulesDictLabal label : undwrtRulesDictList) {
|
|
|
+ if (label.getCode().equals(spTrim) && value.trim().equals(label.getName())) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
@@ -476,40 +459,46 @@ public class FactorMatch {
|
|
|
return returnBool.get();
|
|
|
}
|
|
|
|
|
|
- private static boolean selectEqual(PtlAgreementCostRule ptlAgreementCostRule, String value, String attrCode,
|
|
|
- List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList, List<PtlAgreementUndwrtRulesDictLabal> undwrtRulesDictList) {
|
|
|
+ private static boolean selectEqual(PtlAgreementCostRule ptlAgreementCostRule, String value, Integer dictId,
|
|
|
+ List<PtlAgreementUndwrtRulesDictLabal> undwrtRulesDictList) {
|
|
|
if (ptlAgreementCostRule.getMin() == null || value == null) {
|
|
|
return false;
|
|
|
}
|
|
|
- // attrCode 在 undwrtRulesAttrList 里的 dictId,再到 undwrtRulesDictList 中按 name 找 code。
|
|
|
- String codeValue = value;
|
|
|
- Integer dictId = getDictIdByAttrCode(attrCode, undwrtRulesAttrList);
|
|
|
- if (dictId != null && CollUtil.isNotEmpty(undwrtRulesDictList)) {
|
|
|
- for (PtlAgreementUndwrtRulesDictLabal label : undwrtRulesDictList) {
|
|
|
- if (Objects.equals(label.getDictId(), dictId) && value.equals(label.getName())) {
|
|
|
- codeValue = label.getCode();
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ // dictId 为空时(无字典):把 min 里的 code 翻成 name,再用实际 value(汉字)与 name 比较
|
|
|
if (ptlAgreementCostRule.getOperator().equals("2")) {
|
|
|
String [] options = ptlAgreementCostRule.getMin().split(",");
|
|
|
for (String opt : options) {
|
|
|
- if (opt.trim().equals(value.trim()) || opt.trim().equals(codeValue.trim())) {
|
|
|
+ String optTrim = opt.trim();
|
|
|
+ if (optTrim.equals(value.trim())) {
|
|
|
return true;
|
|
|
}
|
|
|
+ if (dictId == null && CollUtil.isNotEmpty(undwrtRulesDictList)) {
|
|
|
+ for (PtlAgreementUndwrtRulesDictLabal label : undwrtRulesDictList) {
|
|
|
+ if (label.getCode().equals(optTrim) && value.trim().equals(label.getName())) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
return false;
|
|
|
- } else if (ptlAgreementCostRule.getMin() != null && (ptlAgreementCostRule.getMin().contains(value)
|
|
|
- || ptlAgreementCostRule.getMin().contains(codeValue))) {
|
|
|
- return true;
|
|
|
+ } else if (ptlAgreementCostRule.getMin() != null) {
|
|
|
+ if (ptlAgreementCostRule.getMin().contains(value)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ if (dictId == null && CollUtil.isNotEmpty(undwrtRulesDictList)) {
|
|
|
+ for (PtlAgreementUndwrtRulesDictLabal label : undwrtRulesDictList) {
|
|
|
+ if (label.getCode().equals(ptlAgreementCostRule.getMin()) && value.equals(label.getName())) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- private static boolean radioEqual(PtlAgreementCostRule ptlAgreementCostRule, String value, String attrCode,
|
|
|
- List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList, List<PtlAgreementUndwrtRulesDictLabal> undwrtRulesDictList) {
|
|
|
+ private static boolean radioEqual(PtlAgreementCostRule ptlAgreementCostRule, String value, Integer dictId,
|
|
|
+ List<PtlAgreementUndwrtRulesDictLabal> undwrtRulesDictList) {
|
|
|
//新能源判断
|
|
|
if ("NewEnergyMark".equals(ptlAgreementCostRule.getAttrCode())) {
|
|
|
// 是否是新能源车
|
|
|
@@ -520,20 +509,17 @@ public class FactorMatch {
|
|
|
return true;
|
|
|
}
|
|
|
} else {
|
|
|
- // attrCode 在 undwrtRulesAttrList 里的 dictId,再到 undwrtRulesDictList 中按 name 找 code。
|
|
|
- String codeValue = value;
|
|
|
- Integer dictId = getDictIdByAttrCode(attrCode, undwrtRulesAttrList);
|
|
|
- if (dictId != null && CollUtil.isNotEmpty(undwrtRulesDictList)) {
|
|
|
+ // dictId 为空时(无字典):把 min 里的 code 翻成 name,再用实际 value(汉字)与 name 比较
|
|
|
+ if (ptlAgreementCostRule.getMin().contains(value)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ if (dictId == null && CollUtil.isNotEmpty(undwrtRulesDictList)) {
|
|
|
for (PtlAgreementUndwrtRulesDictLabal label : undwrtRulesDictList) {
|
|
|
- if (Objects.equals(label.getDictId(), dictId) && value.equals(label.getName())) {
|
|
|
- codeValue = label.getCode();
|
|
|
- break;
|
|
|
+ if (label.getCode().equals(ptlAgreementCostRule.getMin()) && value.equals(label.getName())) {
|
|
|
+ return true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- if (ptlAgreementCostRule.getMin().contains(value) || ptlAgreementCostRule.getMin().contains(codeValue)) {
|
|
|
- return true;
|
|
|
- }
|
|
|
}
|
|
|
return false;
|
|
|
}
|