jinshihui 11 mesi fa
parent
commit
de66c6ba3f
23 ha cambiato i file con 4026 aggiunte e 83 eliminazioni
  1. 3 0
      commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/QuoteResultsVo.java
  2. 9 3
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/entity/BoHaiConfigureParameters.java
  3. 24 4
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/entity/request/UnderwritingRequest.java
  4. 27 0
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/entity/response/UnderwritingResponse.java
  5. 7 0
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/service/impl/BoHaiApiRequestImpl.java
  6. 2 2
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/build/BoHaiCrawlerQuoteResultsVoBuild.java
  7. 47 10
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/component/BoHaiCrawlerRequestComponent.java
  8. 1 4
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/constant/enums/RequestUrl.java
  9. 0 1
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/request/BoHaiCrawlerBaseRequest1.java
  10. 11 0
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/request/BoHaiCrawlerQuotationRequest2.java
  11. 2568 0
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/request/BoHaiCrawlerUnderwritingRequest2.java
  12. 3 0
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/request/BoHaiCrawlerVehicleConfirmationReqeust1.java
  13. 0 1
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/response/BoHaiCrawlerBaseResponse1.java
  14. 1 9
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/response/BoHaiCrawlerCarResponse.java
  15. 186 0
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/response/BoHaiCrawlerUnderwritingResponse.java
  16. 336 0
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/response/BoHaiCrawlerVehicleConfirmationResponse2.java
  17. 0 36
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/response/BoHaiUnderwritingResponse.java
  18. 1 0
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/service/impl/BoHaiCrawlerQuoteProcessServiceImpl.java
  19. 663 9
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/service/impl/BoHaiCrawlerRequestImpl.java
  20. 1 1
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/util/DESEncryption.java
  21. 41 0
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/util/DESJava.java
  22. 93 0
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/util/DESUtil.java
  23. 2 3
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java

+ 3 - 0
commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/QuoteResultsVo.java

