Browse Source

车辆信息查询

helixiao 1 year ago
parent
commit
bbb9f701c0
12 changed files with 751 additions and 19 deletions
  1. 27 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java
  2. 1 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  3. 15 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerRequestComponent.java
  4. 5 3
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/constant/ZhongAnRequestConstant.java
  5. 5 1
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/constant/enums/RequestUrl.java
  6. 450 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerCacheCarQueryRequest.java
  7. 84 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerCacheInputRequest.java
  8. 1 2
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerCarQueryRequest.java
  9. 43 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerQuoteBaseRequest.java
  10. 1 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerQuoteRequest.java
  11. 107 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/response/ZhongAnCrawlerCacheCarQueryResponse.java
  12. 12 11
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/service/Impl/ZhongAnCrawlerRequestImpl.java

+ 27 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java

@@ -293,16 +293,42 @@ public class RequestComponent {
      * @return 响应
      */
     public <Response> ResponseEntity<Response> formData(String url, MultiValueMap<String, Object> parts, Class<Response> responseClass, HttpHeaders headers) {
+        String block = webClient.post()
+                .uri(url)
+                .headers(RequestComponent.setHeaders(headers))
+                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
+                .body(BodyInserters.fromMultipartData(parts))
+                .retrieve().bodyToMono(String.class).doOnNext(responseBody -> System.out.println("响应内容: " + responseBody)) // 打印响应
+                .block();
+
+
+
+
         return webClient.post()
                 .uri(url)
                 .headers(RequestComponent.setHeaders(headers))
-                .contentType(MediaType.MULTIPART_FORM_DATA)
+                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                 .body(BodyInserters.fromMultipartData(parts))
                 .retrieve()
                 .toEntity(responseClass)
                 .block();
     }
 
+    public String formDataString(String url, Object body, HttpHeaders headers) {
+        MultiValueMap<String, Object> multiValueMap = RequestObjectConversion.convertMultiValueMap(body);
+        BodyInserters.MultipartInserter multipartInserter = BodyInserters.fromMultipartData(multiValueMap);
+        String block = webClient.post()
+                .uri(url)
+                .headers(RequestComponent.setHeaders(headers))
+                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
+                .body(BodyInserters.fromMultipartData(multiValueMap))
+                .retrieve().bodyToMono(String.class).doOnNext(responseBody -> System.out.println("响应内容: " + responseBody)) // 打印响应
+                .block();
+
+
+        return block;
+    }
+
     public <Response> ResponseEntity<Response> formUrlencoded(String url,  BodyInserters.FormInserter<String> formInserter, Class<Response> responseClass, HttpHeaders headers) {
         return webClient.post()
                 .uri(url)

+ 1 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java

@@ -207,7 +207,7 @@ public class UnifyOrderManager {
     @PostMapping("/quote")
     @QuoteVerification
     public HttpResult<QuoteResultsVo> quote(@RequestBody QuoteVo quoteVo) throws Exception {
-        HttpResult<EsmInsCompany> esmInsCompanyHttpResult = platformClient.findById(quoteVo.getOrder()
+         HttpResult<EsmInsCompany> esmInsCompanyHttpResult = platformClient.findById(quoteVo.getOrder()
                 .getInsuranceCompanyCode(), baseController.getToken());
         AssertionUtils.isFail(esmInsCompanyHttpResult.getCode() != 200, esmInsCompanyHttpResult.getMsg());
         String systemCode = getSystemCode();

+ 15 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerRequestComponent.java

@@ -7,6 +7,7 @@ import com.jzg.quotation.commons.constant.CacheConstant;
 import com.jzg.quotation.commons.utils.RequestObjectConversion;
 import com.jzg.quotation.zhongan.crawler.constant.ZhongAnRequestConstant;
 import com.jzg.quotation.zhongan.crawler.constant.enums.RequestUrl;
+import com.jzg.quotation.zhongan.crawler.entity.ZhongAnCrawlerConfigureParameters;
 import com.jzg.quotation.zhongan.crawler.entity.request.*;
 import com.jzg.quotation.zhongan.crawler.entity.response.*;
 import com.jzg.quotation.zhongan.crawler.properties.ZhongAnCrawlerProperties;
@@ -190,4 +191,18 @@ public class ZhongAnCrawlerRequestComponent {
     public ZhongAnCrawlerDownloadPolicyResponse downloadPolicy(ZhongAnCrawlerDownloadPolicyRequest downloadPolicyRequest, HttpHeaders headers) {
         return requestComponent.objectPost(RequestUrl.DOWNLOAD_POLICY.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), downloadPolicyRequest, ZhongAnCrawlerDownloadPolicyResponse.class, headers).getBody();
     }
+
+    public String cacheCarInfo(ZhongAnCrawlerCacheCarQueryRequest cacheCarQueryRequest, HttpHeaders headers) {
+       return requestComponent.formDataString(RequestUrl.CACHE_CAR_QUERY.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), cacheCarQueryRequest, headers);
+
+    }
+
+    public String quoteBaseInfo(ZhongAnCrawlerQuoteBaseRequest parameters, HttpHeaders headers) {
+        return requestComponent.formDataString(RequestUrl.QUOTE_BASE_QUERY.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), parameters, headers);
+
+    }
+
+    public String CacheInput(ZhongAnCrawlerCacheInputRequest cacheInputRequest, HttpHeaders headers) {
+        return requestComponent.formDataString(RequestUrl.CACHE_INPUT_KEY.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), cacheInputRequest, headers);
+    }
 }

+ 5 - 3
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/constant/ZhongAnRequestConstant.java

@@ -6,7 +6,7 @@ package com.jzg.quotation.zhongan.crawler.constant;
  * @date: 2025/5/12 10:15
  **/
 public class ZhongAnRequestConstant {
-    public static final String COOKIE = "cookie";
+    public static final String COOKIE = "Cookie";
 
     public static final String I_PARAM = "e";
 
@@ -16,8 +16,10 @@ public class ZhongAnRequestConstant {
     public static final String CAR_QUERY_PAGE = "%2FbaseInfo";
     public static final String CAR_vehicle_PAGE = "%2FvehicleModel%2Fvehicles";
 
-
-
+    /**
+     * 校验key %2FinsureEntry
+     */
+    public static final String CACHE_KEY_PAGE = "%2FinsureEntry";
     /**
      * 报价page参数
      */

+ 5 - 1
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/constant/enums/RequestUrl.java

@@ -13,10 +13,14 @@ import lombok.Getter;
 @Getter
 public enum RequestUrl implements CrawlerRequestUrlStandard {
 
-    CAR_VIN("/open/bmw/car_controller/query_car_info.json","车架号查询"),
+    CACHE_INPUT_KEY("/open/bmw/index_controller/cache_input_query.json","校验key缓存"),
 
     CAR_QUERY("/open/bmw/car_controller/query_vehicle_model.json", "车型查询"),
 
+    CACHE_CAR_QUERY("/open/bmw/car_controller/cache_car_info.json", "缓存车辆信息"),
+
+    QUOTE_BASE_QUERY("/open/bmw/n/quote_controller/query_quote_base_info.json", "报价前准备接口"),
+
     QUOTE("/open/bmw/n/quote_controller/premium_trial.json", "报价"),
     CONFIRM_QUOTE("/open/bmw/quote_controller/confirm_quote_plan.json", "确认报价"),
     GET_ORDER("/open/bmw/policy_controller/get_order_info.json", "获取订单信息"),

+ 450 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerCacheCarQueryRequest.java

@@ -0,0 +1,450 @@
+package com.jzg.quotation.zhongan.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
+import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.quotation.zhongan.crawler.constant.ZhongAnRequestConstant;
+import com.jzg.quotation.zhongan.crawler.entity.ZhongAnCrawlerConfigureParameters;
+import com.jzg.quotation.zhongan.crawler.entity.response.ZhongAnCrawlerCarQueryResponse;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+
+
+@NoArgsConstructor
+@Data
+public class ZhongAnCrawlerCacheCarQueryRequest {
+
+    @Serial
+    private static final long serialVersionUID = -1L;
+
+    @JsonProperty("flowId")
+    private String flowId;
+
+    @JsonProperty("page")
+    private String page;
+
+    @JsonProperty("flag")
+    private String flag;
+
+    @JsonProperty("i")
+    private String i;
+
+
+    public ZhongAnCrawlerCacheCarQueryRequest(QuoteVo quoteVo, ZhongAnCrawlerCarQueryResponse.ValueDTO.DataDTO.ResultDTO.VehicleDTO vehicleDTO, ZhongAnCrawlerConfigureParameters parameters){
+        this.setFlowId(parameters.getFlowId());
+        this.setPage(ZhongAnRequestConstant.CAR_QUERY_PAGE);
+        this.setFlag(parameters.getFlag());
+        this.setI(ZhongAnRequestConstant.I_PARAM);
+        CustomerInfoVo ownersInfo = quoteVo.getOwnersInfo();
+        CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
+        //组装缓存车辆信息
+        this.insurePlaceCode = ownersInfo.getCityCode();
+        this.insurePlace = ownersInfo.getCity();
+        this.thirdOrgCode = "";
+        this.vehicleLicencePlateNo = carInfoVo.getLicenseNo();
+        this.vehicleFrameNo = carInfoVo.getVinNo();
+        this.vehicleEngineNo = carInfoVo.getEngineNo();
+        this.vehicleRegisterDate = carInfoVo.getRegisterDate();
+        this.vehicleClass = "carSwitch";
+        this.vehicleTypeSubclass = " ";
+        this.vehicleOwnerName = ownersInfo.getName();
+        this.identifyType = "I";
+        this.identifyNo = ownersInfo.getIdentifyNumber();
+        this.saleCompanyName = "";
+        this.sale4SFlag = "";
+        this.saleCompanyAreaCode = "";
+        this.phone = "";
+        this.applicantName = "";
+        this.applicantPhone = "";
+        this.applicantCertificateNo = "";
+        this.modelName = vehicleDTO.getBrandName();
+        this.brandCode = vehicleDTO.getBrandCode();
+        this.vehicleName = vehicleDTO.getVehicleName();
+        this.vehicleBrand = vehicleDTO.getBrandName();
+
+        this.vehicleModelName = vehicleDTO.getBrandName();
+        this.vehicleModelCode = vehicleDTO.getVehicleCode();
+        this.modelsJy = vehicleDTO.getVehicleCode();
+        this.vehicleCap = "";
+        this.curbWeight = vehicleDTO.getFullWeight();
+        this.exhaustMeasure = vehicleDTO.getDisplacement();
+        this.power = vehicleDTO.getPower();
+        this.creator = vehicleDTO.getCompanyName();
+        this.vehicleAcquisitionPrice = vehicleDTO.getPurchasePrice();
+        this.vehiclePassengerCap = vehicleDTO.getSeat();
+        this.gearBoxType = vehicleDTO.getGearBoxType();
+        this.configName = vehicleDTO.getConfigName();
+        this.taxType = "0";
+        this.syxClassid = "KB";
+        this.vehicleType = "2";
+        this.modelEnergyType = "0";
+        this.fuelType = "D1";
+        this.desVehicleOwnerName = "";
+        this.applicantType = "PERSONAL";
+        this.applicantUseAttribute = "03";
+        this.useAttribute = "NONBUSINESS";
+        this.subOwnershipAttribute = "";
+        this.ownershipAttribute = "PER";
+        this.vehicleLicenceType = "";
+        this.callVehicleModelLibraryFlag = 1;
+
+        this.vehicleModelDesc = vehicleName + " " + gearBoxType + " " + configName + " " + vehiclePassengerCap + "座" + "(" + vehicleAcquisitionPrice + "元)";
+    }
+
+    /**
+     * 参保地编码
+     * 例如:140700 对应晋中市
+     */
+    @JsonProperty("insurePlaceCode")
+    private String insurePlaceCode;
+
+    /**
+     * 参保地名称
+     * 例如:晋中市
+     */
+    @JsonProperty("insurePlace")
+    private String insurePlace;
+
+    /**
+     * 第三方机构代码
+     * 为空表示未填写
+     */
+    @JsonProperty("thirdOrgCode")
+    private String thirdOrgCode;
+
+    /**
+     * 机动车车牌号
+     * 例如:晋AP169K
+     */
+    @JsonProperty("vehicleLicencePlateNo")
+    private String vehicleLicencePlateNo;
+
+    /**
+     * 车辆车架号
+     * 车辆唯一标识,例如:LSGZG5355GS023672
+     */
+    @JsonProperty("vehicleFrameNo")
+    private String vehicleFrameNo;
+
+    /**
+     * 发动机号
+     * 例如:152243036
+     */
+    @JsonProperty("vehicleEngineNo")
+    private String vehicleEngineNo;
+
+    /**
+     * 车辆注册日期
+     * 格式:yyyy-MM-dd,例如:2016-09-05
+     */
+    @JsonProperty("vehicleRegisterDate")
+    private String vehicleRegisterDate;
+
+    /**
+     * 车辆类别
+     * 例如:carSwitch表示轿车类
+     */
+    @JsonProperty("vehicleClass")
+    private String vehicleClass;
+
+    /**
+     * 车辆类型子类
+     * 为空表示未填写
+     */
+    @JsonProperty("vehicleTypeSubclass")
+    private String vehicleTypeSubclass;
+
+    /**
+     * 交强险车辆类型
+     * 为空表示未填写
+     */
+    @JsonProperty("paVehicleType")
+    private String paVehicleType;
+
+    /**
+     * 车辆所有人姓名
+     * 例如:王卫星
+     */
+    @JsonProperty("vehicleOwnerName")
+    private String vehicleOwnerName;
+
+    /**
+     * 证件类型
+     * 例如:I表示身份证
+     */
+    @JsonProperty("identifyType")
+    private String identifyType;
+
+    /**
+     * 证件号码
+     * 例如:身份证号131127198510103870
+     */
+    @JsonProperty("identifyNo")
+    private String identifyNo;
+
+    /**
+     * 销售公司名称
+     * 为空表示未填写
+     */
+    @JsonProperty("saleCompanyName")
+    private String saleCompanyName;
+
+    /**
+     * 是否4S店销售标识
+     * 为空表示未填写
+     */
+    @JsonProperty("sale4SFlag")
+    private String sale4SFlag;
+
+    /**
+     * 销售公司区域代码
+     * 为空表示未填写
+     */
+    @JsonProperty("saleCompanyAreaCode")
+    private String saleCompanyAreaCode;
+
+    /**
+     * 联系电话
+     * 为空表示未填写
+     */
+    @JsonProperty("phone")
+    private String phone;
+
+    /**
+     * 申请人姓名
+     * 为空表示未填写
+     */
+    @JsonProperty("applicantName")
+    private String applicantName;
+
+    /**
+     * 申请人电话
+     * 为空表示未填写
+     */
+    @JsonProperty("applicantPhone")
+    private String applicantPhone;
+
+    /**
+     * 申请人证件号
+     * 为空表示未填写
+     */
+    @JsonProperty("applicantCertificateNo")
+    private String applicantCertificateNo;
+
+    /**
+     * 车型名称
+     * 例如:上汽通用雪佛兰
+     */
+    @JsonProperty("modelName")
+    private String modelName;
+
+    /**
+     * 品牌代码
+     * 例如:XFA1
+     */
+    @JsonProperty("brandCode")
+    private String brandCode;
+
+    /**
+     * 车辆名称
+     * 例如:雪佛兰SGM7156EAA2轿车
+     */
+    @JsonProperty("vehicleName")
+    private String vehicleName;
+
+    /**
+     * 车辆品牌
+     * 例如:上汽通用雪佛兰
+     */
+    @JsonProperty("vehicleBrand")
+    private String vehicleBrand;
+
+    /**
+     * 车辆型号详细描述
+     * 包含配置、年份等信息
+     */
+    @JsonProperty("vehicleModelDesc")
+    private String vehicleModelDesc;
+
+    /**
+     * 车辆型号名称
+     * 例如:上汽通用雪佛兰
+     */
+    @JsonProperty("vehicleModelName")
+    private String vehicleModelName;
+
+    /**
+     * 车辆型号代码
+     * 例如:XFABFD0032
+     */
+    @JsonProperty("vehicleModelCode")
+    private String vehicleModelCode;
+
+    /**
+     * 车型交易代码
+     * 例如:XFABFD0032
+     */
+    @JsonProperty("modelsJy")
+    private String modelsJy;
+
+    /**
+     * 车辆排量
+     * 为空表示未填写
+     */
+    @JsonProperty("vehicleCap")
+    private String vehicleCap;
+
+    /**
+     * 车辆整备质量
+     * 单位:kg,例如:1430
+     */
+    @JsonProperty("curbWeight")
+    private String curbWeight;
+
+    /**
+     * 排气量
+     * 单位:L,例如:1.49
+     */
+    @JsonProperty("exhaustMeasure")
+    private Double exhaustMeasure;
+
+    /**
+     * 发动机功率
+     * 单位:马力,例如:125
+     */
+    @JsonProperty("power")
+    private String power;
+
+    /**
+     * 车辆制造商
+     * 例如:上汽通用汽车有限公司
+     */
+    @JsonProperty("creator")
+    private String creator;
+
+    /**
+     * 车辆购置价格
+     * 单位:元,例如:204900
+     */
+    @JsonProperty("vehicleAcquisitionPrice")
+    private String vehicleAcquisitionPrice;
+
+    /**
+     * 车辆核定载客人数
+     * 例如:5座
+     */
+    @JsonProperty("vehiclePassengerCap")
+    private String vehiclePassengerCap;
+
+    /**
+     * 变速箱类型
+     * 例如:双离合变速器
+     */
+    @JsonProperty("gearBoxType")
+    private String gearBoxType;
+
+    /**
+     * 配置名称
+     * 例如:2016款 锐耀版
+     */
+    @JsonProperty("configName")
+    private String configName;
+
+    /**
+     * 税收类型
+     * 例如:0表示默认类型
+     */
+    @JsonProperty("taxType")
+    private String taxType;
+
+    /**
+     * 商业险类别ID
+     * 例如:KA
+     */
+    @JsonProperty("syxClassid")
+    private String syxClassid;
+
+    /**
+     * 车辆类型
+     * 例如:2表示小型客车
+     */
+    @JsonProperty("vehicleType")
+    private String vehicleType;
+
+    /**
+     * 能源类型
+     * 例如:0表示传统燃油
+     */
+    @JsonProperty("modelEnergyType")
+    private String modelEnergyType;
+
+    /**
+     * 燃油类型
+     * 例如:D1表示汽油
+     */
+    @JsonProperty("fuelType")
+    private String fuelType;
+
+    /**
+     * 指定车辆所有人姓名
+     * 为空表示未填写
+     */
+    @JsonProperty("desVehicleOwnerName")
+    private String desVehicleOwnerName;
+
+    /**
+     * 申请人类型
+     * 例如:PERSONAL表示个人
+     */
+    @JsonProperty("applicantType")
+    private String applicantType;
+
+    /**
+     * 申请人使用属性
+     * 例如:03表示非营运
+     */
+    @JsonProperty("applicantUseAttribute")
+    private String applicantUseAttribute;
+
+    /**
+     * 使用性质
+     * 例如:NONBUSINESS表示非营业
+     */
+    @JsonProperty("useAttribute")
+    private String useAttribute;
+
+    /**
+     * 子所有权属性
+     * 为空表示未填写
+     */
+    @JsonProperty("subOwnershipAttribute")
+    private String subOwnershipAttribute;
+
+    /**
+     * 所有权属性
+     * 例如:PER表示个人所有
+     */
+    @JsonProperty("ownershipAttribute")
+    private String ownershipAttribute;
+
+    /**
+     * 车辆牌照类型
+     * 为空表示未填写
+     */
+    @JsonProperty("vehicleLicenceType")
+    private String vehicleLicenceType;
+
+    /**
+     * 调用车辆模型库标识
+     * 例如:0表示未调用
+     */
+    @JsonProperty("callVehicleModelLibraryFlag")
+    private Integer callVehicleModelLibraryFlag;
+
+
+
+
+}

+ 84 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerCacheInputRequest.java

@@ -0,0 +1,84 @@
+package com.jzg.quotation.zhongan.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
+import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.quotation.zhongan.crawler.constant.ZhongAnRequestConstant;
+import com.jzg.quotation.zhongan.crawler.entity.ZhongAnCrawlerConfigureParameters;
+import lombok.Data;
+
+import java.io.Serial;
+import java.util.Optional;
+
+@Data
+public class ZhongAnCrawlerCacheInputRequest {
+
+    @Serial
+    private static final long serialVersionUID = -1L;
+
+    /**
+     * "insurePlace": self.city_name,
+     * "insurePlaceCode": self.city_code,
+     * "thirdOrgCode": "",
+     * "licenseNo": self.licenseNo,
+     * "branchCode": "",
+     *
+     * "isOpenRenewalFlag": "0",
+     * "flowId": self.flowId,
+     * "page": "%2FinsureEntry",
+     * "i": "e",
+     * "flag": "0"
+     */
+    @JsonProperty("insurePlace")
+    private String insurePlace;
+
+    @JsonProperty("insurePlaceCode")
+    private String insurePlaceCode;
+
+    @JsonProperty("thirdOrgCode")
+    private String thirdOrgCode;
+
+    @JsonProperty("licenseNo")
+    private String licenseNo;
+
+    @JsonProperty("branchCode")
+    private String branchCode;
+
+    @JsonProperty("vehicleFrameNo")
+    private String vehicleFrameNo;
+
+    @JsonProperty("isOpenRenewalFlag")
+    private String isOpenRenewalFlag;
+
+    @JsonProperty("flowId")
+    private String flowId;
+
+    @JsonProperty("page")
+    private String page;
+
+    @JsonProperty("i")
+    private String i;
+
+    @JsonProperty("flag")
+    private String flag;
+
+    public ZhongAnCrawlerCacheInputRequest(QuoteVo quoteVo, ZhongAnCrawlerConfigureParameters parameters){
+        this.setFlowId(parameters.getFlowId());
+        this.setPage(ZhongAnRequestConstant.CACHE_KEY_PAGE);
+        this.setFlag(parameters.getFlag());
+        this.setI(ZhongAnRequestConstant.I_PARAM);
+        this.setIsOpenRenewalFlag("0");
+        this.setThirdOrgCode("");
+        this.setBranchCode("");
+        CustomerInfoVo ownersInfo = quoteVo.getOwnersInfo();
+        CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
+        this.insurePlaceCode =Optional.ofNullable(ownersInfo.getCityCode()).orElse("140100") ;
+        this.insurePlace = Optional.ofNullable(ownersInfo.getCity()).orElse("太原市");
+        this.licenseNo = carInfoVo.getLicenseNo();
+        this.vehicleFrameNo = carInfoVo.getVinNo();
+
+    }
+
+
+}

+ 1 - 2
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerCarQueryRequest.java

@@ -14,8 +14,7 @@ import java.io.Serial;
  * @date: 2025/5/12 10:41
  **/
 @Data
-public class
-ZhongAnCrawlerCarQueryRequest extends ZhongAnCrawlerBaseRequest {
+public class ZhongAnCrawlerCarQueryRequest extends ZhongAnCrawlerBaseRequest {
     @Serial
     private static final long serialVersionUID = -8564194443790815627L;
 

+ 43 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerQuoteBaseRequest.java

@@ -0,0 +1,43 @@
+package com.jzg.quotation.zhongan.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quotation.zhongan.crawler.constant.ZhongAnRequestConstant;
+import com.jzg.quotation.zhongan.crawler.entity.ZhongAnCrawlerConfigureParameters;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+
+@Data
+@NoArgsConstructor
+public class ZhongAnCrawlerQuoteBaseRequest {
+
+    @Serial
+    private static final long serialVersionUID = -1L;
+
+    @JsonProperty("flowId")
+    private String flowId;
+
+    @JsonProperty("page")
+    private String page;
+
+    @JsonProperty("flag")
+    private String flag;
+
+    @JsonProperty("i")
+    private String i;
+
+    @JsonProperty("quoteType")
+    private Integer quoteType;
+
+    public ZhongAnCrawlerQuoteBaseRequest(ZhongAnCrawlerConfigureParameters parameters){
+        this.setFlowId(parameters.getFlowId());
+        this.setPage(ZhongAnRequestConstant.QUOTE_PAGE);
+        this.setFlag(parameters.getFlag());
+        this.setI(ZhongAnRequestConstant.I_PARAM);
+        this.setQuoteType(0);
+
+    }
+
+
+}

+ 1 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerQuoteRequest.java

@@ -38,6 +38,7 @@ public class ZhongAnCrawlerQuoteRequest extends ZhongAnCrawlerBaseRequest {
      */
     @JsonProperty("addCompel")
     private String addCompel;
+
     @JsonProperty("addTax")
     private String addTax = "0";
     /**

+ 107 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/response/ZhongAnCrawlerCacheCarQueryResponse.java

@@ -0,0 +1,107 @@
+package com.jzg.quotation.zhongan.crawler.entity.response;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+public class ZhongAnCrawlerCacheCarQueryResponse extends ZhongAnCrawlerBaseResponse{
+
+    @Serial
+    private static final long serialVersionUID = -1L;
+
+    private String ruleMsgTips;
+
+    private ValueDTO value;
+
+    private AdditionalInfoDTO additionalInfo;
+
+    @Data
+    public static class ValueDTO implements Serializable {
+        @Serial
+        private static final long serialVersionUID = -1L;
+
+        private DataDTO datas;
+
+        private Boolean isNewCar;
+
+        @Data
+        public static class DataDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = -1L;
+
+            private List<PlatVehicleList> platVehicleList;
+
+            private String modelEnergyType;
+
+            @Data
+            private static class PlatVehicleList implements Serializable{
+
+                @Serial
+                private static final long serialVersionUID = -1L;
+
+                private String analogyVehiclePrice;
+                private String analogyVehiclePriceWithTax;
+                private String brand;
+                private String brandTypeCode;
+                private String deptName;
+                private String engineDesc;
+                private String modelEnergyType;
+                private String pfBrandCode;
+                private String pfCategoryCode;
+                private String pfCompanyCode;
+                private String pfConfModel;
+                private String pfDeptCode;
+                private String pfFamilycode;
+                private String pfNoticeType;
+                private String pfVehicleClass;
+                private String pfVehicleMangline;
+                private String rExhaustCapacity;
+                private String rVehicleName;
+                private String rbCode;
+                private String refcode1;
+                private String refcode2;
+                private String setNumber;
+                private String tradeName;
+                private String vehicleClass;
+                private String vehicleClassCode;
+                private String vehicleCode;
+                private String vehicleDescription;
+                private String vehiclePrice;
+                private String vehiclePriceWithTax;
+                private String yearPattern;
+
+            }
+
+        }
+    }
+
+
+
+
+
+    @Data
+    public static class AdditionalInfoDTO implements Serializable {
+        @Serial
+        private static final long serialVersionUID = -1L;
+
+        @JsonProperty("quoteId")
+        private Long quoteId;
+
+        @JsonProperty("zaFlowId")
+        private String zaFlowId;
+
+        @JsonProperty("isSupportRepeatInsure")
+        private String isSupportRepeatInsure;
+
+
+
+
+    }
+}

+ 12 - 11
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/service/Impl/ZhongAnCrawlerRequestImpl.java

@@ -28,7 +28,6 @@ import com.jzg.quotation.zhongan.crawler.service.ZhongAnCrawlerRequest;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpHeaders;
-import org.springframework.web.reactive.function.client.WebClient;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -76,6 +75,7 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
      */
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) {
+        //登录众安
         loginCookieCache(zhongAnId);
         CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
         AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
@@ -86,11 +86,21 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
         if (StringUtils.isEmpty(flowId)) {
             parameters.setFlowId(zhongAnCrawlerCacheComponent.getFlowId(zhongAnId));
         }
+        //校验key,缓存
+        ZhongAnCrawlerCacheInputRequest cacheInputRequest = new ZhongAnCrawlerCacheInputRequest(quoteVo,parameters);
+        String cacheInput = zhongAnCrawlerRequestComponent.CacheInput(cacheInputRequest,headers);
+
         //车型查询
         ZhongAnCrawlerCarQueryRequest carQueryRequest = new ZhongAnCrawlerCarQueryRequest(carInfoVo.getBrandName(), parameters);
         List<ZhongAnCrawlerCarQueryResponse.ValueDTO.DataDTO.ResultDTO.VehicleDTO> vehicleDTOList = zhongAnCrawlerRequestComponent.carQuery(carQueryRequest, headers);
         ZhongAnCrawlerCarQueryResponse.ValueDTO.DataDTO.ResultDTO.VehicleDTO vehicleDTO = CarModelsFilterUtils.to(vehicleDTOList, carInfoVo);
 
+        ZhongAnCrawlerCacheCarQueryRequest cacheCarQueryRequest = new ZhongAnCrawlerCacheCarQueryRequest(quoteVo,vehicleDTO,parameters);
+        String cacheCarQueryResponse = zhongAnCrawlerRequestComponent.cacheCarInfo(cacheCarQueryRequest,headers);
+
+        ZhongAnCrawlerQuoteBaseRequest quoteBaseRequest = new ZhongAnCrawlerQuoteBaseRequest(parameters);
+        String str = zhongAnCrawlerRequestComponent.quoteBaseInfo(quoteBaseRequest,headers);
+
         //报价
         ZhongAnCrawlerQuoteRequest quoteRequest = new ZhongAnCrawlerQuoteRequest(quoteVo, parameters);
         ZhongAnCrawlerQuoteResponse quoteResponse = zhongAnCrawlerRequestComponent.quote(quoteRequest, headers);
@@ -125,15 +135,6 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
     //登录
     private void loginCookieCache(String zhongAnId) {
         try {
-//            ZhongAnCrawlerLoginRequest params = new ZhongAnCrawlerLoginRequest();
-//            params.setPartnerChannelCode("m18x462r");
-//            params.setPartnerUserAccount("975113");
-//            params.setPartnerChildChannelCode("");
-//            params.setPromotionNo("0c033ab79c6847c0878342480aef76a1");
-//            params.setProductId("10676");
-//            params.setPolicySource("40");
-//            params.setSubaoBizContent("");
-//            params.setInsurerCode("ZHONGANCAR");
 
             Map<String, String> params = new HashMap<>();
             params.put("partnerChannelCode", "m18x462r");
@@ -214,7 +215,7 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
         HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername());
 
         ZhongAnCrawlerOrder zhongAnCrawlerOrder = zhongAnCrawlerOrderService.findByOrdersNo(orderBase.getOrdersNo());
-        
+
         ZhongAnCrawlerPaymentRequest paymentRequest = new ZhongAnCrawlerPaymentRequest(zhongAnCrawlerOrder.getPolicyId());
         ZhongAnCrawlerPaymentResponse payment = zhongAnCrawlerRequestComponent.payment(paymentRequest, headers);
         return null;