Просмотр исходного кода

update
1.诚泰财险报价流程

wks 1 год назад
Родитель
Сommit
8d2278cfbf
30 измененных файлов с 3688 добавлено и 807 удалено
  1. 0 52
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/JsonUtil.java
  2. 8 15
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/client/ChengTaiAPI.java
  3. 94 12
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/component/ChengTaiRequestCrawlerComponent.java
  4. 95 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/bo/ChengTaiSaleInfoBo.java
  5. 43 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/po/ChengTaiCrawlerOrder.java
  6. 33 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiDownloadAddressRequest.java
  7. 122 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiGetEngageListRequest.java
  8. 29 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiImageUploadRequest.java
  9. 55 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiPolicyListRequest.java
  10. 111 54
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiPremiumcaRequest.java
  11. 1274 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiUnderwritingRequest.java
  12. 48 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiDownloadAddressResponse.java
  13. 78 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiGetEngageListResponse.java
  14. 17 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiImageUploadResponse.java
  15. 135 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiPayResponse.java
  16. 8 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiPolicyListResponse.java
  17. 1167 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiSaveResponse.java
  18. 105 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiSubmitResponse.java
  19. 9 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/repository/ChengTaiCrawlerOrderRepository.java
  20. 11 2
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/ChengTaiCrawlerQuoteProcessService.java
  21. 27 5
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/impl/ChengTaiCrawlerQuoteProcessServiceImpl.java
  22. 36 13
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/impl/ChengTaiCrawlerRequestImpl.java
  23. 165 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/utils/CarDepreciationCalculator.java
  24. 8 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/utils/ZipImageExample.java
  25. 0 368
      tenant/insurance/quotation-chengtai/src/test/java/com/jzg/quotation/chengtai/crawler/model/entity/ChengTaiInsuranceItemTest.java
  26. 0 14
      tenant/insurance/quotation-chengtai/src/test/java/com/jzg/quotation/chengtai/crawler/model/param/ChengTaiVehicleCoreSaveParamTest.java
  27. 0 139
      tenant/insurance/quotation-chengtai/src/test/java/com/jzg/quotation/chengtai/crawler/model/result/ChengTaiPremiumcalResultTest.java
  28. 0 112
      tenant/insurance/quotation-chengtai/src/test/java/com/jzg/quotation/chengtai/crawler/service/ChengTaiAPIServiceTest.java
  29. 0 13
      tenant/insurance/quotation-chengtai/src/test/java/com/jzg/quotation/chengtai/crawler/service/ChengTaiInsuranceItemServiceTest.java
  30. 10 8
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java

+ 0 - 52
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/JsonUtil.java

