Преглед изворни кода

Merge remote-tracking branch 'origin/master'

lixiaolong пре 2 месеци
родитељ
комит
4d8f9b3608

+ 38 - 17
tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerRequestBuilder.java

@@ -261,13 +261,16 @@ public class RenBaoNewCrawlerRequestBuilder {
         );
 
         // 从车型查询结果中提取关键字段
-        String vehicleClassPicc = extractVehicleInfo(vehicleResult, "vehicleClassPicc");  // 车种代码(如A01-轿车)
-        String vehicleTonnage = extractVehicleInfo(vehicleResult, "vehicleTonnage");    // 核定载质量(货车用)
-        String purchasePriceT = extractVehicleInfo(vehicleResult, "priceT");            // 新车购置价(车型库标准价)
-        String fuelType = extractVehicleInfo(vehicleResult, "fuelType");                // 燃料类型(A-汽油,B-柴油等)
-        String vehicleModelCode = extractVehicleInfo(vehicleResult, "vehicleModelCode"); // 车型代码
-        String vehicleId = extractVehicleInfo(vehicleResult, "vehicleId");              // 车辆ID(人保内部编码)
-        String vehicleFgwCode = extractVehicleInfo(vehicleResult, "vehicleFgwCode");    // 工信部公告型号
+
+        String carPrice = quoteVo.getCarInfoVo().getPurchasePrice();
+
+        String vehicleClassPicc = extractVehicleInfo(vehicleResult, "vehicleClassPicc",carPrice);  // 车种代码(如A01-轿车)
+        String vehicleTonnage = extractVehicleInfo(vehicleResult, "vehicleTonnage",carPrice);    // 核定载质量(货车用)
+        String purchasePriceT = extractVehicleInfo(vehicleResult, "priceT",carPrice);            // 新车购置价(车型库标准价)
+        String fuelType = extractVehicleInfo(vehicleResult, "fuelType",carPrice);                // 燃料类型(A-汽油,B-柴油等)
+        String vehicleModelCode = extractVehicleInfo(vehicleResult, "vehicleModelCode",carPrice); // 车型代码
+        String vehicleId = extractVehicleInfo(vehicleResult, "vehicleId",carPrice);              // 车辆ID(人保内部编码)
+        String vehicleFgwCode = extractVehicleInfo(vehicleResult, "vehicleFgwCode",carPrice);    // 工信部公告型号
 
         // =====================================================================
         // 步骤3.1:计算使用性质和条款类型
@@ -3414,17 +3417,19 @@ public class RenBaoNewCrawlerRequestBuilder {
         return prpCmainChannel;
     }
 
+
     /**
      * 从车型查询结果中提取字段
      *
-     * <p>从vehicleQuery返回的Map中提取指定字段值,路径:data.carInfos.result[0].fieldName</p>
+     * <p>从vehicleQuery返回的Map中提取指定字段值,遍历result列表根据purchasePrice匹配车型,未命中取第一条</p>
      *
      * @param vehicleResult 车型查询结果
-     * @param fieldName 字段名
+     * @param fieldName     字段名
+     * @param purchasePrice 车型价格,用来匹配priceT/priceP
      * @return 字段值,如果不存在返回null
      */
     @SuppressWarnings("unchecked")
-    private String extractVehicleInfo(Map<String, Object> vehicleResult, String fieldName) {
+    private String extractVehicleInfo(Map<String, Object> vehicleResult, String fieldName, String purchasePrice) {
         if (vehicleResult == null) {
             return null;
         }
@@ -3443,16 +3448,32 @@ public class RenBaoNewCrawlerRequestBuilder {
         Map<String, Object> carInfosMap = (Map<String, Object>) carInfos;
 
         // 第三层:result(列表)
-        Object result = carInfosMap.get("result");
-        if (!(result instanceof List) || ((List<?>) result).isEmpty()) {
+        Object resultObj = carInfosMap.get("result");
+        if (!(resultObj instanceof List) || ((List<?>) resultObj).isEmpty()) {
             return null;
         }
-        Object firstItem = ((List<?>) result).get(0);
-        if (!(firstItem instanceof Map)) {
-            return null;
+        List<Map<String, Object>> resultList = (List<Map<String, Object>>) resultObj;
+
+        Map<String, Object> matchItem = null;
+        // 遍历按价格匹配 priceT
+        for (Map<String, Object> item : resultList) {
+            if (item == null) {
+                continue;
+            }
+            String priceT = item.get("priceT") != null ? item.get("priceT").toString() : null;
+
+            if (priceT != null && new BigDecimal(purchasePrice).compareTo(new BigDecimal(priceT))==0  ) {
+                matchItem = item;
+                break;
+            }
         }
-        Map<String, Object> itemMap = (Map<String, Object>) firstItem;
-        Object value = itemMap.get(fieldName);
+
+        //没有命中价格,降级取第一条
+        if (matchItem == null) {
+            matchItem = resultList.get(0);
+        }
+
+        Object value = matchItem.get(fieldName);
         return value != null ? value.toString() : null;
     }