Przeglądaj źródła

fix 承保规则中兼容旧数据,如旧数据中存的车牌是文字再改为code

liub 2 tygodni temu
rodzic
commit
f97c9cdfc7

+ 17 - 0
tenant/organization/src/main/java/com/jzg/organization/service/PtlAreaLicenseService.java

@@ -54,4 +54,21 @@ public interface PtlAreaLicenseService extends IService<PtlAreaLicense> {
      */
     String convertAreaNumber2License(String areaNumbers);
 
+    /**
+     * 将车牌号转换为对应的地区编码
+     *
+     * @param licenseMap 车牌号和地区编码的对应集
+     * @param licenses   车牌号,支持多个拼接,例如晋A,晋B,晋C
+     * @return String 地区编码,例如1401,1402,1403
+     */
+    String convertLicense2AreaNumber(Map<String, PtlAreaLicense> licenseMap, String licenses);
+
+    /**
+     * 将车牌号转换为对应的地区编码
+     *
+     * @param licenses 车牌号,支持多个拼接,例如晋A,晋B,晋C
+     * @return String 地区编码,例如1401,1402,1403
+     */
+    String convertLicense2AreaNumber(String licenses);
+
 }

+ 36 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementUndwrtRulesServiceImpl.java

@@ -521,9 +521,45 @@ public class PtlAgreementUndwrtRulesServiceImpl extends ServiceImpl<PtlAgreement
         if (ruleIds.size() == 1) {
             rulesVo.setCostsAttrLinks(groups.get(0).getCostsAttrLinks());
         }
+        // 返回前:LicenseNo/LicenseArea 属性中的车牌号转换为地区编码
+        convertLicense2AreaNumber(groups);
         return rulesVo;
     }
 
+    /**
+     * 将规则属性中 LicenseNo/LicenseArea 的车牌号(如晋A,晋B)转换为地区编码(如1401,1402)
+     * 匹配不到的车牌前缀原样保留
+     *
+     * @param groups 规则属性分组
+     */
+    private void convertLicense2AreaNumber(List<RulesGroupParam> groups) {
+        if (CollUtil.isEmpty(groups)) {
+            return;
+        }
+        groups.forEach(group -> {
+            if (CollUtil.isNotEmpty(group.getRulesAttrList())) {
+                group.getRulesAttrList().forEach(link -> {
+                    if (("LicenseNo".equals(link.getAttrCode()) || "LicenseArea".equals(link.getAttrCode()))
+                            && StrUtil.isNotEmpty(link.getMin())) {
+                        String areaNumbers = ptlAreaLicenseService.convertLicense2AreaNumber(link.getMin());
+                        link.setMin(areaNumbers);
+                        link.setMinArray(areaNumbers.split(","));
+                    }
+                });
+            }
+            if (CollUtil.isNotEmpty(group.getCostsAttrLinks())) {
+                group.getCostsAttrLinks().forEach(attr -> {
+                    if (("LicenseNo".equals(attr.getAttrCode()) || "LicenseArea".equals(attr.getAttrCode()))
+                            && StrUtil.isNotEmpty(attr.getMin())) {
+                        String areaNumbers = ptlAreaLicenseService.convertLicense2AreaNumber(attr.getMin());
+                        attr.setMin(areaNumbers);
+                        attr.setMinArray(areaNumbers.split(","));
+                    }
+                });
+            }
+        });
+    }
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)

+ 46 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAreaLicenseServiceImpl.java

@@ -111,4 +111,50 @@ public class PtlAreaLicenseServiceImpl extends ServiceImpl<PtlAreaLicenseMapper,
         Map<String, PtlAreaLicense> areaLicenseMap = this.queryAllAreaLicenseMap();
         return this.convertAreaNumber2License(areaLicenseMap, areaNumbers);
     }
+
+    /**
+     * 将车牌号转换为对应的地区编码
+     *
+     * @param licenseMap 车牌号和地区编码的对应集
+     * @param licenses   车牌号,支持多个拼接,例如晋A,晋B,晋C
+     * @return String 地区编码,例如1401,1402,1403
+     */
+    @Override
+    public String convertLicense2AreaNumber(Map<String, PtlAreaLicense> licenseMap, String licenses) {
+        if (StrUtil.isEmpty(licenses)) {
+            return StrUtil.EMPTY;
+        }
+        if (CollUtil.isEmpty(licenseMap)) {
+            return licenses;
+        }
+        String[] split = licenses.split(",");
+        List<String> areaNumbers = new ArrayList<>();
+        for (String s : split) {
+            PtlAreaLicense ptlAreaLicense = licenseMap.getOrDefault(s, null);
+            if (ptlAreaLicense != null) {
+                areaNumbers.add(ptlAreaLicense.getAreaNumber());
+            } else {
+                areaNumbers.add(s);
+            }
+        }
+        String collect = String.join(",", areaNumbers);
+        log.info("车牌编码[{}]转换后的地区编码是[{}]", licenses, collect);
+        return collect;
+    }
+
+    /**
+     * 将车牌号转换为对应的地区编码
+     *
+     * @param licenses 车牌号,支持多个拼接,例如晋A,晋B,晋C
+     * @return String 地区编码,例如1401,1402,1403
+     */
+    @Override
+    public String convertLicense2AreaNumber(String licenses) {
+        Map<String, PtlAreaLicense> licenseMap = this.queryAllAreaLicense().stream()
+                .filter(action -> StrUtil.isNotEmpty(action.getLicense()))
+                .collect(Collectors.toMap(PtlAreaLicense::getLicense,
+                        action -> action,
+                        (oldItem, newItem) -> newItem));
+        return this.convertLicense2AreaNumber(licenseMap, licenses);
+    }
 }