@@ -1,52 +0,0 @@
-package com.jzg.quotation.chengtai.crawler;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-
-import java.io.InputStream;
-
-public class JsonUtil {
-
-    private static final ObjectMapper mapper;
-
-    static {
-        mapper = new ObjectMapper();
-        mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, true);
-        // 注意:FAIL_ON_UNKNOWN_PROPERTIES 不要配置成 false。反序列化时,需要获取到未知字段。
-        //mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
-        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-        mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
-    }
-
-    public static <T> T readObjcet(String json, Class<T> clazz) {
-        try {
-            T t = mapper.readValue(json, clazz);
-            return t;
-        } catch (JsonProcessingException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    public static String toJsonString(Object object) {
-        try {
-            String json = mapper.writeValueAsString(object);
-            return json;
-        } catch (JsonProcessingException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    /**
-     * 从 InputStream 解析 JSON 到对象
-     */
-    public static <T> T readObjcet(InputStream inputStream, Class<T> clazz) {
-        try {
-            return mapper.readValue(inputStream, clazz);
-        } catch (Exception e) {
-            throw new RuntimeException("JSON 解析失败", e);
-        }
-    }
-}

+ 8 - 15
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/client/ChengTaiAPI.java

@@ -11,29 +11,22 @@ public enum ChengTaiAPI implements CrawlerRequestUrlStandard {
     FIND_ATTRIBUTION_ORG_BY_USER("api/vehicle/insure/channel/findAttributionOrgByUser", "查询登录用户可用的业务归属机构"),
     FIND_SALE_MAN_VO_BY_DEPT_CODE("/api/vehicle/insure/channel/findSaleManVoByDeptCode", "查询业务人员"),
     FIND_CORE_CONFER_INFO_BY_HANDLE_CODE("/api/vehicle/insure/channel/findCoreConferInfoByHandleCode", "查询务人员可用的中介协议和代理机构"),
+    QUERY_RISK_AUTHORITY("/api/vehicle/insure/channel/queryRiskAuthority", "查询业务人员可用的信息"),
 
     FIND_CAR_MODEL("/api/vehicle/insure/findCarModel", "查询车型"),
     GET_CI_MODEL_CODE("api/vehicle/core/getCIModelCode/", "查询车系"),
     CLIENT_IDENTIFY("/api/vehicle/core/clientIdentify", "身份识别"),
     PREMIUMCAL("/api/vehicle/core/premiumcal", "保费计算"),
+    GET_ENGAGE_LIST("/api/vehicle/core/getEngageList", "特别约定"),
+    SAVE("/api/vehicle/core/save", "保存"),
 
+    IMAGE_UPLOAD("/api/vehicle/imageUpload", "上传影像"),
 
-    System("/api/upms/system", "系统信息"),
-    FindAreaConfig("/api/vehicle/base/findAreaConfig", ""),
-    FindDictionaryOfRisk("/api/vehicle/base/findDictionary?type=RISK_TYPE", "查询险种"),
-    QueryLoginUserInfo("/api/vehicle/base/queryLoginUserInfo", "查询登录用户信息"),
-    QueryRiskAuthority("/api/vehicle/insure/channel/queryRiskAuthority", "查询业务人员可用的信息"),
-    QueryVehicleList("/api/vehicle/insure/carInfo/queryVehicleList", "查询车辆种类"),
-    QueryCarInfo("/api/vehicle/core/queryCarInfo", "查询车型"),
-    Save("/api/vehicle/core/save", "保存"),
-
-    Submit("/api/vehicle/core/submit", "核保"),
-    ImageUpload("/api/vehicle/imageUpload", "上传影像"),
-    GetPolicyModel("/api/vehicle/query/getPolicyModel", "获取详情"),
-    Insure("/api/vehicle/query/payPageQuery/{uuid}/insure", "获取支付链接"),
-    DownloadAddress("/api/vehicle/core/downloadAddress", "获取保单链接"),
-    HygeiaGet("/api/vehicle/core/hygeia/get", "获取意外险");
+    SUBMIT("/api/vehicle/core/submit", "核保"),
 
+    DOWNLOAD_ADDRESS("/api/vehicle/core/downloadAddress", "获取保单链接"),
+    POLICY_LIST("/api/vehicle/query/policyList", "查询订单状态"),
+    PAY("/api/vehicle/query/payPageQuery/%s/pay", "获取支付链接");
 
     private final String uri;
 

+ 94 - 12
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/component/ChengTaiRequestCrawlerComponent.java

@@ -5,9 +5,11 @@ import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.chengtai.crawler.client.ChengTaiAPI;
+import com.jzg.quotation.chengtai.crawler.entity.bo.ChengTaiSaleInfoBo;
 import com.jzg.quotation.chengtai.crawler.entity.request.*;
 import com.jzg.quotation.chengtai.crawler.entity.response.*;
 import com.jzg.quotation.chengtai.crawler.properties.ChengTaiCrawlerProperties;
+import com.jzg.quotation.chengtai.crawler.utils.CarDepreciationCalculator;
 import com.jzg.quotation.commons.component.RequestComponent;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import lombok.RequiredArgsConstructor;
@@ -16,6 +18,7 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 
+import java.text.MessageFormat;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -188,27 +191,106 @@ public class ChengTaiRequestCrawlerComponent {
      * @return 车辆信息
      */
     public ChengTaiGetCIModelCodeResponse getCIModelCode(String carName, HttpHeaders httpHeaders) {
-        return requestComponent.get(ChengTaiAPI.CLIENT_IDENTIFY.getRequestUrl(chengTaiCrawlerProperties.getBaseUrl()) + carName, Map.of(), null, new ParameterizedTypeReference<>() {
+        return requestComponent.get(ChengTaiAPI.GET_CI_MODEL_CODE.getRequestUrl(chengTaiCrawlerProperties.getBaseUrl()) + carName, Map.of(), null, new ParameterizedTypeReference<>() {
         }, httpHeaders);
     }
 
     /**
      * 获取保费
      *
-     * @param quoteVo       报价信息
-     * @param carModel      车辆信息
-     * @param policyHolder  投保人
-     * @param insuredPerson 被保人
-     * @param httpHeaders   请求头
+     * @param request     报价请求
+     * @param httpHeaders 请求头
      * @return 保费
      */
-    public ChengTaiPremiumcaResponse premiumca(QuoteVo quoteVo,
-                                               ChengTaiFindCarModelResponse.DataDTO carModel,
-                                               ChengTaiClientIdentifyResponse policyHolder,
-                                               ChengTaiClientIdentifyResponse insuredPerson,
-                                               String actualValue, HttpHeaders httpHeaders) {
-        ChengTaiPremiumcaRequest request = new ChengTaiPremiumcaRequest(quoteVo, carModel, policyHolder, insuredPerson, actualValue);
+    public ChengTaiPremiumcaResponse premiumca(ChengTaiPremiumcaRequest request, HttpHeaders httpHeaders) {
         return requestPost(ChengTaiAPI.PREMIUMCAL, request, new ParameterizedTypeReference<>() {
         }, httpHeaders);
     }
+
+    /**
+     * 获取特别约定
+     *
+     * @param request     获取特别约定请求
+     * @param httpHeaders 请求头
+     * @return 获取特别约定响应
+     */
+    public ChengTaiGetEngageListResponse getEngageList(ChengTaiGetEngageListRequest request, HttpHeaders httpHeaders) {
+        return requestPost(ChengTaiAPI.GET_ENGAGE_LIST, request, new ParameterizedTypeReference<>() {
+        }, httpHeaders);
+    }
+
+    /**
+     * 保存订单
+     *
+     * @param request     保存订单请求
+     * @param httpHeaders 请求头
+     * @return 保存订单响应
+     */
+    public ChengTaiSaveResponse save(ChengTaiUnderwritingRequest request, HttpHeaders httpHeaders) {
+        return requestPost(ChengTaiAPI.SAVE, request, new ParameterizedTypeReference<>() {
+        }, httpHeaders);
+    }
+
+    /**
+     * 提交核保
+     *
+     * @param request     提交核保订单请求
+     * @param httpHeaders 请求头
+     * @return 提交核保响应
+     */
+    public ChengTaiSubmitResponse submit(ChengTaiUnderwritingRequest request, HttpHeaders httpHeaders) {
+        return requestPost(ChengTaiAPI.SUBMIT, request, new ParameterizedTypeReference<>() {
+        }, httpHeaders);
+    }
+
+    /**
+     * 获取支付链接
+     *
+     * @param policyUuid  订单唯一id
+     * @param httpHeaders 请求头
+     * @return 支付信息
+     */
+    public String pay(String policyUuid, HttpHeaders httpHeaders) {
+        String url = ChengTaiAPI.PAY.getRequestUrl(chengTaiCrawlerProperties.getBaseUrl()).formatted(policyUuid);
+        List<ChengTaiPayResponse> chengTaiPayResponses = requestComponent.get(url, Map.of(), null, new ParameterizedTypeReference<>() {
+        }, httpHeaders);
+        return Optional.ofNullable(chengTaiPayResponses)
+                .filter(list -> !list.isEmpty())
+                .map(list -> list.get(0))
+                .map(ChengTaiPayResponse::getPayUrl)
+                .orElseThrow(() -> new SystemException("支付链接获取失败"));
+    }
+
+
+
+    /**
+     * 查询订单状态
+     *
+     * @param operatorCode 工号
+     * @param proposalNo   订单号
+     * @param startDate    开始时间
+     * @param httpHeaders  请求头
+     * @return
+     */
+    public List<ChengTaiPolicyListResponse> policyList(String operatorCode, String proposalNo, String startDate, HttpHeaders httpHeaders) {
+        ChengTaiPolicyListRequest request = new ChengTaiPolicyListRequest(operatorCode, proposalNo, startDate);
+        return requestPost(ChengTaiAPI.DOWNLOAD_ADDRESS, request, new ParameterizedTypeReference<>() {
+        }, httpHeaders);
+    }
+
+    /**
+     * 下载保单
+     *
+     * @param contractNo  订单号
+     * @param validDate   有效时间
+     * @param policyUuid  保单唯一ID
+     * @param httpHeaders 请求头
+     * @return
+     */
+    public List<ChengTaiDownloadAddressResponse> downloadAddress(String contractNo, String validDate, String policyUuid, HttpHeaders httpHeaders) {
+        ChengTaiDownloadAddressRequest request = new ChengTaiDownloadAddressRequest(contractNo, validDate, policyUuid);
+        return requestPost(ChengTaiAPI.DOWNLOAD_ADDRESS, request, new ParameterizedTypeReference<>() {
+        }, httpHeaders);
+    }
+
 }

+ 95 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/bo/ChengTaiSaleInfoBo.java

@@ -0,0 +1,95 @@
+package com.jzg.quotation.chengtai.crawler.entity.bo;
+
+import com.jzg.quotation.chengtai.crawler.entity.request.ChengTaiPremiumcaRequest;
+import com.jzg.quotation.chengtai.crawler.entity.response.ChengTaiFindAttributionOrgByUserResponse;
+import com.jzg.quotation.chengtai.crawler.entity.response.ChengTaiFindCoreConferInfoByHandleCodeResponse;
+import com.jzg.quotation.chengtai.crawler.entity.response.ChengTaiFindSaleManVoByDeptCodeResponse;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class ChengTaiSaleInfoBo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -9171728352417932280L;
+
+    /**
+     * 归属信息
+     */
+    private ChengTaiPremiumcaRequest.SaleInfoDTO saleInfo;
+
+    /**
+     * 驾意险归属信息
+     */
+    private ChengTaiPremiumcaRequest.AcciSaleInfoDTO acciSaleInfo;
+
+
+    public ChengTaiSaleInfoBo(ChengTaiFindAttributionOrgByUserResponse attributionOrgByUser, ChengTaiFindSaleManVoByDeptCodeResponse saleManVoByDeptCode, ChengTaiFindCoreConferInfoByHandleCodeResponse coreConferInfoByHandleCode) {
+        this.saleInfo = this.buildSaleInfoDTO(attributionOrgByUser, saleManVoByDeptCode, coreConferInfoByHandleCode);
+        this.acciSaleInfo = this.buildAcciSaleInfoDTO(attributionOrgByUser, saleManVoByDeptCode, coreConferInfoByHandleCode);
+    }
+
+    /**
+     * 构造 归属基本信息
+     *
+     * @param attributionOrgByUser       业务员归属机构
+     * @param saleManVoByDeptCode        业务员
+     * @param coreConferInfoByHandleCode 中介机构
+     * @return 归属基本信息
+     */
+    private ChengTaiPremiumcaRequest.SaleInfoDTO buildSaleInfoDTO(ChengTaiFindAttributionOrgByUserResponse attributionOrgByUser, ChengTaiFindSaleManVoByDeptCodeResponse saleManVoByDeptCode, ChengTaiFindCoreConferInfoByHandleCodeResponse coreConferInfoByHandleCode) {
+        ChengTaiPremiumcaRequest.SaleInfoDTO saleInfoDTO = new ChengTaiPremiumcaRequest.SaleInfoDTO();
+        saleInfoDTO.setBusinessMode("");
+        saleInfoDTO.setBusinessSource(coreConferInfoByHandleCode.getSource());
+        saleInfoDTO.setComCode(attributionOrgByUser.getDeptCode());
+        saleInfoDTO.setComName(attributionOrgByUser.getDeptName());
+        saleInfoDTO.setChannelType(coreConferInfoByHandleCode.getChannelDetailCode());
+        saleInfoDTO.setAgreementNo(coreConferInfoByHandleCode.getAgreementCode());
+        saleInfoDTO.setAgreementNoName(coreConferInfoByHandleCode.getIntermediaryName());
+        saleInfoDTO.setSolutionCode(coreConferInfoByHandleCode.getSolutionCode());
+        saleInfoDTO.setPermitNo(coreConferInfoByHandleCode.getRegisterCode());
+        saleInfoDTO.setChannelTypeDetail(coreConferInfoByHandleCode.getChannelTip());
+        saleInfoDTO.setHandlerCode(saleManVoByDeptCode.getUserCode());
+        saleInfoDTO.setHandlerName(saleManVoByDeptCode.getUsername());
+        saleInfoDTO.setCooperateSiteCode("0000000000");
+        saleInfoDTO.setCooperateSiteName("虚拟合作网点");
+        saleInfoDTO.setUserCode(saleManVoByDeptCode.getUserCode());
+        saleInfoDTO.setUserName(saleManVoByDeptCode.getUsername());
+        return saleInfoDTO;
+    }
+
+    /**
+     * 构造 非车险归属基本信息
+     *
+     * @param attributionOrgByUser       业务员归属机构
+     * @param saleManVoByDeptCode        业务员
+     * @param coreConferInfoByHandleCode 中介机构
+     * @return 非车险归属基本信息
+     */
+    private ChengTaiPremiumcaRequest.AcciSaleInfoDTO buildAcciSaleInfoDTO(ChengTaiFindAttributionOrgByUserResponse attributionOrgByUser, ChengTaiFindSaleManVoByDeptCodeResponse saleManVoByDeptCode, ChengTaiFindCoreConferInfoByHandleCodeResponse coreConferInfoByHandleCode) {
+        ChengTaiPremiumcaRequest.AcciSaleInfoDTO acciSaleInfoDTO = new ChengTaiPremiumcaRequest.AcciSaleInfoDTO();
+        acciSaleInfoDTO.setComCode(attributionOrgByUser.getDeptCode());
+        acciSaleInfoDTO.setComName(attributionOrgByUser.getDeptName());
+        acciSaleInfoDTO.setHandlerCode(saleManVoByDeptCode.getUserCode());
+        acciSaleInfoDTO.setHandlerName(saleManVoByDeptCode.getUsername());
+        acciSaleInfoDTO.setAgreementNo(coreConferInfoByHandleCode.getAgreementCode());
+        acciSaleInfoDTO.setAgentCode(coreConferInfoByHandleCode.getIntermediaryCode());
+        acciSaleInfoDTO.setAgentName(coreConferInfoByHandleCode.getIntermediaryName());
+        acciSaleInfoDTO.setSolutionCode(coreConferInfoByHandleCode.getSolutionCode());
+        acciSaleInfoDTO.setPermitNo(coreConferInfoByHandleCode.getRegisterCode());
+        acciSaleInfoDTO.setBusinessMode("");
+        acciSaleInfoDTO.setBusinessSource(coreConferInfoByHandleCode.getSource());
+        acciSaleInfoDTO.setChannelType(coreConferInfoByHandleCode.getCompanyCode());
+        acciSaleInfoDTO.setChannelTypeDetail(coreConferInfoByHandleCode.getChannelTip());
+        acciSaleInfoDTO.setCooperateSiteCode("0000000000");
+        acciSaleInfoDTO.setCooperateSiteName("虚拟合作网点");
+        return acciSaleInfoDTO;
+    }
+
+}

+ 43 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/po/ChengTaiCrawlerOrder.java

@@ -0,0 +1,43 @@
+package com.jzg.quotation.chengtai.crawler.entity.po;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Data
+@Document("chengtai.crawler.order")
+@NoArgsConstructor
+@AllArgsConstructor
+public class ChengTaiCrawlerOrder {
+
+    @Id
+    private String id;
+    /**
+     * 订单号
+     */
+    private String ordersNo;
+    /**
+     * 交强投保单号
+     */
+    private String ciPolicyNumber;
+    /**
+     * 商业投保单号
+     */
+    private String biPolicyNumber;
+    /**
+     * 交强险保单号
+     */
+    private String ciPolicyNo;
+    /**
+     * 商业险保单号
+     */
+    private String biPolicyNo;
+    /**
+     * 保存时间
+     */
+    private String createTime;
+
+
+}

+ 33 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiDownloadAddressRequest.java

@@ -0,0 +1,33 @@
+package com.jzg.quotation.chengtai.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class ChengTaiDownloadAddressRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 6732040294177560707L;
+
+    @JsonProperty("contractNo")
+    private String contractNo;
+
+    @JsonProperty("businessType")
+    private String businessType;
+
+    @JsonProperty("validDate")
+    private String validDate;
+
+    @JsonProperty("policyUuid")
+    private String policyUuid;
+
+    public ChengTaiDownloadAddressRequest(String contractNo, String validDate, String policyUuid) {
+        this.contractNo = contractNo;
+        this.businessType = "C";
+        this.validDate = validDate;
+        this.policyUuid = policyUuid;
+    }
+}

+ 122 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiGetEngageListRequest.java

@@ -0,0 +1,122 @@
+package com.jzg.quotation.chengtai.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@NoArgsConstructor
+@Data
+public class ChengTaiGetEngageListRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -6441779977398601720L;
+
+    @JsonProperty("businessType")
+    private String businessType;
+
+    @JsonProperty("engageType")
+    private String engageType;
+
+    @JsonProperty("issueDate")
+    private String issueDate;
+
+    @JsonProperty("submitDate")
+    private String submitDate;
+
+    @JsonProperty("businessData")
+    private BusinessDataDTO businessData;
+
+    @JsonProperty("dynamicPlaceholder")
+    private DynamicPlaceholderDTO dynamicPlaceholder;
+
+    @JsonProperty("deptCode")
+    private String deptCode;
+
+    @NoArgsConstructor
+    @Data
+    public static class BusinessDataDTO {
+        @JsonProperty("main")
+        private MainDTO main;
+        @JsonProperty("insured")
+        private InsuredDTO insured;
+        @JsonProperty("carInfo")
+        private CarInfoDTO carInfo;
+
+        @NoArgsConstructor
+        @Data
+        public static class MainDTO {
+            @JsonProperty("companyCode")
+            private String companyCode;
+            @JsonProperty("riskCode")
+            private String riskCode;
+            @JsonProperty("systemCode")
+            private String systemCode;
+            @JsonProperty("combInd")
+            private String combInd;
+            @JsonProperty("periodInd")
+            private Integer periodInd;
+            @JsonProperty("isVehicleDamage")
+            private Integer isVehicleDamage;
+            @JsonProperty("isThirdParty")
+            private Integer isThirdParty;
+            @JsonProperty("isNewEquipment")
+            private Integer isNewEquipment;
+            @JsonProperty("isRoadRescue")
+            private Integer isRoadRescue;
+            @JsonProperty("isSafetyMonitoring")
+            private Integer isSafetyMonitoring;
+            @JsonProperty("isValetDriving")
+            private Integer isValetDriving;
+            @JsonProperty("isToInspection")
+            private Integer isToInspection;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class InsuredDTO {
+            @JsonProperty("insuredIdentifyNo")
+            private String insuredIdentifyNo;
+            @JsonProperty("ownerIdentifyNo")
+            private String ownerIdentifyNo;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class CarInfoDTO {
+            @JsonProperty("isNew")
+            private String isNew;
+            @JsonProperty("licenseNo")
+            private String licenseNo;
+            @JsonProperty("useType")
+            private String useType;
+            @JsonProperty("carKindCode")
+            private String carKindCode;
+            @JsonProperty("isLoanVehicle")
+            private String isLoanVehicle;
+            @JsonProperty("capacity")
+            private Integer capacity;
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class DynamicPlaceholderDTO {
+        @JsonProperty("startDate")
+        private String startDate;
+        @JsonProperty("endDate")
+        private String endDate;
+        @JsonProperty("premiumNoTax")
+        private Double premiumNoTax;
+        @JsonProperty("tax")
+        private Double tax;
+        @JsonProperty("owner")
+        private String owner;
+        @JsonProperty("relationWithCar")
+        private String relationWithCar;
+        @JsonProperty("realUseType")
+        private String realUseType;
+    }
+}

+ 29 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiImageUploadRequest.java

@@ -0,0 +1,29 @@
+package com.jzg.quotation.chengtai.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+@NoArgsConstructor
+@Data
+public class ChengTaiImageUploadRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -2823139732321531206L;
+
+    @JsonProperty("businessNo")
+    private String businessNo;
+
+    @JsonProperty("isCarNew")
+    private String isCarNew;
+
+    @JsonProperty("appCode")
+    private String appCode;
+
+    @JsonProperty("imgNames")
+    private List<String> imgNames;
+}

+ 55 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiPolicyListRequest.java

@@ -0,0 +1,55 @@
+package com.jzg.quotation.chengtai.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@NoArgsConstructor
+@Data
+public class ChengTaiPolicyListRequest {
+
+    @JsonProperty("queryFlag")
+    private String queryFlag;
+
+    @JsonProperty("operatorCode")
+    private String operatorCode;
+
+    @JsonProperty("proposalNo")
+    private String proposalNo;
+
+    @JsonProperty("pagination")
+    private PaginationDTO pagination;
+
+    @JsonProperty("operateDateRange")
+    private List<String> operateDateRange;
+
+    @JsonProperty("underWriteInds")
+    private List<String> underWriteInds;
+
+
+    @AllArgsConstructor
+    @NoArgsConstructor
+    @Data
+    public static class PaginationDTO {
+
+        @JsonProperty("pageNo")
+        private Integer pageNo;
+
+        @JsonProperty("pageSize")
+        private Integer pageSize;
+
+    }
+
+    public ChengTaiPolicyListRequest(String operatorCode, String proposalNo, String startDate) {
+        this.queryFlag = "insure";
+        this.operatorCode = operatorCode;
+        this.proposalNo = proposalNo;
+        this.pagination = new PaginationDTO(1, 10);
+        this.operateDateRange = List.of(startDate, "");
+        this.underWriteInds = List.of("z1","z2","z3","1","2","3","4","5","6","7","8","g1","10","11","12","r1","r2","r3");
+    }
+
+}

+ 111 - 54
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiPremiumcaRequest.java

@@ -2,8 +2,12 @@ package com.jzg.quotation.chengtai.crawler.entity.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.commons.entity.quote.vo.*;
+import com.jzg.quotation.chengtai.crawler.entity.bo.ChengTaiSaleInfoBo;
 import com.jzg.quotation.chengtai.crawler.entity.response.ChengTaiClientIdentifyResponse;
 import com.jzg.quotation.chengtai.crawler.entity.response.ChengTaiFindCarModelResponse;
+import com.jzg.quotation.chengtai.crawler.entity.response.ChengTaiGetCIModelCodeResponse;
+import com.jzg.quotation.chengtai.crawler.utils.CarDepreciationCalculator;
+import com.jzg.quotation.commons.utils.TimeProcessing;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -70,9 +74,17 @@ public class ChengTaiPremiumcaRequest implements Serializable {
 
     public ChengTaiPremiumcaRequest(QuoteVo quoteVo, ChengTaiFindCarModelResponse.DataDTO carModel,
                                     ChengTaiClientIdentifyResponse policyHolder, ChengTaiClientIdentifyResponse insuredPerson,
-                                    String actualValue) {
+                                    ChengTaiSaleInfoBo saleInfoBo,
+                                    ChengTaiGetCIModelCodeResponse ciModelCode,
+                                    CarDepreciationCalculator.DepreciationResult depreciationResult) {
         this.combo = new ComboDTO("1");
+        // 主要信息
+        this.businessMain = new BusinessMainDTO(saleInfoBo.getSaleInfo(), "");
         this.flag = new FlagDTO(false, false);
+        // 归属信息
+        this.saleInfo = saleInfoBo.getSaleInfo();
+        // 非车险归属信息
+        this.acciSaleInfo = saleInfoBo.getAcciSaleInfo();
         // 投保人
         this.applicant = new PersonnelDTO(policyHolder);
         // 被保人
@@ -80,7 +92,7 @@ public class ChengTaiPremiumcaRequest implements Serializable {
         // 车主
         this.owner = new OwnerDTO(quoteVo.getOwnersInfo());
         // 车辆信息
-        this.insuredObject = new InsuredObjectDTO(quoteVo.getCarInfoVo(), actualValue, carModel);
+        this.insuredObject = new InsuredObjectDTO(quoteVo.getCarInfoVo(), depreciationResult, carModel, ciModelCode);
         // 交强险
         this.ciContract = new CiContractDTO(quoteVo.getCiRiskInfoVo(), policyHolder);
         // 商业险
@@ -162,6 +174,36 @@ public class ChengTaiPremiumcaRequest implements Serializable {
         private String carRegistFlag;
         @JsonProperty("biConfigAutoFlag")
         private String biConfigAutoFlag;
+
+        public BusinessMainDTO(SaleInfoDTO saleInfoDTO, String planCode) {
+            this.operatorCode = saleInfoDTO.getUserCode();
+            this.operatorName = saleInfoDTO.getUserName();
+            this.operateDate = TimeProcessing.nowDate();
+            this.issueDate = TimeProcessing.nowDateTime();
+            this.inputDate = this.operateDate;
+            this.language = "C";
+            this.moneySuspiciousInd = "1300";
+            this.codInd = "Y";
+            this.argueSolution = "1";
+            this.relateTradeType = "0";
+            this.issueCompany = saleInfoDTO.getComCode();
+            this.issueCompanyName = saleInfoDTO.getComName();
+            this.resourceType = "B2B";
+            this.businessType = "PROPOSAL";
+            this.smsCheckFlag = "1";
+            this.isTerror = "0";
+            this.planCode = planCode;
+            this.smsCodeFlag = "1";
+            this.registerWay = "1";
+            this.carmodel = "01";
+            this.isCarReform = "1";
+            this.cashBusiness = "0";
+            this.publicChanged = false;
+            this.biChanged = false;
+            this.ciChanged = false;
+            this.carRegistFlag = "0";
+            this.biConfigAutoFlag = "0";
+        }
     }
 
     @NoArgsConstructor
@@ -211,8 +253,8 @@ public class ChengTaiPremiumcaRequest implements Serializable {
         @JsonProperty("policyCar")
         private PolicyCarDTO policyCar;
 
-        public InsuredObjectDTO(CarInfoVo carInfoVo, String actualValue, ChengTaiFindCarModelResponse.DataDTO carModel) {
-            this.policyCar = new PolicyCarDTO(carInfoVo, actualValue, carModel);
+        public InsuredObjectDTO(CarInfoVo carInfoVo, CarDepreciationCalculator.DepreciationResult depreciationResult, ChengTaiFindCarModelResponse.DataDTO carModel, ChengTaiGetCIModelCodeResponse ciModelCode) {
+            this.policyCar = new PolicyCarDTO(carInfoVo, depreciationResult, carModel, ciModelCode);
         }
 
         @NoArgsConstructor
@@ -345,7 +387,8 @@ public class ChengTaiPremiumcaRequest implements Serializable {
             @JsonProperty("cimodelclass")
             private String cimodelclass;
 
-            public PolicyCarDTO(CarInfoVo carInfoVo, String actualValue, ChengTaiFindCarModelResponse.DataDTO carModel) {
+            public PolicyCarDTO(CarInfoVo carInfoVo, CarDepreciationCalculator.DepreciationResult depreciationResult, ChengTaiFindCarModelResponse.DataDTO carModel, ChengTaiGetCIModelCodeResponse ciModelCode) {
+
                 this.vhlInfoType = "1";
                 this.plateNo = carInfoVo.getLicenseNo();
                 this.vin = carInfoVo.getVinNo();
@@ -366,50 +409,64 @@ public class ChengTaiPremiumcaRequest implements Serializable {
                 this.attachNatureName = carInfoVo.getPropertyName();
                 this.purchasePrice = Integer.valueOf(carModel.getPurchasepricenottax());
                 this.orignPurchasePrice = Integer.valueOf(carModel.getPurchasepricenottax());
-                this.actualValue = actualValue;
-                this.consultValue = actualValue;
+                this.actualValue = depreciationResult.getActualValue().toString();
+                this.consultValue = depreciationResult.getActualValue().toString();
                 this.plateType = carInfoVo.getLicenseColorCode();
                 this.plateTypeName = carInfoVo.getLicenseColorName();
                 this.vehicleType = carInfoVo.getCarTypeCode();
                 this.vehicleTypeName = carInfoVo.getCarTypeName();
                 this.energyTypes = carInfoVo.getEnergyTypeCode();
-
-                this.carCheckStatus = carCheckStatus;
-                this.carCheckerName = carCheckerName;
-                this.carCheckTime = carCheckTime;
+                this.carCheckStatus = "";
+                this.carCheckerName = "";
+                this.carCheckTime = "";
                 this.approvedPassengersCapacity = Integer.valueOf(carInfoVo.getSeatCount());
-                this.approvedLoad = approvedLoad;
+                this.approvedLoad = Integer.valueOf("");
                 this.power = carModel.getPower();
                 this.displacement = Integer.valueOf(carModel.getExhaustscale());
                 this.exhaustScaleUnit = "cc";
                 this.loanVehicleFlag = "0";
                 this.ecdemicVehicleFlag = "0";
-                this.deptCode = "";
-                this.deptName = deptName;
-                this.useYears = useYears;
-                this.seriesCode = seriesCode;
-                this.series = series;
-                this.seriesType = seriesType;
-                this.brandCode = brandCode;
-                this.brand = brand;
-                this.shortHandCode = shortHandCode;
-                this.vehicleKindCode = vehicleKindCode;
-                this.carName = carName;
-                this.monthDepRate = monthDepRate;
-                this.matchCiModelCode = matchCiModelCode;
-                this.unladenMass = unladenMass;
-                this.ciModelCode = ciModelCode;
-                this.noticeType = carModel.getVehiclemodel();
+                this.deptName = carModel.getCarstyle();
+                this.useYears = String.valueOf(TimeProcessing.serviceLife(carInfoVo.getRegisterDate()));
+                this.seriesCode = carModel.getFamilycode();
+                this.series = carModel.getFamilyname();
+                this.brandCode = carModel.getBrandid();
+                this.brand = carModel.getCarbrand();
+                this.shortHandCode = carModel.getShorthandcode();
+                this.vehicleKindCode = "V";
+                this.carName = ciModelCode.getCarName();
+                this.monthDepRate = depreciationResult.getMonthDepRate();
+                this.matchCiModelCode = ciModelCode.getJyModelCode();
+                this.unladenMass = "";
+                this.ciModelCode = ciModelCode.getCiModelCode();
+                this.noticeType = ciModelCode.getNoticeType();
                 this.newCarSign = "0";
                 this.runArea = "02";
                 this.runAreaName = "境内";
                 this.factoryName = "其他";
                 this.carTypeCode = "01";
-                this.countryNature = "0";
                 this.isEnergy = "0";
                 this.fraud = "0";
-                this.endorTransferMark = endorTransferMark;
+                this.endorTransferMark = "0";
                 this.cimodelclass = carModel.getCimodelclass();
+                switch (carModel.getCarstyle()) {
+                    case "国产车":
+                        this.deptCode = "0";
+                        this.seriesType = "0";
+                        this.countryNature = "0";
+                        break;
+                    case "合资车":
+                        this.deptCode = "1";
+                        this.seriesType = "1";
+                        this.countryNature = "0";
+                        break;
+                    case "进口车":
+                        this.deptCode = "2";
+                        this.seriesType = "2";
+                        this.countryNature = "1";
+                        break;
+                }
+
             }
 
         }
@@ -575,7 +632,7 @@ public class ChengTaiPremiumcaRequest implements Serializable {
 
         public BiContractDTO(RiskInfoVo biRiskInfoVo, List<KindInfoVo> kindInfoVo) {
             this.contractMain = new ContractMainDTO(biRiskInfoVo);
-            this.coverage = kindInfoVo.stream().map(CoverageDTO::new).collect(Collectors.toList());
+            this.coverage = kindInfoVo.stream().map(x -> new CoverageDTO(biRiskInfoVo, x)).collect(Collectors.toList());
         }
 
         @NoArgsConstructor
@@ -603,8 +660,8 @@ public class ChengTaiPremiumcaRequest implements Serializable {
                 this.riskCode = riskCode;
                 this.riskName = riskName;
                 this.validAtOnce = validAtOnce;
-                this.validDate = validDate;
-                this.expiryDate = expiryDate;
+                this.validDate = biRiskInfoVo.getStartDate();
+                this.expiryDate = biRiskInfoVo.getEndDate();
                 this.renewalFlag = renewalFlag;
                 this.currency = currency;
                 this.underWriteInd = underWriteInd;
@@ -655,27 +712,27 @@ public class ChengTaiPremiumcaRequest implements Serializable {
             @JsonProperty("show")
             private Boolean show;
 
-            public CoverageDTO(KindInfoVo kindInfoVo) {
-                this.amount = amount;
-                this.basePremium = basePremium;
-                this.coveragePremium = coveragePremium;
-                this.calculateFlag = calculateFlag;
-                this.ifMainKind = ifMainKind;
-                this.kindCode = kindCode;
-                this.kindFlag = kindFlag;
-                this.kindName = kindName;
-                this.notDeductibleCalculateFlag = notDeductibleCalculateFlag;
-                this.notDeductibleIfMainKind = notDeductibleIfMainKind;
-                this.notDeductibleKindFlag = notDeductibleKindFlag;
-                this.relatedInd = relatedInd;
-                this.validDate = validDate;
-                this.expiryDate = expiryDate;
-                this.currency = currency;
-                this.shortRate = shortRate;
-                this.shortRateType = shortRateType;
-                this.quantity = quantity;
-                this.unitAmount = unitAmount;
-                this.show = show;
+            public CoverageDTO(RiskInfoVo biRiskInfoVo, KindInfoVo kindInfoVo) {
+                this.amount = Integer.valueOf(kindInfoVo.getAmount());
+                this.basePremium = "0";
+                this.coveragePremium = "0";
+                this.calculateFlag = "0";
+                this.ifMainKind = "0";
+                this.kindCode = kindInfoVo.getPlatformKindCode();
+                this.kindFlag = Boolean.TRUE;
+                this.kindName = kindInfoVo.getPlatformKindName();
+                this.notDeductibleCalculateFlag = "0";
+                this.notDeductibleIfMainKind = "0";
+                this.notDeductibleKindFlag = Boolean.TRUE;
+                this.relatedInd = "0";
+                this.validDate = biRiskInfoVo.getStartDate();
+                this.expiryDate = biRiskInfoVo.getEndDate();
+                this.currency = "CNY";
+                this.shortRate = 100;
+                this.shortRateType = "2";
+                this.quantity = kindInfoVo.getQuantity();
+                this.unitAmount = kindInfoVo.getUnitAmount();
+                this.show = Boolean.TRUE;
             }
 
         }

+ 1274 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiUnderwritingRequest.java

@@ -0,0 +1,1274 @@
+package com.jzg.quotation.chengtai.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+@NoArgsConstructor
+@Data
+public class ChengTaiUnderwritingRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 5779496767163013823L;
+
+    @JsonProperty("combo")
+    private ChengTaiPremiumcaRequest.ComboDTO combo;
+
+    @JsonProperty("flag")
+    private ChengTaiPremiumcaRequest.FlagDTO flag;
+
+    @JsonProperty("businessMain")
+    private BusinessMainDTO businessMain;
+
+    @JsonProperty("saleInfo")
+    private SaleInfoDTO saleInfo;
+
+    @JsonProperty("insuredObject")
+    private InsuredObjectDTO insuredObject;
+
+    @JsonProperty("applicant")
+    private ApplicantDTO applicant;
+
+    @JsonProperty("insured")
+    private InsuredDTO insured;
+
+    @JsonProperty("owner")
+    private OwnerDTO owner;
+
+    @JsonProperty("biContract")
+    private BiContractDTO biContract;
+
+    @JsonProperty("ciContract")
+    private CiContractDTO ciContract;
+
+    @JsonProperty("accidentMain")
+    private AccidentMainDTO accidentMain;
+
+    @JsonProperty("accContract")
+    private AccContractDTO accContract;
+
+    @JsonProperty("submitReqBody")
+    private SubmitReqBodyDTO submitReqBody;
+
+    @JsonProperty("acciSaleInfo")
+    private AcciSaleInfoDTO acciSaleInfo;
+
+    @JsonProperty("sunlightId")
+    private String sunlightId;
+
+    @JsonProperty("yztScore")
+    private YztScoreDTO yztScore;
+
+    @JsonProperty("ocftId")
+    private String ocftId;
+
+    @NoArgsConstructor
+    @Data
+    public static class BusinessMainDTO {
+
+        @JsonProperty("uuid")
+        private String uuid;
+
+        @JsonProperty("operatorCode")
+        private String operatorCode;
+
+        @JsonProperty("operatorName")
+        private String operatorName;
+
+        @JsonProperty("operateDate")
+        private String operateDate;
+
+        @JsonProperty("issueDate")
+        private String issueDate;
+
+        @JsonProperty("inputDate")
+        private String inputDate;
+
+        @JsonProperty("language")
+        private String language;
+
+        @JsonProperty("moneySuspiciousInd")
+        private String moneySuspiciousInd;
+
+        @JsonProperty("codInd")
+        private String codInd;
+
+        @JsonProperty("argueSolution")
+        private String argueSolution;
+
+        @JsonProperty("relateTradeType")
+        private String relateTradeType;
+
+        @JsonProperty("issueCompany")
+        private String issueCompany;
+
+        @JsonProperty("issueCompanyName")
+        private String issueCompanyName;
+
+        @JsonProperty("resourceType")
+        private String resourceType;
+
+        @JsonProperty("businessType")
+        private String businessType;
+
+        @JsonProperty("smsCheckFlag")
+        private String smsCheckFlag;
+
+        @JsonProperty("isTerror")
+        private String isTerror;
+
+        @JsonProperty("id")
+        private String id;
+
+        @JsonProperty("planCode")
+        private String planCode;
+
+        @JsonProperty("smsCodeFlag")
+        private String smsCodeFlag;
+
+        @JsonProperty("registerWay")
+        private String registerWay;
+
+        @JsonProperty("paymentmark")
+        private String paymentmark;
+
+        @JsonProperty("carmodel")
+        private String carmodel;
+
+        @JsonProperty("isCarReform")
+        private String isCarReform;
+
+        @JsonProperty("cashBusiness")
+        private String cashBusiness;
+
+        @JsonProperty("publicChanged")
+        private Boolean publicChanged;
+
+        @JsonProperty("biChanged")
+        private Boolean biChanged;
+
+        @JsonProperty("ciChanged")
+        private Boolean ciChanged;
+
+        @JsonProperty("carRegistFlag")
+        private String carRegistFlag;
+
+        @JsonProperty("rulesList")
+        private List<RulesListDTO> rulesList;
+
+        @JsonProperty("biConfigAutoFlag")
+        private String biConfigAutoFlag;
+        @JsonProperty("blackId")
+        private String blackId;
+        @JsonProperty("ocftId")
+        private String ocftId;
+
+        @NoArgsConstructor
+        @Data
+        public static class RulesListDTO {
+            @JsonProperty("authorityLevel")
+            private String authorityLevel;
+            @JsonProperty("dataType")
+            private String dataType;
+            @JsonProperty("reasondescription")
+            private String reasondescription;
+            @JsonProperty("ruleSetName")
+            private String ruleSetName;
+            @JsonProperty("riskCode")
+            private String riskCode;
+            @JsonProperty("finalRuleResult")
+            private String finalRuleResult;
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class SaleInfoDTO {
+        @JsonProperty("businessMode")
+        private String businessMode;
+        @JsonProperty("businessSource")
+        private String businessSource;
+        @JsonProperty("comCode")
+        private String comCode;
+        @JsonProperty("comName")
+        private String comName;
+        @JsonProperty("channelType")
+        private String channelType;
+        @JsonProperty("agreementNo")
+        private String agreementNo;
+        @JsonProperty("agreementNoName")
+        private String agreementNoName;
+        @JsonProperty("agentCode")
+        private String agentCode;
+        @JsonProperty("agentName")
+        private String agentName;
+        @JsonProperty("solutionCode")
+        private String solutionCode;
+        @JsonProperty("permitNo")
+        private String permitNo;
+        @JsonProperty("channelTypeDetail")
+        private String channelTypeDetail;
+        @JsonProperty("handlerCode")
+        private String handlerCode;
+        @JsonProperty("handlerName")
+        private String handlerName;
+        @JsonProperty("cooperateSiteCode")
+        private String cooperateSiteCode;
+        @JsonProperty("cooperateSiteName")
+        private String cooperateSiteName;
+        @JsonProperty("id")
+        private String id;
+        @JsonProperty("orderId")
+        private String orderId;
+        @JsonProperty("userCode")
+        private String userCode;
+        @JsonProperty("userName")
+        private String userName;
+        @JsonProperty("dateType")
+        private String dateType;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class InsuredObjectDTO {
+        @JsonProperty("policyCar")
+        private PolicyCarDTO policyCar;
+
+        @NoArgsConstructor
+        @Data
+        public static class PolicyCarDTO {
+            @JsonProperty("vhlInfoType")
+            private String vhlInfoType;
+            @JsonProperty("plateNo")
+            private String plateNo;
+            @JsonProperty("vin")
+            private String vin;
+            @JsonProperty("engine")
+            private String engine;
+            @JsonProperty("noLicenseFlag")
+            private String noLicenseFlag;
+            @JsonProperty("brandName")
+            private String brandName;
+            @JsonProperty("modelCode")
+            private String modelCode;
+            @JsonProperty("printBrandName")
+            private String printBrandName;
+            @JsonProperty("registerDate")
+            private String registerDate;
+            @JsonProperty("issueDate")
+            private String issueDate;
+            @JsonProperty("enrollDate")
+            private String enrollDate;
+            @JsonProperty("transferMark")
+            private String transferMark;
+            @JsonProperty("carKindCode")
+            private String carKindCode;
+            @JsonProperty("carKindName")
+            private String carKindName;
+            @JsonProperty("useNatureCode")
+            private String useNatureCode;
+            @JsonProperty("useNatureName")
+            private String useNatureName;
+            @JsonProperty("attachNature")
+            private String attachNature;
+            @JsonProperty("attachNatureName")
+            private String attachNatureName;
+            @JsonProperty("purchasePrice")
+            private Integer purchasePrice;
+            @JsonProperty("orignPurchasePrice")
+            private Integer orignPurchasePrice;
+            @JsonProperty("actualValue")
+            private Integer actualValue;
+            @JsonProperty("consultValue")
+            private Integer consultValue;
+            @JsonProperty("plateType")
+            private String plateType;
+            @JsonProperty("plateTypeName")
+            private String plateTypeName;
+            @JsonProperty("vehicleType")
+            private String vehicleType;
+            @JsonProperty("vehicleTypeName")
+            private String vehicleTypeName;
+            @JsonProperty("energyTypes")
+            private String energyTypes;
+            @JsonProperty("carCheckStatus")
+            private String carCheckStatus;
+            @JsonProperty("carCheckReason")
+            private String carCheckReason;
+            @JsonProperty("carCheckReasonName")
+            private String carCheckReasonName;
+            @JsonProperty("approvedPassengersCapacity")
+            private Integer approvedPassengersCapacity;
+            @JsonProperty("approvedLoad")
+            private Integer approvedLoad;
+            @JsonProperty("power")
+            private Double power;
+            @JsonProperty("displacement")
+            private Integer displacement;
+            @JsonProperty("exhaustScaleUnit")
+            private String exhaustScaleUnit;
+            @JsonProperty("loanVehicleFlag")
+            private String loanVehicleFlag;
+            @JsonProperty("ecdemicVehicleFlag")
+            private String ecdemicVehicleFlag;
+            @JsonProperty("deptCode")
+            private String deptCode;
+            @JsonProperty("deptName")
+            private String deptName;
+            @JsonProperty("useYears")
+            private String useYears;
+            @JsonProperty("seriesCode")
+            private String seriesCode;
+            @JsonProperty("series")
+            private String series;
+            @JsonProperty("seriesType")
+            private String seriesType;
+            @JsonProperty("brandCode")
+            private String brandCode;
+            @JsonProperty("brand")
+            private String brand;
+            @JsonProperty("shortHandCode")
+            private String shortHandCode;
+            @JsonProperty("vehicleKindCode")
+            private String vehicleKindCode;
+            @JsonProperty("carName")
+            private String carName;
+            @JsonProperty("monthDepRate")
+            private Double monthDepRate;
+            @JsonProperty("matchCiModelCode")
+            private String matchCiModelCode;
+            @JsonProperty("unladenMass")
+            private String unladenMass;
+            @JsonProperty("ciModelCode")
+            private String ciModelCode;
+            @JsonProperty("noticeType")
+            private String noticeType;
+            @JsonProperty("ciCarKind")
+            private String ciCarKind;
+            @JsonProperty("newCarSign")
+            private String newCarSign;
+            @JsonProperty("runArea")
+            private String runArea;
+            @JsonProperty("runAreaName")
+            private String runAreaName;
+            @JsonProperty("factoryName")
+            private String factoryName;
+            @JsonProperty("carTypeCode")
+            private String carTypeCode;
+            @JsonProperty("countryNature")
+            private String countryNature;
+            @JsonProperty("id")
+            private String id;
+            @JsonProperty("orderId")
+            private String orderId;
+            @JsonProperty("isEnergy")
+            private String isEnergy;
+            @JsonProperty("fraud")
+            private String fraud;
+            @JsonProperty("endorTransferMark")
+            private String endorTransferMark;
+            @JsonProperty("highRiskHit")
+            private String highRiskHit;
+            @JsonProperty("cimodelclass")
+            private String cimodelclass;
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class ApplicantDTO {
+        @JsonProperty("type")
+        private String type;
+        @JsonProperty("role")
+        private String role;
+        @JsonProperty("isTerror")
+        private String isTerror;
+        @JsonProperty("customerId")
+        private String customerId;
+        @JsonProperty("name")
+        private String name;
+        @JsonProperty("identifyTypeCode")
+        private String identifyTypeCode;
+        @JsonProperty("identifyTypeName")
+        private String identifyTypeName;
+        @JsonProperty("identifyNumber")
+        private String identifyNumber;
+        @JsonProperty("province")
+        private String province;
+        @JsonProperty("city")
+        private String city;
+        @JsonProperty("district")
+        private String district;
+        @JsonProperty("provinceName")
+        private String provinceName;
+        @JsonProperty("cityName")
+        private String cityName;
+        @JsonProperty("districtName")
+        private String districtName;
+        @JsonProperty("addr")
+        private String addr;
+        @JsonProperty("completeAddress")
+        private String completeAddress;
+        @JsonProperty("mobile")
+        private String mobile;
+        @JsonProperty("specialClient")
+        private String specialClient;
+        @JsonProperty("identifyValidDate")
+        private String identifyValidDate;
+        @JsonProperty("identifyValidEndDate")
+        private String identifyValidEndDate;
+        @JsonProperty("sex")
+        private String sex;
+        @JsonProperty("birthday")
+        private String birthday;
+        @JsonProperty("operateFlag")
+        private String operateFlag;
+        @JsonProperty("id")
+        private String id;
+        @JsonProperty("longTerm")
+        private String longTerm;
+        @JsonProperty("terrorNationality")
+        private String terrorNationality;
+        @JsonProperty("terrorNationalityName")
+        private String terrorNationalityName;
+        @JsonProperty("isPolitics")
+        private String isPolitics;
+        @JsonProperty("individualBusinessInd")
+        private String individualBusinessInd;
+        @JsonProperty("microBusinessesInd")
+        private String microBusinessesInd;
+        @JsonProperty("signedbyOrig")
+        private String signedbyOrig;
+        @JsonProperty("comCode")
+        private String comCode;
+        @JsonProperty("orderId")
+        private String orderId;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class InsuredDTO {
+        @JsonProperty("type")
+        private String type;
+        @JsonProperty("role")
+        private String role;
+        @JsonProperty("sameType")
+        private String sameType;
+        @JsonProperty("isTerror")
+        private String isTerror;
+        @JsonProperty("customerId")
+        private String customerId;
+        @JsonProperty("name")
+        private String name;
+        @JsonProperty("identifyTypeCode")
+        private String identifyTypeCode;
+        @JsonProperty("identifyTypeName")
+        private String identifyTypeName;
+        @JsonProperty("identifyNumber")
+        private String identifyNumber;
+        @JsonProperty("province")
+        private String province;
+        @JsonProperty("city")
+        private String city;
+        @JsonProperty("district")
+        private String district;
+        @JsonProperty("provinceName")
+        private String provinceName;
+        @JsonProperty("cityName")
+        private String cityName;
+        @JsonProperty("districtName")
+        private String districtName;
+        @JsonProperty("addr")
+        private String addr;
+        @JsonProperty("completeAddress")
+        private String completeAddress;
+        @JsonProperty("relationWithInsured")
+        private String relationWithInsured;
+        @JsonProperty("relationWithCar")
+        private String relationWithCar;
+        @JsonProperty("mobile")
+        private String mobile;
+        @JsonProperty("specialClient")
+        private String specialClient;
+        @JsonProperty("identifyValidDate")
+        private String identifyValidDate;
+        @JsonProperty("identifyValidEndDate")
+        private String identifyValidEndDate;
+        @JsonProperty("sex")
+        private String sex;
+        @JsonProperty("birthday")
+        private String birthday;
+        @JsonProperty("operateFlag")
+        private String operateFlag;
+        @JsonProperty("id")
+        private String id;
+        @JsonProperty("longTerm")
+        private String longTerm;
+        @JsonProperty("terrorNationality")
+        private String terrorNationality;
+        @JsonProperty("terrorNationalityName")
+        private String terrorNationalityName;
+        @JsonProperty("isPolitics")
+        private String isPolitics;
+        @JsonProperty("individualBusinessInd")
+        private String individualBusinessInd;
+        @JsonProperty("microBusinessesInd")
+        private String microBusinessesInd;
+        @JsonProperty("comCode")
+        private String comCode;
+        @JsonProperty("orderId")
+        private String orderId;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class OwnerDTO {
+        @JsonProperty("type")
+        private String type;
+        @JsonProperty("role")
+        private String role;
+        @JsonProperty("sameType")
+        private String sameType;
+        @JsonProperty("name")
+        private String name;
+        @JsonProperty("identifyTypeCode")
+        private String identifyTypeCode;
+        @JsonProperty("identifyTypeName")
+        private String identifyTypeName;
+        @JsonProperty("identifyNumber")
+        private String identifyNumber;
+        @JsonProperty("sex")
+        private String sex;
+        @JsonProperty("age")
+        private Integer age;
+        @JsonProperty("birthday")
+        private String birthday;
+        @JsonProperty("id")
+        private String id;
+        @JsonProperty("identifyValidDate")
+        private String identifyValidDate;
+        @JsonProperty("identifyValidEndDate")
+        private String identifyValidEndDate;
+        @JsonProperty("longTerm")
+        private String longTerm;
+        @JsonProperty("orderId")
+        private String orderId;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class BiContractDTO {
+        @JsonProperty("contractMain")
+        private ContractMainDTO contractMain;
+        @JsonProperty("coverage")
+        private List<CoverageDTO> coverage;
+        @JsonProperty("adjust")
+        private List<AdjustDTO> adjust;
+        @JsonProperty("discountInfo")
+        private DiscountInfoDTO discountInfo;
+        @JsonProperty("engage")
+        private List<EngageDTO> engage;
+        @JsonProperty("platFormMessage")
+        private PlatFormMessageDTO platFormMessage;
+
+        @NoArgsConstructor
+        @Data
+        public static class ContractMainDTO {
+            @JsonProperty("orderId")
+            private String orderId;
+            @JsonProperty("proposalNo")
+            private String proposalNo;
+            @JsonProperty("riskCode")
+            private String riskCode;
+            @JsonProperty("riskName")
+            private String riskName;
+            @JsonProperty("validAtOnce")
+            private String validAtOnce;
+            @JsonProperty("validDate")
+            private String validDate;
+            @JsonProperty("expiryDate")
+            private String expiryDate;
+            @JsonProperty("renewalFlag")
+            private String renewalFlag;
+            @JsonProperty("currency")
+            private String currency;
+            @JsonProperty("sumAmount")
+            private Integer sumAmount;
+            @JsonProperty("totalPremium")
+            private Double totalPremium;
+            @JsonProperty("noTaxPremium")
+            private Double noTaxPremium;
+            @JsonProperty("totalStandardPremium")
+            private Double totalStandardPremium;
+            @JsonProperty("totalRiskPremium")
+            private Double totalRiskPremium;
+            @JsonProperty("vat")
+            private Double vat;
+            @JsonProperty("discount")
+            private Double discount;
+            @JsonProperty("hopeDiscount")
+            private Double hopeDiscount;
+            @JsonProperty("querySequenceNo")
+            private String querySequenceNo;
+            @JsonProperty("querySeqExpireDate")
+            private String querySeqExpireDate;
+            @JsonProperty("underWriteInd")
+            private String underWriteInd;
+            @JsonProperty("othBusinessNo")
+            private String othBusinessNo;
+            @JsonProperty("hopeCoefficient")
+            private Double hopeCoefficient;
+            @JsonProperty("isCheckRepeated")
+            private String isCheckRepeated;
+            @JsonProperty("signStatus")
+            private String signStatus;
+            @JsonProperty("uuid")
+            private String uuid;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class DiscountInfoDTO {
+            @JsonProperty("ctpCostPrem")
+            private Double ctpCostPrem;
+            @JsonProperty("entireExpDiscount")
+            private Double entireExpDiscount;
+            @JsonProperty("entireRecommenDiscount")
+            private Double entireRecommenDiscount;
+            @JsonProperty("entireUwritingDiscount")
+            private Integer entireUwritingDiscount;
+            @JsonProperty("billCtpElr")
+            private Double billCtpElr;
+            @JsonProperty("billComElr")
+            private Double billComElr;
+            @JsonProperty("billElr")
+            private Double billElr;
+            @JsonProperty("commissionFlag")
+            private String commissionFlag;
+            @JsonProperty("uwDiscFixed")
+            private String uwDiscFixed;
+            @JsonProperty("uwDiscLimit")
+            private String uwDiscLimit;
+            @JsonProperty("uwDiscFloor")
+            private String uwDiscFloor;
+            @JsonProperty("ctpCostPremFlag")
+            private String ctpCostPremFlag;
+            @JsonProperty("entireRawInitialDiscount")
+            private Double entireRawInitialDiscount;
+            @JsonProperty("entireInitialDiscount")
+            private Double entireInitialDiscount;
+            @JsonProperty("entireFloatDiscount")
+            private String entireFloatDiscount;
+            @JsonProperty("billComCommission")
+            private String billComCommission;
+            @JsonProperty("billComcor")
+            private String billComcor;
+            @JsonProperty("billCtpcor")
+            private String billCtpcor;
+            @JsonProperty("billCor")
+            private String billCor;
+            @JsonProperty("ncdBpremElr")
+            private String ncdBpremElr;
+            @JsonProperty("sunlightScore")
+            private String sunlightScore;
+            @JsonProperty("exceptionFlag")
+            private String exceptionFlag;
+            @JsonProperty("initialCtpElr")
+            private Double initialCtpElr;
+            @JsonProperty("initialComElr")
+            private Double initialComElr;
+            @JsonProperty("initialElr")
+            private Double initialElr;
+            @JsonProperty("effectInfoDTOList")
+            private List<EffectInfoDTOListDTO> effectInfoDTOList;
+            @JsonProperty("entireRecommenDiscount1")
+            private Integer entireRecommenDiscount1;
+            @JsonProperty("entireRecommenDiscount2")
+            private Integer entireRecommenDiscount2;
+            @JsonProperty("distributionDiscount")
+            private Double distributionDiscount;
+            @JsonProperty("distributionDiscount2")
+            private Double distributionDiscount2;
+            @JsonProperty("rawRecommenElr")
+            private Double rawRecommenElr;
+            @JsonProperty("rawRecommenElr1")
+            private Double rawRecommenElr1;
+            @JsonProperty("rawDistributionElr")
+            private Double rawDistributionElr;
+            @JsonProperty("rawDistributionElr1")
+            private Double rawDistributionElr1;
+            @JsonProperty("policyId")
+            private String policyId;
+            @JsonProperty("uwDiscount")
+            private String uwDiscount;
+
+            @NoArgsConstructor
+            @Data
+            public static class EffectInfoDTOListDTO {
+                @JsonProperty("effectName")
+                private String effectName;
+                @JsonProperty("effectValue")
+                private String effectValue;
+                @JsonProperty("effectinfo")
+                private String effectinfo;
+                @JsonProperty("effectCode")
+                private String effectCode;
+                @JsonProperty("id")
+                private String id;
+                @JsonProperty("policyId")
+                private String policyId;
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PlatFormMessageDTO {
+            @JsonProperty("querySequenceNo")
+            private String querySequenceNo;
+            @JsonProperty("queryDate")
+            private String queryDate;
+            @JsonProperty("expireDate")
+            private String expireDate;
+            @JsonProperty("reinsuranceFlag")
+            private String reinsuranceFlag;
+            @JsonProperty("nonClaimAdjust")
+            private String nonClaimAdjust;
+            @JsonProperty("lastPolicyEffectiveDate")
+            private String lastPolicyEffectiveDate;
+            @JsonProperty("lastPolicyExpireDate")
+            private String lastPolicyExpireDate;
+            @JsonProperty("insureYears")
+            private String insureYears;
+            @JsonProperty("claimTimes")
+            private String claimTimes;
+            @JsonProperty("claimAdjustLevel")
+            private String claimAdjustLevel;
+            @JsonProperty("ciModelCode")
+            private String ciModelCode;
+            @JsonProperty("ciCarKind")
+            private String ciCarKind;
+            @JsonProperty("modelEnergyType")
+            private String modelEnergyType;
+            @JsonProperty("scoreCode")
+            private String scoreCode;
+            @JsonProperty("score")
+            private Integer score;
+            @JsonProperty("policyId")
+            private String policyId;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class CoverageDTO {
+            @JsonProperty("amount")
+            private Integer amount;
+            @JsonProperty("basePremium")
+            private Double basePremium;
+            @JsonProperty("coveragePremium")
+            private Double coveragePremium;
+            @JsonProperty("calculateFlag")
+            private String calculateFlag;
+            @JsonProperty("ifMainKind")
+            private String ifMainKind;
+            @JsonProperty("kindCode")
+            private String kindCode;
+            @JsonProperty("kindFlag")
+            private Boolean kindFlag;
+            @JsonProperty("kindName")
+            private String kindName;
+            @JsonProperty("notDeductibleCalculateFlag")
+            private String notDeductibleCalculateFlag;
+            @JsonProperty("notDeductibleIfMainKind")
+            private String notDeductibleIfMainKind;
+            @JsonProperty("notDeductibleKindFlag")
+            private Boolean notDeductibleKindFlag;
+            @JsonProperty("relatedInd")
+            private String relatedInd;
+            @JsonProperty("validDate")
+            private String validDate;
+            @JsonProperty("expiryDate")
+            private String expiryDate;
+            @JsonProperty("currency")
+            private String currency;
+            @JsonProperty("coverageStandardPremium")
+            private Double coverageStandardPremium;
+            @JsonProperty("coveragePremiumNoTax")
+            private Double coveragePremiumNoTax;
+            @JsonProperty("coverageTax")
+            private Double coverageTax;
+            @JsonProperty("rate")
+            private Integer rate;
+            @JsonProperty("shortRate")
+            private Integer shortRate;
+            @JsonProperty("shortRateType")
+            private String shortRateType;
+            @JsonProperty("deductibleRate")
+            private Integer deductibleRate;
+            @JsonProperty("discount")
+            private Double discount;
+            @JsonProperty("costPrem")
+            private Double costPrem;
+            @JsonProperty("coverageRiskPremium")
+            private Double coverageRiskPremium;
+            @JsonProperty("show")
+            private Boolean show;
+            @JsonProperty("policyId")
+            private String policyId;
+            @JsonProperty("quantity")
+            private Integer quantity;
+            @JsonProperty("unitAmount")
+            private Integer unitAmount;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class AdjustDTO {
+            @JsonProperty("adjustCode")
+            private String adjustCode;
+            @JsonProperty("adjustName")
+            private String adjustName;
+            @JsonProperty("adjustRate")
+            private Integer adjustRate;
+            @JsonProperty("maxRate")
+            private Integer maxRate;
+            @JsonProperty("minRate")
+            private Integer minRate;
+            @JsonProperty("policyId")
+            private String policyId;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class EngageDTO {
+            @JsonProperty("engageCode")
+            private String engageCode;
+            @JsonProperty("engageTitle")
+            private String engageTitle;
+            @JsonProperty("engageDetail")
+            private String engageDetail;
+            @JsonProperty("modifyind")
+            private String modifyind;
+            @JsonProperty("chooseType")
+            private String chooseType;
+            @JsonProperty("deleteInd")
+            private String deleteInd;
+            @JsonProperty("serialNo")
+            private Integer serialNo;
+            @JsonProperty("policyId")
+            private String policyId;
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class CiContractDTO {
+        @JsonProperty("contractMain")
+        private ContractMainDTO contractMain;
+        @JsonProperty("coverage")
+        private List<CoverageDTO> coverage;
+        @JsonProperty("platFormMessage")
+        private PlatFormMessageDTO platFormMessage;
+        @JsonProperty("tax")
+        private TaxDTO tax;
+        @JsonProperty("engage")
+        private List<EngageDTO> engage;
+        @JsonProperty("adjust")
+        private List<AdjustDTO> adjust;
+
+        @NoArgsConstructor
+        @Data
+        public static class ContractMainDTO {
+            @JsonProperty("orderId")
+            private String orderId;
+            @JsonProperty("proposalNo")
+            private String proposalNo;
+            @JsonProperty("riskCode")
+            private String riskCode;
+            @JsonProperty("riskName")
+            private String riskName;
+            @JsonProperty("validAtOnce")
+            private String validAtOnce;
+            @JsonProperty("validDate")
+            private String validDate;
+            @JsonProperty("expiryDate")
+            private String expiryDate;
+            @JsonProperty("renewalFlag")
+            private String renewalFlag;
+            @JsonProperty("currency")
+            private String currency;
+            @JsonProperty("sumAmount")
+            private Integer sumAmount;
+            @JsonProperty("totalPremium")
+            private Integer totalPremium;
+            @JsonProperty("noTaxPremium")
+            private Double noTaxPremium;
+            @JsonProperty("totalStandardPremium")
+            private Integer totalStandardPremium;
+            @JsonProperty("totalRiskPremium")
+            private Integer totalRiskPremium;
+            @JsonProperty("vat")
+            private Double vat;
+            @JsonProperty("discount")
+            private Integer discount;
+            @JsonProperty("querySequenceNo")
+            private String querySequenceNo;
+            @JsonProperty("underWriteInd")
+            private String underWriteInd;
+            @JsonProperty("othBusinessNo")
+            private String othBusinessNo;
+            @JsonProperty("isCIFlag")
+            private String isCIFlag;
+            @JsonProperty("sumTax")
+            private Integer sumTax;
+            @JsonProperty("querySeqExpireDate")
+            private String querySeqExpireDate;
+            @JsonProperty("uuid")
+            private String uuid;
+            @JsonProperty("signStatus")
+            private String signStatus;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PlatFormMessageDTO {
+            @JsonProperty("querySequenceNo")
+            private String querySequenceNo;
+            @JsonProperty("expireDate")
+            private String expireDate;
+            @JsonProperty("reinsuranceFlag")
+            private String reinsuranceFlag;
+            @JsonProperty("lastPolicyEffectiveDate")
+            private String lastPolicyEffectiveDate;
+            @JsonProperty("lastPolicyExpireDate")
+            private String lastPolicyExpireDate;
+            @JsonProperty("ciCarKind")
+            private String ciCarKind;
+            @JsonProperty("claimaAdjustReason")
+            private String claimaAdjustReason;
+            @JsonProperty("claimaAdjustReasonName")
+            private String claimaAdjustReasonName;
+            @JsonProperty("policyId")
+            private String policyId;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class TaxDTO {
+            @JsonProperty("taxConditionCode")
+            private String taxConditionCode;
+            @JsonProperty("taxStartDate")
+            private String taxStartDate;
+            @JsonProperty("taxEndDate")
+            private String taxEndDate;
+            @JsonProperty("taxItemCode")
+            private String taxItemCode;
+            @JsonProperty("taxItemName")
+            private String taxItemName;
+            @JsonProperty("calculateMode")
+            private String calculateMode;
+            @JsonProperty("taxPayerIdentityType")
+            private String taxPayerIdentityType;
+            @JsonProperty("taxPayerIdentityNo")
+            private String taxPayerIdentityNo;
+            @JsonProperty("taxPayerIdentificationCode")
+            private String taxPayerIdentificationCode;
+            @JsonProperty("taxPayerName")
+            private String taxPayerName;
+            @JsonProperty("lastPaidYear")
+            private Integer lastPaidYear;
+            @JsonProperty("annualTaxAmount")
+            private Integer annualTaxAmount;
+            @JsonProperty("annualTaxDue")
+            private Integer annualTaxDue;
+            @JsonProperty("sumTaxDefault")
+            private Integer sumTaxDefault;
+            @JsonProperty("sumOverdue")
+            private Integer sumOverdue;
+            @JsonProperty("sumTax")
+            private Integer sumTax;
+            @JsonProperty("unladenMass")
+            private String unladenMass;
+            @JsonProperty("policyId")
+            private String policyId;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class CoverageDTO {
+            @JsonProperty("rate")
+            private Integer rate;
+            @JsonProperty("amount")
+            private Integer amount;
+            @JsonProperty("calculateFlag")
+            private String calculateFlag;
+            @JsonProperty("currency")
+            private String currency;
+            @JsonProperty("validDate")
+            private String validDate;
+            @JsonProperty("expiryDate")
+            private String expiryDate;
+            @JsonProperty("ifMainKind")
+            private String ifMainKind;
+            @JsonProperty("kindCode")
+            private String kindCode;
+            @JsonProperty("kindName")
+            private String kindName;
+            @JsonProperty("shortRate")
+            private Integer shortRate;
+            @JsonProperty("shortRateType")
+            private String shortRateType;
+            @JsonProperty("basePremium")
+            private Integer basePremium;
+            @JsonProperty("coverageStandardPremium")
+            private Integer coverageStandardPremium;
+            @JsonProperty("coveragePremium")
+            private Integer coveragePremium;
+            @JsonProperty("coveragePremiumNoTax")
+            private Double coveragePremiumNoTax;
+            @JsonProperty("coverageTax")
+            private Double coverageTax;
+            @JsonProperty("discount")
+            private Integer discount;
+            @JsonProperty("costPrem")
+            private Double costPrem;
+            @JsonProperty("coverageRiskPremium")
+            private Integer coverageRiskPremium;
+            @JsonProperty("policyId")
+            private String policyId;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class EngageDTO {
+            @JsonProperty("engageCode")
+            private String engageCode;
+            @JsonProperty("engageTitle")
+            private String engageTitle;
+            @JsonProperty("engageDetail")
+            private String engageDetail;
+            @JsonProperty("modifyind")
+            private String modifyind;
+            @JsonProperty("chooseType")
+            private String chooseType;
+            @JsonProperty("deleteInd")
+            private String deleteInd;
+            @JsonProperty("serialNo")
+            private Integer serialNo;
+            @JsonProperty("policyId")
+            private String policyId;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class AdjustDTO {
+            @JsonProperty("adjustCode")
+            private String adjustCode;
+            @JsonProperty("adjustName")
+            private String adjustName;
+            @JsonProperty("adjustRate")
+            private Integer adjustRate;
+            @JsonProperty("policyId")
+            private String policyId;
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class AccidentMainDTO {
+        @JsonProperty("id")
+        private String id;
+        @JsonProperty("planCode")
+        private String planCode;
+        @JsonProperty("comCode")
+        private String comCode;
+        @JsonProperty("totalPremium")
+        private Integer totalPremium;
+        @JsonProperty("coverages")
+        private List<CoveragesDTO> coverages;
+        @JsonProperty("validDate")
+        private String validDate;
+        @JsonProperty("expiryDate")
+        private String expiryDate;
+        @JsonProperty("riskCode")
+        private String riskCode;
+        @JsonProperty("amount")
+        private Integer amount;
+        @JsonProperty("premium")
+        private Integer premium;
+        @JsonProperty("name")
+        private String name;
+        @JsonProperty("detail")
+        private String detail;
+        @JsonProperty("seat")
+        private Integer seat;
+        @JsonProperty("feePercent")
+        private Integer feePercent;
+        @JsonProperty("assumpsit")
+        private String assumpsit;
+        @JsonProperty("carKindCode")
+        private String carKindCode;
+        @JsonProperty("useNatureCode")
+        private String useNatureCode;
+        @JsonProperty("type")
+        private String type;
+        @JsonProperty("proposalNo")
+        private String proposalNo;
+        @JsonProperty("underWriteInd")
+        private String underWriteInd;
+        @JsonProperty("uuid")
+        private String uuid;
+
+        @NoArgsConstructor
+        @Data
+        public static class CoveragesDTO {
+            @JsonProperty("id")
+            private String id;
+            @JsonProperty("createTime")
+            private String createTime;
+            @JsonProperty("liabilityCode")
+            private String liabilityCode;
+            @JsonProperty("amount")
+            private Integer amount;
+            @JsonProperty("premium")
+            private Integer premium;
+            @JsonProperty("name")
+            private String name;
+            @JsonProperty("productId")
+            private String productId;
+            @JsonProperty("productCode")
+            private String productCode;
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class AccContractDTO {
+        @JsonProperty("contractMain")
+        private ContractMainDTO contractMain;
+        @JsonProperty("coverage")
+        private List<CoverageDTO> coverage;
+
+        @NoArgsConstructor
+        @Data
+        public static class ContractMainDTO {
+            @JsonProperty("schemeName")
+            private String schemeName;
+            @JsonProperty("riskCode")
+            private String riskCode;
+            @JsonProperty("validDate")
+            private String validDate;
+            @JsonProperty("expiryDate")
+            private String expiryDate;
+            @JsonProperty("totalPremium")
+            private Integer totalPremium;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class CoverageDTO {
+            @JsonProperty("kindCode")
+            private String kindCode;
+            @JsonProperty("kindName")
+            private String kindName;
+            @JsonProperty("validDate")
+            private String validDate;
+            @JsonProperty("expiryDate")
+            private String expiryDate;
+            @JsonProperty("amount")
+            private Integer amount;
+            @JsonProperty("coveragePremium")
+            private Integer coveragePremium;
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class SubmitReqBodyDTO {
+        @JsonProperty("uuid")
+        private String uuid;
+        @JsonProperty("businessType")
+        private String businessType;
+        @JsonProperty("contracts")
+        private List<String> contracts;
+        @JsonProperty("mandatoryReviewFlag")
+        private Boolean mandatoryReviewFlag;
+        @JsonProperty("reinsuranceFlag")
+        private String reinsuranceFlag;
+        @JsonProperty("signStatus")
+        private String signStatus;
+        @JsonProperty("acciRelatedFlag")
+        private String acciRelatedFlag;
+        @JsonProperty("codInd")
+        private String codInd;
+        @JsonProperty("sunlightId")
+        private String sunlightId;
+        @JsonProperty("underWriteInd")
+        private String underWriteInd;
+        @JsonProperty("amlterrorFlag")
+        private String amlterrorFlag;
+        @JsonProperty("smscheckFlag")
+        private String smscheckFlag;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class AcciSaleInfoDTO {
+        @JsonProperty("comCode")
+        private String comCode;
+        @JsonProperty("comName")
+        private String comName;
+        @JsonProperty("handlerCode")
+        private String handlerCode;
+        @JsonProperty("handlerName")
+        private String handlerName;
+        @JsonProperty("agreementNo")
+        private String agreementNo;
+        @JsonProperty("agentCode")
+        private String agentCode;
+        @JsonProperty("agentName")
+        private String agentName;
+        @JsonProperty("solutionCode")
+        private String solutionCode;
+        @JsonProperty("permitNo")
+        private String permitNo;
+        @JsonProperty("businessMode")
+        private String businessMode;
+        @JsonProperty("businessSource")
+        private String businessSource;
+        @JsonProperty("channelType")
+        private String channelType;
+        @JsonProperty("channelTypeDetail")
+        private String channelTypeDetail;
+        @JsonProperty("cooperateSiteCode")
+        private String cooperateSiteCode;
+        @JsonProperty("cooperateSiteName")
+        private String cooperateSiteName;
+        @JsonProperty("id")
+        private String id;
+        @JsonProperty("orderId")
+        private String orderId;
+        @JsonProperty("dateType")
+        private String dateType;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class YztScoreDTO {
+        @JsonProperty("scoreId")
+        private String scoreId;
+        @JsonProperty("centile")
+        private Integer centile;
+        @JsonProperty("commercialPureLost")
+        private Double commercialPureLost;
+        @JsonProperty("finalLossrationRate")
+        private Double finalLossrationRate;
+        @JsonProperty("forcePureLost")
+        private Double forcePureLost;
+        @JsonProperty("targetPureLost")
+        private Double targetPureLost;
+    }
+}

+ 48 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiDownloadAddressResponse.java

@@ -0,0 +1,48 @@
+package com.jzg.quotation.chengtai.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+
+@NoArgsConstructor
+@Data
+public class ChengTaiDownloadAddressResponse implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 3237823206440764800L;
+
+    @JsonProperty("queryResults")
+    private List<QueryResultsDTO> queryResults;
+
+    @JsonProperty("mergeUrl")
+    private String mergeUrl;
+
+    @NoArgsConstructor
+    @Data
+    public static class QueryResultsDTO {
+
+        @JsonProperty("docType")
+        private String docType;
+
+        @JsonProperty("docName")
+        private String docName;
+
+        @JsonProperty("downLoadURL")
+        private String downLoadURL;
+
+        @JsonProperty("subBusinessNo")
+        private String subBusinessNo;
+
+        @JsonProperty("riskCode")
+        private String riskCode;
+
+        @JsonProperty("uuid")
+        private String uuid;
+
+    }
+}

+ 78 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiGetEngageListResponse.java

@@ -0,0 +1,78 @@
+package com.jzg.quotation.chengtai.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+@NoArgsConstructor
+@Data
+public class ChengTaiGetEngageListResponse implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -402740180568405850L;
+
+    @JsonProperty("responseHead")
+    private ResponseHeadDTO responseHead;
+
+    @JsonProperty("responseBody")
+    private ResponseBodyDTO responseBody;
+
+    @NoArgsConstructor
+    @Data
+    public static class ResponseHeadDTO {
+
+        @JsonProperty("resCode")
+        private String resCode;
+
+        @JsonProperty("resMsg")
+        private String resMsg;
+
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class ResponseBodyDTO {
+
+        @JsonProperty("engageList")
+        private List<EngageListDTO> engageList;
+
+        @NoArgsConstructor
+        @Data
+        public static class EngageListDTO {
+
+            @JsonProperty("engageCode")
+            private String engageCode;
+
+            @JsonProperty("engageName")
+            private String engageName;
+
+            @JsonProperty("engageDesc")
+            private String engageDesc;
+
+            @JsonProperty("autoInd")
+            private String autoInd;
+
+            @JsonProperty("deleteInd")
+            private String deleteInd;
+
+            @JsonProperty("modifyInd")
+            private String modifyInd;
+
+            @JsonProperty("versionNo")
+            private String versionNo;
+
+            @JsonProperty("effectiveDate")
+            private String effectiveDate;
+
+            @JsonProperty("expiringDate")
+            private String expiringDate;
+
+            @JsonProperty("effectiveInd")
+            private String effectiveInd;
+        }
+    }
+}

+ 17 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiImageUploadResponse.java

@@ -0,0 +1,17 @@
+package com.jzg.quotation.chengtai.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor
+@Data
+public class ChengTaiImageUploadResponse {
+
+    @JsonProperty("code")
+    private String code;
+
+    @JsonProperty("message")
+    private String message;
+
+}

+ 135 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiPayResponse.java

@@ -0,0 +1,135 @@
+package com.jzg.quotation.chengtai.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@NoArgsConstructor
+@Data
+public class ChengTaiPayResponse implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1693926416384211643L;
+
+    @JsonProperty("insuredType")
+    private String insuredType;
+
+    @JsonProperty("appType")
+    private String appType;
+
+    @JsonProperty("insureMobile")
+    private String insureMobile;
+
+    @JsonProperty("payWay")
+    private String payWay;
+
+    @JsonProperty("pagination")
+    private PaginationDTO pagination;
+
+    @JsonProperty("uuid")
+    private String uuid;
+
+    @JsonProperty("orderId")
+    private String orderId;
+
+    @JsonProperty("proposalNo")
+    private String proposalNo;
+
+    @JsonProperty("comName")
+    private String comName;
+
+    @JsonProperty("comCode")
+    private String comCode;
+
+    @JsonProperty("riskCode")
+    private String riskCode;
+
+    @JsonProperty("riskName")
+    private String riskName;
+
+    @JsonProperty("insuredName")
+    private String insuredName;
+
+    @JsonProperty("appName")
+    private String appName;
+
+    @JsonProperty("appMobile")
+    private String appMobile;
+
+    @JsonProperty("identifyNumber")
+    private String identifyNumber;
+
+    @JsonProperty("identifyTypeCode")
+    private String identifyTypeCode;
+
+    @JsonProperty("plateNo")
+    private String plateNo;
+
+    @JsonProperty("totalPremium")
+    private String totalPremium;
+
+    @JsonProperty("operateDate")
+    private String operateDate;
+
+    @JsonProperty("validDate")
+    private String validDate;
+
+    @JsonProperty("expiryDate")
+    private String expiryDate;
+
+    @JsonProperty("underWriteInd")
+    private String underWriteInd;
+
+    @JsonProperty("smsCodeFlag")
+    private String smsCodeFlag;
+
+    @JsonProperty("payFee")
+    private Double payFee;
+
+    @JsonProperty("sumTax")
+    private Double sumTax;
+
+    @JsonProperty("querySequenceNo")
+    private String querySequenceNo;
+
+    @JsonProperty("payeeName")
+    private String payeeName;
+
+    @JsonProperty("tradeNo")
+    private String tradeNo;
+
+    @JsonProperty("payMethod")
+    private String payMethod;
+
+    @JsonProperty("paymentmark")
+    private String paymentmark;
+
+    @JsonProperty("isMaster")
+    private String isMaster;
+
+    @JsonProperty("signStatus")
+    private String signStatus;
+
+    @JsonProperty("payUrl")
+    private String payUrl;
+
+    @JsonProperty("acciOrderNo")
+    private String acciOrderNo;
+
+    @JsonProperty("operatorCode")
+    private String operatorCode;
+
+    @JsonProperty("isCreateEInsurance")
+    private String isCreateEInsurance;
+
+    @JsonProperty("underWriteIndName")
+    private String underWriteIndName;
+
+    @NoArgsConstructor
+    @Data
+    public static class PaginationDTO {
+    }
+}

+ 8 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiPolicyListResponse.java

@@ -0,0 +1,8 @@
+package com.jzg.quotation.chengtai.crawler.entity.response;
+
+public class ChengTaiPolicyListResponse {
+
+
+
+
+}

+ 1167 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiSaveResponse.java

@@ -0,0 +1,1167 @@
+package com.jzg.quotation.chengtai.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+@NoArgsConstructor
+@Data
+public class ChengTaiSaveResponse implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -2103345115856303907L;
+
+    @JsonProperty("saveResult")
+    private SaveResultDTO saveResult;
+
+    @JsonProperty("model")
+    private ModelDTO model;
+
+    @NoArgsConstructor
+    @Data
+    public static class SaveResultDTO {
+        @JsonProperty("uuid")
+        private String uuid;
+        @JsonProperty("contractNoCI")
+        private String contractNoCI;
+        @JsonProperty("contractNoBI")
+        private String contractNoBI;
+        @JsonProperty("codInd")
+        private String codInd;
+        @JsonProperty("signStatus")
+        private String signStatus;
+        @JsonProperty("underWriteInd")
+        private String underWriteInd;
+        @JsonProperty("amlterrorFlag")
+        private String amlterrorFlag;
+        @JsonProperty("smscheckFlag")
+        private String smscheckFlag;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class ModelDTO {
+        @JsonProperty("businessMain")
+        private BusinessMainDTO businessMain;
+        @JsonProperty("saleInfo")
+        private SaleInfoDTO saleInfo;
+        @JsonProperty("acciSaleInfo")
+        private AcciSaleInfoDTO acciSaleInfo;
+        @JsonProperty("insuredObject")
+        private InsuredObjectDTO insuredObject;
+        @JsonProperty("applicant")
+        private ApplicantDTO applicant;
+        @JsonProperty("insured")
+        private InsuredDTO insured;
+        @JsonProperty("owner")
+        private OwnerDTO owner;
+        @JsonProperty("ciContract")
+        private CiContractDTO ciContract;
+        @JsonProperty("biContract")
+        private BiContractDTO biContract;
+        @JsonProperty("accContract")
+        private AccContractDTO accContract;
+        @JsonProperty("accidentMain")
+        private AccidentMainDTO accidentMain;
+        @JsonProperty("submitReqBody")
+        private SubmitReqBodyDTO submitReqBody;
+        @JsonProperty("sunlightId")
+        private String sunlightId;
+        @JsonProperty("blackId")
+        private String blackId;
+        @JsonProperty("yztScore")
+        private YztScoreDTO yztScore;
+        @JsonProperty("ocftId")
+        private String ocftId;
+
+        @NoArgsConstructor
+        @Data
+        public static class BusinessMainDTO {
+            @JsonProperty("id")
+            private String id;
+            @JsonProperty("operatorCode")
+            private String operatorCode;
+            @JsonProperty("cashBusiness")
+            private String cashBusiness;
+            @JsonProperty("operatorName")
+            private String operatorName;
+            @JsonProperty("operateDate")
+            private String operateDate;
+            @JsonProperty("issueDate")
+            private String issueDate;
+            @JsonProperty("language")
+            private String language;
+            @JsonProperty("moneySuspiciousInd")
+            private String moneySuspiciousInd;
+            @JsonProperty("codInd")
+            private String codInd;
+            @JsonProperty("argueSolution")
+            private String argueSolution;
+            @JsonProperty("relateTradeType")
+            private String relateTradeType;
+            @JsonProperty("issueCompany")
+            private String issueCompany;
+            @JsonProperty("issueCompanyName")
+            private String issueCompanyName;
+            @JsonProperty("resourceType")
+            private String resourceType;
+            @JsonProperty("businessType")
+            private String businessType;
+            @JsonProperty("uuid")
+            private String uuid;
+            @JsonProperty("inputDate")
+            private String inputDate;
+            @JsonProperty("smsCheckFlag")
+            private String smsCheckFlag;
+            @JsonProperty("isTerror")
+            private String isTerror;
+            @JsonProperty("planCode")
+            private String planCode;
+            @JsonProperty("paymentmark")
+            private String paymentmark;
+            @JsonProperty("carmodel")
+            private String carmodel;
+            @JsonProperty("isCarReform")
+            private String isCarReform;
+            @JsonProperty("carRegistFlag")
+            private String carRegistFlag;
+            @JsonProperty("biConfigAutoFlag")
+            private String biConfigAutoFlag;
+            @JsonProperty("blackId")
+            private String blackId;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class SaleInfoDTO {
+            @JsonProperty("id")
+            private String id;
+            @JsonProperty("dateType")
+            private String dateType;
+            @JsonProperty("orderId")
+            private String orderId;
+            @JsonProperty("businessMode")
+            private String businessMode;
+            @JsonProperty("businessSource")
+            private String businessSource;
+            @JsonProperty("comCode")
+            private String comCode;
+            @JsonProperty("comName")
+            private String comName;
+            @JsonProperty("channelType")
+            private String channelType;
+            @JsonProperty("channelTypeDetail")
+            private String channelTypeDetail;
+            @JsonProperty("agreementNo")
+            private String agreementNo;
+            @JsonProperty("agreementNoName")
+            private String agreementNoName;
+            @JsonProperty("agentCode")
+            private String agentCode;
+            @JsonProperty("agentName")
+            private String agentName;
+            @JsonProperty("solutionCode")
+            private String solutionCode;
+            @JsonProperty("cooperateSiteCode")
+            private String cooperateSiteCode;
+            @JsonProperty("cooperateSiteName")
+            private String cooperateSiteName;
+            @JsonProperty("handlerCode")
+            private String handlerCode;
+            @JsonProperty("handlerName")
+            private String handlerName;
+            @JsonProperty("permitNo")
+            private String permitNo;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class AcciSaleInfoDTO {
+            @JsonProperty("id")
+            private String id;
+            @JsonProperty("dateType")
+            private String dateType;
+            @JsonProperty("orderId")
+            private String orderId;
+            @JsonProperty("businessMode")
+            private String businessMode;
+            @JsonProperty("businessSource")
+            private String businessSource;
+            @JsonProperty("comCode")
+            private String comCode;
+            @JsonProperty("comName")
+            private String comName;
+            @JsonProperty("channelType")
+            private String channelType;
+            @JsonProperty("channelTypeDetail")
+            private String channelTypeDetail;
+            @JsonProperty("agreementNo")
+            private String agreementNo;
+            @JsonProperty("agentCode")
+            private String agentCode;
+            @JsonProperty("agentName")
+            private String agentName;
+            @JsonProperty("solutionCode")
+            private String solutionCode;
+            @JsonProperty("cooperateSiteCode")
+            private String cooperateSiteCode;
+            @JsonProperty("cooperateSiteName")
+            private String cooperateSiteName;
+            @JsonProperty("handlerCode")
+            private String handlerCode;
+            @JsonProperty("handlerName")
+            private String handlerName;
+            @JsonProperty("permitNo")
+            private String permitNo;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class InsuredObjectDTO {
+            @JsonProperty("policyCar")
+            private PolicyCarDTO policyCar;
+
+            @NoArgsConstructor
+            @Data
+            public static class PolicyCarDTO {
+                @JsonProperty("id")
+                private String id;
+                @JsonProperty("orderId")
+                private String orderId;
+                @JsonProperty("fraud")
+                private String fraud;
+                @JsonProperty("carTypeCode")
+                private String carTypeCode;
+                @JsonProperty("countryNature")
+                private String countryNature;
+                @JsonProperty("vin")
+                private String vin;
+                @JsonProperty("engine")
+                private String engine;
+                @JsonProperty("noLicenseFlag")
+                private String noLicenseFlag;
+                @JsonProperty("plateNo")
+                private String plateNo;
+                @JsonProperty("plateType")
+                private String plateType;
+                @JsonProperty("plateTypeName")
+                private String plateTypeName;
+                @JsonProperty("runArea")
+                private String runArea;
+                @JsonProperty("runAreaName")
+                private String runAreaName;
+                @JsonProperty("printBrandName")
+                private String printBrandName;
+                @JsonProperty("modelCode")
+                private String modelCode;
+                @JsonProperty("brandName")
+                private String brandName;
+                @JsonProperty("registerDate")
+                private String registerDate;
+                @JsonProperty("enrollDate")
+                private String enrollDate;
+                @JsonProperty("newCarSign")
+                private String newCarSign;
+                @JsonProperty("useNatureCode")
+                private String useNatureCode;
+                @JsonProperty("useNatureName")
+                private String useNatureName;
+                @JsonProperty("carKindCode")
+                private String carKindCode;
+                @JsonProperty("carKindName")
+                private String carKindName;
+                @JsonProperty("ecdemicVehicleFlag")
+                private String ecdemicVehicleFlag;
+                @JsonProperty("vehicleType")
+                private String vehicleType;
+                @JsonProperty("vehicleTypeName")
+                private String vehicleTypeName;
+                @JsonProperty("purchasePrice")
+                private Integer purchasePrice;
+                @JsonProperty("useYears")
+                private String useYears;
+                @JsonProperty("attachNature")
+                private String attachNature;
+                @JsonProperty("attachNatureName")
+                private String attachNatureName;
+                @JsonProperty("carCheckStatus")
+                private String carCheckStatus;
+                @JsonProperty("carCheckReason")
+                private String carCheckReason;
+                @JsonProperty("carCheckReasonName")
+                private String carCheckReasonName;
+                @JsonProperty("displacement")
+                private Integer displacement;
+                @JsonProperty("exhaustScaleUnit")
+                private String exhaustScaleUnit;
+                @JsonProperty("approvedLoad")
+                private Integer approvedLoad;
+                @JsonProperty("approvedPassengersCapacity")
+                private Integer approvedPassengersCapacity;
+                @JsonProperty("seriesCode")
+                private String seriesCode;
+                @JsonProperty("series")
+                private String series;
+                @JsonProperty("seriesType")
+                private String seriesType;
+                @JsonProperty("brandCode")
+                private String brandCode;
+                @JsonProperty("brand")
+                private String brand;
+                @JsonProperty("shortHandCode")
+                private String shortHandCode;
+                @JsonProperty("vehicleKindCode")
+                private String vehicleKindCode;
+                @JsonProperty("carName")
+                private String carName;
+                @JsonProperty("issueDate")
+                private String issueDate;
+                @JsonProperty("transferMark")
+                private String transferMark;
+                @JsonProperty("loanVehicleFlag")
+                private String loanVehicleFlag;
+                @JsonProperty("energyTypes")
+                private String energyTypes;
+                @JsonProperty("monthDepRate")
+                private Double monthDepRate;
+                @JsonProperty("actualValue")
+                private Double actualValue;
+                @JsonProperty("consultValue")
+                private Double consultValue;
+                @JsonProperty("matchCiModelCode")
+                private String matchCiModelCode;
+                @JsonProperty("unladenMass")
+                private String unladenMass;
+                @JsonProperty("ciModelCode")
+                private String ciModelCode;
+                @JsonProperty("noticeType")
+                private String noticeType;
+                @JsonProperty("deptCode")
+                private String deptCode;
+                @JsonProperty("deptName")
+                private String deptName;
+                @JsonProperty("power")
+                private Double power;
+                @JsonProperty("ciCarKind")
+                private String ciCarKind;
+                @JsonProperty("vhlInfoType")
+                private String vhlInfoType;
+                @JsonProperty("factoryName")
+                private String factoryName;
+                @JsonProperty("highRiskHit")
+                private String highRiskHit;
+                @JsonProperty("cimodelclass")
+                private String cimodelclass;
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class ApplicantDTO {
+            @JsonProperty("id")
+            private String id;
+            @JsonProperty("orderId")
+            private String orderId;
+            @JsonProperty("type")
+            private String type;
+            @JsonProperty("role")
+            private String role;
+            @JsonProperty("isTerror")
+            private String isTerror;
+            @JsonProperty("customerId")
+            private String customerId;
+            @JsonProperty("name")
+            private String name;
+            @JsonProperty("identifyTypeCode")
+            private String identifyTypeCode;
+            @JsonProperty("identifyTypeName")
+            private String identifyTypeName;
+            @JsonProperty("identifyNumber")
+            private String identifyNumber;
+            @JsonProperty("province")
+            private String province;
+            @JsonProperty("city")
+            private String city;
+            @JsonProperty("district")
+            private String district;
+            @JsonProperty("addr")
+            private String addr;
+            @JsonProperty("completeAddress")
+            private String completeAddress;
+            @JsonProperty("mobile")
+            private String mobile;
+            @JsonProperty("sex")
+            private String sex;
+            @JsonProperty("birthday")
+            private String birthday;
+            @JsonProperty("provinceName")
+            private String provinceName;
+            @JsonProperty("cityName")
+            private String cityName;
+            @JsonProperty("districtName")
+            private String districtName;
+            @JsonProperty("identifyValidDate")
+            private String identifyValidDate;
+            @JsonProperty("identifyValidEndDate")
+            private String identifyValidEndDate;
+            @JsonProperty("longTerm")
+            private String longTerm;
+            @JsonProperty("terrorNationality")
+            private String terrorNationality;
+            @JsonProperty("terrorNationalityName")
+            private String terrorNationalityName;
+            @JsonProperty("isPolitics")
+            private String isPolitics;
+            @JsonProperty("individualBusinessInd")
+            private String individualBusinessInd;
+            @JsonProperty("microBusinessesInd")
+            private String microBusinessesInd;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class InsuredDTO {
+            @JsonProperty("id")
+            private String id;
+            @JsonProperty("orderId")
+            private String orderId;
+            @JsonProperty("type")
+            private String type;
+            @JsonProperty("role")
+            private String role;
+            @JsonProperty("sameType")
+            private String sameType;
+            @JsonProperty("isTerror")
+            private String isTerror;
+            @JsonProperty("customerId")
+            private String customerId;
+            @JsonProperty("name")
+            private String name;
+            @JsonProperty("identifyTypeCode")
+            private String identifyTypeCode;
+            @JsonProperty("identifyTypeName")
+            private String identifyTypeName;
+            @JsonProperty("identifyNumber")
+            private String identifyNumber;
+            @JsonProperty("province")
+            private String province;
+            @JsonProperty("city")
+            private String city;
+            @JsonProperty("district")
+            private String district;
+            @JsonProperty("addr")
+            private String addr;
+            @JsonProperty("completeAddress")
+            private String completeAddress;
+            @JsonProperty("relationWithInsured")
+            private String relationWithInsured;
+            @JsonProperty("relationWithCar")
+            private String relationWithCar;
+            @JsonProperty("mobile")
+            private String mobile;
+            @JsonProperty("sex")
+            private String sex;
+            @JsonProperty("birthday")
+            private String birthday;
+            @JsonProperty("provinceName")
+            private String provinceName;
+            @JsonProperty("cityName")
+            private String cityName;
+            @JsonProperty("districtName")
+            private String districtName;
+            @JsonProperty("identifyValidDate")
+            private String identifyValidDate;
+            @JsonProperty("identifyValidEndDate")
+            private String identifyValidEndDate;
+            @JsonProperty("longTerm")
+            private String longTerm;
+            @JsonProperty("terrorNationality")
+            private String terrorNationality;
+            @JsonProperty("terrorNationalityName")
+            private String terrorNationalityName;
+            @JsonProperty("isPolitics")
+            private String isPolitics;
+            @JsonProperty("individualBusinessInd")
+            private String individualBusinessInd;
+            @JsonProperty("microBusinessesInd")
+            private String microBusinessesInd;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class OwnerDTO {
+            @JsonProperty("id")
+            private String id;
+            @JsonProperty("orderId")
+            private String orderId;
+            @JsonProperty("type")
+            private String type;
+            @JsonProperty("role")
+            private String role;
+            @JsonProperty("sameType")
+            private String sameType;
+            @JsonProperty("name")
+            private String name;
+            @JsonProperty("identifyTypeCode")
+            private String identifyTypeCode;
+            @JsonProperty("identifyTypeName")
+            private String identifyTypeName;
+            @JsonProperty("identifyNumber")
+            private String identifyNumber;
+            @JsonProperty("sex")
+            private String sex;
+            @JsonProperty("birthday")
+            private String birthday;
+            @JsonProperty("age")
+            private Integer age;
+            @JsonProperty("identifyValidDate")
+            private String identifyValidDate;
+            @JsonProperty("identifyValidEndDate")
+            private String identifyValidEndDate;
+            @JsonProperty("longTerm")
+            private String longTerm;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class CiContractDTO {
+            @JsonProperty("contractMain")
+            private ContractMainDTO contractMain;
+            @JsonProperty("coverage")
+            private List<CoverageDTO> coverage;
+            @JsonProperty("platFormMessage")
+            private PlatFormMessageDTO platFormMessage;
+            @JsonProperty("engage")
+            private List<EngageDTO> engage;
+            @JsonProperty("adjust")
+            private List<AdjustDTO> adjust;
+            @JsonProperty("tax")
+            private TaxDTO tax;
+
+            @NoArgsConstructor
+            @Data
+            public static class ContractMainDTO {
+                @JsonProperty("id")
+                private String id;
+                @JsonProperty("uuid")
+                private String uuid;
+                @JsonProperty("orderId")
+                private String orderId;
+                @JsonProperty("proposalNo")
+                private String proposalNo;
+                @JsonProperty("riskCode")
+                private String riskCode;
+                @JsonProperty("riskName")
+                private String riskName;
+                @JsonProperty("validAtOnce")
+                private String validAtOnce;
+                @JsonProperty("validDate")
+                private String validDate;
+                @JsonProperty("expiryDate")
+                private String expiryDate;
+                @JsonProperty("renewalFlag")
+                private String renewalFlag;
+                @JsonProperty("currency")
+                private String currency;
+                @JsonProperty("sumAmount")
+                private Double sumAmount;
+                @JsonProperty("totalPremium")
+                private Double totalPremium;
+                @JsonProperty("noTaxPremium")
+                private Double noTaxPremium;
+                @JsonProperty("totalStandardPremium")
+                private Integer totalStandardPremium;
+                @JsonProperty("totalRiskPremium")
+                private Integer totalRiskPremium;
+                @JsonProperty("vat")
+                private Double vat;
+                @JsonProperty("sumTax")
+                private Integer sumTax;
+                @JsonProperty("discount")
+                private Integer discount;
+                @JsonProperty("querySequenceNo")
+                private String querySequenceNo;
+                @JsonProperty("querySeqExpireDate")
+                private String querySeqExpireDate;
+                @JsonProperty("underWriteInd")
+                private String underWriteInd;
+                @JsonProperty("othBusinessNo")
+                private String othBusinessNo;
+                @JsonProperty("signStatus")
+                private String signStatus;
+                @JsonProperty("isCIFlag")
+                private String isCIFlag;
+            }
+
+            @NoArgsConstructor
+            @Data
+            public static class PlatFormMessageDTO {
+                @JsonProperty("id")
+                private String id;
+                @JsonProperty("policyId")
+                private String policyId;
+                @JsonProperty("querySequenceNo")
+                private String querySequenceNo;
+                @JsonProperty("expireDate")
+                private String expireDate;
+                @JsonProperty("reinsuranceFlag")
+                private String reinsuranceFlag;
+                @JsonProperty("lastPolicyEffectiveDate")
+                private String lastPolicyEffectiveDate;
+                @JsonProperty("lastPolicyExpireDate")
+                private String lastPolicyExpireDate;
+                @JsonProperty("ciCarKind")
+                private String ciCarKind;
+                @JsonProperty("claimaAdjustReason")
+                private String claimaAdjustReason;
+                @JsonProperty("claimaAdjustReasonName")
+                private String claimaAdjustReasonName;
+            }
+
+            @NoArgsConstructor
+            @Data
+            public static class TaxDTO {
+                @JsonProperty("id")
+                private String id;
+                @JsonProperty("policyId")
+                private String policyId;
+                @JsonProperty("taxConditionCode")
+                private String taxConditionCode;
+                @JsonProperty("taxStartDate")
+                private String taxStartDate;
+                @JsonProperty("taxEndDate")
+                private String taxEndDate;
+                @JsonProperty("taxItemCode")
+                private String taxItemCode;
+                @JsonProperty("taxItemName")
+                private String taxItemName;
+                @JsonProperty("calculateMode")
+                private String calculateMode;
+                @JsonProperty("taxPayerIdentityType")
+                private String taxPayerIdentityType;
+                @JsonProperty("taxPayerIdentityNo")
+                private String taxPayerIdentityNo;
+                @JsonProperty("taxPayerIdentificationCode")
+                private String taxPayerIdentificationCode;
+                @JsonProperty("taxPayerName")
+                private String taxPayerName;
+                @JsonProperty("lastPaidYear")
+                private Integer lastPaidYear;
+                @JsonProperty("annualTaxAmount")
+                private Integer annualTaxAmount;
+                @JsonProperty("annualTaxDue")
+                private Integer annualTaxDue;
+                @JsonProperty("sumTaxDefault")
+                private Integer sumTaxDefault;
+                @JsonProperty("sumOverdue")
+                private Integer sumOverdue;
+                @JsonProperty("sumTax")
+                private Integer sumTax;
+                @JsonProperty("unladenMass")
+                private String unladenMass;
+            }
+
+            @NoArgsConstructor
+            @Data
+            public static class CoverageDTO {
+                @JsonProperty("id")
+                private String id;
+                @JsonProperty("policyId")
+                private String policyId;
+                @JsonProperty("kindCode")
+                private String kindCode;
+                @JsonProperty("kindName")
+                private String kindName;
+                @JsonProperty("ifMainKind")
+                private String ifMainKind;
+                @JsonProperty("calculateFlag")
+                private String calculateFlag;
+                @JsonProperty("validDate")
+                private String validDate;
+                @JsonProperty("expiryDate")
+                private String expiryDate;
+                @JsonProperty("currency")
+                private String currency;
+                @JsonProperty("amount")
+                private Integer amount;
+                @JsonProperty("basePremium")
+                private Integer basePremium;
+                @JsonProperty("coverageStandardPremium")
+                private Integer coverageStandardPremium;
+                @JsonProperty("coveragePremium")
+                private Integer coveragePremium;
+                @JsonProperty("coveragePremiumNoTax")
+                private Double coveragePremiumNoTax;
+                @JsonProperty("coverageTax")
+                private Double coverageTax;
+                @JsonProperty("rate")
+                private Integer rate;
+                @JsonProperty("shortRate")
+                private Integer shortRate;
+                @JsonProperty("shortRateType")
+                private String shortRateType;
+                @JsonProperty("discount")
+                private Integer discount;
+                @JsonProperty("costPrem")
+                private Double costPrem;
+                @JsonProperty("coverageRiskPremium")
+                private Integer coverageRiskPremium;
+            }
+
+            @NoArgsConstructor
+            @Data
+            public static class EngageDTO {
+                @JsonProperty("id")
+                private String id;
+                @JsonProperty("policyId")
+                private String policyId;
+                @JsonProperty("serialNo")
+                private Integer serialNo;
+                @JsonProperty("engageCode")
+                private String engageCode;
+                @JsonProperty("engageTitle")
+                private String engageTitle;
+                @JsonProperty("engageDetail")
+                private String engageDetail;
+                @JsonProperty("modifyind")
+                private String modifyind;
+                @JsonProperty("chooseType")
+                private String chooseType;
+            }
+
+            @NoArgsConstructor
+            @Data
+            public static class AdjustDTO {
+                @JsonProperty("id")
+                private String id;
+                @JsonProperty("policyId")
+                private String policyId;
+                @JsonProperty("adjustCode")
+                private String adjustCode;
+                @JsonProperty("adjustName")
+                private String adjustName;
+                @JsonProperty("adjustRate")
+                private Integer adjustRate;
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class BiContractDTO {
+            @JsonProperty("contractMain")
+            private ContractMainDTO contractMain;
+            @JsonProperty("coverage")
+            private List<CoverageDTO> coverage;
+            @JsonProperty("platFormMessage")
+            private PlatFormMessageDTO platFormMessage;
+            @JsonProperty("discountInfo")
+            private DiscountInfoDTO discountInfo;
+            @JsonProperty("engage")
+            private List<EngageDTO> engage;
+            @JsonProperty("adjust")
+            private List<AdjustDTO> adjust;
+
+            @NoArgsConstructor
+            @Data
+            public static class ContractMainDTO {
+                @JsonProperty("id")
+                private String id;
+                @JsonProperty("uuid")
+                private String uuid;
+                @JsonProperty("orderId")
+                private String orderId;
+                @JsonProperty("proposalNo")
+                private String proposalNo;
+                @JsonProperty("riskCode")
+                private String riskCode;
+                @JsonProperty("riskName")
+                private String riskName;
+                @JsonProperty("validAtOnce")
+                private String validAtOnce;
+                @JsonProperty("validDate")
+                private String validDate;
+                @JsonProperty("expiryDate")
+                private String expiryDate;
+                @JsonProperty("renewalFlag")
+                private String renewalFlag;
+                @JsonProperty("currency")
+                private String currency;
+                @JsonProperty("sumAmount")
+                private Double sumAmount;
+                @JsonProperty("totalPremium")
+                private Double totalPremium;
+                @JsonProperty("noTaxPremium")
+                private Double noTaxPremium;
+                @JsonProperty("totalStandardPremium")
+                private Double totalStandardPremium;
+                @JsonProperty("totalRiskPremium")
+                private Double totalRiskPremium;
+                @JsonProperty("vat")
+                private Double vat;
+                @JsonProperty("discount")
+                private Double discount;
+                @JsonProperty("hopeDiscount")
+                private Double hopeDiscount;
+                @JsonProperty("querySequenceNo")
+                private String querySequenceNo;
+                @JsonProperty("querySeqExpireDate")
+                private String querySeqExpireDate;
+                @JsonProperty("underWriteInd")
+                private String underWriteInd;
+                @JsonProperty("othBusinessNo")
+                private String othBusinessNo;
+                @JsonProperty("hopeCoefficient")
+                private Double hopeCoefficient;
+                @JsonProperty("signStatus")
+                private String signStatus;
+                @JsonProperty("isCheckRepeated")
+                private String isCheckRepeated;
+            }
+
+            @NoArgsConstructor
+            @Data
+            public static class PlatFormMessageDTO {
+                @JsonProperty("id")
+                private String id;
+                @JsonProperty("policyId")
+                private String policyId;
+                @JsonProperty("querySequenceNo")
+                private String querySequenceNo;
+                @JsonProperty("queryDate")
+                private String queryDate;
+                @JsonProperty("expireDate")
+                private String expireDate;
+                @JsonProperty("reinsuranceFlag")
+                private String reinsuranceFlag;
+                @JsonProperty("nonClaimAdjust")
+                private String nonClaimAdjust;
+                @JsonProperty("lastPolicyEffectiveDate")
+                private String lastPolicyEffectiveDate;
+                @JsonProperty("lastPolicyExpireDate")
+                private String lastPolicyExpireDate;
+                @JsonProperty("ciModelCode")
+                private String ciModelCode;
+                @JsonProperty("ciCarKind")
+                private String ciCarKind;
+                @JsonProperty("insureYears")
+                private String insureYears;
+                @JsonProperty("claimTimes")
+                private String claimTimes;
+                @JsonProperty("claimAdjustLevel")
+                private String claimAdjustLevel;
+                @JsonProperty("modelEnergyType")
+                private String modelEnergyType;
+                @JsonProperty("scoreCode")
+                private String scoreCode;
+                @JsonProperty("score")
+                private Integer score;
+            }
+
+            @NoArgsConstructor
+            @Data
+            public static class DiscountInfoDTO {
+                @JsonProperty("id")
+                private String id;
+                @JsonProperty("policyId")
+                private String policyId;
+                @JsonProperty("ctpCostPrem")
+                private Double ctpCostPrem;
+                @JsonProperty("entireExpDiscount")
+                private Double entireExpDiscount;
+                @JsonProperty("entireRecommenDiscount")
+                private Double entireRecommenDiscount;
+                @JsonProperty("entireUwritingDiscount")
+                private Integer entireUwritingDiscount;
+                @JsonProperty("billCtpElr")
+                private Double billCtpElr;
+                @JsonProperty("billComElr")
+                private Double billComElr;
+                @JsonProperty("billElr")
+                private Double billElr;
+                @JsonProperty("commissionFlag")
+                private String commissionFlag;
+                @JsonProperty("uwDiscFixed")
+                private String uwDiscFixed;
+                @JsonProperty("uwDiscLimit")
+                private String uwDiscLimit;
+                @JsonProperty("uwDiscFloor")
+                private String uwDiscFloor;
+                @JsonProperty("ctpCostPremFlag")
+                private String ctpCostPremFlag;
+                @JsonProperty("entireRawInitialDiscount")
+                private Double entireRawInitialDiscount;
+                @JsonProperty("entireInitialDiscount")
+                private Double entireInitialDiscount;
+                @JsonProperty("entireFloatDiscount")
+                private String entireFloatDiscount;
+                @JsonProperty("billComCommission")
+                private String billComCommission;
+                @JsonProperty("billComcor")
+                private String billComcor;
+                @JsonProperty("billCtpcor")
+                private String billCtpcor;
+                @JsonProperty("billCor")
+                private String billCor;
+                @JsonProperty("ncdBpremElr")
+                private String ncdBpremElr;
+                @JsonProperty("sunlightScore")
+                private String sunlightScore;
+                @JsonProperty("exceptionFlag")
+                private String exceptionFlag;
+                @JsonProperty("initialCtpElr")
+                private Double initialCtpElr;
+                @JsonProperty("initialComElr")
+                private Double initialComElr;
+                @JsonProperty("initialElr")
+                private Double initialElr;
+                @JsonProperty("effectInfoDTOList")
+                private List<EffectInfoDTOListDTO> effectInfoDTOList;
+                @JsonProperty("entireRecommenDiscount1")
+                private Integer entireRecommenDiscount1;
+                @JsonProperty("entireRecommenDiscount2")
+                private Integer entireRecommenDiscount2;
+                @JsonProperty("distributionDiscount")
+                private Double distributionDiscount;
+                @JsonProperty("distributionDiscount2")
+                private Double distributionDiscount2;
+                @JsonProperty("rawRecommenElr")
+                private Double rawRecommenElr;
+                @JsonProperty("rawRecommenElr1")
+                private Double rawRecommenElr1;
+                @JsonProperty("rawDistributionElr")
+                private Double rawDistributionElr;
+                @JsonProperty("rawDistributionElr1")
+                private Double rawDistributionElr1;
+
+                @NoArgsConstructor
+                @Data
+                public static class EffectInfoDTOListDTO {
+                    @JsonProperty("id")
+                    private String id;
+                    @JsonProperty("policyId")
+                    private String policyId;
+                    @JsonProperty("effectName")
+                    private String effectName;
+                    @JsonProperty("effectValue")
+                    private String effectValue;
+                    @JsonProperty("effectinfo")
+                    private String effectinfo;
+                    @JsonProperty("effectCode")
+                    private String effectCode;
+                }
+            }
+
+            @NoArgsConstructor
+            @Data
+            public static class CoverageDTO {
+                @JsonProperty("id")
+                private String id;
+                @JsonProperty("policyId")
+                private String policyId;
+                @JsonProperty("kindCode")
+                private String kindCode;
+                @JsonProperty("kindName")
+                private String kindName;
+                @JsonProperty("ifMainKind")
+                private String ifMainKind;
+                @JsonProperty("calculateFlag")
+                private String calculateFlag;
+                @JsonProperty("validDate")
+                private String validDate;
+                @JsonProperty("expiryDate")
+                private String expiryDate;
+                @JsonProperty("currency")
+                private String currency;
+                @JsonProperty("amount")
+                private Integer amount;
+                @JsonProperty("basePremium")
+                private Double basePremium;
+                @JsonProperty("coverageStandardPremium")
+                private Double coverageStandardPremium;
+                @JsonProperty("coveragePremium")
+                private Double coveragePremium;
+                @JsonProperty("coveragePremiumNoTax")
+                private Double coveragePremiumNoTax;
+                @JsonProperty("coverageTax")
+                private Double coverageTax;
+                @JsonProperty("rate")
+                private Integer rate;
+                @JsonProperty("shortRate")
+                private Integer shortRate;
+                @JsonProperty("shortRateType")
+                private String shortRateType;
+                @JsonProperty("deductibleRate")
+                private Integer deductibleRate;
+                @JsonProperty("discount")
+                private Double discount;
+                @JsonProperty("costPrem")
+                private Double costPrem;
+                @JsonProperty("coverageRiskPremium")
+                private Double coverageRiskPremium;
+                @JsonProperty("quantity")
+                private Integer quantity;
+                @JsonProperty("unitAmount")
+                private Integer unitAmount;
+            }
+
+            @NoArgsConstructor
+            @Data
+            public static class EngageDTO {
+                @JsonProperty("id")
+                private String id;
+                @JsonProperty("policyId")
+                private String policyId;
+                @JsonProperty("serialNo")
+                private Integer serialNo;
+                @JsonProperty("engageCode")
+                private String engageCode;
+                @JsonProperty("engageTitle")
+                private String engageTitle;
+                @JsonProperty("engageDetail")
+                private String engageDetail;
+                @JsonProperty("modifyind")
+                private String modifyind;
+                @JsonProperty("chooseType")
+                private String chooseType;
+            }
+
+            @NoArgsConstructor
+            @Data
+            public static class AdjustDTO {
+                @JsonProperty("id")
+                private String id;
+                @JsonProperty("policyId")
+                private String policyId;
+                @JsonProperty("adjustCode")
+                private String adjustCode;
+                @JsonProperty("adjustName")
+                private String adjustName;
+                @JsonProperty("adjustRate")
+                private Integer adjustRate;
+                @JsonProperty("maxRate")
+                private Integer maxRate;
+                @JsonProperty("minRate")
+                private Integer minRate;
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class AccContractDTO {
+            @JsonProperty("contractMain")
+            private ContractMainDTO contractMain;
+            @JsonProperty("coverage")
+            private List<CoverageDTO> coverage;
+
+            @NoArgsConstructor
+            @Data
+            public static class ContractMainDTO {
+                @JsonProperty("riskCode")
+                private String riskCode;
+                @JsonProperty("validDate")
+                private String validDate;
+                @JsonProperty("expiryDate")
+                private String expiryDate;
+                @JsonProperty("totalPremium")
+                private Integer totalPremium;
+                @JsonProperty("schemeName")
+                private String schemeName;
+            }
+
+            @NoArgsConstructor
+            @Data
+            public static class CoverageDTO {
+                @JsonProperty("kindCode")
+                private String kindCode;
+                @JsonProperty("kindName")
+                private String kindName;
+                @JsonProperty("validDate")
+                private String validDate;
+                @JsonProperty("expiryDate")
+                private String expiryDate;
+                @JsonProperty("amount")
+                private Integer amount;
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class AccidentMainDTO {
+            @JsonProperty("id")
+            private String id;
+            @JsonProperty("name")
+            private String name;
+            @JsonProperty("comCode")
+            private String comCode;
+            @JsonProperty("amount")
+            private Integer amount;
+            @JsonProperty("totalPremium")
+            private Double totalPremium;
+            @JsonProperty("validDate")
+            private String validDate;
+            @JsonProperty("expiryDate")
+            private String expiryDate;
+            @JsonProperty("planCode")
+            private String planCode;
+            @JsonProperty("premium")
+            private Double premium;
+            @JsonProperty("coverages")
+            private List<CoveragesDTO> coverages;
+            @JsonProperty("riskCode")
+            private String riskCode;
+            @JsonProperty("proposalNo")
+            private String proposalNo;
+            @JsonProperty("underWriteInd")
+            private String underWriteInd;
+            @JsonProperty("uuid")
+            private String uuid;
+
+            @NoArgsConstructor
+            @Data
+            public static class CoveragesDTO {
+                @JsonProperty("id")
+                private String id;
+                @JsonProperty("createTime")
+                private String createTime;
+                @JsonProperty("name")
+                private String name;
+                @JsonProperty("amount")
+                private Double amount;
+                @JsonProperty("premium")
+                private Double premium;
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class SubmitReqBodyDTO {
+            @JsonProperty("businessType")
+            private String businessType;
+            @JsonProperty("reinsuranceFlag")
+            private String reinsuranceFlag;
+            @JsonProperty("acciRelatedFlag")
+            private String acciRelatedFlag;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class YztScoreDTO {
+            @JsonProperty("scoreId")
+            private String scoreId;
+            @JsonProperty("centile")
+            private Integer centile;
+            @JsonProperty("commercialPureLost")
+            private Double commercialPureLost;
+            @JsonProperty("finalLossrationRate")
+            private Double finalLossrationRate;
+            @JsonProperty("forcePureLost")
+            private Double forcePureLost;
+            @JsonProperty("targetPureLost")
+            private Double targetPureLost;
+        }
+    }
+}

+ 105 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiSubmitResponse.java

@@ -0,0 +1,105 @@
+package com.jzg.quotation.chengtai.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+@NoArgsConstructor
+@Data
+public class ChengTaiSubmitResponse implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 4712837290234563445L;
+
+    @JsonProperty("head")
+    private HeadDTO head;
+
+    @JsonProperty("submitResult")
+    private SubmitResultDTO submitResult;
+
+    @NoArgsConstructor
+    @Data
+    public static class HeadDTO {
+
+        @JsonProperty("resCode")
+        private String resCode;
+
+        @JsonProperty("resMsg")
+        private String resMsg;
+
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class SubmitResultDTO {
+
+        @JsonProperty("uuid")
+        private String uuid;
+
+        @JsonProperty("contracts")
+        private List<ContractsDTO> contracts;
+
+        @JsonProperty("acceptInd")
+        private String acceptInd;
+
+        @JsonProperty("fraud")
+        private String fraud;
+
+        @JsonProperty("finalRuleResult")
+        private String finalRuleResult;
+
+        @JsonProperty("authorityLevel")
+        private String authorityLevel;
+
+        @JsonProperty("authorityList")
+        private List<AuthorityListDTO> authorityList;
+
+        @JsonProperty("reinsuranceFlag")
+        private String reinsuranceFlag;
+
+        @NoArgsConstructor
+        @Data
+        public static class ContractsDTO {
+
+            @JsonProperty("contractNo")
+            private String contractNo;
+
+            @JsonProperty("underWriteInd")
+            private String underWriteInd;
+
+            @JsonProperty("riskCode")
+            private String riskCode;
+
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class AuthorityListDTO {
+
+            @JsonProperty("authorityLevel")
+            private String authorityLevel;
+
+            @JsonProperty("dataType")
+            private String dataType;
+
+            @JsonProperty("reasondescription")
+            private String reasondescription;
+
+            @JsonProperty("ruleSetName")
+            private String ruleSetName;
+
+            @JsonProperty("riskCode")
+            private String riskCode;
+
+            @JsonProperty("uuid")
+            private String uuid;
+
+            @JsonProperty("finalRuleResult")
+            private String finalRuleResult;
+        }
+    }
+}

+ 9 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/repository/ChengTaiCrawlerOrderRepository.java

@@ -0,0 +1,9 @@
+package com.jzg.quotation.chengtai.crawler.repository;
+
+import com.jzg.quotation.chengtai.crawler.properties.ChengTaiCrawlerProperties;
+import com.jzg.quotation.commons.repository.BaseRepository;
+
+public interface ChengTaiCrawlerOrderRepository extends BaseRepository<ChengTaiCrawlerProperties> {
+
+
+}

+ 11 - 2
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/ChengTaiCrawlerQuoteProcessService.java

@@ -1,7 +1,10 @@
 package com.jzg.quotation.chengtai.crawler.service;
 
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.quotation.chengtai.crawler.entity.ChengTaiCrawlerConfigureParameters;
+import com.jzg.quotation.chengtai.crawler.entity.bo.ChengTaiSaleInfoBo;
+import com.jzg.quotation.chengtai.crawler.utils.CarDepreciationCalculator;
 import org.springframework.http.HttpHeaders;
 
 /**
@@ -38,7 +41,13 @@ public interface ChengTaiCrawlerQuoteProcessService {
      * @param parameters 归属配置参数
      * @param headers    请求头
      */
-    void buildClientIdentify(ChengTaiCrawlerConfigureParameters parameters, HttpHeaders headers);
-
+    ChengTaiSaleInfoBo buildClientIdentify(ChengTaiCrawlerConfigureParameters parameters, HttpHeaders headers);
 
+    /**
+     * 计算车辆实际价格
+     *
+     * @param carInfoVo 车辆信息
+     * @return 新车实际价格
+     */
+    CarDepreciationCalculator.DepreciationResult generateClaimableValue(CarInfoVo carInfoVo, String purchasePrice);
 }

+ 27 - 5
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/impl/ChengTaiCrawlerQuoteProcessServiceImpl.java

@@ -3,23 +3,30 @@ package com.jzg.quotation.chengtai.crawler.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.jzg.commons.constants.quote.enums.base.ExpenseRequestUrl;
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.identify.SliderCaptchaVo;
 import com.jzg.quotation.chengtai.crawler.component.ChengTaiRequestCrawlerComponent;
 import com.jzg.quotation.chengtai.crawler.entity.ChengTaiCrawlerConfigureParameters;
+import com.jzg.quotation.chengtai.crawler.entity.bo.ChengTaiSaleInfoBo;
 import com.jzg.quotation.chengtai.crawler.entity.request.ChengTaiCheckCaptchaRequest;
 import com.jzg.quotation.chengtai.crawler.entity.request.ChengTaiGetCaptchaRequest;
 import com.jzg.quotation.chengtai.crawler.entity.request.ChengTaiLoginRequest;
 import com.jzg.quotation.chengtai.crawler.entity.response.*;
+import com.jzg.quotation.chengtai.crawler.repository.ChengTaiCrawlerOrderRepository;
 import com.jzg.quotation.chengtai.crawler.service.ChengTaiCrawlerQuoteProcessService;
+import com.jzg.quotation.chengtai.crawler.utils.CarDepreciationCalculator;
 import com.jzg.quotation.chengtai.utils.CryptoUtils;
 import com.jzg.quotation.chengtai.utils.RSACipher;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
 import com.jzg.quotation.commons.utils.Base64ImageUtils;
+import com.jzg.quotation.commons.utils.TimeProcessing;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.List;
 import java.util.Optional;
 
@@ -31,6 +38,8 @@ public class ChengTaiCrawlerQuoteProcessServiceImpl implements ChengTaiCrawlerQu
 
     private final ExteriorUtilsRequest exteriorUtilsRequest;
 
+    private final ChengTaiCrawlerOrderRepository chengTaiCrawlerOrderRepository;
+
     @Override
     public void login(String username, String password) throws Exception {
         // 步骤一 获取验证码
@@ -66,12 +75,12 @@ public class ChengTaiCrawlerQuoteProcessServiceImpl implements ChengTaiCrawlerQu
     @Override
     public HttpHeaders getTokenHeaders(String username, String password) {
         HttpHeaders httpHeaders = new HttpHeaders();
-        httpHeaders.set("token", "eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE3NTc1NjE4ODQsImV4cCI6MTc1NzU3MjY4NCwicGF5bG9hZCI6IldkeHJsN3BjSjBYLWtObU9ZTGpxV2pQNjJaQk5ZLTl4eFNMT3pONExzY1Y5UzI0VXliS3E0ZzU3VGdQdi1vaWlGRFdiUXRmcFhNUTlNQjJYbEZoamJtdlBqLUxnLUUzMHA2UU9PNXdrWEFtUUNsLXAxMHVLN0dMMHFVSDA3MTJsdGhJakpuQjhqSFl5ajM0VXJwTFpKSFZWenRhMzNBY0VkaHVSdFFqMW5ON2ViZG95eHEySzRGWEdrTUJYZjRYY2lMMVdza092YnFLWjJhSGNjR2xVaW9DZ1hsSHl5RDU3aExFdzd4VER5dmZtUlVqcjNYZ2xNWDJlVUthcjk2YzBRZEFFQUE5cGY5Vmo2TDZTVnNFYmM2aW5zNDBoQzNGdFpieGh0UWtoRjlPQlZHWXRiNjlHV3dzaXZzeXlzRTltVG9aX00tNlRSRjhYWExMZGltaUdGT3lkX19jQmYwTGZBS1BnemhRcXBOSUtwa3IzUVhvWjRDUGtYaDVGbkE4UENUWjcwZWxzeUtreTZUZzNCWm5DYnI3UjFhNzFjWVE5aVQ5c1Z1YnpTWEdZOEJrWWdGXzd4M1drUzlfS3lNaExwbHk1SXB3bVBFcFhmYVB6NHRYd29RIn0.uZ4yFFGSVFpUVrVTfJHZ4fgACngzmJm-luGwI_gZ5tVCvIOaBtr8MkHE8Qm-NLig8W1lLRtv7p3QCswmOiBc6A");
+        httpHeaders.set("token", "eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE3NTg2OTYyNTcsImV4cCI6MTc1ODcwNzA1NywicGF5bG9hZCI6IldkeHJsN3BjSjBYLWtObU9ZTGpxV2pQNjJaQk5ZLTl4eFNMT3pONExzY1Y5UzI0VXliS3E0ZzU3VGdQdi1vaWlGRFdiUXRmcFhNUTlNQjJYbEZoamJtdlBqLUxnLUUzMHA2UU9PNXdrWEFtUUNsLXAxMHVLN0dMMHFVSDA3MTJsdGhJakpuQjhqSFl5ajM0VXJwTFpKSFZWenRhMzNBY0VkaHVSdFFqMW5ONzQzMDVKN29tUWZuWi1iTzJQQnhmWDBId0c2NXdXcnNaS3lxQXdZRUVtQjg1aEM5V3dmWm91c2V6bkhVZjZSOHJHVEU2THNPMExLR3hnMDMwdU1nRUlyVFE2SmJIRjF0NW1fQXdNUmdMeDJhaW5zNDBoQzNGdFpieGh0UWtoRjlPeDFYWjBpcXRxZjF6TVdKSnlLTEFBX3J2dEJVWlNXMFdFeUtsRy1Gc0Z2LXlkX19jQmYwTGZBS1BnemhRcXBOSUtwa3IzUVhvWjRDUGtYaDVGbkE4UENUWjcwZWxzeUtreTZUZzNCWm5DYnI3UjFhNzFjWVE5aVQ5c1Z1YnpTWEhySkRUVzExYk9pOENiY3Q1SzdJN1JRdzJiazBBdHk0X2dRd3lFN3VHUTFnIn0.kIL67R-1I4-nj38HTg8ztvOlH3Juz6mfY1NAgItJkjoSlOJo9LZoy_QWs2RAdb30a9F3ZYVR5J3j9sF0USMPPQ");
         return httpHeaders;
     }
 
     @Override
-    public void buildClientIdentify(ChengTaiCrawlerConfigureParameters parameters, HttpHeaders headers) {
+    public ChengTaiSaleInfoBo buildClientIdentify(ChengTaiCrawlerConfigureParameters parameters, HttpHeaders headers) {
         // 步骤一 获取业务归属机构
         ChengTaiFindAttributionOrgByUserResponse attributionOrgByUser = chengTaiRequestCrawlerComponent.findAttributionOrgByUser(parameters.getDeptCode(), headers);
         // 步骤二 获取业务员
@@ -79,10 +88,23 @@ public class ChengTaiCrawlerQuoteProcessServiceImpl implements ChengTaiCrawlerQu
         // 步骤三 获取中介协议
         ChengTaiFindCoreConferInfoByHandleCodeResponse coreConferInfoByHandleCode = chengTaiRequestCrawlerComponent.findCoreConferInfoByHandleCode(saleManVoByDeptCode.getUserCode(), parameters.getAgreementCode(), headers);
         // 步骤四 构造归属信息
-
-
-
+        return new ChengTaiSaleInfoBo(attributionOrgByUser, saleManVoByDeptCode, coreConferInfoByHandleCode);
     }
 
+    @Override
+    public CarDepreciationCalculator.DepreciationResult generateClaimableValue(CarInfoVo carInfoVo, String purchasePrice) {
+        // 创建车辆实例
+        CarDepreciationCalculator.PolicyCar policyCar = new CarDepreciationCalculator.PolicyCar();
+        policyCar.setCarKindCode(carInfoVo.getCarKindCode());
+        policyCar.setUseNatureCode(carInfoVo.getVehicleUseCode());
+        policyCar.setApprovedPassengersCapacity(Integer.parseInt(carInfoVo.getSeatCount()));
+        policyCar.setPurchasePrice(new BigDecimal(purchasePrice));
+        policyCar.setRegisterDate(TimeProcessing.parseDate(carInfoVo.getRegisterDate()));
+        policyCar.setEnergyTypes("2");
+        policyCar.setVehicleKindCode("V");
+        policyCar.setNewEnergy(carInfoVo.isNewEnergyMark());
+        // 计算当前价值
+        return CarDepreciationCalculator.calculateCurrentValue(policyCar);
+    }
 
 }

+ 36 - 13
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/impl/ChengTaiCrawlerRequestImpl.java

@@ -8,18 +8,21 @@ import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.chengtai.crawler.component.ChengTaiRequestCrawlerComponent;
 import com.jzg.quotation.chengtai.crawler.entity.ChengTaiCrawlerConfigureParameters;
-import com.jzg.quotation.chengtai.crawler.entity.response.ChengTaiClientIdentifyResponse;
-import com.jzg.quotation.chengtai.crawler.entity.response.ChengTaiFindCarModelResponse;
-import com.jzg.quotation.chengtai.crawler.entity.response.ChengTaiGetCIModelCodeResponse;
-import com.jzg.quotation.chengtai.crawler.entity.response.ChengTaiPremiumcaResponse;
+import com.jzg.quotation.chengtai.crawler.entity.bo.ChengTaiSaleInfoBo;
+import com.jzg.quotation.chengtai.crawler.entity.request.ChengTaiPolicyListRequest;
+import com.jzg.quotation.chengtai.crawler.entity.request.ChengTaiPremiumcaRequest;
+import com.jzg.quotation.chengtai.crawler.entity.response.*;
 import com.jzg.quotation.chengtai.crawler.service.ChengTaiCrawlerQuoteProcessService;
 import com.jzg.quotation.chengtai.crawler.service.ChengTaiCrawlerRequest;
+import com.jzg.quotation.chengtai.crawler.utils.CarDepreciationCalculator;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.HttpHeaders;
 
+import java.util.List;
+
 @QuoteCrawlerService(value = InsuranceCode.INSURANCE_CHAC)
 @RequiredArgsConstructor
 public class ChengTaiCrawlerRequestImpl implements ChengTaiCrawlerRequest {
@@ -45,38 +48,47 @@ public class ChengTaiCrawlerRequestImpl implements ChengTaiCrawlerRequest {
 
         HttpHeaders httpHeaders = chengTaiCrawlerQuoteProcessService.getTokenHeaders(quoteVo.getOrder().getAttributionInformationVo().getUsername(), quoteVo.getOrder().getAttributionInformationVo().getPassword());
         // 步骤二 构建归属信息
-
+        ChengTaiSaleInfoBo saleInfoBo = chengTaiCrawlerQuoteProcessService.buildClientIdentify(parameters, httpHeaders);
         // 步骤三 车型查询
         ChengTaiFindCarModelResponse.DataDTO carModel = chengTaiRequestCrawlerComponent.findCarModel(quoteVo.getCarInfoVo(), httpHeaders);
         ChengTaiGetCIModelCodeResponse ciModelCode = chengTaiRequestCrawlerComponent.getCIModelCode(carModel.getModelcode(), httpHeaders);
-
         // 步骤四 新车购置价
-        String actualValue= "";
+        CarDepreciationCalculator.DepreciationResult depreciationResult = chengTaiCrawlerQuoteProcessService.generateClaimableValue(quoteVo.getCarInfoVo(), carModel.getPurchasePrice());
         // 步骤五 客户识别
         // 投保人
         CustomerInfoVo policyHolderInfo = quoteVo.getPolicyHolderInfo();
-        ChengTaiClientIdentifyResponse policyHolder = chengTaiRequestCrawlerComponent.clientIdentify(policyHolderInfo, "1", "", httpHeaders);
+        ChengTaiClientIdentifyResponse policyHolder = chengTaiRequestCrawlerComponent.clientIdentify(policyHolderInfo, "1", saleInfoBo.getSaleInfo().getComCode(), httpHeaders);
         // 被保人
         CustomerInfoVo insuredPersonInfo = quoteVo.getInsuredPersonInfo();
         ChengTaiClientIdentifyResponse insuredPerson = policyHolder;
         if (!insuredPersonInfo.getIdentifyNumber().equals(policyHolderInfo.getIdentifyNumber())) {
-            insuredPerson = chengTaiRequestCrawlerComponent.clientIdentify(insuredPersonInfo, "2", "", httpHeaders);
+            insuredPerson = chengTaiRequestCrawlerComponent.clientIdentify(insuredPersonInfo, "2", saleInfoBo.getSaleInfo().getComCode(), httpHeaders);
         }
         // 步骤五 报价
-        ChengTaiPremiumcaResponse premiumca = chengTaiRequestCrawlerComponent.premiumca(quoteVo, carModel, policyHolder, insuredPerson, actualValue, httpHeaders);
-
+        ChengTaiPremiumcaRequest request = new ChengTaiPremiumcaRequest(quoteVo, carModel, policyHolder, insuredPerson, saleInfoBo, ciModelCode, depreciationResult);
+        ChengTaiPremiumcaResponse premiumca = chengTaiRequestCrawlerComponent.premiumca(request, httpHeaders);
+        // 步骤六 保存订单
 
+        // 步骤七 保存订单信息到mangodb
 
         return null;
     }
 
     @Override
     public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) throws Exception {
+        HttpHeaders httpHeaders = chengTaiCrawlerQuoteProcessService.getTokenHeaders(underwritingVo.getOrder().getAttributionInformationVo().getUsername(), underwritingVo.getOrder().getAttributionInformationVo().getPassword());
+
+
+
         return null;
     }
 
     @Override
     public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) throws Exception {
+        HttpHeaders httpHeaders = chengTaiCrawlerQuoteProcessService.getTokenHeaders(paymentLinkVo.getOrder().getAttributionInformationVo().getUsername(), paymentLinkVo.getOrder().getAttributionInformationVo().getPassword());
+        // 获取支付链接
+        String pay = chengTaiRequestCrawlerComponent.pay("", httpHeaders);
+
         return null;
     }
 
@@ -87,11 +99,22 @@ public class ChengTaiCrawlerRequestImpl implements ChengTaiCrawlerRequest {
 
     @Override
     public DownloadPolicyResultVo downloadPolicy(DownloadPolicyVo downloadPolicyVo) {
-        return null;
+        HttpHeaders httpHeaders = chengTaiCrawlerQuoteProcessService.getTokenHeaders(downloadPolicyVo.getOrder().getAttributionInformationVo().getUsername(), downloadPolicyVo.getOrder().getAttributionInformationVo().getPassword());
+        List<ChengTaiDownloadAddressResponse> chengTaiDownloadAddressResponse = chengTaiRequestCrawlerComponent.downloadAddress("", "", "", httpHeaders);
+        chengTaiDownloadAddressResponse.forEach(x -> {
+
+        });
+
+        return new DownloadPolicyResultVo();
     }
 
     @Override
     public OrderStatusResultVo queryOrderState(OrderStatusVo orderStatusVo) throws Exception {
-        return null;
+        HttpHeaders httpHeaders = chengTaiCrawlerQuoteProcessService.getTokenHeaders(orderStatusVo.getOrder().getAttributionInformationVo().getUsername(), orderStatusVo.getOrder().getAttributionInformationVo().getPassword());
+        List<ChengTaiPolicyListResponse> chengTaiPolicyListRequest = chengTaiRequestCrawlerComponent.policyList("", "", "", httpHeaders);
+
+
+
+        return new OrderStatusResultVo();
     }
 }

+ 165 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/utils/CarDepreciationCalculator.java

@@ -0,0 +1,165 @@
+package com.jzg.quotation.chengtai.crawler.utils;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.Period;
+
+
+public final class CarDepreciationCalculator {
+
+    /**
+     * 计算车辆当前价值
+     *
+     * @param policyCar 车辆策略对象,包含所有必要的车辆属性
+     * @return 包含实际价值和月折旧率的对象
+     */
+    public static DepreciationResult calculateCurrentValue(PolicyCar policyCar) {
+        // 从车辆对象中提取所需属性
+        String carKindCode = policyCar.getCarKindCode(); // 车辆种类代码,如"A0"
+        String useNatureCode = policyCar.getUseNatureCode(); // 使用性质代码,如"8B"
+        int approvedPassengersCapacity = policyCar.getApprovedPassengersCapacity(); // 核定载客量
+        double approvedLoad = policyCar.getApprovedLoad(); // 核定载重量
+        BigDecimal purchasePrice = policyCar.getPurchasePrice(); // 购买价格
+        LocalDate registerDate = policyCar.getRegisterDate(); // 注册日期
+        String energyTypes = policyCar.getEnergyTypes(); // 能源类型
+        String vehicleKindCode = policyCar.getVehicleKindCode(); // 车辆种类代码
+
+        BigDecimal p = purchasePrice;
+        double d = 0; // 月折旧率
+        BigDecimal f; // 实际价值
+
+        // 1. 确定月折旧率 (基于车辆类型、使用性质等条件)
+        if ("A0".equals(carKindCode)) {
+            if ("8B".equals(useNatureCode) || "8C".equals(useNatureCode) || "8A".equals(useNatureCode)) {
+                if (approvedPassengersCapacity < 10) {
+                    /* 从某处获取的ID */
+                    if (policyCar.isNewEnergy() || "X".equals(vehicleKindCode)) {
+                        if ("2".equals(energyTypes) || "3".equals(energyTypes)) {
+                            d = 0.0063;
+                        } else {
+                            // 根据购买价格区间确定折旧率 [1](@ref)
+                            if (p.compareTo(new BigDecimal("100000")) < 0) {
+                                d = 0.0082;
+                            } else if (p.compareTo(new BigDecimal("100000")) >= 0
+                                    && p.compareTo(new BigDecimal("200000")) < 0) {
+                                d = 0.0077;
+                            } else if (p.compareTo(new BigDecimal("200000")) >= 0
+                                    && p.compareTo(new BigDecimal("300000")) < 0) {
+                                d = 0.0072;
+                            } else if (p.compareTo(new BigDecimal("300000")) >= 0) {
+                                d = 0.0068;
+                            }
+                        }
+                    } else {
+                        d = 0.009;
+                    }
+                } else {
+                    d = 0.009;
+                }
+            } else if ("9A".equals(useNatureCode)) {
+                d = 0.011;
+            } else {
+                d = 0.009;
+            }
+        } else if ("H0".equals(carKindCode) && approvedLoad < 1800 || "TⅣ1".equals(carKindCode)) {
+            if ("8D".equals(useNatureCode) || "4B".equals(useNatureCode) || "9D".equals(useNatureCode)) {
+                d = 0.009;
+            } else {
+                d = 0.011;
+            }
+        } else if ("H1".equals(carKindCode)) {
+            if ("8D".equals(useNatureCode)) {
+                d = 0.011;
+            } else if ("9A".equals(useNatureCode)) {
+                d = 0.011;
+            } else {
+                d = 0.014;
+            }
+        }
+
+        // 2. 计算已使用月份
+        LocalDate currentDate = LocalDate.now();
+        Period period = Period.between(registerDate, currentDate);
+        int totalMonths = period.getYears() * 12 + period.getMonths();
+
+        // 确保月份差非负
+        int h = Math.max(totalMonths, 0);
+
+        // 3. 计算实际价值
+        if (h < 1) {
+            f = p;
+        } else {
+            // 计算折旧:原值 - 已使用月份 × 月折旧率 × 原值
+            BigDecimal depreciation = p.multiply(BigDecimal.valueOf(d * h));
+            f = p.subtract(depreciation);
+
+            // 确保价值不低于原值的20%
+            BigDecimal minValue = p.multiply(BigDecimal.valueOf(0.2));
+            if (f.compareTo(minValue) < 0) {
+                f = minValue;
+            }
+        }
+
+        // 处理可能的NaN情况
+        if (f == null || BigDecimal.ZERO.equals(f)) {
+            f = (p != null) ? p : BigDecimal.ZERO;
+        }
+
+        // 四舍五入到两位小数
+        f = f.setScale(2, RoundingMode.HALF_UP);
+
+        return new DepreciationResult(f, d);
+    }
+
+    /**
+     * 结果封装类
+     */
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class DepreciationResult {
+
+        private BigDecimal actualValue;
+
+        private double monthDepRate;
+    }
+
+    /**
+     * 车辆策略类(假设结构,您需要根据实际实现调整)
+     */
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class PolicyCar {
+
+        private String carKindCode;
+
+        private String useNatureCode;
+        /**
+         * 座位数
+         */
+        private int approvedPassengersCapacity;
+
+        private double approvedLoad;
+
+        private BigDecimal purchasePrice;
+
+        private LocalDate registerDate;
+        /**
+         * 能源类型
+         */
+        private String energyTypes;
+
+        private String vehicleKindCode;
+
+        private boolean isNewEnergy;
+
+    }
+
+}
+

+ 8 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/utils/ZipImageExample.java

@@ -0,0 +1,8 @@
+package com.jzg.quotation.chengtai.crawler.utils;
+
+
+
+public final class ZipImageExample {
+
+
+}

+ 0 - 368
tenant/insurance/quotation-chengtai/src/test/java/com/jzg/quotation/chengtai/crawler/model/entity/ChengTaiInsuranceItemTest.java

@@ -1,368 +0,0 @@
-package com.jzg.quotation.chengtai.crawler.model.entity;
-
-import com.jzg.quotation.chengtai.crawler.JsonUtil;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-public class ChengTaiInsuranceItemTest {
-
-    @Test
-    public void test01() {
-
-        String json = """
-                [{
-                                    "kindFlag": !1,
-                                    "notDeductibleKindFlag": !1,
-                                    "kindCode": "A",
-                                    "kindName": "车损险",
-                                    ifMainKind: "1",
-                                    notDeductibleIfMainKind: "0",
-                                    calculateFlag: "1",
-                                    notDeductibleCalculateFlag: "0",
-                                    relatedInd: "0",
-                                    deductible: "0",
-                                    deductibleRate: "0",
-                                    amount: "",
-                                    basePremium: "0"
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    kindCode: "B",
-                                    kindName: "三者险",
-                                    ifMainKind: "1",
-                                    notDeductibleIfMainKind: "0",
-                                    calculateFlag: "1",
-                                    notDeductibleCalculateFlag: "0",
-                                    relatedInd: "0",
-                                    amount: "1000000",
-                                    basePremium: "0"
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    kindCode: "D11",
-                                    kindName: "车上人员(司机)",
-                                    ifMainKind: "1",
-                                    notDeductibleIfMainKind: "0",
-                                    calculateFlag: "1",
-                                    notDeductibleCalculateFlag: "0",
-                                    relatedInd: "0",
-                                    amount: "0",
-                                    unitAmount: "10000",
-                                    quantity: "1",
-                                    basePremium: "0"
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    kindCode: "D12",
-                                    kindName: "车上人员(乘客)",
-                                    ifMainKind: "1",
-                                    notDeductibleIfMainKind: "0",
-                                    calculateFlag: "1",
-                                    notDeductibleCalculateFlag: "0",
-                                    relatedInd: "0",
-                                    amount: "0",
-                                    unitAmount: "10000",
-                                    basePremium: "0",
-                                    quantity: "0"
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    kindCode: "G",
-                                    kindName: "盗抢险",
-                                    ifMainKind: "1",
-                                    notDeductibleIfMainKind: "0",
-                                    calculateFlag: "1",
-                                    notDeductibleCalculateFlag: "0",
-                                    relatedInd: "0",
-                                    amount: "",
-                                    basePremium: "0"
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    kindCode: "L",
-                                    kindName: "划痕险",
-                                    ifMainKind: "0",
-                                    calculateFlag: "0",
-                                    amount: "2000",
-                                    basePremium: "0",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    kindCode: "X",
-                                    kindName: "新增设备险",
-                                    ifMainKind: "0",
-                                    calculateFlag: "0",
-                                    amount: "",
-                                    basePremium: "0",
-                                    deviceList: [],
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    kindCode: "D2",
-                                    kindName: "货物责任险",
-                                    ifMainKind: "0",
-                                    calculateFlag: "0",
-                                    amount: "20000",
-                                    basePremium: "0",
-                                    business: "非营业",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "C",
-                                    kindName: "修理期间费用补偿险",
-                                    amount: "0",
-                                    quantity: "",
-                                    unitAmount: "100",
-                                    basePremium: "0",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "P",
-                                    kindName: "车轮单独损失险",
-                                    amount: "1000",
-                                    basePremium: "0",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "W",
-                                    kindName: "发动机除外特约",
-                                    amount: "0",
-                                    basePremium: "0",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "BD",
-                                    kindName: "节假日限额翻倍",
-                                    amount: "1000000",
-                                    basePremium: "0",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "RB",
-                                    kindName: "精神损害抚慰金责任险(三者)",
-                                    amount: "1000",
-                                    basePremium: "0",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "RD11",
-                                    kindName: "精神损害责任险(司机)",
-                                    amount: "1000",
-                                    basePremium: "0",
-                                    unitAmount: "1000",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "RD12",
-                                    kindName: "精神损害责任险(乘客)",
-                                    amount: "1000",
-                                    basePremium: "0",
-                                    unitAmount: "1000",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "YB",
-                                    kindName: "医保外医疗费用责任险(第三者责任保险)",
-                                    amount: "1000",
-                                    basePremium: "0",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "YD11",
-                                    kindName: "医保外医疗费用责任险(车上人员责任保险(司机))",
-                                    amount: 1e3,
-                                    basePremium: "0",
-                                    unitAmount: "1000",
-                                    quantity: "1",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "YD12",
-                                    kindName: "医保外医疗费用责任险(车上人员责任保险(乘客))",
-                                    amount: "1000",
-                                    basePremium: "0",
-                                    unitAmount: "1000",
-                                    quantity: "1",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "MAD",
-                                    kindName: "设备、仪器扩展险",
-                                    amount: "0",
-                                    basePremium: "0",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "MAE",
-                                    kindName: "起重、装卸、挖掘车损扩展险",
-                                    amount: "0",
-                                    basePremium: "0",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "S1",
-                                    kindName: "道路救援特约",
-                                    amount: "0",
-                                    basePremium: "0",
-                                    quantity: "2",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "S2",
-                                    kindName: "安全检测特约",
-                                    amount: "0",
-                                    basePremium: "0",
-                                    quantity: "1",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "S3",
-                                    kindName: "代驾特约",
-                                    amount: "0",
-                                    basePremium: "0",
-                                    quantity: "1",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "S4",
-                                    kindName: "代送检特约",
-                                    amount: "0",
-                                    basePremium: "0",
-                                    quantity: "1",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "FA",
-                                    kindName: "绝对免赔率特约条款(车损)",
-                                    amount: "0",
-                                    basePremium: "0",
-                                    deductibleRate: "5",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "FB",
-                                    kindName: "绝对免赔率特约条款(三者)",
-                                    amount: "0",
-                                    basePremium: "0",
-                                    deductibleRate: "5",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "FD11",
-                                    kindName: "绝对免赔率特约条款(司机)",
-                                    amount: "0",
-                                    basePremium: "0",
-                                    deductibleRate: "5",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "FD12",
-                                    kindName: "绝对免赔率特约条款(乘客)",
-                                    amount: "0",
-                                    basePremium: "0",
-                                    deductibleRate: "5",
-                                    show: false
-                                }, {
-                                    kindFlag: false,
-                                    notDeductibleKindFlag: false,
-                                    ifMainKind: "0",
-                                    relatedInd: "0",
-                                    calculateFlag: "0",
-                                    kindCode: "FG",
-                                    kindName: "绝对免赔率特约条款(盗抢)",
-                                    amount: "0",
-                                    basePremium: "0",
-                                    deductibleRate: "5",
-                                    show: false
-                                }]
-                """;
-
-
-        ChengTaiInsuranceItem[] chengTaiInsuranceItem = JsonUtil.readObjcet(json, ChengTaiInsuranceItem[].class);
-
-        assertNotNull(chengTaiInsuranceItem);
-    }
-}

Разница между файлами не показана из-за своего большого размера
+ 0 - 14
tenant/insurance/quotation-chengtai/src/test/java/com/jzg/quotation/chengtai/crawler/model/param/ChengTaiVehicleCoreSaveParamTest.java


+ 0 - 139
tenant/insurance/quotation-chengtai/src/test/java/com/jzg/quotation/chengtai/crawler/model/result/ChengTaiPremiumcalResultTest.java

@@ -1,139 +0,0 @@
-package com.jzg.quotation.chengtai.crawler.model.result;
-
-import com.jzg.quotation.chengtai.crawler.JsonUtil;
-import org.junit.jupiter.api.Test;
-
-import java.util.Map;
-
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
-
-public class ChengTaiPremiumcalResultTest {
-
-    @Test
-    public void test01() {
-        String json = """
-                
-                {
-                    "code": 200,
-                    "message": "success",
-                    "body": {
-                        "responseHead": {
-                            "resCode": "000",
-                            "resMsg": "SUCCESS"
-                        },
-                        "responseBody": {
-                            "engageList": [
-                                {
-                                    "engageCode": "2001",
-                                    "engageName": "现场报案特约",
-                                    "engageDesc": "保险事故发生后应及时通知保险人,请在出险后拨打4006-222-888保险服务专线报案并保留现场。",
-                                    "autoInd": "1",
-                                    "deleteInd": "0",
-                                    "modifyInd": "0",
-                                    "versionNo": "202302",
-                                    "effectiveDate": "2023-09-21 21:00:00",
-                                    "expiringDate": "2099-01-01 00:00:00",
-                                    "effectiveInd": "1"
-                                },
-                                {
-                                    "engageCode": "2008",
-                                    "engageName": "无牌车确认",
-                                    "engageDesc": "被保险车辆不上车牌,出险时以发动机号和车架号作为保险标的的认定依据。",
-                                    "autoInd": "0",
-                                    "deleteInd": "1",
-                                    "modifyInd": "0",
-                                    "versionNo": "202302",
-                                    "effectiveDate": "2023-09-21 21:00:00",
-                                    "expiringDate": "2099-01-01 00:00:00",
-                                    "effectiveInd": "1"
-                                },
-                                {
-                                    "engageCode": "2010",
-                                    "engageName": "非柜面保单信息核对提示",
-                                    "engageDesc": "本保单为非柜面录单,请认真核对您的车辆信息:如车牌号、发动机号、车架号、行车证车主、使用性质等,出险时若车辆信息与车辆实际情况不符,保险人不承担赔偿责任。",
-                                    "autoInd": "1",
-                                    "deleteInd": "0",
-                                    "modifyInd": "0",
-                                    "versionNo": "202302",
-                                    "effectiveDate": "2023-09-21 21:00:00",
-                                    "expiringDate": "2099-01-01 00:00:00",
-                                    "effectiveInd": "1"
-                                },
-                                {
-                                    "engageCode": "2012",
-                                    "engageName": "实物赔付特约",
-                                    "engageDesc": "保险期内,如发生本保险合同约定的保险事故造成被保险车辆损失或第三者财产损失,保险人可采取实物或修复方式进行保险赔付。",
-                                    "autoInd": "1",
-                                    "deleteInd": "0",
-                                    "modifyInd": "0",
-                                    "versionNo": "202302",
-                                    "effectiveDate": "2023-09-21 21:00:00",
-                                    "expiringDate": "2099-01-01 00:00:00",
-                                    "effectiveInd": "1"
-                                },
-                                {
-                                    "engageCode": "2013",
-                                    "engageName": "增值服务特约附加险特约",
-                                    "engageDesc": "保险期间内,如有承保的附加机动车增值服务特约条款项下需求时,请致电我司客服专线4006-222-888提出申请,我司将为您提供相关增值服务。",
-                                    "autoInd": "1",
-                                    "deleteInd": "0",
-                                    "modifyInd": "0",
-                                    "versionNo": "202302",
-                                    "effectiveDate": "2023-09-21 21:00:00",
-                                    "expiringDate": "2099-01-01 00:00:00",
-                                    "effectiveInd": "1"
-                                },
-                                {
-                                    "engageCode": "2016",
-                                    "engageName": "非营运车辆不得用于营业运输",
-                                    "engageDesc": "根据保险法第五十二条规定:非营业性质车辆从事营业性运输导致危险程度显著增加的,被保险人应当及时通知保险人并增加保险费。否则,因危险程度显著增加而发生保险事故的,保险人不负责赔偿。",
-                                    "autoInd": "0",
-                                    "deleteInd": "1",
-                                    "modifyInd": "0",
-                                    "versionNo": "202302",
-                                    "effectiveDate": "2023-09-21 21:00:00",
-                                    "expiringDate": "2099-01-01 00:00:00",
-                                    "effectiveInd": "1"
-                                },
-                                {
-                                    "engageCode": "2099",
-                                    "engageName": "可编辑特别约定",
-                                    "engageDesc": "可编辑特约",
-                                    "autoInd": "0",
-                                    "deleteInd": "1",
-                                    "modifyInd": "1",
-                                    "versionNo": "202302",
-                                    "effectiveDate": "2023-09-21 21:00:00",
-                                    "expiringDate": "2099-01-01 00:00:00",
-                                    "effectiveInd": "1"
-                                },
-                                {
-                                    "engageCode": "2017",
-                                    "engageName": "自助理赔系统特约",
-                                    "engageDesc": "我司已上线客户自助理赔系统,欢迎您通过搜索微信小程序(诚泰理赔云服务)或扫描保单上方二维码进行自助理赔操作。",
-                                    "autoInd": "1",
-                                    "deleteInd": "0",
-                                    "modifyInd": "0",
-                                    "versionNo": "202302",
-                                    "effectiveDate": "2023-09-21 21:00:00",
-                                    "expiringDate": "2099-01-01 00:00:00",
-                                    "effectiveInd": "1"
-                                }
-                            ]
-                        }
-                    }
-                }
-                
-                """;
-
-
-        ChengTaiPremiumcalResult.Response data = JsonUtil.readObjcet(json, ChengTaiPremiumcalResult.Response.class);
-
-        assertNotNull(data);
-
-        Map<String, Object> unknownFields = data.getUnknownFields();
-
-        assertNull(unknownFields);
-    }
-}

Разница между файлами не показана из-за своего большого размера
+ 0 - 112
tenant/insurance/quotation-chengtai/src/test/java/com/jzg/quotation/chengtai/crawler/service/ChengTaiAPIServiceTest.java


+ 0 - 13
tenant/insurance/quotation-chengtai/src/test/java/com/jzg/quotation/chengtai/crawler/service/ChengTaiInsuranceItemServiceTest.java

@@ -1,13 +0,0 @@
-package com.jzg.quotation.chengtai.crawler.service;
-
-import org.junit.jupiter.api.Test;
-
-public class ChengTaiInsuranceItemServiceTest {
-
-    @Test
-    public void test() {
-        ChengTaiInsuranceItemService service = new ChengTaiInsuranceItemService();
-
-        service.load();
-    }
-}

+ 10 - 8
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java

@@ -25,6 +25,7 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.nio.file.StandardOpenOption;
+import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.function.Consumer;
@@ -49,6 +50,8 @@ public class RequestComponent {
 
     private final WebClientConfig webClientConfig;
 
+    private final List<String> DOMAIN_LIST = List.of("b2b.champion-ic.com");
+
     /**
      * 根据URL选择合适的WebClient(支持SSL)
      *
@@ -59,7 +62,7 @@ public class RequestComponent {
         try {
             if (url.contains("https://")) {
                 String domain = extractDomain(url);
-                if (webClientConfig != null) {
+                if (webClientConfig != null && DOMAIN_LIST.contains(domain)) {
                     return webClientConfig.createSecureWebClient(domain);
                 }
             }
@@ -184,6 +187,7 @@ public class RequestComponent {
                 .toEntity(responseClass)
                 .block();
     }
+
     //返回字符串
     public String baseGetString(String url, Object initDataRequest, HttpHeaders headers) {
         MultiValueMap<String, String> multiValueMap = RequestObjectConversion.convertMultiValueStringMap(initDataRequest);
@@ -248,7 +252,7 @@ public class RequestComponent {
                     .retrieve()
                     .toEntity(responseClass)
                     .block();
-        }catch (WebClientResponseException e) {
+        } catch (WebClientResponseException e) {
             // 如果服务端返回非2xx状态码
             System.err.println("状态码: " + e.getRawStatusCode());
             System.err.println("响应体: " + e.getResponseBodyAsString());
@@ -258,11 +262,12 @@ public class RequestComponent {
 
     /**
      * gbk
+     *
      * @param url           请求地址
      * @param body          请求体
      * @param responseClass 响应类
      * @param headers       请求头
-     * @param <T>    响应实体
+     * @param <T>           响应实体
      * @return 响应
      */
     public <T> Mono<T> postGbk(String url, String body, Class<T> responseClass, HttpHeaders headers) {
@@ -322,8 +327,6 @@ public class RequestComponent {
     }
 
 
-
-
     /**
      * @param url           请求地址
      * @param body          请求体
@@ -375,8 +378,6 @@ public class RequestComponent {
 //                .block();
 
 
-
-
         return webClient.post()
                 .uri(url)
                 .headers(RequestComponent.setHeaders(headers))
@@ -391,6 +392,7 @@ public class RequestComponent {
         MultiValueMap<String, Object> multiValueMap = RequestObjectConversion.convertMultiValueMap(body);
         return formDatazhongan1(url, multiValueMap, responseClass, headers);
     }
+
     public <Response> ResponseEntity<Response> formDatazhongan1(String url, MultiValueMap<String, Object> parts, Class<Response> responseClass, HttpHeaders headers) {
 
         return webClient.post()
@@ -418,7 +420,7 @@ public class RequestComponent {
         return block;
     }
 
-    public <Response> ResponseEntity<Response> formUrlencoded(String url,  BodyInserters.FormInserter<String> formInserter, Class<Response> responseClass, HttpHeaders headers) {
+    public <Response> ResponseEntity<Response> formUrlencoded(String url, BodyInserters.FormInserter<String> formInserter, Class<Response> responseClass, HttpHeaders headers) {
         return webClient.post()
                 .uri(url)
                 .headers(RequestComponent.setHeaders(headers))

Некоторые файлы не были показаны из-за большого количества измененных файлов