|
@@ -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:计算使用性质和条款类型
|
|
// 步骤3.1:计算使用性质和条款类型
|
|
@@ -3414,17 +3417,19 @@ public class RenBaoNewCrawlerRequestBuilder {
|
|
|
return prpCmainChannel;
|
|
return prpCmainChannel;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 从车型查询结果中提取字段
|
|
* 从车型查询结果中提取字段
|
|
|
*
|
|
*
|
|
|
- * <p>从vehicleQuery返回的Map中提取指定字段值,路径:data.carInfos.result[0].fieldName</p>
|
|
|
|
|
|
|
+ * <p>从vehicleQuery返回的Map中提取指定字段值,遍历result列表根据purchasePrice匹配车型,未命中取第一条</p>
|
|
|
*
|
|
*
|
|
|
* @param vehicleResult 车型查询结果
|
|
* @param vehicleResult 车型查询结果
|
|
|
- * @param fieldName 字段名
|
|
|
|
|
|
|
+ * @param fieldName 字段名
|
|
|
|
|
+ * @param purchasePrice 车型价格,用来匹配priceT/priceP
|
|
|
* @return 字段值,如果不存在返回null
|
|
* @return 字段值,如果不存在返回null
|
|
|
*/
|
|
*/
|
|
|
@SuppressWarnings("unchecked")
|
|
@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) {
|
|
if (vehicleResult == null) {
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
@@ -3443,16 +3448,32 @@ public class RenBaoNewCrawlerRequestBuilder {
|
|
|
Map<String, Object> carInfosMap = (Map<String, Object>) carInfos;
|
|
Map<String, Object> carInfosMap = (Map<String, Object>) carInfos;
|
|
|
|
|
|
|
|
// 第三层:result(列表)
|
|
// 第三层: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;
|
|
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;
|
|
return value != null ? value.toString() : null;
|
|
|
}
|
|
}
|
|
|
|
|
|