@@ -31,14 +31,17 @@ public class QuoteResultsVo implements Serializable {
      * 交互唯一订单
      */
     private String ordersNo;
+
     /**
      * 交强险 险种信息
      */
     private RiskInfoVo ciRiskInfoVo;
+
     /**
      * 商业险 险种信息
      */
     private RiskInfoVo biRiskInfoVo;
+
     /**
      * 商业险信息
      */

+ 9 - 3
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/entity/BoHaiConfigureParameters.java

@@ -16,13 +16,19 @@ public class BoHaiConfigureParameters implements ConfigureParameters {
      */
     private String sysSourceCode;
 
-    // 二级机构编码
+    /**
+     * 二级机构编码
+     */
     private String insurerBranchCode;
 
-    // 中介机构代码
+    /**
+     * 中介机构代码
+     */
     private String franchiserInstitutionCode;
 
-    // 机构渠道id
+    /**
+     * 机构渠道ID
+     */
     private String franchiserChannelId;
 
 }

+ 24 - 4
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/entity/request/UnderwritingRequest.java

@@ -11,10 +11,11 @@ import java.io.Serializable;
 import java.util.List;
 
 /**
- * @description: 渤海财险 核保请求
- * @author: shenwd
- * @date: 2025/3/4 08:46
- **/
+ * 渤海财险核保请求实体类
+ * 包含商业险和交强险的核保信息
+ * @author shenwd
+ * @date 2025/3/4 08:46
+ */
 @EqualsAndHashCode(callSuper = true)
 @NoArgsConstructor
 @Data
@@ -22,9 +23,14 @@ public class UnderwritingRequest extends BoHaiBaseRequest {
 
     @Serial
     private static final long serialVersionUID = 4926822390971507888L;
+
+    /**
+     * 商业险保单信息
+     */
     @JsonProperty("businessPolicy")
     private BusinessPolicyDTO businessPolicy;
 
+    /** 交强险保单信息 */
     @JsonProperty("trafficPolicy")
     private TrafficPolicyDTO trafficPolicy;
 
@@ -32,47 +38,61 @@ public class UnderwritingRequest extends BoHaiBaseRequest {
         this.setBaseParam(parameters, orderNo);
     }
 
+    /** 商业险保单数据传输对象 */
     @NoArgsConstructor
     @Data
     public static class BusinessPolicyDTO implements Serializable {
 
         @Serial
         private static final long serialVersionUID = 5564549381599703789L;
+
+        /** 特殊条款项目列表 */
         @JsonProperty("specialTermItems")
         private List<SpecialTermItemsDTO> specialTermItems;
 
+        /** 特殊条款项目数据传输对象 */
         @NoArgsConstructor
         @Data
         public static class SpecialTermItemsDTO implements Serializable {
 
             @Serial
             private static final long serialVersionUID = 5989204321822826633L;
+
+            /** 特殊条款代码 */
             @JsonProperty("specialTermCode")
             private String specialTermCode;
 
+            /** 特殊条款参数 */
             @JsonProperty("specialTermParams")
             private String specialTermParams;
         }
     }
 
+    /** 交强险保单数据传输对象 */
     @NoArgsConstructor
     @Data
     public static class TrafficPolicyDTO implements Serializable{
 
         @Serial
         private static final long serialVersionUID = 447789784044058122L;
+
+        /** 特殊条款项目列表 */
         @JsonProperty("specialTermItems")
         private List<SpecialTermItemsDTO> specialTermItems;
 
+        /** 特殊条款项目数据传输对象 */
         @NoArgsConstructor
         @Data
         public static class SpecialTermItemsDTO implements Serializable{
 
             @Serial
             private static final long serialVersionUID = -8263482534266271461L;
+
+            /** 特殊条款代码 */
             @JsonProperty("specialTermCode")
             private String specialTermCode;
 
+            /** 特殊条款参数 */
             @JsonProperty("specialTermParams")
             private String specialTermParams;
         }

+ 27 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/entity/response/UnderwritingResponse.java

@@ -27,6 +27,7 @@ public class UnderwritingResponse extends BoHaiBaseResponse {
 
     @Serial
     private static final long serialVersionUID = -8793975250540002639L;
+
     @JsonProperty("data")
     private DataDTO data;
 
@@ -36,41 +37,57 @@ public class UnderwritingResponse extends BoHaiBaseResponse {
 
         @Serial
         private static final long serialVersionUID = 5790787222952173427L;
+
+        /** 交强险核保结果编码 */
         @JsonProperty("trafficResultCode")
         private String trafficResultCode;
 
+        /** 交强险核保结果信息 */
         @JsonProperty("trafficResultMsg")
         private String trafficResultMsg;
 
+        /** 商业险核保结果编码 */
         @JsonProperty("businessResultCode")
         private String businessResultCode;
 
+        /** 商业险核保结果信息 */
         @JsonProperty("businessResultMsg")
         private String businessResultMsg;
 
+        /** 总保费 */
         @JsonProperty("total")
         private String total;
 
+        /** 财产险保单列表 */
         @JsonProperty("propertyPolicies")
         private List<UnAutoPolicyDTO> propertyPolicies;
 
+        /** 意外险保单列表 */
         @JsonProperty("casualtyPolicies")
         private List<UnAutoPolicyDTO> casualtyPolicies;
 
+        /** 商业险保单信息 */
         @JsonProperty("businessPolicy")
         private BusinessPolicyDTO businessPolicy;
 
+        /** 交强险保单信息 */
         @JsonProperty("trafficPolicy")
         private TrafficPolicyDTO trafficPolicy;
 
+        /** 获取财产险保单列表,空列表保护 */
         public List<UnAutoPolicyDTO> getPropertyPolicies() {
             return ObjectUtils.isEmpty(propertyPolicies) ? new ArrayList<>() : propertyPolicies;
         }
 
+        /** 获取意外险保单列表,空列表保护 */
         public List<UnAutoPolicyDTO> getCasualtyPolicies() {
             return ObjectUtils.isEmpty(casualtyPolicies) ? new ArrayList<>() : casualtyPolicies;
         }
 
+        /**
+         * 验证核保状态
+         * @return 1-成功 2-人工核保 0-其他状态
+         */
         public int verificationUnderwriting() {
             int traffic = 1;
             int business = 1;
@@ -91,6 +108,7 @@ public class UnderwritingResponse extends BoHaiBaseResponse {
             return 0;
         }
 
+        /** 解析核保结果编码 */
         private int extracted(String resultCode) {
             if (ResultCode.RC_A0.getCode().equals(resultCode)) {
                 return 1;
@@ -101,15 +119,18 @@ public class UnderwritingResponse extends BoHaiBaseResponse {
         }
 
 
+        /** 商业险保单信息 */
         @NoArgsConstructor
         @Data
         public static class BusinessPolicyDTO implements Serializable {
 
             @Serial
             private static final long serialVersionUID = -1298331388910039993L;
+            /** 投保单号 */
             @JsonProperty("applicationNo")
             private String applicationNo;
 
+            /** 特别约定条款列表 */
             @JsonProperty("specialTermItems")
             private List<SpecialTermItemsDTO> specialTermItems;
 
@@ -126,15 +147,18 @@ public class UnderwritingResponse extends BoHaiBaseResponse {
             }
         }
 
+        /** 交强险保单信息 */
         @NoArgsConstructor
         @Data
         public static class TrafficPolicyDTO implements Serializable {
 
             @Serial
             private static final long serialVersionUID = 6076446236495759377L;
+            /** 投保单号 */
             @JsonProperty("applicationNo")
             private String applicationNo;
 
+            /** 特别约定条款列表 */
             @JsonProperty("specialTermItems")
             private List<SpecialTermItemsDTO> specialTermItems;
 
@@ -152,6 +176,7 @@ public class UnderwritingResponse extends BoHaiBaseResponse {
             }
         }
 
+        /** 非车险保单信息 */
         @NoArgsConstructor
         @Data
         public static class UnAutoPolicyDTO implements Serializable {
@@ -182,8 +207,10 @@ public class UnderwritingResponse extends BoHaiBaseResponse {
             @JsonProperty("resultMsg")
             private String resultMsg;
 
+            /** 核保成功消息常量 */
             private static final String MESSAGES = "核保成功";
 
+            /** 转换为驾意险DTO对象 */
             public DrivingInsuranceDTO toDrivingInsuranceDto() {
                 if (StringUtils.isEmpty(this.getApplicationNo())) {
                     throw new SystemException(this.getResultMsg());

+ 7 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/service/impl/BoHaiApiRequestImpl.java

@@ -205,6 +205,12 @@ public class BoHaiApiRequestImpl implements BoHaiApiRequest {
         }
     }
 
+    /**
+     * 核保
+     * @param underwritingVo
+     * @return UnderwritingResultsVo
+     * @throws Exception
+     */
     @Override
     public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) throws Exception {
         OrderBase order = underwritingVo.getOrder();
@@ -217,6 +223,7 @@ public class BoHaiApiRequestImpl implements BoHaiApiRequest {
         UnderwritingResponse underwritingResponse;
         UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
         underwritingResponse = boHaiRequestApiComponent.underwriting(underwritingRequest, parameters.getSysSourceCode(),url);
+
         if (ResponseCode.R_Z00001.getCode().equals(underwritingResponse.getResponseCode())) {
             String jqStatus = underwritingResponse.getData().getTrafficResultCode();
             String syStatus = underwritingResponse.getData().getBusinessResultCode();

+ 2 - 2
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/build/BoHaiCrawlerQuoteResultsVoBuild.java

@@ -121,9 +121,9 @@ public class BoHaiCrawlerQuoteResultsVoBuild {
     public static QuoteResultsVo buildQuoteFailResultsVo(BoHaiCrawlerQuotationResponse boHaiQuoteResponse) {
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
         // 交易流水号
-        quoteResultsVo.setCompanyOrderNo(boHaiQuoteResponse.getBaseParam().getRequestNo());
+        quoteResultsVo.setCompanyOrderNo("");
         // 报价失败提示
-        quoteResultsVo.setErrorMessage(boHaiQuoteResponse.getResponseMsg());
+        quoteResultsVo.setErrorMessage("报价失败");
         //设置报价状态:
         quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.QUOTE_FAIL);
         return quoteResultsVo;

+ 47 - 10
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/component/BoHaiCrawlerRequestComponent.java

@@ -1,8 +1,15 @@
 package com.jzg.quotation.bohai.crawler.component;
 
 import com.alibaba.fastjson2.JSON;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.AssertionUtils;
+import com.jzg.quotation.bohai.api.constant.enums.RequestType;
+import com.jzg.quotation.bohai.api.constant.enums.ResponseCode;
+import com.jzg.quotation.bohai.api.entity.request.BoHaiBaseRequest;
+import com.jzg.quotation.bohai.api.entity.request.UnderwritingRequest;
+import com.jzg.quotation.bohai.api.entity.response.BoHaiBaseResponse;
+import com.jzg.quotation.bohai.api.entity.response.UnderwritingResponse;
 import com.jzg.quotation.bohai.crawler.constant.enums.RequestUrl;
 import com.jzg.quotation.bohai.crawler.entity.request.*;
 import com.jzg.quotation.bohai.crawler.entity.request.quote.CarModelDataDTO;
@@ -16,7 +23,6 @@ import com.jzg.quotation.commons.standard.CrawlerRequestUrlStandard;
 import com.jzg.quotation.commons.utils.RequestObjectConversion;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.codec.digest.DigestUtils;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
@@ -164,18 +170,17 @@ public class BoHaiCrawlerRequestComponent {
      */
     public <BoHaiResponse> BoHaiResponse request(CrawlerRequestUrlStandard crawlerRequestUrlStandard, Object request, Class<BoHaiResponse> responseClass, HttpHeaders headers) {
         try {
-            /*String jsonString = JSON.toJSONString(request);
+            //String jsonString = JSON.toJSONString(request);
+            ObjectMapper objectMapper = new ObjectMapper();
+            String jsonString = objectMapper.writeValueAsString(request);
             log.info("请求参数:{}", jsonString);
+            DESUtil des = new DESUtil("c2lub3NvZnQuY2hhbm5lbC55ZHBpYw==");
             // 参数加密
-            String encrypt = DESUtil.encrypt(jsonString, "c2lub3NvZnQuY2hhbm5lbC55ZHBpYw==");
+            String encrypt = des.des_encrypt(jsonString);
             log.info("请求参数加密:{}", encrypt);
             //生成md5值
             String md5Value = DESUtil.md5(encrypt + "c2lub3NvZnQuY2hhbm5lbC55ZHBpYw==");
-            log.info("请求参数md5的值:{}", md5Value);*/
-
-            String encrypt = "V7akVmOaI/zGPxaIQJ4fCBb3o3T9hBPGinrPT2FkIG2vJkPEWl5Q0qtxf1SUSjX1tgu3OAU37r0rA/ex3ucfdr181Zyuda5MJTUKeSrPqsqBBVP4wGM9r3wxmVff5tOtT11WpGPlkpycNFMICdcRHUDuwNilXxO4YH4ZO0rLaX4jRqWaJCV/qT5JyNyx/Eng4nBPUKaufENPdilIpaBSzk+Z4CjhcPaHbI9aSTEdgLJi5mVWUW1+eNZ/Jebs6Xa8acWKvCDGd1ZaXVXxSToSfU2tueaSkM13Jz78TxJ0zNlBMlU2I96sM5PIkfwjt3+9Re4tz+3vPY1QNLiVIazDZUZguflOoIUwuxsiE7ML2I7K3JJSu1BjDvVIQBtDd21b5wz0HJvclpOuUcCzotL6d0fs1Ml4OZDfbUxEtnbE9bImTKBbcGnxazEKih02LJNAzHIgnty812pNIqMp953tNO8GuNWKGi2ihWkyh315pLO4vN+ZUHuupmmSOuqgKPpnfGyoF4o9xzeLjLpKZ+RhvvJ4z62zhLqtnpJIjH1feihhcOrRulz/RZ1/Pdggv/veV8KkArczSZdfVUPx3OiQ3VkRdkfEg6QzvYITvmkV9PBwUNDB8CL+ltGyYOta6yRINCmF3WIOrf+ELqDTKfxpbq7qLNzShMnrzCW0/DpNXCPvaAARS+le2pBEl4vwhzaHSPiKH6HdvZ89dKSv3WAbUQX/J49z6lmrohhp0q5jX0bjlCgZn3GnqcMQD/FKcWIY62Vo1CJwzCJJmYNAEhkAJEB9/fuYSoCUd6KDz7nPp9+CbqjEo786xIydkoa53/N/5nn61vXrL9STJDRbi5ieFoFnbBwbNHREz4y1P19OZy8ns/vTbI0pvVpqCd0C4auRUupvc4vvT8/nXFpvualOFXUo2P07c/d+MSCjSjhY2hQE04Dx3KrxPaFCt892oh9lRv2vW0yjK+DP3oCVbYg1nk75NjujjWE4sE8GNzW2+mGaYotPcPQ1pvNNIjAacM5SLyRk/yS3ghOaYotPcPQ1ppSi8T8urKHLaJvaU1gbMLtpqmGNp28HZAHYh351WGTI+XHYRd8/U2UHWtn4DT7JI4w6Uua2sccpXgSDDbiSNNvPDaXvKjLqnhEL1PZ8mos21bBX7yAIDWmZSiRl3iaQL0xTlw/Cd8KsGPi65JFbfRAIY0BQu9N36MRVNhpHbhSN6gRd0Z7szd6xN9dZLpk6Yyj1tM5SmZ2P/GW3WAx+ldmKca+TvHljBV94708Q+fJpnlXZ5VH65sVTlKgtqFNCa/Ap9gXNbbGRy7lSMBz9uMRiw+dgeozVjM+KnnkCbBz3a+6xjTeFOpD8KoTgPXafR6kmqVWuncV5RJKmGjtf78L6wstIPeVgNVeTDorlUNPYPbYP28qLrfPlQNd3nYmh7XHptDhfEOiE38+CJd9yUb1rShNQYSUtMxf8OKHXemXQuBzqqGo7ZfsoW0WkGUeQ6Q==";
-
-            String md5Value = "70780a559801c71296c15f0b1488a6c6";
+            log.info("请求参数md5的值:{}", md5Value);
 
             BoHaiCrawlerVehicleConfirmationReqeust2 boHaiCrawlerVehicleConfirmationReqeust2 = new BoHaiCrawlerVehicleConfirmationReqeust2();
             boHaiCrawlerVehicleConfirmationReqeust2.setEncryptionData(encrypt);
@@ -189,7 +194,8 @@ public class BoHaiCrawlerRequestComponent {
 
             AssertionUtils.isEmpty(responseString, "请求异常请重试");
             // 参数解密
-            String decrypt = DESUtil.decrypt(responseString);
+            String decrypt =des.des_decrypt(responseString);
+            log.info("请求返回参数解密:{}", decrypt);
             return JSON.parseObject(decrypt, responseClass);
         } catch (Exception e) {
             e.printStackTrace();
@@ -304,7 +310,7 @@ public class BoHaiCrawlerRequestComponent {
     /**
      * 报价
      *
-     * @param boHaiCrawlerQuotationRequest
+     * @param boHaiCrawlerQuotationRequest2
      * @param headers
      * @return BoHaiCrawlerQuotationResponse
      */
@@ -312,4 +318,35 @@ public class BoHaiCrawlerRequestComponent {
         return request(RequestUrl.PRICE, boHaiCrawlerQuotationRequest2, BoHaiCrawlerQuotationResponse.class, headers);
     }
 
+    /**
+     * 核保
+     *
+     * @param underwritingRequest 核保请求实体
+     * @return 响应
+     */
+    public UnderwritingResponse underwriting(UnderwritingRequest underwritingRequest, String sysSourceCode, String url) throws Exception {
+        return verificationResponse(underwritingRequest, url, UnderwritingResponse.class, sysSourceCode, RequestType.Z00007);
+    }
+
+
+    public <Q extends BoHaiBaseRequest, S extends BoHaiBaseResponse> S verificationResponse(Q q, String url, Class<S> tClass, String sysSourceCode, RequestType requestType) throws Exception {
+        //S response = requestUrl(url, q, tClass, sysSourceCode, requestType);
+        request(RequestUrl.UNDERWRITING, boHaiCrawlerQuotationRequest2, BoHaiCrawlerQuotationResponse.class, headers);
+        verificationResponseCode(response.getResponseCode(), response.getResponseMsg());
+        return response;
+    }
+
+
+    /**
+     * 验证响应
+     *
+     * @param responseCode 响应code
+     * @param responseMsg  响应内容
+     */
+    private void verificationResponseCode(String responseCode, String responseMsg) {
+        if (ResponseCode.R_Z00004.getCode().equals(responseCode)) {
+            throw new SystemException(responseMsg);
+        }
+    }
+
 }

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

@@ -24,12 +24,9 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
 
     // 报价
     CAR("/app-carmodelinfo/netins/jyPreCarModelFill/queryJYPreCarModelFill", "车型查询"),
-
     VEHICLECONFIRMATION("/motor/pspcs/Channel/channelTask/channelTaskMain.do","车辆确认"),
-
-    ACTUAL_VALUE("/api_vhl_prod/api/actualvalue", "计算折旧价格"),
-
     PRICE("/motor/pspcs/Channel/channelTask/channelTaskMain.do", "计算保费"),
+    UNDERWRITING("/motor/pspcs/Channel/channelTask/channelTaskMain.do", "核保"),
 
     SAVE("/api_vhl_prod/api/save", "保存订单"),
     INIT_DATA("/api_vhl_prod/imp/web/page/init_data", "初始化数据"),

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

@@ -1,6 +1,5 @@
 package com.jzg.quotation.bohai.crawler.entity.request;
 
-import com.jzg.quotation.bohai.crawler.util.DESEncryption;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;

+ 11 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/request/BoHaiCrawlerQuotationRequest2.java

@@ -18,14 +18,23 @@ import java.util.List;
 public class BoHaiCrawlerQuotationRequest2 {
 
     /** 请求头信息,含交易码/类型/令牌等 */
+    @JSONField(ordinal = 1)
     private Head head;
+
     /** 业务主体数据,含车辆、被保人、险种等 */
+    @JSONField(ordinal = 2)
     private BusinessData businessData;
+
     /** 登录机构代码(承保机构) */
+    @JSONField(ordinal = 3)
     private String loginCom;
+
     /** 当前操作员代码 */
+    @JSONField(ordinal = 4)
     private String userCode;
+
     /** 一级用户/渠道主账号(若有多级账号体系) */
+    @JSONField(ordinal = 5)
     private String firstUserCode;
 
     /**
@@ -435,8 +444,10 @@ public class BoHaiCrawlerQuotationRequest2 {
         private String businessSort;
         /** 联系人姓名 */
         private String linkerName;
+
         /** 是否特定关系人 */
         private String isSpecialDInsured;
+
         /** 特定关系人姓名 */
         private String specialDInsuredName;
         /** 特定关系人证件类型 */

+ 2568 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/request/BoHaiCrawlerUnderwritingRequest2.java

@@ -0,0 +1,2568 @@
+package com.jzg.quotation.bohai.crawler.entity.request;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 渤海爬虫 核保请求实体类
+ */
+@Data
+public class BoHaiCrawlerUnderwritingRequest2 {
+
+    /**
+     * 请求报文头信息(交易码、类型、令牌)。
+     */
+    private Head head;
+    /**
+     * 业务数据体(保单、车辆、被保险人、险种等完整信息)。
+     */
+    private BusinessData businessData;
+
+    public BoHaiCrawlerUnderwritingRequest2(Head head, BusinessData businessData) {
+        this.head = head;
+        this.businessData = businessData;
+    }
+
+    @Data
+    public static class Head {
+        /**
+         * 交易码,例如:Save。
+         */
+        @JSONField(ordinal = 1)
+        private String transCode;
+        /**
+         * 交易类型,Req/Resp 等。
+         */
+        @JSONField(ordinal = 2)
+        private String transType;
+        /**
+         * 访问令牌,用于鉴权。
+         */
+        @JSONField(ordinal = 3)
+        private String token;
+    }
+
+    @Data
+    public static class BusinessData {
+        /**
+         * 主业务信息(订单、折扣、渠道、操作人等)。
+         */
+        private BusinessMainInfo businessMainInfo;
+        /**
+         * 车辆信息(整车参数与登记信息)。
+         */
+        private CarInfo carInfo;
+        /**
+         * 被保险人/投保人列表。
+         */
+        private List<Insured> insuredList;
+        /**
+         * 险种与费控信息列表。
+         */
+        private List<Risk> riskList;
+        /**
+         * 特别约定列表。
+         */
+        private List<Engage> engageList;
+        /**
+         * 反洗钱与风险提示信息。
+         */
+        private FxqInfo fxqInfo;
+        /**
+         * 付款计划列表。
+         */
+        private List<PayPlan> payPlanList;
+    }
+
+    @Data
+    public static class BusinessMainInfo {
+        /**
+         * 续保客户类型。
+         */
+        private String reneClientType;
+        /**
+         * 驾驶行为模型评分请求号。
+         */
+        private String driModelScoreReqNo;
+        /**
+         * 价格配置ID集合。
+         */
+        private String pcIds;
+        /**
+         * 固定价格状态。
+         */
+        private String fixPriceStatus;
+        /**
+         * 定价方案ID。
+         */
+        private String praID;
+        /**
+         * 固价规则ID。
+         */
+        private String fixPriceRuleId;
+        /**
+         * 固价类型。
+         */
+        private String fixPriceType;
+        /**
+         * 渠道/子单元ID。
+         */
+        private String chdId;
+        /**
+         * 风控标志。
+         */
+        private String riskControlFlag;
+        /**
+         * 费用类型。
+         */
+        private String feeType;
+        /**
+         * 固价编号。
+         */
+        private String fixPriceNo;
+        /**
+         * 期望折扣率。
+         */
+        private String expectDiscount;
+        /**
+         * 佣金标志。
+         */
+        private String commissionFlag;
+        /**
+         * 整体初始折扣。
+         */
+        private String entireInitialDiscount;
+        /**
+         * 整体推荐折扣。
+         */
+        private String entireRecommenDiscount;
+        /**
+         * 整体浮动折扣。
+         */
+        private String entireFloatDiscount;
+        /**
+         * 主车种(保车种分类)。
+         */
+        private String mainCarKindBC;
+        /**
+         * 资源类型代码。
+         */
+        private String resourceTypeCode;
+        /**
+         * 业务单号/订单号。
+         */
+        private String businessNo;
+        /**
+         * 业务类型(如 O 表示新保等)。
+         */
+        private String businessType;
+        /**
+         * 关联单号。
+         */
+        private String relatedNo;
+        /**
+         * 关联类型。
+         */
+        private String relatedType;
+        /**
+         * 制单/归属机构代码。
+         */
+        private String comCode;
+        /**
+         * 业务类别一。
+         */
+        private String businessCategories1;
+        /**
+         * 业务类别二。
+         */
+        private String businessCategories2;
+        /**
+         * 业务类别三。
+         */
+        private String businessCategories3;
+        /**
+         * 业务类别四。
+         */
+        private String businessCategories4;
+        /**
+         * 标识类型(证件类型)。
+         */
+        private String identifyType;
+        /**
+         * 标识明细(识别细分代码)。
+         */
+        private String identifyDetail;
+        /**
+         * 标识代码。
+         */
+        private String identifyCode;
+        /**
+         * VIP 标识。
+         */
+        private String identifyVip;
+        /**
+         * 业务经办人代码。
+         */
+        private String handlerCode;
+        /**
+         * 经办人联系电话。
+         */
+        private String handlerPhone;
+        /**
+         * 代理人/中介代码。
+         */
+        private String agentCode;
+        /**
+         * 协议编号/合同号。
+         */
+        private String agreementNo;
+        /**
+         * 销售人员/渠道信息。
+         */
+        private String sales;
+        /**
+         * 专业编号(内部标识)。
+         */
+        private String professionalNo;
+        /**
+         * 城市代码。
+         */
+        private String cityCode;
+        /**
+         * 区县代码。
+         */
+        private String countyCode;
+        /**
+         * 是否上门核保标志。
+         */
+        private String visitInsuredFlag;
+        /**
+         * 支付信息是否可校验标志。
+         */
+        private String payInfoAuthenticationCheckable;
+        /**
+         * 支付信息认证备注。
+         */
+        private String payInfoAuthenticationComment;
+        /**
+         * 支付方式代码。
+         */
+        private String payMethod;
+        /**
+         * 目标被保险人标志。
+         */
+        private String goalInsuredFlag;
+        /**
+         * 中介代理机构代码。
+         */
+        private String intermediaryAgentCode;
+        /**
+         * 中介代理机构名称。
+         */
+        private String intermediaryAgentName;
+        /**
+         * 承保单位。
+         */
+        private String underUnit;
+        /**
+         * 争议解决方式代码。
+         */
+        private String argueSolution;
+        /**
+         * 仲裁委员会名称。
+         */
+        private String arbitBoardName;
+        /**
+         * 操作员代码。
+         */
+        private String operatorCode;
+        /**
+         * 操作日期(yyyy-MM-dd)。
+         */
+        private String operateDate;
+        /**
+         * 制单机构代码。
+         */
+        private String makeCom;
+        /**
+         * 录入日期(yyyy-MM-dd)。
+         */
+        private String inputDate;
+        /**
+         * 录入小时(0-23)。
+         */
+        private String inputHour;
+        /**
+         * 最后更新人代码。
+         */
+        private String updaterCode;
+        /**
+         * 最后更新日期(yyyy-MM-dd)。
+         */
+        private String updateDate;
+        /**
+         * 最后更新小时(0-23)。
+         */
+        private String updateHour;
+        /**
+         * 签单日期(yyyy-MM-dd)。
+         */
+        private String signDate;
+        /**
+         * 备注信息。
+         */
+        private String remark;
+        /**
+         * 远程代理标志。
+         */
+        private String remoteAgentFlag;
+        /**
+         * 品牌/合作方代码。
+         */
+        private String bandCode;
+        /**
+         * 是否需卡标志。
+         */
+        private String cardFlag;
+        /**
+         * 远程办理标志。
+         */
+        private String remoteFlag;
+        /**
+         * 卡号/凭证号。
+         */
+        private String cardNo;
+        /**
+         * 销售系统标识。
+         */
+        private String saleSys;
+        /**
+         * 取消标志。
+         */
+        private String cancelFlag;
+        /**
+         * 总保额。
+         */
+        private String sumAmount;
+        /**
+         * 总折扣。
+         */
+        private String sumDiscount;
+        /**
+         * 总保费。
+         */
+        private String sumPremium;
+        /**
+         * 员工所属机构代码。
+         */
+        private String employeeComCode;
+        /**
+         * 校验码/验证码。
+         */
+        private String verificationCode;
+        /**
+         * 配置信息ID。
+         */
+        private String configInfoId;
+        /**
+         * 更新开始时间(yyyy-MM-dd HH:mm:ss)。
+         */
+        private String updateStartTime;
+        /**
+         * 投保单起始时间(yyyy-MM-dd HH:mm:ss)。
+         */
+        private String proposalStartTime;
+        /**
+         * 是否承保标志。
+         */
+        private String isInsureFlag;
+        /**
+         * 销售人员证件号码。
+         */
+        private String salerIdentifyNumber;
+        /**
+         * 业务唯一标识 UUID。
+         */
+        private String uuid;
+        /**
+         * 客户号。
+         */
+        private String customerNo;
+        /**
+         * 电子渠道操作员代码。
+         */
+        private String dxOperatorCode;
+        /**
+         * 业务属性代码。
+         */
+        private String businessAttribute;
+        /**
+         * 渠道类型代码。
+         */
+        private String channelType;
+        /**
+         * 是否附属交易标志。
+         */
+        private String isAffiliTransaction;
+        /**
+         * 是否重提标志/备注。
+         */
+        private String resubmit;
+        /**
+         * SD 标识/子单元ID。
+         */
+        private String sdId;
+        /**
+         * 投保模式(线上/线下等)。
+         */
+        private String tbMode;
+        /**
+         * 是否新影像标志。
+         */
+        private String isNewImage;
+        /**
+         * 交强险业务单元代码。
+         */
+        private String bussUnitCodeCI;
+        /**
+         * 商业险业务单元代码。
+         */
+        private String bussUnitCode;
+        /**
+         * 计价模式(如 个车/车队)。
+         */
+        private String priceMode;
+        /**
+         * 高风险评估编号。
+         */
+        private String highRiskAssessId;
+        /**
+         * 报价时间(ISO 字符串)。
+         */
+        private String quotationTime;
+        /**
+         * 客户类型(续保/新保等)。
+         */
+        private String reCustomerType;
+        /**
+         * 上年调整值。
+         */
+        private String lastYearAdjustValue;
+        /**
+         * 续保状态。
+         */
+        private String reStatus;
+        /**
+         * 续保任务处理人代码。
+         */
+        private String reTaskUserCode;
+        /**
+         * 续保任务处理人名称。
+         */
+        private String reTaskUserName;
+        /**
+         * 跟踪ID。
+         */
+        private String followID;
+        /**
+         * OpenID(外部用户标识)。
+         */
+        private String openId;
+        /**
+         * 客户端IP。
+         */
+        private String clientIp;
+    }
+
+    @Data
+    public static class CarInfo {
+        /**
+         * 车辆基本信息。
+         */
+        private ItemCarInfo itemCarInfo;
+        /**
+         * 充电相关信息列表(新能源场景)。
+         */
+        private List<Object> chargingInfoList;
+        /**
+         * 车载设备列表。
+         */
+        private List<Object> deviceList;
+    }
+
+    @Data
+    public static class ItemCarInfo {
+        /**
+         * 发动机类型代码。
+         */
+        private String motorTypeCode;
+        /**
+         * 最高设计车速。
+         */
+        private String maxDesignSpeed;
+        /**
+         * 车型样式唯一标识。
+         */
+        private String vehicleStyleUniqueId;
+        /**
+         * 纯电续航里程。
+         */
+        private String pureRange;
+        /**
+         * 其他能源类型描述。
+         */
+        private String otherEnergyTypeDesc;
+        /**
+         * 燃料类型(主)。
+         */
+        private String pmFuelType;
+        /**
+         * 检验机构代码。
+         */
+        private String checkSCCode;
+        /**
+         * 新车标志。
+         */
+        private String newVehicleFlag;
+        /**
+         * 车牌号码。
+         */
+        private String licenseNo;
+        /**
+         * 车架号(VIN)。
+         */
+        private String frameNo;
+        /**
+         * 发动机号。
+         */
+        private String engineNo;
+        /**
+         * 车辆识别代号(VIN)。
+         */
+        private String vinNo;
+        /**
+         * 外地车标志。
+         */
+        private String ecdemicVehicleFlag;
+        /**
+         * 无牌车标志。
+         */
+        private String noLicenseFlag;
+        /**
+         * 号牌底色代码。
+         */
+        private String licenseColorCode;
+        /**
+         * 使用性质代码(营运/非营运)。
+         */
+        private String useNatureCode;
+        /**
+         * 主车种代码。
+         */
+        private String mainCarKindCode;
+        /**
+         * 车种代码。
+         */
+        private String carKindCode;
+        /**
+         * 品牌型号名称。
+         */
+        private String brandName;
+        /**
+         * 打印用品牌型号名称。
+         */
+        private String prnBrandName;
+        /**
+         * 核定载客数(座位数)。
+         */
+        private String seatCount;
+        /**
+         * 核定载质量(吨位)。
+         */
+        private String tonCount;
+        /**
+         * 购置价(含税)。
+         */
+        private String purchasePrice;
+        /**
+         * 基础购置价(不含可选配置)。
+         */
+        private String basePurchasePrice;
+        /**
+         * 排量(升)。
+         */
+        private String exhaustScale;
+        /**
+         * 初登日期(yyyy-MM-dd)。
+         */
+        private String enrollDate;
+        /**
+         * 使用年限(商业险)。
+         */
+        private String useYearsBI;
+        /**
+         * 使用年限(交强险)。
+         */
+        private String useYearsCI;
+        /**
+         * 使用年限(车船税/其他)。
+         */
+        private String useYearsDI;
+        /**
+         * 是否过户标志。
+         */
+        private String chgOwnerFlag;
+        /**
+         * 过户类型标志。
+         */
+        private String chgTypeFlag;
+        /**
+         * 过户日期(yyyy-MM-dd)。
+         */
+        private String chgOwnerDate;
+        /**
+         * 国别性质。
+         */
+        private String countryNature;
+        /**
+         * 车型代码。
+         */
+        private String modelCode;
+        /**
+         * 平台车型代码。
+         */
+        private String platformModelCode;
+        /**
+         * 行驶里程(公里)。
+         */
+        private String runMiles;
+        /**
+         * 行驶区域代码。
+         */
+        private String runAreaCode;
+        /**
+         * 交通违法记录次数/标识。
+         */
+        private String trafficViolationRecords;
+        /**
+         * 车身颜色代码。
+         */
+        private String colorCode;
+        /**
+         * 制造厂家。
+         */
+        private String madeFactory;
+        /**
+         * 出厂日期(yyyy-MM-dd)。
+         */
+        private String makeDate;
+        /**
+         * 车辆品牌。
+         */
+        private String vehicleBrand;
+        /**
+         * 整备质量(kg)。
+         */
+        private String completeKerbMass;
+        /**
+         * 号牌种类代码。
+         */
+        private String licenseKindCode;
+        /**
+         * 车辆类别(公告/行驶证类别)。
+         */
+        private String licenseCategory;
+        /**
+         * 商业险续保标志。
+         */
+        private String renewalFlagBI;
+        /**
+         * 损失因子等级。
+         */
+        private String damagedFactorGrade;
+        /**
+         * 特种车辆标志。
+         */
+        private String specialVehicleFlag;
+        /**
+         * 按揭/贷款车辆标志。
+         */
+        private String loanVehicleFlag;
+        /**
+         * 保额/保费占比。
+         */
+        private String proportion;
+        /**
+         * 风险类型代码。
+         */
+        private String riskType;
+        /**
+         * 是否节能/新能源标志。
+         */
+        private String energySavingOrNewEnergy;
+        /**
+         * 上次承保公司代码。
+         */
+        private String lastProducerCode;
+        /**
+         * 是否有债务/抵押标志。
+         */
+        private String debtFlag;
+        /**
+         * 限行/限号标志。
+         */
+        private String restricFlag;
+        /**
+         * 查询流水号。
+         */
+        private String searchSequenceNo;
+        /**
+         * 是否出租车标志。
+         */
+        private String isTaxi;
+        /**
+         * 打印用排量。
+         */
+        private String prnExhaustScale;
+        /**
+         * 打印用整备质量。
+         */
+        private String prnCompleteKerbMassNew;
+        /**
+         * 燃料类型1。
+         */
+        private String fuelType1;
+        /**
+         * 行业车型代码。
+         */
+        private String industryCarTypeCode;
+        /**
+         * 行业车型名称。
+         */
+        private String industryCarTypeName;
+        /**
+         * 指定查询区域代码。
+         */
+        private String specifiedQueryArea;
+        /**
+         * 是否配备 ABS 标志。
+         */
+        private String carABSFlag;
+        /**
+         * 燃料类型2。
+         */
+        private String fuelType2;
+        /**
+         * 微型车标志。
+         */
+        private String miniCar;
+        /**
+         * 车辆归属地代码。
+         */
+        private String carAddressCode;
+        /**
+         * 行驶证发证日期(yyyy-MM-dd)。
+         */
+        private String issueDate;
+        /**
+         * 新增设备标志。
+         */
+        private String newDeviceFlag;
+        /**
+         * 车辆实际价值。
+         */
+        private String actualValue;
+        /**
+         * 购车发票号。
+         */
+        private String invoiceNo;
+        /**
+         * 车主地址。
+         */
+        private String ownerAddress;
+        /**
+         * 停放地点。
+         */
+        private String parkSite;
+        /**
+         * 牵引类型。
+         */
+        private String tractorType;
+        /**
+         * 车辆核查状态。
+         */
+        private String verifyStatus;
+        /**
+         * 核查原因。
+         */
+        private String verifyReason;
+        /**
+         * 核查其他原因说明。
+         */
+        private String verifyReasonOtherReason;
+        /**
+         * 验车状态。
+         */
+        private String carCheckStatus;
+        /**
+         * 验车人员。
+         */
+        private String carChecker;
+        /**
+         * 验车时间(yyyy-MM-dd HH:mm:ss)。
+         */
+        private String carCheckTime;
+        /**
+         * 车况等级/描述。
+         */
+        private String carCondition;
+        /**
+         * 车况其他说明。
+         */
+        private String carOtherCondition;
+        /**
+         * 验车延迟责任人。
+         */
+        private String carCheckDelayResponsible;
+        /**
+         * 验车延迟天数。
+         */
+        private String carCheckDelayDays;
+        /**
+         * 验车原因。
+         */
+        private String carCheckReason;
+        /**
+         * 验车其他原因。
+         */
+        private String carCheckOtherReason;
+        /**
+         * 品牌代码。
+         */
+        private String brandCode;
+        /**
+         * 车系名称。
+         */
+        private String series;
+        /**
+         * 车系代码。
+         */
+        private String seriesCode;
+        /**
+         * 核保对比标志。
+         */
+        private String contrastFlag;
+        /**
+         * 含税标志。
+         */
+        private String taxInclued;
+        /**
+         * 合格证/证书类型。
+         */
+        private String certificateType;
+        /**
+         * 合格证/证书编号。
+         */
+        private String certificateNo;
+        /**
+         * 合格证日期(yyyy-MM-dd)。
+         */
+        private String certificateDate;
+        /**
+         * 月折旧率。
+         */
+        private String monthDepRate;
+        /**
+         * 车辆类型(如 客车/货车)。
+         */
+        private String vehicleType;
+        /**
+         * 银行/按揭机构代码。
+         */
+        private String bankCode;
+        /**
+         * 是否港澳车辆标志。
+         */
+        private String hkFlag;
+        /**
+         * 港澳车牌号。
+         */
+        private String hkPlateNo;
+        /**
+         * 车队编号。
+         */
+        private String fleetNo;
+        /**
+         * 平台查询编号。
+         */
+        private String pmQueryNo;
+        /**
+         * 发票日期(yyyy-MM-dd)。
+         */
+        private String invoiceDate;
+        /**
+         * 总质量(kg)。
+         */
+        private String grossMass;
+        /**
+         * 牵引总质量(kg)。
+         */
+        private String tractionMass;
+        /**
+         * 车辆名称/别名。
+         */
+        private String carName;
+        /**
+         * 配置类型(车型配置版本)。
+         */
+        private String configType;
+        /**
+         * 车辆类别名称。
+         */
+        private String categoryName;
+        /**
+         * 车辆类别代码。
+         */
+        private String categoryCode;
+        /**
+         * 部门名称。
+         */
+        private String deptName;
+        /**
+         * 部门代码。
+         */
+        private String deptCode;
+        /**
+         * 失效日期。
+         */
+        private String ineffectualDate;
+        /**
+         * 拒保日期。
+         */
+        private String rejectDate;
+        /**
+         * 最近年检日期。
+         */
+        private String lastCheckDate;
+        /**
+         * 基本费率代码。
+         */
+        private String basicRateCode;
+        /**
+         * 动力类型(汽油/柴油/纯电等)。
+         */
+        private String powerType;
+        /**
+         * 动力类型代码。
+         */
+        private String powerTypeCode;
+        /**
+         * 续保时间。
+         */
+        private String renewalTime;
+        /**
+         * 无赔款年限(商业险)。
+         */
+        private String noDamageYearsBI;
+        /**
+         * 无赔款年限(交强险)。
+         */
+        private String noDamageYearsCI;
+        /**
+         * 解限区域代码。
+         */
+        private String relievingAreaCode;
+        /**
+         * 4S 店/修理厂代码。
+         */
+        private String carShopCode;
+        /**
+         * 优先服务类型。
+         */
+        private String priorityServicerType;
+        /**
+         * 优先服务代码。
+         */
+        private String priorityServicerCode;
+        /**
+         * 保单查找日期。
+         */
+        private String policyFindDate;
+        /**
+         * 通知书类型。
+         */
+        private String noticeType;
+        /**
+         * 购车发票日期(yyyy-MM-dd)。
+         */
+        private String purchaseInvoiceDate;
+        /**
+         * 纯风险保费。
+         */
+        private String pureRiskPremium;
+        /**
+         * 协议估值/谈判价值。
+         */
+        private String negotiatedValue;
+        /**
+         * 新车种代码。
+         */
+        private String carKindCodeNew;
+        /**
+         * 原始座位数。
+         */
+        private String originalSeatCount;
+        /**
+         * 原始吨位。
+         */
+        private String originalTonCount;
+        /**
+         * 原始排量。
+         */
+        private String originalExhaustScale;
+        /**
+         * 要求验车原因。
+         */
+        private String carNeedCheckReason;
+        /**
+         * 车辆用途/使用说明。
+         */
+        private String carUsage;
+        /**
+         * 交强险无赔调整原因。
+         */
+        private String noClaimAdjustReasonCI;
+        /**
+         * 商业险无赔调整原因。
+         */
+        private String noClaimAdjustReasonBI;
+        /**
+         * 牵引吨位。
+         */
+        private String tractiveTonnage;
+        /**
+         * 是否网约车标志。
+         */
+        private String isNetworkCar;
+        /**
+         * 功率(kW)。
+         */
+        private String power;
+        /**
+         * 打印用功率。
+         */
+        private String prnPower;
+        /**
+         * 原始功率。
+         */
+        private String originalPower;
+        /**
+         * 是否新车标志。
+         */
+        private String isNewCar;
+        /**
+         * 交管预登记车号。
+         */
+        private String jyPreCarNo;
+    }
+
+    @Data
+    public static class Insured {
+        /**
+         * 序号(被保险人列表)。
+         */
+        private String serialNo;
+        /**
+         * 与投保人关系代码。
+         */
+        private String appliInsuredRelation;
+        /**
+         * 省份代码。
+         */
+        private String provinceCode;
+        /**
+         * 城市代码。
+         */
+        private String cityCode;
+        /**
+         * 区县代码。
+         */
+        private String countyCode;
+        /**
+         * 行政地址(户籍/登记地址)。
+         */
+        private String adminAddress;
+        /**
+         * 代理人姓名。
+         */
+        private String agentName;
+        /**
+         * 代理人证件类型。
+         */
+        private String agentIdcardType;
+        /**
+         * 代理人证件号码。
+         */
+        private String agentIdcard;
+        /**
+         * 代理人联系电话。
+         */
+        private String agentPhone;
+        /**
+         * 团单政策/团险标识。
+         */
+        private String groupPolicies;
+        /**
+         * 被保险人代码。
+         */
+        private String insuredCode;
+        /**
+         * 证件签发机关。
+         */
+        private String identifyIssuer;
+        /**
+         * 证件号码。
+         */
+        private String identifyNumber;
+        /**
+         * 证件类型。
+         */
+        private String identifyType;
+        /**
+         * 证件生效日期(yyyy-MM-dd)。
+         */
+        private String identifyStartDate;
+        /**
+         * 证件失效日期(yyyy-MM-dd)。
+         */
+        private String identifyEndDate;
+        /**
+         * 被保险人姓名/名称。
+         */
+        private String insuredName;
+        /**
+         * 被保险人标志(1投保人/2被保人/3车主等)。
+         */
+        private String insuredFlag;
+        /**
+         * 被保险人类型(个人/单位)。
+         */
+        private String insuredType;
+        /**
+         * 性别(1男/2女)。
+         */
+        private String gender;
+        /**
+         * 出生日期(yyyy-MM-dd)。
+         */
+        private String birthDay;
+        /**
+         * 被保险人性质(自然人/法人等)。
+         */
+        private String insuredNature;
+        /**
+         * 联系人姓名。
+         */
+        private String linkerName;
+        /**
+         * 固定电话。
+         */
+        private String phoneNumber;
+        /**
+         * 手机号码。
+         */
+        private String mobile;
+        /**
+         * 被保险人地址。
+         */
+        private String insuredAddress;
+        /**
+         * 邮政编码。
+         */
+        private String postCode;
+        /**
+         * 地址省代码。
+         */
+        private String address1;
+        /**
+         * 地址市代码。
+         */
+        private String address2;
+        /**
+         * 地址区县代码。
+         */
+        private String address3;
+        /**
+         * 通讯地址。
+         */
+        private String postAddress;
+        /**
+         * 电子邮箱。
+         */
+        private String email;
+        /**
+         * 风险等级。
+         */
+        private String riskGrade;
+        /**
+         * 营业执照类型。
+         */
+        private String businessLicenseType;
+        /**
+         * 与车辆关系(车主/使用人等)。
+         */
+        private String carInsuredRelation;
+        /**
+         * 组织机构代码。
+         */
+        private String orgCode;
+        /**
+         * 年龄。
+         */
+        private String age;
+        /**
+         * 业务分类。
+         */
+        private String businessSort;
+        /**
+         * 民族。
+         */
+        private String nation;
+        /**
+         * 证件地址。
+         */
+        private String identifyAddress;
+        /**
+         * 国籍。
+         */
+        private String nationality;
+        /**
+         * 纳税人类型。
+         */
+        private String taxpayerType;
+        /**
+         * 统一社会信用代码。
+         */
+        private String creditCode;
+        /**
+         * 纳税人识别号。
+         */
+        private String taxpayerIdentifier;
+        /**
+         * 纳税人开户银行。
+         */
+        private String taxpayerBank;
+        /**
+         * 纳税人银行账号。
+         */
+        private String taxpayerAccount;
+        /**
+         * 纳税人联系电话。
+         */
+        private String taxpayerPhoneNumber;
+        /**
+         * 纳税人地址。
+         */
+        private String taxpayerAddress;
+        /**
+         * 是否关联方(0/1)。
+         */
+        private Integer relatedParty;
+        /**
+         * 关联方代码。
+         */
+        private String relatedPartyCode;
+        /**
+         * 关联关系说明。
+         */
+        private String relatedPartyRelation;
+        /**
+         * 投保人国籍代码(业务编码)。
+         */
+        private String appliCitizenshipBC;
+        /**
+         * 投保人国家代码(业务编码)。
+         */
+        private String appliCountryBC;
+        /**
+         * 是否手机持有人标志。
+         */
+        private String isPhoneHolderFlag;
+        /**
+         * 手机持有人姓名。
+         */
+        private String phoneHolderName;
+        /**
+         * 手机持有人证件号码。
+         */
+        private String phoneHolderCertiCode;
+        /**
+         * 操作人姓名。
+         */
+        private String operatorName;
+        /**
+         * 操作人类型。
+         */
+        private String operatorType;
+        /**
+         * 操作人证件类型。
+         */
+        private String operatorCertiType;
+        /**
+         * 操作人证件号码。
+         */
+        private String operatorCertiCode;
+        /**
+         * 操作人联系电话。
+         */
+        private String operatorPhoneNo;
+        /**
+         * 操作人邮箱。
+         */
+        private String operatorEmail;
+        /**
+         * 是否个体工商户标志。
+         */
+        private String isIndividualBusi;
+        /**
+         * 是否特定被保险人标志。
+         */
+        private String isSpecialDInsured;
+        /**
+         * 特定被保险人名称。
+         */
+        private String specialDInsuredName;
+        /**
+         * 特定被保人证件类型。
+         */
+        private String specialDInsuredIDType;
+        /**
+         * 特定被保人证件号码。
+         */
+        private String specialDInsuredID;
+        /**
+         * 无特定被保险人证明标志。
+         */
+        private String noSpecialDInsuredP;
+        /**
+         * 特定被保险人人数。
+         */
+        private String DInsuredCount;
+        /**
+         * 受益人标志。
+         */
+        private String benefitFlag;
+        /**
+         * 受益顺序。
+         */
+        private String benefitOrder;
+        /**
+         * 受益比例(%)。
+         */
+        private String benefitRate;
+        /**
+         * 是否投保人标志。
+         */
+        private String isApplicantFlag;
+        /**
+         * 是否绿色行业标志。
+         */
+        private String isGreenIndustryFlag;
+        /**
+         * 绿色行业一级代码。
+         */
+        private String greenIndustryFCode;
+        /**
+         * 绿色行业二级代码。
+         */
+        private String greenIndustrySCode;
+        /**
+         * 绿色行业三级代码。
+         */
+        private String greenIndustryTCode;
+        /**
+         * 是否小微企业标志。
+         */
+        private String isSmall;
+        /**
+         * 职业。
+         */
+        private String career;
+        /**
+         * 资产情况。
+         */
+        private String asset;
+        /**
+         * 单位/门店数量。
+         */
+        private String numberOfUnits;
+        /**
+         * 业务类别。
+         */
+        private String busiCategory;
+        /**
+         * 业务类别类型。
+         */
+        private String busiCategoryType;
+        /**
+         * 业务类别子类。
+         */
+        private String busiCategorySub;
+        /**
+         * 业务类别精确分类。
+         */
+        private String busiCategoryExac;
+    }
+
+    @Data
+    public static class Risk {
+        /**
+         * 险种主信息。
+         */
+        private RiskMainInfo riskMainInfo;
+        /**
+         * 费用控制信息。
+         */
+        private FeeControlInfo feeControlInfo;
+        /**
+         * 责任/条款项列表。
+         */
+        private List<ItemKind> itemKindList;
+        /**
+         * 主附加险列表(保留位,暂无结构)。
+         */
+        private List<Object> mainSubList;
+        /**
+         * 车船税信息。
+         */
+        private CarShipTaxInfo carShipTaxInfo;
+        /**
+         * 赔偿限额列表。
+         */
+        private List<Limit> limitList;
+    }
+
+    @Data
+    public static class RiskMainInfo {
+        /**
+         * 投保单号。
+         */
+        private String proposalNo;
+        /**
+         * 序号(险种列表)。
+         */
+        private String serialNo;
+        /**
+         * 调整后折扣。
+         */
+        private String adjustDiscount;
+        /**
+         * 条款类型。
+         */
+        private String clauseType;
+        /**
+         * 保单分类。
+         */
+        private String policySort;
+        /**
+         * 险类代码。
+         */
+        private String classCode;
+        /**
+         * 险种代码。
+         */
+        private String riskCode;
+        /**
+         * 保单合同号。
+         */
+        private String contractNo;
+        /**
+         * 折扣率。
+         */
+        private String discount;
+        /**
+         * 币种。
+         */
+        private String currency;
+        /**
+         * 险种合计折扣。
+         */
+        private String sumDiscount;
+        /**
+         * 险种合计保额。
+         */
+        private String sumAmount;
+        /**
+         * 总风险保费。
+         */
+        private String totalRiskPremium;
+        /**
+         * 总风险保费区间。
+         */
+        private String totalRiskPremiumRange;
+        /**
+         * 险种合计保费。
+         */
+        private String sumPremium;
+        /**
+         * 附加险合计保费。
+         */
+        private String sumSubPrem;
+        /**
+         * 核保人代码。
+         */
+        private String underwriteCode;
+        /**
+         * 核保结束日期。
+         */
+        private String underwriteEndDate;
+        /**
+         * 核保标志。
+         */
+        private String underwriteFlag;
+        /**
+         * 卡类产品标志。
+         */
+        private String cardProductFlag;
+        /**
+         * 原始费率/折扣。
+         */
+        private String disrateOrigin;
+        /**
+         * 监管折扣。
+         */
+        private String regulatoryDisrate;
+        /**
+         * 不退费标志。
+         */
+        private String noReturnFeeFlag;
+        /**
+         * PDF 生成标志。
+         */
+        private String pdfFlag;
+        /**
+         * 上张保单号。
+         */
+        private String lastPolicyNo;
+        /**
+         * 续保标志。
+         */
+        private String renewalFlag;
+        /**
+         * 批改类型。
+         */
+        private String endorType;
+        /**
+         * 批改文本/说明。
+         */
+        private String endorText;
+        /**
+         * 起保日期。
+         */
+        private String startDate;
+        /**
+         * 起保时(0-24)。
+         */
+        private String startHour;
+        /**
+         * 终保日期。
+         */
+        private String endDate;
+        /**
+         * 终保时(0-24)。
+         */
+        private String endHour;
+        /**
+         * 是否立即生效标志。
+         */
+        private String immediatelyActiveFlag;
+        /**
+         * 生效开始时间。
+         */
+        private String activeStartTime;
+        /**
+         * 生效结束时间。
+         */
+        private String activeEndTime;
+        /**
+         * 查询流水号。
+         */
+        private String querySequenceNo;
+        /**
+         * 确认流水号。
+         */
+        private String confirmSequenceNo;
+        /**
+         * 特别约定标志。
+         */
+        private String specialContractFlag;
+        /**
+         * 特别约定摘要。
+         */
+        private String specialContractSummary;
+        /**
+         * 不浮动标志。
+         */
+        private String noneFluctuateFlag;
+        /**
+         * 无赔优惠系数(NCD)。
+         */
+        private String ncdCoefficient;
+        /**
+         * 渠道系数。
+         */
+        private String channelCoefficient;
+        /**
+         * 核保系数。
+         */
+        private String underwritingCoefficient;
+        /**
+         * 调整系数。
+         */
+        private String adjustCoefficient;
+        /**
+         * 交通违法系数。
+         */
+        private String trafficViolationCoefficient;
+        /**
+         * 渠道系数变动值。
+         */
+        private String channelCoefficientVariation;
+        /**
+         * 核保系数变动值。
+         */
+        private String underwritingCoefficientVariation;
+        /**
+         * 是否需要报价标志。
+         */
+        private String ifNeedQuote;
+        /**
+         * 期望损失率。
+         */
+        private String expectLossRate;
+        /**
+         * 规则说明。
+         */
+        private String ruleDescription;
+        /**
+         * 交易流水号。
+         */
+        private String tradeID;
+        /**
+         * 计算类型。
+         */
+        private String calculateType;
+        /**
+         * 第三方记录编码。
+         */
+        private String thirdRecordCode;
+        /**
+         * 折扣/费率。
+         */
+        private String disrate;
+        /**
+         * 核保人姓名。
+         */
+        private String underwriteName;
+        /**
+         * 撤销标志。
+         */
+        private String cancelFlag;
+        /**
+         * 支付标志。
+         */
+        private String payFlag;
+        /**
+         * 期望费率。
+         */
+        private String hopeRate;
+        /**
+         * 代理查询码。
+         */
+        private String agentQueryCode;
+        /**
+         * 客户属性代码。
+         */
+        private String customerProperty;
+        /**
+         * 风险系数。
+         */
+        private String riskCoefficient;
+        /**
+         * 业务系数。
+         */
+        private String businessCoefficient;
+        /**
+         * 车辆系数。
+         */
+        private String vehicleCoefficient;
+        /**
+         * 客户系数。
+         */
+        private String customerCoefficient;
+        /**
+         * 车队系数。
+         */
+        private String fleetCoefficient;
+        /**
+         * 家庭规模。
+         */
+        private String familySzie;
+        /**
+         * 家庭收入。
+         */
+        private String householdIncome;
+        /**
+         * 其他已购产品。
+         */
+        private String otherProducts;
+        /**
+         * 产品明细1。
+         */
+        private String productDetalis1;
+        /**
+         * 产品明细2。
+         */
+        private String productDetalis2;
+        /**
+         * 当前保险公司。
+         */
+        private String currentCompany;
+        /**
+         * 驾龄(年)。
+         */
+        private String driveAge;
+        /**
+         * 驾驶人性别。
+         */
+        private String driverSex;
+        /**
+         * 驾驶人姓名。
+         */
+        private String driveName;
+        /**
+         * 维度代码(核保模型)。
+         */
+        private String dimensionCode;
+        /**
+         * 折扣费用。
+         */
+        private String disFee;
+        /**
+         * 是否涉农标志。
+         */
+        private String isfarm;
+        /**
+         * 签单日期。
+         */
+        private String signDate;
+        /**
+         * 操作日期。
+         */
+        private String operateDate;
+        /**
+         * 录入日期。
+         */
+        private String inputDate;
+        /**
+         * 是否承保标志。
+         */
+        private String isInsure;
+        /**
+         * 特批审批编码。
+         */
+        private String specialApprovalCode;
+        /**
+         * 团单编码。
+         */
+        private String groupBillCode;
+        /**
+         * 定价结果ID。
+         */
+        private String priceId;
+        /**
+         * 未含税金额。
+         */
+        private String noTaxAmount;
+        /**
+         * 定价调整值。
+         */
+        private String pricingAdjustValue;
+        /**
+         * 税额。
+         */
+        private String taxAmount;
+    }
+
+    @Data
+    public static class FeeControlInfo {
+        private String allRiskLevel;
+        private String amountA10;
+        private String amountA11;
+        private String amountA12;
+        private String amountA13;
+        private String amountA14;
+        private String amountA15;
+        private String amountA4;
+        private String amountA5;
+        private String amountA7;
+        private String amountA8;
+        private String basicAmount;
+        private String basicDisrate;
+        private String basicDisrateOrigin;
+        private String comCodeFlg;
+        private String currency;
+        private String dimensionCode;
+        private String disFee;
+        private String disRate;
+        private String disRate1;
+        private String disRate2;
+        private String disRateOrigin;
+        private String effRateOrigin;
+        private String efftAmount;
+        private String efftAmount1;
+        private String efftRate;
+        private String efftRate1;
+        private String flag;
+        private String ilogNo;
+        private String inSpaceAmount;
+        private String inSpaceRate;
+        private String inSpaceRateOrigin;
+        private String incAmount1;
+        private String incAount;
+        private String incRate;
+        private String incRate1;
+        private String incRateOrigin;
+        private String managementAmount;
+        private String managementDisrate;
+        private String managementDisrateOrigin;
+        private String noTaxAmount;
+        private String otherAmount;
+        private String otherRate;
+        private String otherRateOrigin;
+        private String outSpaceAmount;
+        private String outSpaceRate;
+        private String outSpaceRateOrigin;
+        private String rateA10;
+        private String rateA11;
+        private String rateA12;
+        private String rateA13;
+        private String rateA14;
+        private String rateA15;
+        private String rateA4;
+        private String rateA5;
+        private String rateA7;
+        private String rateA8;
+        private String regulatoryTaxAmount;
+        private String regulatoryTaxDisrate;
+        private String regulatoryTaxDisrateOrigin;
+        private String remark;
+        private String riskCode;
+        private String saleAmount;
+        private String saleBaseAmount;
+        private String saleBaseDisrate;
+        private String saleBaseDisrateOrigin;
+        private String saleDisrate;
+        private String saleDisrateOrigin;
+        private String salesBusinessPerAmount;
+        private String salesBusinessPerRate;
+        private String salesManCostAmount;
+        private String salesManCostRate;
+        private String salesManagementFeeAmount;
+        private String salesManagementFeeRate;
+        private String salesStatus;
+        private String spaceAmount;
+        private String spaceAmount1;
+        private String spaceRate;
+        private String spaceRate1;
+        private String spaceRateOrigin;
+        private String sumPremium;
+        private String taxRate;
+        private String totalFeeAmount;
+        private String totalFeeDisrate;
+        private String totalFeeDisrateOrigin;
+        private String zsState;
+        private String disRateOrigion;
+        private String disAmount;
+    }
+
+    @Data
+    public static class ItemKind {
+        /**
+         * 责任项序号。
+         */
+        private String itemKindNo;
+        /**
+         * 责任/附加险代码。
+         */
+        private String kindCode;
+        /**
+         * 责任/附加险名称。
+         */
+        private String kindName;
+        /**
+         * 操作类型(新增/修改等)。
+         */
+        private String operateType;
+        /**
+         * 责任起保日期。
+         */
+        private String startDate;
+        /**
+         * 责任起保时。
+         */
+        private String startHour;
+        /**
+         * 责任终保日期。
+         */
+        private String endDate;
+        /**
+         * 责任终保时。
+         */
+        private String endHour;
+        /**
+         * 保额。
+         */
+        private String amount;
+        /**
+         * 单位保额。
+         */
+        private String unitAmount;
+        /**
+         * 数量(件/座等)。
+         */
+        private String quantity;
+        /**
+         * 计费模式代码。
+         */
+        private String modeCode;
+        /**
+         * 计费模式名称。
+         */
+        private String modeName;
+        /**
+         * 短期费率标志。
+         */
+        private String shortRateFlag;
+        /**
+         * 短期费率。
+         */
+        private String shortRate;
+        /**
+         * 是否参与计算标志。
+         */
+        private String calculateFlag;
+        /**
+         * 费率。
+         */
+        private String rate;
+        /**
+         * 不计免赔标志。
+         */
+        private String notDeductibleFlag;
+        /**
+         * 免赔率(%)。
+         */
+        private String deductibleRatio;
+        /**
+         * 折扣。
+         */
+        private String discount;
+        /**
+         * 调整费率。
+         */
+        private String adjustRate;
+        /**
+         * 标的价值/保额值。
+         */
+        private String value;
+        /**
+         * 基准保费。
+         */
+        private String benchMarkPremium;
+        /**
+         * 保费。
+         */
+        private String premium;
+        /**
+         * 基础保费。
+         */
+        private String basePremium;
+        /**
+         * 基础风险保费。
+         */
+        private String baseRiskPremium;
+        /**
+         * 建议保费。
+         */
+        private String proposedPremium;
+        /**
+         * 主/附加险标志。
+         */
+        private String mainSubFlag;
+        /**
+         * 保费/保额占比。
+         */
+        private String proportion;
+        /**
+         * 未税金额。
+         */
+        private String noTaxAmount;
+        /**
+         * 税额。
+         */
+        private String taxAmount;
+    }
+
+    @Data
+    public static class CarShipTaxInfo {
+        /**
+         * 完税凭证日期。
+         */
+        private String taxDocumentDate;
+        /**
+         * 纳税地区代码。
+         */
+        private String taxPaidAreaCode;
+        /**
+         * 纳税人标识。
+         */
+        private String taxPayerIdentifier;
+        /**
+         * 纳税人名称。
+         */
+        private String taxPayerName;
+        /**
+         * 纳税人证件类型。
+         */
+        private String taxPayerIdentifyNumberType;
+        /**
+         * 纳税人证件号码。
+         */
+        private String taxPayerIdentifyNumber;
+        /**
+         * 纳税人组织机构代码。
+         */
+        private String taxPayerOrgCode;
+        /**
+         * 车牌类别。
+         */
+        private String licenseCategory;
+        /**
+         * 证明/证书日期。
+         */
+        private String certificateDate;
+        /**
+         * 税务机构代码。
+         */
+        private String taxComCode;
+        /**
+         * 税务机构名称。
+         */
+        private String taxComName;
+        /**
+         * 税目代码。
+         */
+        private String taxItemCode;
+        /**
+         * 税目名称。
+         */
+        private String taxItemName;
+        /**
+         * 税目细分代码。
+         */
+        private String taxItemDetailCode;
+        /**
+         * 税目细分名称。
+         */
+        private String taxItemDetailName;
+        /**
+         * 减免标志。
+         */
+        private String taxRelifFlag;
+        /**
+         * 减免原因。
+         */
+        private String reliefReason;
+        /**
+         * 基础计税额。
+         */
+        private String baseTaxation;
+        /**
+         * 减免税额。
+         */
+        private String taxRelief;
+        /**
+         * 减免比例。
+         */
+        private String reliefRate;
+        /**
+         * 减免说明。
+         */
+        private String reliefDescription;
+        /**
+         * 免税/完税凭证编号。
+         */
+        private String paidFreeCertificate;
+        /**
+         * 免税原因。
+         */
+        private String exemptionReason;
+        /**
+         * 计税方式。
+         */
+        private String calculateMode;
+        /**
+         * 税额单位。
+         */
+        private String taxUnit;
+        /**
+         * 应缴税额。
+         */
+        private String taxDue;
+        /**
+         * 上年已缴税额。
+         */
+        private String payLastYear;
+        /**
+         * 上期保单终止日期。
+         */
+        private String hisPolicyEndDate;
+        /**
+         * 补缴税费。
+         */
+        private String payBalanceFee;
+        /**
+         * 滞纳金起算日期。
+         */
+        private String lateFeeStartDate;
+        /**
+         * 滞纳金。
+         */
+        private String lateFee;
+        /**
+         * 是否计算滞纳金标志。
+         */
+        private String calLateFeeFlag;
+        /**
+         * 实缴税额。
+         */
+        private String taxActual;
+        /**
+         * 实缴税额(备份/第二项)。
+         */
+        private String taxActual2;
+        /**
+         * 上期已缴税额(第二项)。
+         */
+        private String previousPay2;
+        /**
+         * 上期已缴税额。
+         */
+        private String previousPay;
+        /**
+         * 是否计算补缴税费标志。
+         */
+        private String calPayBalanceFeeFlag;
+        /**
+         * 合计应缴税额。
+         */
+        private String sumPayTax;
+        /**
+         * 税种类型。
+         */
+        private String taxType;
+        /**
+         * 税号类型。
+         */
+        private String taxNumType;
+        /**
+         * 税号。
+         */
+        private String taxNum;
+        /**
+         * 缴税日期(yyyyMM 或 yyyy-MM)。
+         */
+        private String payTaxDate;
+        /**
+         * 车主性质。
+         */
+        private String carOwnerNature;
+        /**
+         * 整备质量(车船税口径)。
+         */
+        private String completeKerbMass;
+        /**
+         * 车主姓名/名称。
+         */
+        private String carOwnerName;
+        /**
+         * 车主证件类型。
+         */
+        private String identifyType;
+        /**
+         * 车主证件号码。
+         */
+        private String identifyNumber;
+        /**
+         * 地址名称。
+         */
+        private String addressName;
+        /**
+         * 邮寄地址。
+         */
+        private String postAddress;
+        /**
+         * 邮编。
+         */
+        private String postCode;
+        /**
+         * 联系电话。
+         */
+        private String phoneNumber;
+        /**
+         * 车辆所在地区代码。
+         */
+        private String carAddressCode;
+        /**
+         * 单位名称。
+         */
+        private String companyName;
+        /**
+         * 单位证件号码。
+         */
+        private String unitCertiNo;
+        /**
+         * 注册地址。
+         */
+        private String registeredAddress;
+        /**
+         * 交易编号。
+         */
+        private String transactionNo;
+        /**
+         * 预选号牌。
+         */
+        private String preLicenseNo;
+        /**
+         * 交易日期。
+         */
+        private String transactionDate;
+        /**
+         * 延期日期1。
+         */
+        private String extendDate1;
+        /**
+         * 计算机编号/流水。
+         */
+        private String computerNo;
+        /**
+         * 国家代码。
+         */
+        private String countryCode;
+        /**
+         * 车辆地址街道代码。
+         */
+        private String carAddressStreetCode;
+        /**
+         * 使用类型。
+         */
+        private String useType;
+        /**
+         * 统一社会信用代码(重复字段,用于车船税)。
+         */
+        private String creditCode;
+        /**
+         * 缴税开始日期。
+         */
+        private String payStartDate;
+        /**
+         * 缴税结束日期。
+         */
+        private String payEndDate;
+        /**
+         * 征收日期。
+         */
+        private String leviedDate;
+        /**
+         * 税务登记号。
+         */
+        private String taxRegistryNumber;
+        /**
+         * 是否计算标志。
+         */
+        private String calculateFlag;
+        /**
+         * 是否终了标志。
+         */
+        private String finalFlag;
+        /**
+         * 是否计费标志。
+         */
+        private String calFeeFlag;
+        /**
+         * 是否计税标志。
+         */
+        private String taxFlag;
+        /**
+         * 税额是否有效标志。
+         */
+        private String taxAmountFlag;
+        /**
+         * 是否计算税额标志。
+         */
+        private String calcTaxFlag;
+        /**
+         * 税务所在地代码。
+         */
+        private String taxLocationCode;
+        /**
+         * 佣金(车船税相关)。
+         */
+        private String commission;
+        /**
+         * 空载质量(kg)。
+         */
+        private String unladenMass;
+        /**
+         * 车船税起始日期。
+         */
+        private String carShipTaxStartDate;
+        /**
+         * 车船税截止日期。
+         */
+        private String carShipTaxEndDate;
+        /**
+         * 身份识别号(车船税)。
+         */
+        private String identificationNo;
+        /**
+         * 证书编号。
+         */
+        private String certificateNo;
+        /**
+         * 证书类型。
+         */
+        private String certificateType;
+        /**
+         * 能源类型(统计用)。
+         */
+        private String energyTypesTJ;
+        /**
+         * 燃料类型。
+         */
+        private String fuelType;
+        /**
+         * 车主证件类型(冗余)。
+         */
+        private String carOwnerIdentifyType;
+        /**
+         * 车主证件号码(冗余)。
+         */
+        private String carOwnerIdentifyCode;
+    }
+
+    @Data
+    public static class Limit {
+        private String limitFee;
+        private String limitType;
+    }
+
+    @Data
+    public static class Engage {
+        /**
+         * 序号。
+         */
+        private String serialNo;
+        /**
+         * 特别约定代码。
+         */
+        private String engageCode;
+        /**
+         * 特别约定标题。
+         */
+        private String engageTitle;
+        /**
+         * 特别约定内容。
+         */
+        private String engageDetail;
+        /**
+         * 险种代码。
+         */
+        private String riskCode;
+    }
+
+    @Data
+    public static class FxqInfo {
+        /**
+         * 反洗钱业务记录列表。
+         */
+        private List<FxqBusiness> fxqBusinessList;
+        /**
+         * 反洗钱客户风险记录列表。
+         */
+        private List<AntiCustomerRisk> antiCustomerRiskList;
+    }
+
+    @Data
+    public static class FxqBusiness {
+        /**
+         * 证件类型。
+         */
+        private String certiType;
+        /**
+         * 反洗钱业务内容。
+         */
+        private String fxqContext;
+        /**
+         * 标志位。
+         */
+        private String flag;
+        /**
+         * 日志编号。
+         */
+        private String logNo;
+        /**
+         * 操作员代码。
+         */
+        private String operatorCode;
+        /**
+         * 操作员姓名。
+         */
+        private String operatorName;
+        /**
+         * 提交时间(yyyy-MM-dd)。
+         */
+        private String submitTime;
+    }
+
+    @Data
+    public static class AntiCustomerRisk {
+        /**
+         * 业务渠道编码。
+         */
+        private String businessChannelCode;
+        /**
+         * 覆盖地区代码。
+         */
+        private String coveredAreaCode;
+        /**
+         * 客户年龄段代码。
+         */
+        private String customerAge;
+        /**
+         * 客户资金规模代码。
+         */
+        private String customerAmount;
+        /**
+         * 客户构成。
+         */
+        private String customerComposition;
+        /**
+         * 客户国家(ISO)。
+         */
+        private String customerCountry;
+        /**
+         * 客户敏感等级代码。
+         */
+        private String customerDang;
+        /**
+         * 客户学历/程度代码。
+         */
+        private String customerDegree;
+        /**
+         * 客户行业代码。
+         */
+        private String customerIndustryCode;
+        /**
+         * 客户信息标识。
+         */
+        private String customerInformation;
+        /**
+         * 客户等级代码。
+         */
+        private String customerLevel;
+        /**
+         * 客户风险等级。
+         */
+        private String customerRisk;
+        /**
+         * 客户时间维度代码。
+         */
+        private String customerTime;
+        /**
+         * 客户类型。
+         */
+        private String customerType;
+        /**
+         * 客户单位性质代码。
+         */
+        private String customerUnitPropertiesCode;
+        /**
+         * 客户异常标识。
+         */
+        private String customerUnusual;
+        /**
+         * 国籍代码。
+         */
+        private String nationalityCode;
+        /**
+         * 保费。
+         */
+        private String premium;
+        /**
+         * 产品分类代码。
+         */
+        private String productIfication;
+        /**
+         * 险种代码。
+         */
+        private String riskCode;
+        /**
+         * 交易历史代码。
+         */
+        private String transactionHistoryCode;
+        /**
+         * 交易性质代码。
+         */
+        private String transactionNatureCode;
+    }
+
+    @Data
+    public static class PayPlan {
+        /**
+         * 币种。
+         */
+        private String currency;
+        /**
+         * 未税金额。
+         */
+        private String noTaxAmount;
+        /**
+         * 付款结束日期。
+         */
+        private String payEndDate;
+        /**
+         * 付款开始日期。
+         */
+        private String payStartDate;
+        /**
+         * 计划费用。
+         */
+        private String planFee;
+        /**
+         * 险种代码。
+         */
+        private String riskCode;
+        /**
+         * 税率金额。
+         */
+        private String taxRateAmount;
+        /**
+         * 投保单号。
+         */
+        private String proposalNo;
+    }
+}

+ 3 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/request/BoHaiCrawlerVehicleConfirmationReqeust1.java

@@ -48,18 +48,21 @@ public class BoHaiCrawlerVehicleConfirmationReqeust1 implements Serializable {
         /**
          * 交易代码
          */
+        @JSONField(ordinal = 1)
         @JsonProperty("transCode")
         private String transCode;
 
         /**
          * 交易类型
          */
+        @JSONField(ordinal = 2)
         @JsonProperty("transType")
         private String transType;
 
         /**
          * 令牌
          */
+        @JSONField(ordinal = 3)
         @JsonProperty("token")
         private String token;
     }

+ 0 - 1
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/response/BoHaiCrawlerBaseResponse1.java

@@ -20,7 +20,6 @@ public class BoHaiCrawlerBaseResponse1 {
     /**
      * 状态码
      */
-    //@JsonProperty("code")
     private Integer code;
 
     /**

+ 1 - 9
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/response/BoHaiCrawlerCarResponse.java

@@ -12,8 +12,7 @@ import java.io.Serializable;
 import java.util.List;
 
 /**
- * 渤海保险车辆信息爬虫响应类
- * 包含分页查询的车辆列表数据
+ * 渤海保险车辆查询响应类
  */
 @NoArgsConstructor
 @Data
@@ -22,13 +21,6 @@ public class BoHaiCrawlerCarResponse implements Serializable {
     @Serial
     private static final long serialVersionUID = 8290844541630850445L;
 
-    /**
-     * 车辆列表
-     */
-    /*@JsonProperty("list")
-    private List<ListDTO> list;*/
-
-
     /**
      * 基础部分
      */

+ 186 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/response/BoHaiCrawlerUnderwritingResponse.java

@@ -0,0 +1,186 @@
+package com.jzg.quotation.bohai.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description: 渤海财险爬虫核保响应
+ * @author:
+ * @date:
+ **/
+@Data
+public class BoHaiCrawlerUnderwritingResponse {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 业务数据
+     */
+    @JsonProperty("businessData")
+    private BusinessDataDTO businessData;
+
+    /**
+     * 响应头信息
+     */
+    @JsonProperty("head")
+    private HeadDTO head;
+
+    @Data
+    public static class BusinessDataDTO implements Serializable {
+
+        @Serial
+        private static final long serialVersionUID = 1L;
+
+        /**
+         * 业务主信息
+         */
+        @JsonProperty("businessMainInfo")
+        private BusinessMainInfoDTO businessMainInfo;
+
+        @Data
+        public static class BusinessMainInfoDTO implements Serializable {
+
+            @Serial
+            private static final long serialVersionUID = 1L;
+
+            /**
+             * 业务订单列表
+             */
+            @JsonProperty("businessNoList")
+            private List<BusinessNoDTO> businessNoList;
+
+            /**
+             * 业务类型
+             */
+            @JsonProperty("businessType")
+            private String businessType;
+
+            @Data
+            public static class BusinessNoDTO implements Serializable {
+
+                @Serial
+                private static final long serialVersionUID = 1L;
+
+                /**
+                 * 订单号
+                 */
+                @JsonProperty("businessNo")
+                private String businessNo;
+
+                /**
+                 * 错误信息
+                 */
+                @JsonProperty("errMsg")
+                private String errMsg;
+
+                /**
+                 * 商业险投保单号
+                 */
+                @JsonProperty("proposalNoBI")
+                private String proposalNoBI;
+
+                /**
+                 * 交强险投保单号
+                 */
+                @JsonProperty("proposalNoCI")
+                private String proposalNoCI;
+
+                /**
+                 * 驾意险投保单号
+                 */
+                @JsonProperty("proposalNoDI")
+                private String proposalNoDI;
+
+                /**
+                 * 财产险投保单号
+                 */
+                @JsonProperty("proposalNoTA")
+                private String proposalNoTA;
+
+                /**
+                 * 商业险提交信息
+                 */
+                @JsonProperty("submitMessageBI")
+                private String submitMessageBI;
+
+                /**
+                 * 交强险提交信息
+                 */
+                @JsonProperty("submitMessageCI")
+                private String submitMessageCI;
+
+                /**
+                 * 驾意险提交信息
+                 */
+                @JsonProperty("submitMessageDI")
+                private String submitMessageDI;
+
+                /**
+                 * 商业险核保标志
+                 */
+                @JsonProperty("underwriteFlagBI")
+                private String underwriteFlagBI;
+
+                /**
+                 * 交强险核保标志
+                 */
+                @JsonProperty("underwriteFlagCI")
+                private String underwriteFlagCI;
+
+                /**
+                 * 驾意险核保标志
+                 */
+                @JsonProperty("underwriteFlagDI")
+                private String underwriteFlagDI;
+            }
+        }
+    }
+
+    @Data
+    public static class HeadDTO implements Serializable {
+
+        @Serial
+        private static final long serialVersionUID = 1L;
+
+        /**
+         * 返回码
+         */
+        @JsonProperty("returnCode")
+        private String returnCode;
+
+        /**
+         * 返回信息
+         */
+        @JsonProperty("returnMessage")
+        private String returnMessage;
+
+        /**
+         * 会话ID
+         */
+        @JsonProperty("sessionId")
+        private String sessionId;
+
+        /**
+         * 令牌
+         */
+        @JsonProperty("token")
+        private String token;
+
+        /**
+         * 交易码
+         */
+        @JsonProperty("transCode")
+        private String transCode;
+
+        /**
+         * 交易类型
+         */
+        @JsonProperty("transType")
+        private String transType;
+    }
+}

+ 336 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/response/BoHaiCrawlerVehicleConfirmationResponse2.java

@@ -0,0 +1,336 @@
+package com.jzg.quotation.bohai.crawler.entity.response;
+
+import lombok.Data;
+import java.util.List;
+
+/**
+ * 渤海车辆确认响应实体类
+ */
+@Data
+public class BoHaiCrawlerVehicleConfirmationResponse2 {
+
+    private Object carModelVo;
+
+    private List<Object> carQueryBackBJList;
+
+    private CiInsuredemandVo ciInsuredemandVo;
+
+    private List<Object> coveragePremiumItemList;
+
+    private Head head;
+
+    private String message;
+
+    private String status;
+
+    private List<VehiclePrice> vehiclePriceList;
+
+    /**
+     * 保险需求信息对象
+     */
+    public static class CiInsuredemandVo {
+        private String brandCName;
+        private String brandCode;
+        private String carName;
+        private String categoryCode;
+        private String categoryName;
+        private String configType;
+        private String deptCode;
+        private String deptName;
+        private String modelCode;
+        private String modelIDCode;
+        private String noticeType;
+        private String pureRiskPremium;
+        private String pureRiskPremiumFlag;
+        private String pureRiskPremiumName;
+        private String series;
+        private String seriesCode;
+        private String tradeCode;
+        private String tradeName;
+
+        // Getter and Setter methods
+        public String getBrandCName() {
+            return brandCName;
+        }
+
+        public void setBrandCName(String brandCName) {
+            this.brandCName = brandCName;
+        }
+
+        public String getBrandCode() {
+            return brandCode;
+        }
+
+        public void setBrandCode(String brandCode) {
+            this.brandCode = brandCode;
+        }
+
+        public String getCarName() {
+            return carName;
+        }
+
+        public void setCarName(String carName) {
+            this.carName = carName;
+        }
+
+        public String getCategoryCode() {
+            return categoryCode;
+        }
+
+        public void setCategoryCode(String categoryCode) {
+            this.categoryCode = categoryCode;
+        }
+
+        public String getCategoryName() {
+            return categoryName;
+        }
+
+        public void setCategoryName(String categoryName) {
+            this.categoryName = categoryName;
+        }
+
+        public String getConfigType() {
+            return configType;
+        }
+
+        public void setConfigType(String configType) {
+            this.configType = configType;
+        }
+
+        public String getDeptCode() {
+            return deptCode;
+        }
+
+        public void setDeptCode(String deptCode) {
+            this.deptCode = deptCode;
+        }
+
+        public String getDeptName() {
+            return deptName;
+        }
+
+        public void setDeptName(String deptName) {
+            this.deptName = deptName;
+        }
+
+        public String getModelCode() {
+            return modelCode;
+        }
+
+        public void setModelCode(String modelCode) {
+            this.modelCode = modelCode;
+        }
+
+        public String getModelIDCode() {
+            return modelIDCode;
+        }
+
+        public void setModelIDCode(String modelIDCode) {
+            this.modelIDCode = modelIDCode;
+        }
+
+        public String getNoticeType() {
+            return noticeType;
+        }
+
+        public void setNoticeType(String noticeType) {
+            this.noticeType = noticeType;
+        }
+
+        public String getPureRiskPremium() {
+            return pureRiskPremium;
+        }
+
+        public void setPureRiskPremium(String pureRiskPremium) {
+            this.pureRiskPremium = pureRiskPremium;
+        }
+
+        public String getPureRiskPremiumFlag() {
+            return pureRiskPremiumFlag;
+        }
+
+        public void setPureRiskPremiumFlag(String pureRiskPremiumFlag) {
+            this.pureRiskPremiumFlag = pureRiskPremiumFlag;
+        }
+
+        public String getPureRiskPremiumName() {
+            return pureRiskPremiumName;
+        }
+
+        public void setPureRiskPremiumName(String pureRiskPremiumName) {
+            this.pureRiskPremiumName = pureRiskPremiumName;
+        }
+
+        public String getSeries() {
+            return series;
+        }
+
+        public void setSeries(String series) {
+            this.series = series;
+        }
+
+        public String getSeriesCode() {
+            return seriesCode;
+        }
+
+        public void setSeriesCode(String seriesCode) {
+            this.seriesCode = seriesCode;
+        }
+
+        public String getTradeCode() {
+            return tradeCode;
+        }
+
+        public void setTradeCode(String tradeCode) {
+            this.tradeCode = tradeCode;
+        }
+
+        public String getTradeName() {
+            return tradeName;
+        }
+
+        public void setTradeName(String tradeName) {
+            this.tradeName = tradeName;
+        }
+    }
+
+    /**
+     * 响应头信息
+     */
+    @Data
+    public static class Head {
+        private String returnCode;
+        private String returnMessage;
+        private String sessionId;
+        private String token;
+        private String transCode;
+        private String transType;
+    }
+
+    /**
+     * 车辆价格信息
+     */
+    @Data
+    public static class VehiclePrice {
+        private String absFlag;
+        private String actualValue;
+        private String airNum;
+        private String airbagNum;
+        private String alarmFlag;
+        private String antiAlarm;
+        private String birthDate;
+        private String brand;
+        private String brandCode;
+        private String carBrand;
+        private String carBrandCode;
+        private String carFirstRegisterDate;
+        private String carName;
+        private String carNmae;
+        private String carSeries;
+        private String carSeriesCode;
+        private String carSeriesName;
+        private String carValue;
+        private String carYear;
+        private String categoryCode;
+        private String categoryName;
+        private String completeKerbMass;
+        private String configType;
+        private String coverageCode;
+        private String dataSource;
+        private String deptCode;
+        private String deptName;
+        private String derailleurtype;
+        private String elecBatteryType;
+        private String engineNo;
+        private String exhaustCapacity;
+        private String exhaustScale;
+        private String familyName;
+        private String frontTrack;
+        private String importFlag;
+        private String isNewEnergy;
+        private String isPriced;
+        private String isbuyOrnot;
+        private String limitCabPersons;
+        private String limitLoad;
+        private String limitLoadMax;
+        private String limitLoadMin;
+        private String limitLoadPerson;
+        private String limitLoadPersonMax;
+        private String limitLoadPersonMin;
+        private String manufactureCompany;
+        private String manufactureCompanyCode;
+        private String marketDate;
+        private String modeCode;
+        private String modelCode;
+        private String modelDesc;
+        private String modelEnergyType;
+        private String modelEnergyTypeName;
+        private String modelFlag;
+        private String modelIDCode;
+        private String modelName;
+        private String modelName1;
+        private String modelSegmentation;
+        private String motorTypeCode;
+        private String noticeType;
+        private String outlineHeight;
+        private String outlineLength;
+        private String outlineWidth;
+        private String purchasePrice;
+        private String pureRange;
+        private String pureRiskPremium;
+        private String pureRiskPremiumFlag;
+        private String rackNo;
+        private String rearTrack;
+        private String refCode1;
+        private String refCode2;
+        private ReferenceVehicleVo referenceVehicleVo;
+        private String remark;
+        private String riskFlag;
+        private String searchSequenceNo;
+        private String seatCount;
+        private String series;
+        private String seriesCode;
+        private String tireSpecifications;
+        private String tonCount;
+        private String tradeCode;
+        private String tradeName;
+        private String transmissionType;
+        private String vehicleAbs;
+        private String vehicleBrand;
+        private String vehicleBusinessCode;
+        private String vehicleCode;
+        private String vehicleDescription;
+        private String vehicleDisplacement;
+        private String vehicleDisplacementMax;
+        private String vehicleDisplacementMin;
+        private String vehicleFamily;
+        private String vehicleName;
+        private String vehiclePower;
+        private String vehiclePowerMax;
+        private String vehiclePowerMin;
+        private String vehiclePrice;
+        private String vehicleRegisterDate;
+        private String vehicleStyle;
+        private String vehicleStyleUniqueId;
+        private String vehicleTonnage;
+        private String vehicleWeight;
+        private String vehicleWheelbase;
+        private String wholeWeight;
+        private String wholeWeightMax;
+        private String wholeWeightMin;
+        private String yModelEnergyType;
+        private String yNoticeType;
+        private String yearKx;
+    }
+
+    /**
+     * 参考车辆信息
+     */
+    @Data
+    public static class ReferenceVehicleVo {
+        private String vehicleCategory;
+        private String vehicleRegisterDate;
+        private String vehicleUsageName;
+        private String vehicleUseType;
+    }
+}

+ 0 - 36
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/response/BoHaiUnderwritingResponse.java

@@ -1,36 +0,0 @@
-package com.jzg.quotation.bohai.crawler.entity.response;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * @description: 渤海财险爬虫核保响应
- * @author:
- * @date:
- **/
-@EqualsAndHashCode(callSuper = true)
-@Data
-public class BoHaiUnderwritingResponse extends BoHaiCrawlerBaseResponse {
-
-    private DataDTO data;
-
-    @Data
-    public static class DataDTO {
-        private String trafficResultCode;
-        private String businessResultCode;
-        private String trafficResultMsg;
-        private String businessResultMsg;
-        private TrafficPolicyDTO trafficPolicy;
-        private BusinessPolicyDTO businessPolicy;
-    }
-
-    @Data
-    public static class TrafficPolicyDTO {
-        private String applicationNo;
-    }
-
-    @Data
-    public static class BusinessPolicyDTO {
-        private String applicationNo;
-    }
-}

+ 1 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/service/impl/BoHaiCrawlerQuoteProcessServiceImpl.java

@@ -84,6 +84,7 @@ public class BoHaiCrawlerQuoteProcessServiceImpl implements BoHaiCrawlerQuotePro
         return headers;*/
         HttpHeaders httpHeaders = new HttpHeaders();
         httpHeaders.set("Cookie", "HTTPOnly; Cookie=!nWlhN+KeEYSeye21yv2qnldjEk8Kb9NrbshGomNlDw5h9g3lSal2Gb9pNc81nEf0UOCqFH0E/WkCBk4=;");
+        httpHeaders.set("sessionId","114050281_71mz-HPAuESbrk8IEDnnK7m1760145130150");
         return httpHeaders;
     }
 

+ 663 - 9
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/service/impl/BoHaiCrawlerRequestImpl.java

@@ -1,6 +1,7 @@
 package com.jzg.quotation.bohai.crawler.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
@@ -57,6 +58,8 @@ public class BoHaiCrawlerRequestImpl implements BoHaiCrawlerRequest {
 
     private final BoHaiCrawlerQuoteProcessService boHaiCrawlerQuoteProcessService;
 
+    private static final String TOKEN = "114050281-8a2c762d10a0194b65abd37e760f18e5";
+
     /**
      * 登录
      *
@@ -120,7 +123,7 @@ public class BoHaiCrawlerRequestImpl implements BoHaiCrawlerRequest {
         BoHaiCrawlerQuotationRequest2.Head head = new BoHaiCrawlerQuotationRequest2.Head();
         head.setTransType("Req");
         head.setTransCode("PremiumProposal");
-        head.setToken("114050281-4668f68536a7e145b87f94fd14449d77");
+        head.setToken(TOKEN);
         boHaiCrawlerQuotationRequest2.setHead(head);
 
         // 使用 setter 方式设置 businessData、insuredList、riskList、以及登录信息
@@ -311,13 +314,15 @@ public class BoHaiCrawlerRequestImpl implements BoHaiCrawlerRequest {
         insured1.setIdentifyStartDate("");
         insured1.setIdentifyEndDate("");
         insured1.setCarInsuredRelation("");
-
         insured1.setBusinessSort("15");
         insured1.setLinkerName("");
+        //设置为空
+        insured1.setIsSpecialDInsured("");
         insured1.setSpecialDInsuredName("");
         insured1.setSpecialDInsuredIDType("");
         insured1.setSpecialDInsuredID("");
         insured1.setNoSpecialDInsuredP("");
+        insured1.setBenefitFlag("");
         insured1.setIsGreenIndustryFlag("");
         insured1.setGreenIndustryFCode("");
         insured1.setGreenIndustrySCode("");
@@ -396,10 +401,17 @@ public class BoHaiCrawlerRequestImpl implements BoHaiCrawlerRequest {
         insured3.setCarInsuredRelation("");
         insured3.setBusinessSort("15");
         insured3.setLinkerName("");
+        //设置为空
+        insured3.setIsSpecialDInsured("");
         insured3.setSpecialDInsuredName("");
         insured3.setSpecialDInsuredIDType("");
         insured3.setSpecialDInsuredID("");
         insured3.setNoSpecialDInsuredP("");
+        insured3.setBenefitFlag("");
+        insured3.setIsGreenIndustryFlag("");
+        insured3.setGreenIndustryFCode("");
+        insured3.setGreenIndustrySCode("");
+        insured3.setGreenIndustryTCode("");
         insuredList.add(insured3);
         businessData.setInsuredList(insuredList);
 
@@ -415,24 +427,60 @@ public class BoHaiCrawlerRequestImpl implements BoHaiCrawlerRequest {
         jqItem.setKindCode("BZ");
         jqItem.setKindName("机动车交通事故责任强制保险");
         jqItem.setOperateType("");
+        jqItem.setStartDate("2025-10-10");
+        jqItem.setStartHour("");
+        jqItem.setEndDate("2026-10-09");
+        jqItem.setEndHour("");
+        jqItem.setAmount("");
+        jqItem.setUnitAmount("");
+        jqItem.setQuantity("");
+        jqItem.setModeCode("");
+        jqItem.setModeName("");
         jqItem.setShortRateFlag("2");
+        jqItem.setShortRate("");
         jqItem.setCalculateFlag("Y");
+        jqItem.setRate("");
         jqItem.setNotDeductibleFlag("0");
+        jqItem.setDeductibleRatio("");
+        jqItem.setDiscount("");
+        jqItem.setAdjustRate("");
+        jqItem.setValue("");
         jqItemKinds.add(jqItem);
         jqRisk.setItemKindList(jqItemKinds);
 
         BoHaiCrawlerQuotationRequest2.RiskMainInfo jqMain = new BoHaiCrawlerQuotationRequest2.RiskMainInfo();
         jqMain.setIsDrivingFee("1");
         jqMain.setAgriflag("012001");
+        jqMain.setClassCode("");
         jqMain.setRiskCode("0330");
+        jqMain.setContractNo("");
+        jqMain.setDiscount("");
         jqMain.setCurrency("CNY");
+        jqMain.setLastPolicyNo("");
         jqMain.setRenewalFlag("0");
         jqMain.setStartDate("2025-10-10");
         jqMain.setStartHour("0");
         jqMain.setEndDate("2026-10-09");
         jqMain.setEndHour("24");
+        jqMain.setImmediatelyActiveFlag("");
+        jqMain.setActiveStartTime("");
+        jqMain.setActiveEndTime("");
+        jqMain.setQuerySequenceNo("");
+        jqMain.setConfirmSequenceNo("");
+        jqMain.setSpecialContractFlag("");
+        jqMain.setSpecialContractSummary("");
         jqMain.setNoneFluctuateFlag("N1");
+        jqMain.setNcdCoefficient("");
         jqMain.setChannelCoefficient("1.00");
+        jqMain.setUnderwritingCoefficient("");
+        jqMain.setAdjustCoefficient("");
+        jqMain.setTrafficViolationCoefficient("");
+        jqMain.setChannelCoefficientVariation("");
+        jqMain.setUnderwritingCoefficientVariation("");
+        jqMain.setIfNeedQuote("");
+        jqMain.setHopeRate("");
+        jqMain.setProposalNo("");
+
         jqMain.setCustomerCoefficient("364001");
         jqMain.setFleetCoefficient("365000");
         jqMain.setSignDate("2025-10-09");
@@ -518,6 +566,10 @@ public class BoHaiCrawlerRequestImpl implements BoHaiCrawlerRequest {
 
         BoHaiCrawlerQuotationResponse boHaiCrawlerQuotationResponse = boHaiCrawlerRequestComponent.quotation(boHaiCrawlerQuotationRequest2, headers);
         log.info("boHaiCrawlerQuotationResponse参数的值:{}", JSON.toJSONString(boHaiCrawlerQuotationResponse));
+        if(boHaiCrawlerQuotationResponse.getData() == null){
+            //报价失败
+            return BoHaiCrawlerQuoteResultsVoBuild.buildQuoteFailResultsVo(boHaiCrawlerQuotationResponse);
+        }
 
         // 4.0 处理报价失败
         if (!ResponseCode.R_Z00001.equals(boHaiCrawlerQuotationResponse.getResponseCode())) {
@@ -530,14 +582,618 @@ public class BoHaiCrawlerRequestImpl implements BoHaiCrawlerRequest {
         }
     }
 
+    /**
+     * 核保
+     * @param underwritingVo
+     * @return UnderwritingResultsVo
+     */
     @Override
     public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) {
-        /*AttributionInformationVo attributionInformationVo = underwritingVo.getOrder().getAttributionInformationVo();
+        AttributionInformationVo attributionInformationVo = underwritingVo.getOrder().getAttributionInformationVo();
         BoHaiCrawlerOrder boHaiCrawlerOrder = boHaiCrawlerOrderService.getById(underwritingVo.getOrder().getOrdersNo());
         HttpHeaders headers = boHaiCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
 
-        UnderwritingRequest underwritingRequest = new UnderwritingRequest(attributionInformationVo.getConfigInfo(), boHaiCrawlerOrder.getOrderNo());
-        BoHaiUnderwritingResponse boHaiUnderwritingResponse = boHaiCrawlerRequestComponent.underwriting(underwritingRequest, headers);
+        //UnderwritingRequest underwritingRequest = new UnderwritingRequest(attributionInformationVo.getConfigInfo(), boHaiCrawlerOrder.getOrderNo());
+        BoHaiCrawlerUnderwritingRequest2.Head head = new BoHaiCrawlerUnderwritingRequest2.Head();
+        head.setTransCode("Save");
+        head.setTransType("Req");
+        head.setToken("114050281-1a2148bdef013e76e47ba4944a4df66b");
+
+        BoHaiCrawlerUnderwritingRequest2.BusinessData businessData = new BoHaiCrawlerUnderwritingRequest2.BusinessData();
+
+        // 设置业务主信息
+        BoHaiCrawlerUnderwritingRequest2.BusinessMainInfo mainInfo = new BoHaiCrawlerUnderwritingRequest2.BusinessMainInfo();
+        mainInfo.setReneClientType("");
+        mainInfo.setDriModelScoreReqNo("");
+        mainInfo.setPcIds("");
+        mainInfo.setFixPriceStatus("1");
+        mainInfo.setPraID("");
+        mainInfo.setFixPriceRuleId("AF0492EF636949E7A8DBDB99D9FA1C3C");
+        mainInfo.setFixPriceType("Y2");
+        mainInfo.setChdId("");
+        mainInfo.setRiskControlFlag("");
+        mainInfo.setFeeType("");
+        mainInfo.setFixPriceNo("75D0D01AEBE14733AD0A91E2583E03AC");
+        mainInfo.setExpectDiscount("0.0");
+        mainInfo.setCommissionFlag("0");
+        mainInfo.setEntireInitialDiscount("1.0");
+        mainInfo.setEntireRecommenDiscount("0");
+        mainInfo.setEntireFloatDiscount("0");
+        mainInfo.setMainCarKindBC("0");
+        mainInfo.setResourceTypeCode("004");
+        mainInfo.setBusinessNo("O140703302025063788");
+        mainInfo.setBusinessType("O");
+        mainInfo.setRelatedNo("");
+        mainInfo.setRelatedType("");
+        mainInfo.setComCode("14070201");
+        mainInfo.setBusinessCategories1("1");
+        mainInfo.setBusinessCategories2("2");
+        mainInfo.setBusinessCategories3("A06");
+        mainInfo.setBusinessCategories4("");
+        mainInfo.setIdentifyType("006");
+        mainInfo.setIdentifyDetail("00001");
+        mainInfo.setIdentifyCode("");
+        mainInfo.setIdentifyVip("");
+        mainInfo.setHandlerCode("114050281");
+        mainInfo.setHandlerPhone("18903446657");
+        mainInfo.setAgentCode("M140301000249");
+        mainInfo.setAgreementNo("C142024004345_2");
+        mainInfo.setSales("");
+        mainInfo.setProfessionalNo("");
+        mainInfo.setCityCode("140700");
+        mainInfo.setCountyCode("140781");
+        mainInfo.setVisitInsuredFlag("0");
+        mainInfo.setPayInfoAuthenticationCheckable("1");
+        mainInfo.setPayInfoAuthenticationComment("");
+        mainInfo.setPayMethod("01");
+        mainInfo.setGoalInsuredFlag("2");
+        mainInfo.setIntermediaryAgentCode("");
+        mainInfo.setIntermediaryAgentName("");
+        mainInfo.setUnderUnit("");
+        mainInfo.setArgueSolution("1");
+        mainInfo.setArbitBoardName("");
+        mainInfo.setOperatorCode("114050282");
+        mainInfo.setOperateDate("2025-10-11");
+        mainInfo.setMakeCom("14070201");
+        mainInfo.setInputDate("2025-10-11");
+        mainInfo.setInputHour("9");
+        mainInfo.setUpdaterCode("114050281");
+        mainInfo.setUpdateDate("2025-10-11");
+        mainInfo.setUpdateHour("9");
+        mainInfo.setSignDate("2025-10-11");
+        mainInfo.setRemark("");
+        mainInfo.setRemoteAgentFlag("0");
+        mainInfo.setBandCode("");
+        mainInfo.setCardFlag("");
+        mainInfo.setRemoteFlag("");
+        mainInfo.setCardNo("");
+        mainInfo.setSaleSys("");
+        mainInfo.setCancelFlag("0");
+        mainInfo.setSumAmount("");
+        mainInfo.setSumDiscount("0.0");
+        mainInfo.setSumPremium("1100.0");
+        mainInfo.setEmployeeComCode("");
+        mainInfo.setVerificationCode("");
+        mainInfo.setConfigInfoId("");
+        mainInfo.setUpdateStartTime("2025-10-11 09:59:22");
+        mainInfo.setProposalStartTime("2025-10-11 09:59:22");
+        mainInfo.setIsInsureFlag("0");
+        mainInfo.setSalerIdentifyNumber("142402199410021540");
+        mainInfo.setUuid("");
+        mainInfo.setCustomerNo("");
+        mainInfo.setDxOperatorCode("");
+        mainInfo.setBusinessAttribute("2");
+        mainInfo.setChannelType("");
+        mainInfo.setIsAffiliTransaction("0");
+        mainInfo.setResubmit("");
+        mainInfo.setSdId("");
+        mainInfo.setTbMode("");
+        mainInfo.setIsNewImage("1");
+        mainInfo.setBussUnitCodeCI("1866776104808177747");
+        mainInfo.setBussUnitCode("");
+        mainInfo.setPriceMode("个车");
+        mainInfo.setHighRiskAssessId("a4974f2b1b0d481b9df77a5f45ad1a5b");
+        mainInfo.setQuotationTime("2025-10-11T01:59:22.000Z");
+        mainInfo.setReCustomerType("");
+        mainInfo.setLastYearAdjustValue("");
+        mainInfo.setReStatus("");
+        mainInfo.setReTaskUserCode("");
+        mainInfo.setReTaskUserName("");
+        mainInfo.setFollowID("697e80c6c9cd434a97bea6e6a319f53b");
+        mainInfo.setOpenId("odviKt0g-CP5NVNnZKiHEStPbRoU");
+        mainInfo.setClientIp("");
+        businessData.setBusinessMainInfo(mainInfo);
+
+        // 设置投保人列表
+        List<BoHaiCrawlerUnderwritingRequest2.Insured> insuredList = new java.util.ArrayList<>();
+
+        // 投保人1
+        BoHaiCrawlerUnderwritingRequest2.Insured insured1 = new BoHaiCrawlerUnderwritingRequest2.Insured();
+        insured1.setSerialNo("1");
+        insured1.setAppliInsuredRelation("01");
+        insured1.setProvinceCode("");
+        insured1.setCityCode("");
+        insured1.setCountyCode("");
+        insured1.setAdminAddress("");
+        insured1.setAgentName("");
+        insured1.setAgentIdcardType("01");
+        insured1.setAgentIdcard("");
+        insured1.setAgentPhone("");
+        insured1.setGroupPolicies("");
+        insured1.setInsuredCode("");
+        insured1.setIdentifyIssuer("");
+        insured1.setIdentifyNumber("140104198011062716");
+        insured1.setIdentifyType("01");
+        insured1.setIdentifyStartDate("");
+        insured1.setIdentifyEndDate("");
+        insured1.setInsuredName("封殿雷");
+        insured1.setInsuredFlag("2");
+        insured1.setInsuredType("1");
+        insured1.setGender("1");
+        insured1.setBirthDay("1980-11-06");
+        insured1.setInsuredNature("3");
+        insured1.setLinkerName("");
+        insured1.setPhoneNumber("");
+        insured1.setMobile("18703487297");
+        insured1.setInsuredAddress("山西省太原市万柏林区开城路26号院10排2号");
+        insured1.setPostCode("030600");
+        insured1.setAddress1("140000");
+        insured1.setAddress2("140100");
+        insured1.setAddress3("140109");
+        insured1.setPostAddress("");
+        insured1.setEmail("1004854817@qq.com");
+        insured1.setRiskGrade("A");
+        insured1.setBusinessLicenseType("");
+        insured1.setCarInsuredRelation("");
+        insured1.setOrgCode("");
+        insured1.setAge("44");
+        insured1.setBusinessSort("");
+        insured1.setNation("汉");
+        insured1.setIdentifyAddress("山西省太原市万柏林区开城路26号院10排2号");
+        insured1.setNationality("");
+        insured1.setTaxpayerType("");
+        insured1.setCreditCode("");
+        insured1.setTaxpayerIdentifier("");
+        insured1.setTaxpayerBank("");
+        insured1.setTaxpayerAccount("");
+        insured1.setTaxpayerPhoneNumber("");
+        insured1.setTaxpayerAddress("");
+        insured1.setRelatedParty(0);
+        insured1.setRelatedPartyCode("");
+        insured1.setRelatedPartyRelation("");
+        insured1.setAppliCitizenshipBC("01");
+        insured1.setAppliCountryBC("008zg");
+        insured1.setIsPhoneHolderFlag("");
+        insured1.setPhoneHolderName("");
+        insured1.setPhoneHolderCertiCode("");
+        insured1.setOperatorName("");
+        insured1.setOperatorType("");
+        insured1.setOperatorCertiType("");
+        insured1.setOperatorCertiCode("");
+        insured1.setOperatorPhoneNo("");
+        insured1.setOperatorEmail("");
+        insured1.setIsIndividualBusi("0");
+        insured1.setIsSpecialDInsured("");
+        insured1.setSpecialDInsuredName("");
+        insured1.setSpecialDInsuredIDType("");
+        insured1.setSpecialDInsuredID("");
+        insured1.setNoSpecialDInsuredP("");
+        insured1.setDInsuredCount("");
+        insured1.setBenefitFlag("");
+        insured1.setBenefitOrder("");
+        insured1.setBenefitRate("");
+        insured1.setIsApplicantFlag("");
+        insured1.setIsGreenIndustryFlag("");
+        insured1.setGreenIndustryFCode("");
+        insured1.setGreenIndustrySCode("");
+        insured1.setGreenIndustryTCode("");
+        insured1.setIsSmall("0");
+        insured1.setCareer("");
+        insured1.setAsset("");
+        insured1.setNumberOfUnits("");
+        insured1.setBusiCategory("");
+        insured1.setBusiCategoryType("");
+        insured1.setBusiCategorySub("");
+        insured1.setBusiCategoryExac("");
+        insuredList.add(insured1);
+
+        // 投保人2
+        BoHaiCrawlerUnderwritingRequest2.Insured insured2 = new BoHaiCrawlerUnderwritingRequest2.Insured();
+        insured2.setSerialNo("2");
+        insured2.setAppliInsuredRelation("");
+        insured2.setProvinceCode("");
+        insured2.setCityCode("");
+        insured2.setCountyCode("");
+        insured2.setAdminAddress("");
+        insured2.setAgentName("");
+        insured2.setAgentIdcardType("");
+        insured2.setAgentIdcard("");
+        insured2.setAgentPhone("");
+        insured2.setGroupPolicies("");
+        insured2.setInsuredCode("");
+        insured2.setIdentifyIssuer("");
+        insured2.setIdentifyNumber("140104198011062716");
+        insured2.setIdentifyType("01");
+        insured2.setIdentifyStartDate("");
+        insured2.setIdentifyEndDate("");
+        insured2.setInsuredName("封殿雷");
+        insured2.setInsuredFlag("1");
+        insured2.setInsuredType("1");
+        insured2.setGender("1");
+        insured2.setBirthDay("1980-11-06");
+        insured2.setInsuredNature("3");
+        insured2.setLinkerName("");
+        insured2.setPhoneNumber("");
+        insured2.setMobile("18703487297");
+        insured2.setInsuredAddress("山西省太原市万柏林区开城路26号院10排2号");
+        insured2.setPostCode("030600");
+        insured2.setAddress1("140000");
+        insured2.setAddress2("140100");
+        insured2.setAddress3("140109");
+        insured2.setPostAddress("");
+        insured2.setEmail("1004854817@qq.com");
+        insured2.setRiskGrade("");
+        insured2.setBusinessLicenseType("");
+        insured2.setCarInsuredRelation("1");
+        insured2.setOrgCode("");
+        insured2.setAge("44");
+        insured2.setBusinessSort("");
+        insured2.setNation("汉");
+        insured2.setIdentifyAddress("山西省太原市万柏林区开城路26号院10排2号");
+        insured2.setNationality("");
+        insured2.setTaxpayerType("");
+        insured2.setCreditCode("");
+        insured2.setTaxpayerIdentifier("");
+        insured2.setTaxpayerBank("");
+        insured2.setTaxpayerAccount("");
+        insured2.setTaxpayerPhoneNumber("");
+        insured2.setTaxpayerAddress("");
+        insured2.setRelatedParty(0);
+        insured2.setRelatedPartyCode("");
+        insured2.setRelatedPartyRelation("");
+        insured2.setAppliCitizenshipBC("01");
+        insured2.setAppliCountryBC("008zg");
+        insured2.setIsPhoneHolderFlag("");
+        insured2.setPhoneHolderName("");
+        insured2.setPhoneHolderCertiCode("");
+        insured2.setOperatorName("");
+        insured2.setOperatorType("");
+        insured2.setOperatorCertiType("");
+        insured2.setOperatorCertiCode("");
+        insured2.setOperatorPhoneNo("");
+        insured2.setOperatorEmail("");
+        insured2.setIsIndividualBusi("0");
+        insured2.setIsSpecialDInsured("0");
+        insured2.setSpecialDInsuredName("");
+        insured2.setSpecialDInsuredIDType("");
+        insured2.setSpecialDInsuredID("");
+        insured2.setNoSpecialDInsuredP("1");
+        insured2.setDInsuredCount("");
+        insured2.setBenefitFlag("0");
+        insured2.setBenefitOrder("");
+        insured2.setBenefitRate("");
+        insured2.setIsApplicantFlag("");
+        insured2.setIsGreenIndustryFlag("");
+        insured2.setGreenIndustryFCode("");
+        insured2.setGreenIndustrySCode("");
+        insured2.setGreenIndustryTCode("");
+        insured2.setIsSmall("0");
+        insured2.setCareer("");
+        insured2.setAsset("");
+        insured2.setNumberOfUnits("");
+        insured2.setBusiCategory("");
+        insured2.setBusiCategoryType("");
+        insured2.setBusiCategorySub("");
+        insured2.setBusiCategoryExac("");
+        insuredList.add(insured2);
+
+        // 投保人3
+        BoHaiCrawlerUnderwritingRequest2.Insured insured3 = new BoHaiCrawlerUnderwritingRequest2.Insured();
+        insured3.setSerialNo("3");
+        insured3.setAppliInsuredRelation("");
+        insured3.setProvinceCode("140000");
+        insured3.setCityCode("141100");
+        insured3.setCountyCode("141123");
+        insured3.setAdminAddress("山西省兴县蔚汾镇西滩坪39号");
+        insured3.setAgentName("");
+        insured3.setAgentIdcardType("");
+        insured3.setAgentIdcard("");
+        insured3.setAgentPhone("");
+        insured3.setGroupPolicies("");
+        insured3.setInsuredCode("");
+        insured3.setIdentifyIssuer("");
+        insured3.setIdentifyNumber("140104198011062716");
+        insured3.setIdentifyType("01");
+        insured3.setIdentifyStartDate("");
+        insured3.setIdentifyEndDate("");
+        insured3.setInsuredName("封殿雷");
+        insured3.setInsuredFlag("3");
+        insured3.setInsuredType("1");
+        insured3.setGender("1");
+        insured3.setBirthDay("1980-11-06");
+        insured3.setInsuredNature("1");
+        insured3.setLinkerName("");
+        insured3.setPhoneNumber("");
+        insured3.setMobile("18703487297");
+        insured3.setInsuredAddress("山西省太原市万柏林区开城路26号院10排2号");
+        insured3.setPostCode("030600");
+        insured3.setAddress1("140000");
+        insured3.setAddress2("141100");
+        insured3.setAddress3("");
+        insured3.setPostAddress("");
+        insured3.setEmail("1004854817@qq.com");
+        insured3.setRiskGrade("");
+        insured3.setBusinessLicenseType("");
+        insured3.setCarInsuredRelation("");
+        insured3.setOrgCode("");
+        insured3.setAge("30");
+        insured3.setBusinessSort("");
+        insured3.setNation("");
+        insured3.setIdentifyAddress("");
+        insured3.setNationality("");
+        insured3.setTaxpayerType("");
+        insured3.setCreditCode("");
+        insured3.setTaxpayerIdentifier("");
+        insured3.setTaxpayerBank("");
+        insured3.setTaxpayerAccount("");
+        insured3.setTaxpayerPhoneNumber("");
+        insured3.setTaxpayerAddress("");
+        insured3.setRelatedParty(0);
+        insured3.setRelatedPartyCode("");
+        insured3.setRelatedPartyRelation("");
+        insured3.setAppliCitizenshipBC("");
+        insured3.setAppliCountryBC("008zg");
+        insured3.setIsPhoneHolderFlag("");
+        insured3.setPhoneHolderName("");
+        insured3.setPhoneHolderCertiCode("");
+        insured3.setOperatorName("");
+        insured3.setOperatorType("");
+        insured3.setOperatorCertiType("");
+        insured3.setOperatorCertiCode("");
+        insured3.setOperatorPhoneNo("");
+        insured3.setOperatorEmail("");
+        insured3.setIsIndividualBusi("0");
+        insured3.setIsSpecialDInsured("");
+        insured3.setSpecialDInsuredName("");
+        insured3.setSpecialDInsuredIDType("");
+        insured3.setSpecialDInsuredID("");
+        insured3.setNoSpecialDInsuredP("");
+        insured3.setDInsuredCount("");
+        insured3.setBenefitFlag("");
+        insured3.setBenefitOrder("");
+        insured3.setBenefitRate("");
+        insured3.setIsApplicantFlag("");
+        insured3.setIsGreenIndustryFlag("");
+        insured3.setGreenIndustryFCode("");
+        insured3.setGreenIndustrySCode("");
+        insured3.setGreenIndustryTCode("");
+        insured3.setIsSmall("0");
+        insured3.setCareer("");
+        insured3.setAsset("");
+        insured3.setNumberOfUnits("");
+        insured3.setBusiCategory("");
+        insured3.setBusiCategoryType("");
+        insured3.setBusiCategorySub("");
+        insured3.setBusiCategoryExac("");
+        insuredList.add(insured3);
+        businessData.setInsuredList(insuredList);
+
+        // 设置险种列表
+        List<BoHaiCrawlerUnderwritingRequest2.Risk> riskList = new java.util.ArrayList<>();
+        // 交强险
+        BoHaiCrawlerUnderwritingRequest2.Risk jqRisk = new BoHaiCrawlerUnderwritingRequest2.Risk();
+        List<BoHaiCrawlerUnderwritingRequest2.ItemKind> jqItemKinds = new java.util.ArrayList<>();
+
+        // 交强险险种明细
+        BoHaiCrawlerUnderwritingRequest2.ItemKind jqItem = new BoHaiCrawlerUnderwritingRequest2.ItemKind();
+        jqItem.setItemKindNo("0");
+        jqItem.setKindCode("BZ");
+        jqItem.setKindName("机动车交通事故责任强制保险");
+        jqItem.setOperateType("");
+        jqItem.setStartDate("2025-10-11");
+        jqItem.setStartHour("0");
+        jqItem.setEndDate("2026-10-10");
+        jqItem.setEndHour("24");
+        jqItem.setAmount("");
+        jqItem.setUnitAmount("");
+        jqItem.setQuantity("");
+        jqItem.setModeCode("");
+        jqItem.setModeName("");
+        jqItem.setShortRateFlag("2");
+        jqItem.setShortRate("");
+        jqItem.setCalculateFlag("Y");
+        jqItem.setRate("");
+        jqItem.setNotDeductibleFlag("0");
+        jqItem.setDeductibleRatio("");
+        jqItem.setDiscount("");
+        jqItem.setAdjustRate("");
+        jqItem.setValue("");
+        jqItemKinds.add(jqItem);
+        jqRisk.setItemKindList(jqItemKinds);
+
+        // 交强险险种主信息
+        BoHaiCrawlerUnderwritingRequest2.RiskMainInfo jqMain = new BoHaiCrawlerUnderwritingRequest2.RiskMainInfo();
+        jqMain.setIsDrivingFee("1");
+        jqMain.setAgriflag("012001");
+        jqMain.setClassCode("");
+        jqMain.setRiskCode("0330");
+        jqMain.setContractNo("");
+        jqMain.setDiscount("");
+        jqMain.setCurrency("CNY");
+        jqMain.setLastPolicyNo("");
+        jqMain.setRenewalFlag("0");
+        jqMain.setStartDate("2025-10-11");
+        jqMain.setStartHour("0");
+        jqMain.setEndDate("2026-10-10");
+        jqMain.setEndHour("24");
+        jqMain.setImmediatelyActiveFlag("");
+        jqMain.setActiveStartTime("");
+        jqMain.setActiveEndTime("");
+        jqMain.setQuerySequenceNo("");
+        jqMain.setConfirmSequenceNo("");
+        jqMain.setSpecialContractFlag("");
+        jqMain.setSpecialContractSummary("");
+        jqMain.setNoneFluctuateFlag("N1");
+        jqMain.setNcdCoefficient("");
+        jqMain.setChannelCoefficient("1.00");
+        jqMain.setUnderwritingCoefficient("");
+        jqMain.setAdjustCoefficient("");
+        jqMain.setTrafficViolationCoefficient("");
+        jqMain.setChannelCoefficientVariation("");
+        jqMain.setUnderwritingCoefficientVariation("");
+        jqMain.setIfNeedQuote("");
+        jqMain.setHopeRate("");
+        jqMain.setProposalNo("");
+        jqMain.setCustomerCoefficient("364001");
+        jqMain.setFleetCoefficient("365000");
+        jqMain.setSignDate("2025-10-11");
+        jqMain.setOperateDate("2025-10-11");
+        jqMain.setInputDate("2025-10-11");
+        jqMain.setPricingAdjustValue("1");
+        //jqMain.setNoneFluctuateFeeRate("N1");
+        jqRisk.setRiskMainInfo(jqMain);
+
+        // 交强险车船税信息
+        BoHaiCrawlerUnderwritingRequest2.CarShipTaxInfo taxInfo = new BoHaiCrawlerUnderwritingRequest2.CarShipTaxInfo();
+        taxInfo.setTaxDocumentDate("");
+        taxInfo.setTaxPayerIdentifier("140104198011062716");
+        taxInfo.setTaxPayerName("封殿雷");
+        taxInfo.setTaxPayerIdentifyNumberType("01");
+        taxInfo.setTaxPayerIdentifyNumber("140104198011062716");
+        //taxInfo.setUnladenMassCS(1087);
+        taxInfo.setLicenseCategory("K33");
+        taxInfo.setCertificateDate("2013-10-14");
+        taxInfo.setTaxItemCode("A");
+        taxInfo.setTaxItemName("载客汽车");
+        taxInfo.setTaxRelifFlag("1");
+        taxInfo.setCalculateMode("1");
+        taxInfo.setCalLateFeeFlag("0");
+        taxInfo.setCalPayBalanceFeeFlag("0");
+        taxInfo.setTaxType("1");
+        taxInfo.setTaxNumType("1");
+        taxInfo.setPayTaxDate("202510");
+        taxInfo.setCarOwnerNature("1");
+        taxInfo.setCarAddressCode("120000");
+        taxInfo.setUseType("100");
+        taxInfo.setCalFeeFlag("00");
+        jqRisk.setCarShipTaxInfo(taxInfo);
+        riskList.add(jqRisk);
+
+        // 商业险(车辆损失险)
+        BoHaiCrawlerUnderwritingRequest2.Risk syRisk = new BoHaiCrawlerUnderwritingRequest2.Risk();
+        List<BoHaiCrawlerUnderwritingRequest2.ItemKind> syItemKinds = new java.util.ArrayList<>();
+
+        // 车辆损失险
+        BoHaiCrawlerUnderwritingRequest2.ItemKind syItem1 = new BoHaiCrawlerUnderwritingRequest2.ItemKind();
+        syItem1.setItemKindNo("1");
+        syItem1.setKindCode("A");
+        syItem1.setKindName("车辆损失险");
+        syItem1.setStartDate("2025-10-11");
+        syItem1.setStartHour("0");
+        syItem1.setEndDate("2026-10-10");
+        syItem1.setEndHour("24");
+        syItem1.setAmount("15380.00");
+        syItem1.setShortRateFlag("3");
+        syItem1.setCalculateFlag("Y");
+        syItem1.setNotDeductibleFlag("0");
+        syItemKinds.add(syItem1);
+
+        // 第三者责任险
+        BoHaiCrawlerUnderwritingRequest2.ItemKind syItem2 = new BoHaiCrawlerUnderwritingRequest2.ItemKind();
+        syItem2.setItemKindNo("2");
+        syItem2.setKindCode("B");
+        syItem2.setKindName("第三者责任险");
+        syItem2.setStartDate("2025-10-11");
+        syItem2.setStartHour("0");
+        syItem2.setEndDate("2026-10-10");
+        syItem2.setEndHour("24");
+        syItem2.setAmount("2000000.00");
+        syItem2.setShortRateFlag("3");
+        syItem2.setCalculateFlag("Y");
+        syItem2.setNotDeductibleFlag("0");
+        syItemKinds.add(syItem2);
+
+        // 车上人员责任险(司机)
+        BoHaiCrawlerUnderwritingRequest2.ItemKind syItem3 = new BoHaiCrawlerUnderwritingRequest2.ItemKind();
+        syItem3.setItemKindNo("3");
+        syItem3.setKindCode("D1");
+        syItem3.setKindName("车上人员责任险(司机)");
+        syItem3.setStartDate("2025-10-11");
+        syItem3.setStartHour("0");
+        syItem3.setEndDate("2026-10-10");
+        syItem3.setEndHour("24");
+        syItem3.setAmount("10000.00");
+        syItem3.setShortRateFlag("3");
+        syItem3.setCalculateFlag("Y");
+        syItem3.setNotDeductibleFlag("0");
+        syItemKinds.add(syItem3);
+
+        // 车上人员责任险(乘客)
+        BoHaiCrawlerUnderwritingRequest2.ItemKind syItem4 = new BoHaiCrawlerUnderwritingRequest2.ItemKind();
+        syItem4.setItemKindNo("4");
+        syItem4.setKindCode("D2");
+        syItem4.setKindName("车上人员责任险(乘客)");
+        syItem4.setStartDate("2025-10-11");
+        syItem4.setStartHour("0");
+        syItem4.setEndDate("2026-10-10");
+        syItem4.setEndHour("24");
+        syItem4.setAmount("10000.00");
+        syItem4.setShortRateFlag("3");
+        syItem4.setCalculateFlag("Y");
+        syItem4.setNotDeductibleFlag("0");
+        syItemKinds.add(syItem4);
+
+        syRisk.setItemKindList(syItemKinds);
+
+        // 商业险险种主信息
+        BoHaiCrawlerUnderwritingRequest2.RiskMainInfo syMain = new BoHaiCrawlerUnderwritingRequest2.RiskMainInfo();
+        syMain.setIsDrivingFee("1");
+        syMain.setAgriflag("012001");
+        syMain.setRiskCode("0380");
+        syMain.setCurrency("CNY");
+        syMain.setRenewalFlag("0");
+        syMain.setStartDate("2025-10-11");
+        syMain.setStartHour("0");
+        syMain.setEndDate("2026-10-10");
+        syMain.setEndHour("24");
+        syMain.setNcdCoefficient("1");
+        syMain.setChannelCoefficient("1.00");
+        syMain.setCustomerProperty("001");
+        syMain.setRiskCoefficient("362003");
+        syMain.setBusinessCoefficient("363000");
+        syMain.setVehicleCoefficient("000");
+        syMain.setCustomerCoefficient("364001");
+        syMain.setFleetCoefficient("365000");
+        syMain.setClauseType("F91");
+        syMain.setSignDate("2025-10-11");
+        syMain.setOperateDate("2025-10-11");
+        syMain.setInputDate("2025-10-11");
+        syRisk.setRiskMainInfo(syMain);
+        riskList.add(syRisk);
+
+        businessData.setRiskList(riskList);
+
+        // 设置特别约定列表
+        List<BoHaiCrawlerUnderwritingRequest2.Engage> engageList = new java.util.ArrayList<>();
+        businessData.setEngageList(engageList);
+
+        // 设置风控信息
+        BoHaiCrawlerUnderwritingRequest2.FxqInfo fxqInfo = new BoHaiCrawlerUnderwritingRequest2.FxqInfo();
+        fxqInfo.setRiskControlFlag("");
+        fxqInfo.setRiskControlId("");
+        fxqInfo.setRiskControlName("");
+        fxqInfo.setRiskControlLevel("");
+        fxqInfo.setRiskControlResult("");
+        fxqInfo.setRiskControlTime("");
+        businessData.setFxqInfo(fxqInfo);
+
+        // 设置缴费计划列表
+        List<BoHaiCrawlerUnderwritingRequest2.PayPlan> payPlanList = new java.util.ArrayList<>();
+        businessData.setPayPlanList(payPlanList);
+
+        BoHaiCrawlerUnderwritingRequest2 boHaiCrawlerUnderwritingRequest2 = new BoHaiCrawlerUnderwritingRequest2();
+
+        BoHaiUnderwritingResponse boHaiUnderwritingResponse = boHaiCrawlerRequestComponent.underwriting(null, "","");
 
         UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
         if ("R_Z00001".equals(boHaiUnderwritingResponse.getResponseCode())) {
@@ -563,8 +1219,7 @@ public class BoHaiCrawlerRequestImpl implements BoHaiCrawlerRequest {
                 underwritingResultsVo.setSyApplyNo(boHaiUnderwritingResponse.getData().getBusinessPolicy().getApplicationNo());
             }
         }
-        return underwritingResultsVo;*/
-        return null;
+        return underwritingResultsVo;
     }
 
     @Override
@@ -664,12 +1319,11 @@ public class BoHaiCrawlerRequestImpl implements BoHaiCrawlerRequest {
         headDTO.setTransCode("CarModelsQuery");
         headDTO.setTransType("Req");
         //token先写死
-        headDTO.setToken("114050281-de6614d0af8b92ed9fd72f3ea80b324d");
+        headDTO.setToken(TOKEN);
         boHaiCrawlerVehicleConfirmationReqeust1.setHead(headDTO);
 
         BoHaiCrawlerVehicleConfirmationReqeust1.BodyDTO bodyDTO = new BoHaiCrawlerVehicleConfirmationReqeust1.BodyDTO();
         bodyDTO.setBasicRateCode("");
-
         // 登录机构编码,先写死
         bodyDTO.setComCode("14070201");
         bodyDTO.setEffectiveDate("2025-09-30");

+ 1 - 1
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/util/DESEncryption.java

@@ -15,7 +15,7 @@ import java.time.format.DateTimeFormatter;
 import java.util.List;
 
 /**
- * @description: 渤海财险 DES ECB 加密解密
+ * @description: 大家财险 DES ECB 加密解密
  * @author: wenks
  * @date: 2025/2/11 15:36
  **/

File diff suppressed because it is too large
+ 41 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/util/DESJava.java


+ 93 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/util/DESUtil.java

@@ -0,0 +1,93 @@
+package com.jzg.quotation.bohai.crawler.util;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
+import java.util.Base64;
+
+public class DESUtil {
+
+    private static SecretKeySpec secretKey;
+
+    private static Cipher cipher;
+
+    /**
+     * DES工具类
+     *
+     * @param key DES密钥,必须为8字节
+     * @throws Exception
+     */
+    public DESUtil(String key) throws Exception {
+        // 密钥处理:取UTF-8编码的前8字节(DES密钥必须为8字节)
+        byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8);
+        byte[] desKeyBytes = Arrays.copyOf(keyBytes, 8); // 截取或填充至8字节
+        this.secretKey = new SecretKeySpec(desKeyBytes, "DES");
+        this.cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); // 明确指定ECB模式和PKCS5填充
+    }
+
+    /**
+     * DES加密
+     *
+     * @param plaintext
+     * @return String
+     * @throws Exception
+     */
+    public String des_encrypt(String plaintext) throws Exception {
+        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
+        byte[] plaintextBytes = plaintext.getBytes(StandardCharsets.UTF_8);
+        byte[] encryptedBytes = cipher.doFinal(plaintextBytes); // 自动处理PKCS5填充
+        return Base64.getEncoder().encodeToString(encryptedBytes);
+    }
+
+    /**
+     * DES解密
+     *
+     * @param ciphertext
+     * @return String
+     * @throws Exception
+     */
+    public String des_decrypt(String ciphertext) throws Exception {
+        cipher.init(Cipher.DECRYPT_MODE, secretKey);
+        byte[] encryptedBytes = Base64.getDecoder().decode(ciphertext);
+        byte[] decryptedBytes = cipher.doFinal(encryptedBytes); // 自动去除填充
+        return new String(decryptedBytes, StandardCharsets.UTF_8);
+    }
+
+    /**
+     * MD5加密方法(返回32位小写)
+     *
+     * @param input 需要加密的字符串
+     * @return String 加密后的32位小写字符串
+     */
+    public static String md5(String input) {
+        if (input == null || input.isEmpty()) {
+            return null;
+        }
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            byte[] messageDigest = md.digest(input.getBytes(StandardCharsets.UTF_8));
+            return bytesToHex(messageDigest);
+        } catch (NoSuchAlgorithmException e) {
+            throw new RuntimeException("MD5加密失败", e);
+        }
+    }
+
+    /**
+     * 字节数组转十六进制字符串
+     *
+     * @param bytes 字节数组
+     * @return 十六进制字符串
+     */
+    private static String bytesToHex(byte[] bytes) {
+        StringBuilder sb = new StringBuilder();
+        for (byte b : bytes) {
+            sb.append(String.format("%02x", b));
+        }
+        return sb.toString();
+    }
+
+
+}

+ 2 - 3
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java

@@ -283,7 +283,6 @@ public class RequestComponent {
         String cookie = "HTTPOnly; Cookie=!nWlhN+KeEYSeye21yv2qnldjEk8Kb9NrbshGomNlDw5h9g3lSal2Gb9pNc81nEf0UOCqFH0E/WkCBk4=; JSESSIONID=0002PPgTB0CRmLqKNT7J4yf05S8:2QC5VNQ9QS:1RBTVLUT0B";
         String sessionId = "114050281_Z29iq6s0yGo8CATOUi5povI1759975733997";
 
-        //WebClient webClient = selectWebClient(url);
         WebClient webClient = selectNoSSLWebClient();
         try {
             return webClient.post()
@@ -324,8 +323,8 @@ public class RequestComponent {
         body = Optional.ofNullable(body).orElse("");
         log.info("URL的值:{},body的值:{}", url, body);
 
-        String cookie = "HTTPOnly; Cookie=!nWlhN+KeEYSeye21yv2qnldjEk8Kb9NrbshGomNlDw5h9g3lSal2Gb9pNc81nEf0UOCqFH0E/WkCBk4=; JSESSIONID=0002PPgTB0CRmLqKNT7J4yf05S8:2QC5VNQ9QS:1RBTVLUT0B";
-        String sessionId = "114050281_Z29iq6s0yGo8CATOUi5povI1759975733997";
+        String cookie = "HTTPOnly; Cookie=!QQTSyR8LpiJG/eK1yv2qnldjEk8Kbwu3AIcbv31HNoHNu5/pS7SOukeG9Z3IeGCMORS2A9xnhOEFARM=; JSESSIONID=0001b7SkOaMza4bFCP9m-IejH6h:2QC5VNQ9QS";
+        String sessionId = "114050281_3GOmZdrKG822tsNw417i5X11760068264750";
 
         WebClient webClient = selectNoSSLWebClient2();
         try {

Some files were not shown because too many files changed in this diff