Pārlūkot izejas kodu

处理的费用匹配评分属性失效的问题

lixiaolong 2 nedēļas atpakaļ
vecāks
revīzija
2abe73f572

+ 55 - 69
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/FactorMatch.java

@@ -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;
     }