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

Merge remote-tracking branch 'origin/master'

dongxin 1 год назад
Родитель
Сommit
e0cf7fefd4
25 измененных файлов с 3746 добавлено и 0 удалено
  1. 5 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/constant/CacheConstant.java
  2. 152 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/build/HuaTaiCrawlerQuoteResultsVoBuild.java
  3. 148 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/component/HtCrawlerRequestComponent.java
  4. 29 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/constant/HtRequestConstant.java
  5. 58 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/constant/enums/RequestUrl.java
  6. 23 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/HtCrawlerConfigureParameters.java
  7. 92 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Request/HtCrawlerCarQueryRequest.java
  8. 26 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Request/HtCrawlerGerUploadUrlRequest.java
  9. 40 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Request/HtCrawlerLoginRequest.java
  10. 401 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Request/HtCrawlerQuoteRequest.java
  11. 1214 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Request/HtCrawlerSaveOneStepRequest.java
  12. 26 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Request/HtCrawlerUploadUrlRequest.java
  13. 203 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Response/HtCrawlerCarQueryResponse.java
  14. 20 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Response/HtCrawlerGerUploadUrlResponse.java
  15. 9 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Response/HtCrawlerLoginResponse.java
  16. 892 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Response/HtCrawlerQuoteResponse.java
  17. 14 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/dto/LoginDTO.java
  18. 26 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/po/HtCrawlerOrder.java
  19. 26 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/properties/HuaTaiCrawlerProperties.java
  20. 18 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/repository/HtCrawlerOrderRepository.java
  21. 18 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/service/HtCrawlerOrderService.java
  22. 14 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/service/HuaTaiCrawlerRequest.java
  23. 55 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/service/Impl/HtCrawlerOrderServiceImpl.java
  24. 169 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/service/Impl/HuaTaiCrawlerRequestImpl.java
  25. 68 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/util/HuaTaiCryptUtil.java

+ 5 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/constant/CacheConstant.java

@@ -43,4 +43,9 @@ public class CacheConstant {
      */
     public static final String HENGBANG_AUTHORIZATION = "hengbang:authorization:";
 
+    /**
+     * 华泰财险授权
+     */
+    public static final String HUATAI_AUTHORIZATION = "huatai:authorization:";
+
 }

+ 152 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/build/HuaTaiCrawlerQuoteResultsVoBuild.java

@@ -0,0 +1,152 @@
+package com.jzg.quote.huatai.crawler.build;
+
+import com.jzg.commons.entity.quote.vo.KindInfoVo;
+import com.jzg.commons.entity.quote.vo.RiskInfoVo;
+import com.jzg.quotation.commons.entity.vo.aggregated.QuoteResultsVo;
+import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
+import com.jzg.quotation.commons.entity.vo.base.OrderBase;
+import com.jzg.quotation.huatai.api.constant.enums.ContractEnum;
+import com.jzg.quotation.huatai.api.constant.enums.HuaTaiRiskCode;
+import com.jzg.quotation.huatai.api.entity.response.HuaTaiQuotedPriceResponse;
+import com.jzg.quote.huatai.crawler.entity.Response.HtCrawlerQuoteResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @description: 华泰财险  爬虫配置  处理华泰返回的报价数据
+ * @author: shenwd
+ * @date: 2025/4/22 11:06
+ **/
+public class HuaTaiCrawlerQuoteResultsVoBuild {
+    public static QuoteResultsVo buildQuoteResultsVo(QuoteVo quoteVo, HtCrawlerQuoteResponse.DataDTO quoteResponseData) {
+        OrderBase orderBase = quoteVo.getOrder();
+        QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
+        quoteResultsVo.setOrdersNo(orderBase.getOrdersNo());
+        // 交强险
+        quoteResultsVo.setCiRiskInfoVo(buildCiRiskInfoVo(quoteResponseData, quoteVo));
+        // 商业险
+        quoteResultsVo.setBiRiskInfoVo(buildBiRiskInfoVo(quoteResponseData, quoteVo));
+        // 商业险险种信息
+        List<HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO> coverageDTOList = quoteResponseData.getCoveragedtolist().getCoveragedto();
+        List<KindInfoVo> kindInfoVo = buildKindInfoVo(quoteVo.getKindInfoVo(), coverageDTOList);
+        quoteResultsVo.setKindInfoVo(kindInfoVo);
+
+        // 交强保费 车船税 商业保费
+        buildPremium(quoteResultsVo, quoteResponseData);
+        return quoteResultsVo;
+    }
+
+    /**
+     * 处理商业险数据
+     * @param quoteResponseData
+     * @return
+     */
+    public static RiskInfoVo buildBiRiskInfoVo(HtCrawlerQuoteResponse.DataDTO quoteResponseData, QuoteVo quoteVo) {
+        RiskInfoVo riskInfoVo = new RiskInfoVo();
+        HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO biDTO = getBiDTO(quoteResponseData);
+        riskInfoVo.setRiskCode(quoteVo.getBiRiskInfoVo().getRiskCode());
+        riskInfoVo.setStartDate(biDTO.getStartdate());
+        riskInfoVo.setEndDate(biDTO.getEnddate());
+
+        return riskInfoVo;
+    }
+
+    /**
+     * 处理交强险数据
+     * @param quoteResponseData
+     * @return
+     */
+    public static RiskInfoVo buildCiRiskInfoVo(HtCrawlerQuoteResponse.DataDTO quoteResponseData, QuoteVo quoteVo) {
+        RiskInfoVo riskInfoVo = new RiskInfoVo();
+        HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO ciDTO = getCiDTO(quoteResponseData);
+        riskInfoVo.setRiskCode(quoteVo.getCiRiskInfoVo().getRiskCode());
+        riskInfoVo.setStartDate(ciDTO.getStartdate());
+        riskInfoVo.setEndDate(ciDTO.getEnddate());
+
+        return riskInfoVo;
+    }
+
+    /**
+     * 处理商业险信息
+     * @param kindInfoVo
+     * @param coverageDTOList
+     * @return
+     */
+    private static List<KindInfoVo> buildKindInfoVo(List<KindInfoVo> kindInfoVo, List<HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO> coverageDTOList) {
+        Map<String, HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO> collect = coverageDTOList.stream()
+                .collect(Collectors.toMap(HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO::getComcoveragecode, x -> x));
+        kindInfoVo.forEach(kind -> {
+            HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO coverageDTO = collect.get(kind.getKindCode());
+            if (coverageDTO.getComcoveragecode().equals(kind.getKindCode())) {
+                kind.setAmount(String.valueOf(coverageDTO.getLimitamount()));//设置保额
+                kind.setPremium(String.valueOf(coverageDTO.getStandardpremium()));//设置保费
+//                kind.setUnitAmount(String.valueOf(coverageDTO.getUnitAmount()));//设置每座保额
+                kind.setQuantity(String.valueOf(coverageDTO.getQuantity()));//设置份数
+            }
+        });
+        return kindInfoVo;
+    }
+
+    /**
+     * 设置商业险,交强险保费
+     * @param quoteResultsVo
+     * @param quoteResponseData
+     */
+    private static void buildPremium(QuoteResultsVo quoteResultsVo, HtCrawlerQuoteResponse.DataDTO quoteResponseData) {
+        HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO ciDTO = getCiDTO(quoteResponseData);
+        // 设置交强险保费
+        quoteResultsVo.setCiPremium(ciDTO.getStandardpremium());
+        // 设置车船税
+        HtCrawlerQuoteResponse.DataDTO.VehicleTaxationDTO.TaxAmountDTO taxamountdto = quoteResponseData.getVehicletaxationdto().getTaxamountdto();
+        quoteResultsVo.setVvTax(taxamountdto.getSumtax());
+        // 设置商业险保费
+        quoteResultsVo.setBiPremium(getBiPremium(quoteResponseData));
+        // 设置非车险(驾意险)保费,报价返回数据中不存在
+
+    }
+
+    /**
+     * 获取商业险保费
+     * @param quoteResponseData
+     * @return
+     */
+    public static String getBiPremium(HtCrawlerQuoteResponse.DataDTO quoteResponseData) {
+        Double result = null;
+        List<HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO> coverageDTOList = quoteResponseData.getCoveragedtolist().getCoveragedto();
+        for (HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO coverageDTO : coverageDTOList) {
+            if (!ContractEnum.C_BZ.getKindCode().equals(coverageDTO.getComcoveragecode())) {
+                result += Double.parseDouble(coverageDTO.getStandardpremium());
+                break;
+            }
+        }
+        return String.valueOf(result);
+    }
+
+    //获取商业险数据
+    public static HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO getBiDTO(HtCrawlerQuoteResponse.DataDTO quoteResponseData) {
+        HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO result = null;
+        List<HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO> coverageDTOList = quoteResponseData.getCoveragedtolist().getCoveragedto();
+        for (HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO coverageDTO : coverageDTOList) {
+            if (!ContractEnum.C_BZ.getKindCode().equals(coverageDTO.getComcoveragecode())) {
+                result = coverageDTO;
+                break;
+            }
+        }
+        return result;
+    }
+
+    //获取交强险数据
+    public static HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO getCiDTO(HtCrawlerQuoteResponse.DataDTO quoteResponseData) {
+        HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO result = null;
+        List<HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO> coverageDTOList = quoteResponseData.getCoveragedtolist().getCoveragedto();
+        for (HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO coverageDTO : coverageDTOList) {
+            if (ContractEnum.C_BZ.equals(coverageDTO.getComcoveragecode())) {
+                result = coverageDTO;
+            }
+        }
+        return result;
+    }
+}

+ 148 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/component/HtCrawlerRequestComponent.java

@@ -0,0 +1,148 @@
+package com.jzg.quote.huatai.crawler.component;
+
+import com.alibaba.fastjson.JSONObject;
+import com.jzg.commons.exception.SystemException;
+import com.jzg.quotation.commons.component.RequestComponent;
+import com.jzg.quotation.commons.constant.CacheConstant;
+import com.jzg.quote.huatai.crawler.constant.HtRequestConstant;
+import com.jzg.quote.huatai.crawler.constant.enums.RequestUrl;
+import com.jzg.quote.huatai.crawler.entity.Request.*;
+import com.jzg.quote.huatai.crawler.entity.Response.HtCrawlerCarQueryResponse;
+import com.jzg.quote.huatai.crawler.entity.Response.HtCrawlerGerUploadUrlResponse;
+import com.jzg.quote.huatai.crawler.entity.Response.HtCrawlerLoginResponse;
+import com.jzg.quote.huatai.crawler.entity.Response.HtCrawlerQuoteResponse;
+import com.jzg.quote.huatai.crawler.properties.HuaTaiCrawlerProperties;
+import com.jzg.quote.huatai.crawler.util.HuaTaiCryptUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RMap;
+import org.redisson.api.RedissonClient;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+
+import java.time.Duration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @description:
+ * @author: shenwd
+ * @date: 2025/4/15 15:39
+ **/
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class HtCrawlerRequestComponent {
+    private final RequestComponent requestComponent;
+
+    private final HuaTaiCrawlerProperties huaTaiCrawlerProperties;
+
+    private final RedissonClient redissonClient;
+
+    /**
+     * 登录
+     * @param username
+     * @param password
+     * @param comcode
+     * @param loginsNumber
+     * @return
+     */
+    public List<String> authenticate(String username, String password, String comcode, int loginsNumber) {
+        HtCrawlerLoginRequest htCrawlerLoginRequest = new HtCrawlerLoginRequest(username, password, comcode);
+        ResponseEntity<HtCrawlerLoginResponse> loginResponseEntity = requestComponent.objectPost(RequestUrl.AUTHENTICATE.getRequestUrl(huaTaiCrawlerProperties.getBaseUrl()), htCrawlerLoginRequest, HtCrawlerLoginResponse.class);
+        List<String> cookies = loginResponseEntity.getHeaders().get("Set-Cookie");
+        if (cookies != null && !cookies.isEmpty()) {
+            Map<String, Object> authorizationMap = buildCache(loginResponseEntity);
+            RMap<Object, Object> map = redissonClient.getMap(CacheConstant.HENGBANG_AUTHORIZATION + username);
+            map.putAll(authorizationMap);
+            map.expire(Duration.ofDays(CacheConstant.GR_SPECIAL_AGREEMENT_TIME));
+            return (List<String>) authorizationMap.get(HtRequestConstant.COOKIE);
+        }
+        loginsNumber = loginsNumber - 1;
+        if (loginsNumber <= 0) {
+            throw new SystemException("恒邦财险登录异常");
+        }
+        return authenticate(username, password, comcode, loginsNumber);
+    }
+
+    public Map<String, Object> buildCache(ResponseEntity<HtCrawlerLoginResponse> loginResponseEntity) {
+        Map<String, Object> authorizationMap = new HashMap<>();
+        List<String> cookies = loginResponseEntity.getHeaders().get("Set-Cookie");
+        authorizationMap.put(HtRequestConstant.COOKIE, cookies);
+        return authorizationMap;
+    }
+
+    /**
+     * 获取cookie
+     * @param username
+     * @return
+     */
+    public List<String> getCookie(String username) {
+        return (List<String>) redissonClient.getMap(CacheConstant.HUATAI_AUTHORIZATION + username).get(HtRequestConstant.COOKIE);
+    }
+
+    /**
+     * 获取请求头
+     * @return
+     */
+    public HttpHeaders getHeaders(String username, String password, String comcode) {
+        List<String> cookie = getCookie(username);
+        if (cookie == null || cookie.isEmpty()) {
+            cookie = authenticate(username, password, comcode, HtRequestConstant.REQUEST_NUMBER);
+        }
+        HttpHeaders headers = new HttpHeaders();
+        headers.add(HtRequestConstant.COOKIE, cookie.stream().collect(Collectors.joining(";")));
+        return headers;
+    }
+
+    /**
+     * 查询车型
+     * @param htCrawlerCarQueryRequest
+     * @param headers
+     * @return
+     */
+    public HtCrawlerCarQueryResponse.DataDTO carQuery(HtCrawlerCarQueryRequest htCrawlerCarQueryRequest, HttpHeaders headers) throws Exception {
+        ResponseEntity<HtCrawlerCarQueryResponse> carQueryResponseEntity = requestComponent.objectPost(RequestUrl.CAR_QUERY.getRequestUrl(huaTaiCrawlerProperties.getBaseUrl()), htCrawlerCarQueryRequest, HtCrawlerCarQueryResponse.class, headers);
+        HtCrawlerCarQueryResponse carQueryResponse = carQueryResponseEntity.getBody();
+        String decryptKey = HuaTaiCryptUtil.RSADecrypt(carQueryResponse.getAccessToken());
+        String decryptData = HuaTaiCryptUtil.AESDecrypt(carQueryResponse.getData(), decryptKey);
+        return JSONObject.parseObject(decryptData, HtCrawlerCarQueryResponse.DataDTO.class);
+    }
+
+    /**
+     * 保存车辆信息和车主等信息
+     * @param htCrawlerSaveOneStepRequest
+     * @param headers
+     * @throws Exception
+     */
+    public void saveOneStept(HtCrawlerSaveOneStepRequest htCrawlerSaveOneStepRequest, HttpHeaders headers) {
+        requestComponent.objectPost(RequestUrl.SAVE_ONE_STEP.getRequestUrl(huaTaiCrawlerProperties.getBaseUrl()), htCrawlerSaveOneStepRequest, null, headers);
+    }
+
+    /**
+     * 报价第二步
+     * @param htCrawlerQuoteRequest
+     * @param headers
+     * @return
+     * @throws Exception
+     */
+    public HtCrawlerQuoteResponse.DataDTO quote(HtCrawlerQuoteRequest htCrawlerQuoteRequest, HttpHeaders headers) throws Exception {
+        ResponseEntity<HtCrawlerQuoteResponse> responseEntity = requestComponent.objectPost(RequestUrl.QUOTE_PRICE.getRequestUrl(huaTaiCrawlerProperties.getBaseUrl()), htCrawlerQuoteRequest, HtCrawlerQuoteResponse.class, headers);
+        HtCrawlerQuoteResponse quoteResponse = responseEntity.getBody();
+        String decryptKey = HuaTaiCryptUtil.RSADecrypt(quoteResponse.getAccessToken());
+        String decryptData = HuaTaiCryptUtil.AESDecrypt(quoteResponse.getData(), decryptKey);
+        return JSONObject.parseObject(decryptData, HtCrawlerQuoteResponse.DataDTO.class);
+    }
+
+    /**
+     * 获取影像上传路径
+     * @param htCrawlerGerUploadUrlRequest
+     * @return
+     */
+    public HtCrawlerGerUploadUrlResponse getUploadUrl(HtCrawlerGerUploadUrlRequest htCrawlerGerUploadUrlRequest) {
+        return requestComponent.objectPost(RequestUrl.GET_UPLOAD_URL.getRequestUrl(huaTaiCrawlerProperties.getBaseUrl()), htCrawlerGerUploadUrlRequest, HtCrawlerGerUploadUrlResponse.class, null).getBody();
+    }
+}

+ 29 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/constant/HtRequestConstant.java

@@ -0,0 +1,29 @@
+package com.jzg.quote.huatai.crawler.constant;
+
+/**
+ * @description: 华泰财险 常量
+ * @author: shenwd
+ * @date: 2025/4/15 15:59
+ **/
+public class HtRequestConstant {
+
+    public static final String COOKIE = "Cookie";
+
+    /**
+     * 请求次数
+     */
+    public static final int REQUEST_NUMBER = 3;
+
+    /**
+     * 华泰
+     */
+    public static final String PROJECT_BASE = "/htcsp";
+    public static final String REQUEST_TYPE = "39";
+    public static final String ONE = "1";
+    public static final String YES = "Y";
+    public static final String NO = "N";
+
+    public static final String GET_UPLOAD_URL_SUCCESS = "0000";
+    public static final String BUSS_MODULE = "UW";
+    public static final String LOCAL = "Local";
+}

+ 58 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/constant/enums/RequestUrl.java

@@ -0,0 +1,58 @@
+package com.jzg.quote.huatai.crawler.constant.enums;
+
+import com.jzg.quotation.commons.standard.CrawlerRequestUrlStandard;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @description: 华泰财险 爬虫url配置
+ * @author: shenwd
+ * @date: 2025/4/15 08:49
+ **/
+@AllArgsConstructor
+@Getter
+public enum RequestUrl implements CrawlerRequestUrlStandard {
+    AUTHENTICATE("/htcsp/ShakeHandsAction.do?cmd=loginWelcom", "登录"),
+
+    CAR_QUERY("/htcsp/VehicleInfoEntryAction.do?cmd=carquery", "车型查询"),
+    SAVE_ONE_STEP("/htcsp/VehicleInfoEntryAction.do?cmd=saveOneStept", "保存车辆信息和车主等信息"),
+    QUOTE_PRICE("/htcsp/VehicleInfoEntryAction.do?cmd=carquery", "报价"),
+
+    GET_UPLOAD_URL("/htcsp/UploadAction.do?cmd=getUploadUrl", "获取影像上传路径"),
+    UPLOAD("/app/ImgFileUpload/upload.do", "影像上传"),
+    ;
+
+    private final String url;
+    private final String description;
+
+    /**
+     * 获取爬虫请求的 url
+     *
+     * @param url
+     * @return url
+     */
+    @Override
+    public String getRequestUrl(String url) {
+        return CrawlerRequestUrlStandard.super.getRequestUrl(url);
+    }
+
+    /**
+     * 获取爬虫请求的 描述
+     *
+     * @return 描述
+     */
+    @Override
+    public String getRequestDescription() {
+        return "";
+    }
+
+    /**
+     * 获取请求的uri
+     *
+     * @return uri
+     */
+    @Override
+    public String uri() {
+        return url;
+    }
+}

+ 23 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/HtCrawlerConfigureParameters.java

@@ -0,0 +1,23 @@
+package com.jzg.quote.huatai.crawler.entity;
+
+import com.jzg.quotation.commons.standard.ConfigureParameters;
+import lombok.Data;
+
+import java.io.Serial;
+
+/**
+ * @description: 华泰财险 爬虫配置参数
+ * @author: shenwd
+ * @date: 2025/4/17 10:50
+ **/
+@Data
+public class HtCrawlerConfigureParameters implements ConfigureParameters {
+    @Serial
+    private static final long serialVersionUID = 2175334681762537727L;
+
+    /**
+     * 当前登录账号所属机构编码
+     */
+    private String comCode;
+
+}

+ 92 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Request/HtCrawlerCarQueryRequest.java

@@ -0,0 +1,92 @@
+package com.jzg.quote.huatai.crawler.entity.Request;
+
+
+import com.alibaba.fastjson.JSON;
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.commons.exception.SystemException;
+import com.jzg.quote.huatai.crawler.util.HuaTaiCryptUtil;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description: 华泰财险 查询车型 请求参数
+ * @author: shenwd
+ * @date: 2025/4/15 10:01
+ **/
+@Data
+public class HtCrawlerCarQueryRequest implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 3366912683677575492L;
+
+    public HtCrawlerCarQueryRequest(CarInfoVo carInfoVo) {
+        DataDTO dataDTO = new DataDTO();
+        dataDTO.setMotortypecode(carInfoVo.getCarKindCode());
+        dataDTO.setMotorusagetypecode(carInfoVo.getCarNatureCode());
+        dataDTO.setLicenseplateno(carInfoVo.getLicenseNo());
+        dataDTO.setEngineno(carInfoVo.getEngineNo());
+        dataDTO.setVin(carInfoVo.getVinNo());
+
+        String data = JSON.toJSONString(dataDTO);
+        String key = HuaTaiCryptUtil.generateKey(16);
+        try {
+            String accessToken = HuaTaiCryptUtil.RSAEncrypt(key);
+            String encryptdata = HuaTaiCryptUtil.AESEncrypt(data, key);
+            this.setAccessToken(accessToken);
+            this.setData(encryptdata);
+        } catch (Exception e) {
+            throw new SystemException(e.getMessage());
+        }
+    }
+
+    private String sourceCode = "8";
+    private String accessToken;
+    private String data;
+    private String insuredCode;
+
+    /**
+     * {
+     *   "vehiclemodel": "",
+     *   "motortypecode": "A0 客车",
+     *   "motorusagetypecode": "8A 家庭自用",
+     *   "EACSP_MODEL_CODE_QUERY_new": "1744791721056",
+     *   "EACSP_MODEL_CODE_QUERY_old": "",
+     *   "licenseplateno": "晋AK900K",
+     *   "engineno": "EJ96802",
+     *   "vin": "LVGC616Z5PG013588",
+     *   "pageno": "1",
+     *   "rowsperpage": "10",
+     *   "reformRisk": "1251",
+     *   "modelcodexh": "CGQGFMUC0006",
+     *   "checkno": "",
+     *   "modelflag": "1",
+     *   "checkcode": "",
+     *   "gdjgvehiclecheckflag": "",
+     *   "jLlxVehicleList": "{}"
+     * }
+     */
+    @Data
+    public static class DataDTO implements Serializable {
+        @Serial
+        private static final long serialVersionUID = -921901450062929380L;
+        private String vehicleModel;
+        private String motortypecode;
+        private String motorusagetypecode;
+        private String EACSP_MODEL_CODE_QUERY_new;
+        private String EACSP_MODEL_CODE_QUERY_old;
+        private String licenseplateno;
+        private String engineno;
+        private String vin;
+        private String pageno = "1";
+        private String rowsperpage = "10";
+        private String reformRisk;
+        private String modelcodexh;
+        private String checkno;
+        private String modelflag = "1";
+        private String checkcode;
+        private String gdjgvehiclecheckflag;
+        private List<String> jLlxVehicleList;
+    }
+}

+ 26 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Request/HtCrawlerGerUploadUrlRequest.java

@@ -0,0 +1,26 @@
+package com.jzg.quote.huatai.crawler.entity.Request;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @description: 华泰财险 获取影像上传路径 请求参数
+ * @author: shenwd
+ * @date: 2025/4/22 17:39
+ **/
+@Data
+public class HtCrawlerGerUploadUrlRequest implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -6005327261865381259L;
+
+    private String proposalNo;
+    private String uploadType = "UP_carcheck";
+    private String quotationNo;
+    private String isVpn;
+
+    public HtCrawlerGerUploadUrlRequest(String quotationNo) {
+        this.quotationNo = quotationNo;
+    }
+}

+ 40 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Request/HtCrawlerLoginRequest.java

@@ -0,0 +1,40 @@
+package com.jzg.quote.huatai.crawler.entity.Request;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @description: 华泰财险 登录 请求参数
+ * @author: shenwd
+ * @date: 2025/4/15 09:04
+ **/
+@Data
+public class HtCrawlerLoginRequest implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1347137732617025208L;
+
+    public HtCrawlerLoginRequest(String username, String password, String comcode) {
+        this.username = username;
+        this.password = password;
+        this.comcode = comcode;
+    }
+
+    private String username;
+    private String password;
+    private String comcode;
+    private String verificationCode;
+    private String yanzhengtupianflag;
+    private String brownVerb = "122.0.0.0";
+    private String brownVern = "Chrome";
+    private String bindflag;
+    private String customerIp = "127.0.0.1";
+    private String customerCity = "未知";
+    private String userIsNowFlag;
+    private String sendNecessityIpt = "X";
+    private String wwaUserCode;
+    private String weChatFlag;
+    private String isVpn = "1";
+    private String validStatus = "1";
+}

+ 401 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Request/HtCrawlerQuoteRequest.java

@@ -0,0 +1,401 @@
+package com.jzg.quote.huatai.crawler.entity.Request;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.jzg.commons.constants.InsuranceRisk;
+import com.jzg.commons.entity.quote.vo.KindInfoVo;
+import com.jzg.commons.entity.quote.vo.RiskInfoVo;
+import com.jzg.commons.entity.quote.vo.VehicleAndVesselTaxVo;
+import com.jzg.commons.exception.SystemException;
+import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
+import com.jzg.quote.huatai.crawler.entity.Response.HtCrawlerCarQueryResponse;
+import com.jzg.quote.huatai.crawler.util.HuaTaiCryptUtil;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @description: 华泰财险 报价 请求参数
+ * @author: shenwd
+ * @date: 2025/4/15 15:53
+ **/
+@Data
+public class HtCrawlerQuoteRequest implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -3648463870224027622L;
+
+    public HtCrawlerQuoteRequest(QuoteVo quoteVo) {
+        DataDTO dataDTO = new DataDTO(quoteVo);
+
+        String data = JSON.toJSONString(dataDTO);
+        String key = HuaTaiCryptUtil.generateKey(16);
+        try {
+            String accessToken = HuaTaiCryptUtil.RSAEncrypt(key);
+            String encryptdata = HuaTaiCryptUtil.AESEncrypt(data, key);
+            this.setAccessToken(accessToken);
+            this.setData(encryptdata);
+        } catch (Exception e) {
+            throw new SystemException(e.getMessage());
+        }
+    }
+
+    private String sourceCode = "8";
+    private String accessToken;
+    private String data;
+    private String insuredCode;
+
+    @Data
+    public static class DataDTO implements Serializable {
+        @Serial
+        private static final long serialVersionUID = 3131283514749202563L;
+
+        public DataDTO(QuoteVo quoteVo) {
+            RiskInfoVo ciRiskInfoVo = quoteVo.getCiRiskInfoVo();
+            RiskInfoVo biRiskInfoVo = quoteVo.getBiRiskInfoVo();
+            VehicleAndVesselTaxVo taxVo = quoteVo.getVehicleAndVesselTax();
+            this.isFirstCount = "false";
+            this.isGlmPrice = 0;
+            if (ciRiskInfoVo != null) {
+                this.isInsureTraffic = "true";
+            } else {
+                this.isInsureTraffic = "false";
+            }
+            if (biRiskInfoVo != null) {
+                this.isInsureBusi = true;
+            } else {
+                this.isInsureBusi = false;
+            }
+            this.hastax = this.isInsureTraffic;
+            this.mealid = "00000";
+            List<CovListDTO> covListDTOS = getCovListDTOS(quoteVo);
+            this.covListJSON = JSONObject.toJSONString(covListDTOS);
+            this.coveragecode = biRiskInfoVo.getRiskCode();
+            this.taxJSON = JSONObject.toJSONString(getTaxDTO(taxVo));
+            this.taxnumbercode = "";
+            this.taxdepartment = "";
+            this.deductionduecode = "M1";
+            this.deductionduetype = "1";
+            this.taxdepartmentcode = "";
+            this.taxRateOrPay = "";
+            this.taxdealmode = "1";
+            this.taxdepartmentcode_wanshui = "";
+            this.profitJSON = "";//费率因子集合,待补充
+            this.renewalpolicyno = "";
+            this.SYxinxi = "0";
+            this.PiLing = "0";
+            this.pilingFlag = "2";
+            this.personalInsuredJSON = JSONObject.toJSONString(getPersonalInsuredDTOs(quoteVo));
+            this.relationno_bi = "";
+            this.promotesaleplanid = "";
+            this.disfeeregmaxbi = "";
+            this.disfeeregmaxci = "";
+            this.teamcaridentificationID = "0";
+            this.devListJSON = "";
+            this.isgetlastpolicy = "";
+            this.szTeamcarReportJSON = "";
+            this.taxdocumentdate = "";
+            this.taxpaidareacode = "";
+            this.displacement = "";
+            this.recommendList = "";
+            this.pilingRecommendNo = "";
+            this.specialcarflag = "";
+            this.transferdate = "";
+            this.riskcode = this.coveragecode;
+            this.chgownerRisk = "";
+            this.quoIsLastPlanRecommendNo = "";
+        }
+
+        /**
+         * 将KindInfoVoList转换为CovListDTOList
+         *
+         * @param quoteVo
+         * @return
+         */
+        public List<CovListDTO> getCovListDTOS(QuoteVo quoteVo) {
+            List<CovListDTO> covListDTOS = new ArrayList<>();
+            //商业险险种信息
+            List<KindInfoVo> kindInfoVoList = quoteVo.getKindInfoVo();
+            //商业险信息
+            RiskInfoVo biRiskInfoVo = quoteVo.getBiRiskInfoVo();
+            //交强险信息
+            RiskInfoVo ciRiskInfoVo = quoteVo.getCiRiskInfoVo();
+            kindInfoVoList.forEach(kindInfoVo -> {
+                CovListDTO covListDTO = new CovListDTO();
+                covListDTO.setCoveragecode(biRiskInfoVo.getRiskCode());
+                covListDTO.setComcoveragecode(kindInfoVo.getKindCode());
+                covListDTO.setComcoveragename(kindInfoVo.getKindName());
+                covListDTO.setLimitamount(kindInfoVo.getAmount());
+                covListDTO.setInsteadwalkdailylimitamount(kindInfoVo.getAmount());
+                covListDTO.setCoverageclasscode("1");
+                covListDTO.setStartdate(biRiskInfoVo.getStartDate());
+                covListDTO.setEnddate(biRiskInfoVo.getEndDate());
+                covListDTO.setIsdedu("1");
+                covListDTO.setQuantity(kindInfoVo.getQuantity());
+                covListDTO.setServiceTimes(kindInfoVo.getServiceTimes());
+
+                covListDTOS.add(covListDTO);
+            });
+            //添加交强险
+            CovListDTO covListDTO = new CovListDTO();
+            covListDTO.setCoveragecode(ciRiskInfoVo.getRiskCode());
+            covListDTO.setComcoveragecode(ciRiskInfoVo.getRiskCode());
+            covListDTO.setComcoveragename(InsuranceRisk.TRAFFIC.getDesc());
+            covListDTO.setStartdate(biRiskInfoVo.getStartDate());
+            covListDTO.setEnddate(biRiskInfoVo.getEndDate());
+            covListDTOS.add(covListDTO);
+            return covListDTOS;
+        }
+
+        /**
+         * 获取车船税
+         *
+         * @param taxVo
+         * @return
+         */
+        public TaxDTO getTaxDTO(VehicleAndVesselTaxVo taxVo) {
+            TaxDTO taxDTO = new TaxDTO();
+            taxDTO.setTaxpayercertitype(taxVo.getTaxpayerIdentifier());
+            taxDTO.setTaxpayername(taxVo.getTaxpayerName());
+            taxDTO.setTaxpayercerticode(taxVo.getIdentifyNumber());
+            taxDTO.setTaxpayerindentificationcode(taxVo.getIdentifyNumber());
+            taxDTO.setTaxconditioncode(taxVo.getTaxRelifFlag());
+            //其他数据调试再补充
+            return taxDTO;
+        }
+
+        /**
+         * 获取意外险数据
+         *
+         * @param quoteVo
+         * @return
+         */
+        public List<PersonalInsuredDTO> getPersonalInsuredDTOs(QuoteVo quoteVo) {
+            List<PersonalInsuredDTO> personalInsuredDTOList = new ArrayList<>();
+            quoteVo.getAccidentalDrivings().forEach(drivingDTO -> {
+                PersonalInsuredDTO personalInsuredDTO = new PersonalInsuredDTO();
+                personalInsuredDTO.setAmount(drivingDTO.getSumAmount());
+                personalInsuredDTO.setPremium(drivingDTO.getSumPremium());
+                personalInsuredDTO.setProductcode(drivingDTO.getProductCode());
+                personalInsuredDTO.setProductname(drivingDTO.getProductName());
+                personalInsuredDTO.setMealcode(drivingDTO.getProductCategoryCode());
+                personalInsuredDTO.setMealname(drivingDTO.getProductCategoryName());
+                personalInsuredDTO.setNum(String.valueOf(drivingDTO.getQuantity()));
+                //设置被保人待补充
+//            personalInsuredDTO.setPerinsuredList();
+                personalInsuredDTOList.add(personalInsuredDTO);
+            });
+
+            return personalInsuredDTOList;
+        }
+
+        private String isFirstCount;
+        private Integer isGlmPrice;
+        private String isInsureTraffic;
+        private Boolean isInsureBusi;
+        private String hastax;
+        private String mealid;
+        private String covListJSON;
+        private String coveragecode;
+        private String basePartJSON;
+        private String questioninfolast;
+        private String taxJSON;
+        private String taxnumbercode;
+        private String taxdepartment;
+        private String deductionduecode;
+        private String deductionduetype;
+        private String taxdepartmentcode;
+        private String taxRateOrPay;
+        private String taxdealmode;
+        private String taxdepartmentcode_wanshui;
+        private String profitJSON;
+        private String renewalpolicyno;
+        private String SYxinxi;
+        private String PiLing;
+        private String pilingFlag;
+        private String personalInsuredJSON;
+        private String relationno_bi;
+        private String promotesaleplanid;
+        private String disfeeregmaxbi;
+        private String disfeeregmaxci;
+        private String teamcaridentificationID;
+        private String devListJSON;
+        private String isgetlastpolicy;
+        private String szTeamcarReportJSON;
+        private String taxdocumentdate;
+        private String taxpaidareacode;
+        private String displacement;
+        private String recommendList;
+        private String pilingRecommendNo;
+        private String specialcarflag;
+        private String transferdate;
+        private String riskcode;
+        private String chgownerRisk;
+        private String quoIsLastPlanRecommendNo;
+
+        @Data
+        public static class CovListDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = -6488418707226588978L;
+
+            /**
+             * 商业险编码/交强险编码
+             */
+            private String comcoveragecode;
+            /**
+             * 保额
+             */
+            private String limitamount;
+            private String insteadwalkdailylimitamount;
+            private String coverageclasscode;
+            private String startdate;
+            private String enddate;
+            private String coveragecode;
+            private String isdedu;
+            private String independentvalue;
+            /**
+             * 险种名称
+             */
+            private String comcoveragename;
+            private String deductible;
+            private String basedpremium;
+            private String benchmarkpremium;
+            private String kindpremiun;
+            private String deductiblerate;
+            private String billdate;
+            private String serviceTimes;
+            private String serviceCode;
+            private String quantity;
+        }
+
+        @Data
+        public static class TaxDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = -9005104562176716371L;
+            private String taxpayercertitype;
+            private String taxpayername;
+            private String declaredate;
+            private String paylastyear;
+            private String hispolicyenddate;
+            private String taxpayercerticode;
+            private String isrefuse;
+            private String taxconditioncode;
+            private String taxpayerindentificationcode;
+            private String sametoowner;
+            private String taxenddate;
+            private String taxstartdate;
+            private String calculatemode;
+            private String department;
+            private String taxreliefno;
+            private String taxreliefspareno;
+        }
+
+        @Data
+        public static class ProfitDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = 4610853741420630808L;
+
+            private String itemkindno;
+            private String profitcode;
+            private String conditioncode;
+            private String profitrate;
+            private String profittype;
+            private String valueid;
+            private String min;
+            private String max;
+            private String lowerprofitrate;
+            private String upperprofitrate;
+        }
+
+        @Data
+        public static class PersonalInsuredDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = 1729064286503004418L;
+            private String butouflag;
+            private String amount;
+            private String car_limitloadperson;
+            private String isInsuredPassenger;
+            private String productcode;
+            private String productname;
+            private String mealcode;
+            private String mealname;
+            private String startdate;
+            private String enddate;
+            private String num;
+            private String premium;
+            private String formationJudiciary;
+            private String argueJudiciary;
+            private String newCarSalesProvince;
+            private String newCarSalesCity;
+            private String newCarSalesDistrict;
+            private String buildYear;
+            private String xiangxiAddress;
+            private String postalCode;
+            private String bulidTypeCode;
+            private String bulidTypeQiTaMes;
+            private String provinceName;
+            private String cityName;
+            private String regionName;
+            private String isInsuredSizesFlag;
+            private List<PerinsuredDTO> perinsuredList;
+
+            @Data
+            public static class PerinsuredDTO implements Serializable {
+                @Serial
+                private static final long serialVersionUID = 4914844581040597499L;
+                private String productcode;
+                private String mark;
+                private String insuredname;
+                private String certitype;
+                private String certicode;
+                private String age;
+                private String gender;
+                private String perProWithCarStartDate;
+                private String relation;
+                private String job;
+                private String parentcode;
+                private String parentname;
+                private String parametercode;
+                private String parametername;
+                private String codecode;
+                private String codecname;
+                private String risktype;
+                private String jobtype;
+                private String customerno;
+                private String workname;
+                private String workphone;
+                private String yearmoney;
+                private String workaddress;
+                private String otherphone;
+                private String otheraddress;
+                private String mobile;
+                private String urgentname;
+                private String urgentmobile;
+                private String nationality;
+            }
+        }
+
+        @Data
+        public static class SzTeamcarReportDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = -3593064608048739605L;
+            private String isSZteamcarReportFlag;
+            private String i_iscarowner;
+            private String ins_type;
+            private String certi_type;
+            private String certi_code;
+            private String insured_name;
+            private String age;
+            private String teamcarno_sz;
+            private String salesidcardoth;
+            private String salesnameoth;
+            private String transactoridentifytype;
+            private String transactoridentifycode;
+            private String transactor_nam;
+            private String certiStartDate;
+            private String certiEndDate;
+        }
+    }
+}

+ 1214 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Request/HtCrawlerSaveOneStepRequest.java

@@ -0,0 +1,1214 @@
+package com.jzg.quote.huatai.crawler.entity.Request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
+import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
+import com.jzg.quote.huatai.crawler.constant.HtRequestConstant;
+import com.jzg.quote.huatai.crawler.entity.HtCrawlerConfigureParameters;
+import com.jzg.quote.huatai.crawler.entity.Response.HtCrawlerCarQueryResponse;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description: 报价第一步,保存车辆及客户信息 请求参数
+ * @author: shenwd
+ * @date: 2025/4/21 11:04
+ **/
+@Data
+public class HtCrawlerSaveOneStepRequest implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -4856284180707621587L;
+
+    public HtCrawlerSaveOneStepRequest(QuoteVo quoteVo, HtCrawlerCarQueryResponse.DataDTO.DataListDTO carDTO, HtCrawlerConfigureParameters parameters) {
+        CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
+        CustomerInfoVo ownersInfo = quoteVo.getOwnersInfo();
+        CustomerInfoVo policyHolderInfo = quoteVo.getPolicyHolderInfo();
+        CustomerInfoVo insuredPersonInfo = quoteVo.getInsuredPersonInfo();
+        this.projectBase = HtRequestConstant.PROJECT_BASE;
+        this.requestType = HtRequestConstant.REQUEST_TYPE;
+        this.quoteFlag = false;
+        this.ocrBtnHGFlag = "1";
+        this.ocrBtnShowFlag = "1";
+        this.ocrBtnUsedFlag = "1";
+        this.riskCode = "1251";//从quoteVo获取
+        this.reformRisk = this.riskCode;
+        this.motorTypeCode = carInfoVo.getCarKindCode();
+        this.tmpMotorTypeCode = this.motorTypeCode;
+        this.tmpMotorTypeCode2 = this.motorTypeCode;
+        this.motorUsageTypeCode = carInfoVo.getCarNatureCode();
+        this.tmpMotorUsageTypeCode = this.motorUsageTypeCode;
+        this.tmpMotorUsageTypeCode2 = this.motorUsageTypeCode;
+        this.licenseMotorUsageTypeCode = this.motorUsageTypeCode;
+        this.licensePlateNo = carInfoVo.getLicenseNo();
+        this.vehicleRegisterDate = carInfoVo.getRegisterDate();
+        this.vin = carInfoVo.getVinNo();
+        this.engineNo = carInfoVo.getEngineNo();
+        this.brandCn = carDTO.getBrandcn();
+        this.vehicleModel = this.brandCn;
+        this.liceensePlateType = carInfoVo.getLicenseKindCode();
+        this.vehicleStyle = carInfoVo.getCarTypeCode();
+        this.purchasePrice = carDTO.getPurchasePrice();
+        this.limitLoadPerson = carDTO.getLimitloadperson();
+        this.property = carInfoVo.getProperty();
+        this.bjCertificateDate = carInfoVo.getIssueDate();
+        this.fuelType = carDTO.getFueltype();
+        this.modelcodexh = carDTO.getModelcodexh();
+        this.noticeType = carDTO.getNoticetype();
+        this.carName = carDTO.getCarname();
+        this.wholeWeight = carDTO.getWholeweight();
+        this.power = carDTO.getDisplacement();
+        this.modelCode = carDTO.getModelcode();
+        this.marketYear = carDTO.getCarYear();
+        this.vehicleOriginSwitch = "1";
+        this.renewalTwoSwitch = "1";
+        //车主
+        this.ownerType = ownersInfo.getPersonType();
+        this.certiType = ownersInfo.getDocumentsTypeCode();
+        this.certiCode = ownersInfo.getIdentifyNumber();
+        this.ownername = ownersInfo.getName();
+        this.gender = ownersInfo.getGender();
+        this.ownrAge = String.valueOf(ownersInfo.getAge());
+        //被保人
+        this.isCarwoner = HtRequestConstant.ONE.equals(String.valueOf(insuredPersonInfo.getCarOwner())) ? HtRequestConstant.YES : HtRequestConstant.NO;
+        this.ownerType2 = insuredPersonInfo.getPersonType();
+        this.dCertiType = insuredPersonInfo.getDocumentsTypeCode();
+        this.dCertiCode = insuredPersonInfo.getIdentifyNumber();
+        this.insuredName = insuredPersonInfo.getName();
+        this.insuredGender = insuredPersonInfo.getGender();
+        this.carInsuredRelation = "";//车主与被保人关系
+        //投保人
+        this.tiscarwoner = HtRequestConstant.ONE.equals(String.valueOf(policyHolderInfo.getCarOwner())) ? HtRequestConstant.YES : HtRequestConstant.NO;
+        this.insType = policyHolderInfo.getPersonType();
+        this.tCertiType = policyHolderInfo.getDocumentsTypeCode();
+        this.tCertiCode = policyHolderInfo.getIdentifyNumber();
+        this.tname = policyHolderInfo.getName();
+        this.tgender = policyHolderInfo.getGender();
+
+        this.isXB = HtRequestConstant.NO;
+        this.quotationNo = "报价单号";
+        this.fullComCode = parameters.getComCode();
+        this.comcodeByUserVo = this.fullComCode;
+    }
+
+    @JsonProperty("project_base")
+    private String projectBase;
+
+    @JsonProperty("requesttype")
+    private String requestType;
+
+    @JsonProperty("quoteflag")
+    private Boolean quoteFlag;
+
+    @JsonProperty("licenseplateId")
+    private String licensePlateId;
+
+    @JsonProperty("EACSP_MODEL_CODE_QUERY_new")
+    private String eacspModelCodeQueryNew;
+
+    @JsonProperty("EACSP_MODEL_CODE_QUERY_old")
+    private String eacspModelCodeQueryOld;
+
+    @JsonProperty("EACSP_VEHICLE_INPUT_new")
+    private String eacspVehicleInputNew;
+
+    @JsonProperty("EACSP_VEHICLE_INPUT_old")
+    private String eacspVehicleInputOld;
+
+    @JsonProperty("EACSP_VEHICLE_OWNER_INPUT_old")
+    private String eacspVehicleOwnerInputOld;
+
+    @JsonProperty("EACSP_VEHICLE_OWNER_INPUT_new")
+    private String eacspVehicleOwnerInputNew;
+
+    @JsonProperty("EACSP_DRIVER_INPUT_new")
+    private String eacspDriverInputNew;
+
+    @JsonProperty("EACSP_DRIVER_INPUT_old")
+    private String eacspDriverInputOld;
+
+    @JsonProperty("EACSP_INSURANCE_CONNECT_ZTB_new")
+    private String eacspInsuranceConnectZtbNew;
+
+    @JsonProperty("EACSP_INSURANCE_CONNECT_ZTB_old")
+    private String eacspInsuranceConnectZtbOld;
+
+    @JsonProperty("motoflag")
+    private String motoFlag;
+
+    @JsonProperty("motorusageflag")
+    private String motorusageFlag;
+
+    @JsonProperty("priceflag")
+    private String priceFlag;
+
+    @JsonProperty("registerflag")
+    private String registerFlag;
+
+    @JsonProperty("nolicenseflag")
+    private String nolicenseFlag;
+
+    @JsonProperty("comcodeq")
+    private String comCodeq;
+
+    @JsonProperty("nodamageyears_old")
+    private String nodamageyearsOld;
+
+    @JsonProperty("EACSP_CARSAMID_old")
+    private String eacspCarsamidOld;
+
+    @JsonProperty("EACSP_SAMID_old")
+    private String eacspSamidOld;
+
+    @JsonProperty("gdjgvehicleflag")
+    private String gdjgVehicleFlag;
+
+    @JsonProperty("gdjg_motorusagetypecode")
+    private String gdjgMotorusageTypeCode;
+
+    @JsonProperty("jg_checkpass_flag")
+    private String jgCheckpassFlag;
+
+    @JsonProperty("jg_displacement_flag")
+    private String jgDisplacementFlag;
+
+    @JsonProperty("jg_limitload_flag")
+    private String jgLimitloadFlag;
+
+    @JsonProperty("jg_wholeweight_flag")
+    private String jgWholeweightFlag;
+
+    @JsonProperty("jg_limitloadperson_flag")
+    private String jgLimitloadpersonFlag;
+
+    @JsonProperty("jg_vehiclestyle_flag")
+    private String jgVehiclestyleFlag;
+
+    @JsonProperty("whiteflag")
+    private String whiteFlag;
+
+    @JsonProperty("applicantflag")
+    private String applicantFlag;
+
+    @JsonProperty("scflag")
+    private String scFlag;
+
+    @JsonProperty("scjgflag")
+    private String scjgFlag;
+
+    @JsonProperty("haulage")
+    private String haulAge;
+
+    @JsonProperty("gdjglicenseplateno")
+    private String gdjgLicensePlateNo;
+
+    @JsonProperty("gdjgvin")
+    private String gdjgVin;
+
+    @JsonProperty("gdjgengine_no")
+    private String gdjgEngineNo;
+
+    @JsonProperty("gdjglicenseplatetype")
+    private String gdjgLicensePlateType;
+
+    @JsonProperty("gdjgpm_vehicle_type")
+    private String gdjgpmVehicleType;
+
+    @JsonProperty("gdjgfirst_register_date")
+    private String gdjgFirstRegisterDate;
+
+    @JsonProperty("gdjgtransfer_date")
+    private String gdjgtransferDate;
+
+    @JsonProperty("gdjgwholeweight")
+    private String gdjgWholeWeight;
+
+    @JsonProperty("gdjglimitloadperson")
+    private String gdjgLimitLoadPerson;
+
+    @JsonProperty("gdjglimitload")
+    private String gdjgLimitLoad;
+
+    @JsonProperty("gdjgdisplacement")
+    private String gdjgDisplacement;
+
+    @JsonProperty("gdjgjg_motortypecode")
+    private String gdjgjgMotorTypeCode;
+
+    @JsonProperty("gdjgjg_fueltype")
+    private String gdjgjgFuelType;
+
+    @JsonProperty("comcodeFlag")
+    private String comCodeFlag;
+
+    @JsonProperty("isShowPower")
+    private String isShowPower;
+
+    @JsonProperty("newElectricMoto")
+    private String newElectricMoto;
+
+    @JsonProperty("cipMotoSwitch")
+    private String cipMotoSwitch;
+
+    @JsonProperty("newEnergySwitch")
+    private String newEnergySwitch;
+
+    @JsonProperty("isShowHkMa")
+    private String isShowHkMa;
+
+    @JsonProperty("changeRiskCodeSwitch")
+    private String changeRiskCodeSwitch;
+
+    @JsonProperty("changeRiskCodeSwitchFuelType")
+    private String changeRiskCodeSwitchFuelType;
+
+    @JsonProperty("areaSwitch")
+    private String areaSwitch;
+
+    @JsonProperty("SHMergeSwitch")
+    private String SHMergeSwitch;
+
+    @JsonProperty("jllxSwitch")
+    private String jllxSwitch;
+
+    @JsonProperty("carQueryNewProcess")
+    private String carQueryNewProcess;
+
+    @JsonProperty("isJllxVehicleType")
+    private String isJllxVehicleType;
+
+    @JsonProperty("carModelCodexhQuery")
+    private String carModelCodexhQuery;
+
+    @JsonProperty("renewalTwoSwitch")
+    private String renewalTwoSwitch;
+
+    @JsonProperty("ocrBtnShowFlag")
+    private String ocrBtnShowFlag;
+
+    @JsonProperty("ocrBtnHGFlag")
+    private String ocrBtnHGFlag;
+
+    @JsonProperty("ocrBtnUsedFlag")
+    private String ocrBtnUsedFlag;
+
+    @JsonProperty("mdea")
+    private String mdea;
+
+    @JsonProperty("scjgvehicleCheckFlag")
+    private String scjgvehicleCheckFlag;
+
+    @JsonProperty("scVehicleQueryFlag")
+    private String scVehicleQueryFlag;
+
+    @JsonProperty("homeaddress")
+    private String homeAddress;
+
+    @JsonProperty("insuredaddress")
+    private String insuredAddress;
+
+    @JsonProperty("actionhomeaddress")
+    private String actionHomeAddress;
+
+    @JsonProperty("xbRecommendInfo")
+    private String xbRecommendInfo;
+
+    @JsonProperty("daichutuijianfangan")
+    private String daiChuTuiJianFangAn;
+
+    @JsonProperty("province")
+    private String province;
+
+    @JsonProperty("city")
+    private String city;
+
+    @JsonProperty("district")
+    private String district;
+
+    @JsonProperty("ownernation")
+    private String ownerNation;
+
+    @JsonProperty("ownerissuingauthority")
+    private String ownerIssuingAuthority;
+
+    @JsonProperty("insuredprovince")
+    private String insuredProvince;
+
+    @JsonProperty("insuredcity")
+    private String insuredCity;
+
+    @JsonProperty("insureddistrict")
+    private String insuredDistrict;
+
+    @JsonProperty("insurednation")
+    private String insuredNation;
+
+    @JsonProperty("insuredissuingauthority")
+    private String insuredIssuingAuthority;
+
+    @JsonProperty("actionprovince")
+    private String actionProvince;
+
+    @JsonProperty("actiondistrict")
+    private String actionDistrict;
+
+    @JsonProperty("actionnation")
+    private String actionNation;
+
+    @JsonProperty("actionissuingauthority")
+    private String actionIssuingAuthority;
+
+    @JsonProperty("maxDisplacement")
+    private String maxDisplacement;
+
+    @JsonProperty("showPowerFlag")
+    private String showPowerFlag;
+
+    @JsonProperty("carPostCode")
+    private String carPostCode;
+
+    @JsonProperty("bbrPostCode")
+    private String bbrPostCode;
+
+    @JsonProperty("tbrPostCode")
+    private String tbrPostCode;
+
+    @JsonProperty("VehicleStyleUniqueId")
+    private String vehicleStyleUniqueId;
+
+    @JsonProperty("reformRisk")
+    private String reformRisk;
+
+    @JsonProperty("isReformComcode")
+    private String isReformComcode;
+
+    @JsonProperty("lastpolicyno")
+    private String lastpolicyno;
+
+    @JsonProperty("riskcode")
+    private String riskCode;
+
+    @JsonProperty("tmpmotortypecode2")
+    private String tmpMotorTypeCode2;
+
+    @JsonProperty("tmpmotortypecode")
+    private String tmpMotorTypeCode;
+
+    @JsonProperty("motortypecode")
+    private String motorTypeCode;
+
+    @JsonProperty("tmpmotorusagetypecode2")
+    private String tmpMotorUsageTypeCode2;
+
+    @JsonProperty("tmpmotorusagetypecode")
+    private String tmpMotorUsageTypeCode;
+
+    @JsonProperty("motorusagetypecode")
+    private String motorUsageTypeCode;
+
+    @JsonProperty("licensemotorusagetypecode")
+    private String licenseMotorUsageTypeCode;
+
+    @JsonProperty("vehicleflag")
+    private String vehicleFlag;
+
+    @JsonProperty("licenseplateStr")
+    private String licensePlateStr;
+
+    @JsonProperty("newvehicleflag")
+    private String newVehicleFlag;
+
+    @JsonProperty("licenseplateno")
+    private String licensePlateNo;
+
+    @JsonProperty("ecdemicvehicleflag")
+    private String ecdemicVehicleFlag;
+
+    @JsonProperty("tmpvehicleregisterdate")
+    private String tmpVehicleRegisterDate;
+
+    @JsonProperty("vehicleregisterdate")
+    private String vehicleRegisterDate;
+
+    @JsonProperty("vin")
+    private String vin;
+
+    @JsonProperty("engineno")
+    private String engineNo;
+
+    @JsonProperty("brandcn")
+    private String brandCn;
+
+    @JsonProperty("vehiclemodel")
+    private String vehicleModel;
+
+    @JsonProperty("liceenseplatetype")
+    private String liceensePlateType;
+
+    @JsonProperty("vehiclestyle")
+    private String vehicleStyle;
+
+    @JsonProperty("CAR_COLOR_CODE")
+    private String carColorCode;
+
+    @JsonProperty("LICENSE_PLATE_COLOR_CODE")
+    private String licensePlateColorCode;
+
+    @JsonProperty("tmppurchaseprice")
+    private String tmpPurchasePrice;
+
+    @JsonProperty("purchaseprice")
+    private String purchasePrice;
+
+    @JsonProperty("limitloadperson")
+    private String limitLoadPerson;
+
+    @JsonProperty("property")
+    private String property;
+
+    @JsonProperty("tmpbjcertificatedate")
+    private String tmpbjCertificateDate;
+
+    @JsonProperty("bjcertificatedate")
+    private String bjCertificateDate;
+
+    @JsonProperty("fuelTypeWhiteFlag")
+    private String fuelTypeWhiteFlag;
+
+    @JsonProperty("fueltype")
+    private String fuelType;
+
+    @JsonProperty("certificateno")
+    private String certificateNo;
+
+    @JsonProperty("certificatedate")
+    private String certificateDate;
+
+    @JsonProperty("certificatetype")
+    private String certificateType;
+
+    @JsonProperty("modelcodexh")
+    private String modelcodexh;
+
+    @JsonProperty("basicratecode")
+    private String basicrateCode;
+
+    @JsonProperty("noticetype")
+    private String noticeType;
+
+    @JsonProperty("carname")
+    private String carName;
+
+    @JsonProperty("appointareacode")
+    private String appointAreaCode;
+
+    @JsonProperty("specialVehicleFlag")
+    private String specialVehicleFlag;
+
+    @JsonProperty("runarea")
+    private String runArea;
+
+    @JsonProperty("runmilesdetails")
+    private String runMilesDetails;
+
+    @JsonProperty("runmilesdetailsq")
+    private String runMilesDetailsq;
+
+    @JsonProperty("iscustomerloyal")
+    private String isCustomerLoyal;
+
+    @JsonProperty("loanvehicleflag")
+    private String loanVehicleFlag;
+
+    @JsonProperty("specialcartype")
+    private String specialCarType;
+
+    @JsonProperty("wholeweight")
+    private String wholeWeight;
+
+    @JsonProperty("power")
+    private String power;
+
+    @JsonProperty("efficiency")
+    private String efficiency;
+
+    @JsonProperty("limitload")
+    private String limitLoad;
+
+    @JsonProperty("specialcarflag")
+    private String specialcarflag;
+
+    @JsonProperty("chgownerflag")
+    private String chgOwnerFlag;
+
+    @JsonProperty("tmptransferdate")
+    private String tmpTransferDate;
+
+    @JsonProperty("gdjgtransferdate")
+    private String gdjgTransferDate;
+
+    @JsonProperty("transferdate")
+    private String transferDate;
+
+    @JsonProperty("purerange")
+    private String pureRange;
+
+    @JsonProperty("maximumSpeed")
+    private String maximumSpeed;
+
+    @JsonProperty("otherenergytypedesc")
+    private String otherEnergyTypeDesc;
+
+    @JsonProperty("queryFlag")
+    private String queryFlag;
+
+    @JsonProperty("saveFlag")
+    private String saveFlag;
+
+    @JsonProperty("modelcode")
+    private String modelCode;
+
+    @JsonProperty("marketyear")
+    private String marketYear;
+
+    @JsonProperty("vehicleOriginSwitch")
+    private String vehicleOriginSwitch;
+
+    @JsonProperty("isWindowPeriod")
+    private String isWindowPeriod;
+
+    @JsonProperty("risklevel")
+    private String riskLevel;
+
+    @JsonProperty("comrisklevel")
+    private String comRiskLevel;
+
+    @JsonProperty("insuredrisklevel")
+    private String insuredRiskLevel;
+
+    @JsonProperty("trisklevel")
+    private String triskLevel;
+
+    @JsonProperty("t_insuredcomrisklevel")
+    private String tinsuredComRiskLevel;
+
+    @JsonProperty("riskwarninfo")
+    private String riskWarnInfo;
+
+    @JsonProperty("comriskwarninfo")
+    private String comRiskWarnInfo;
+
+    @JsonProperty("insuredriskwarninfo")
+    private String insuredRiskWarnInfo;
+
+    @JsonProperty("insuredcomriskwarninfo")
+    private String insuredComRiskWarnInfo;
+
+    @JsonProperty("triskwarninfo")
+    private String triskWarnInfo;
+
+    @JsonProperty("t_insuredcomriskwarninfo")
+    private String tinsuredComRiskWarnInfo;
+
+    @JsonProperty("customerno")
+    private String customerNo;
+
+    @JsonProperty("WORKUNIT")
+    private String workUnit;
+
+    @JsonProperty("WORKADDRESS")
+    private String workAddress;
+
+    @JsonProperty("OTHERCONTACT")
+    private String otherContact;
+
+    @JsonProperty("OTHERWORKADDRESS")
+    private String otherWorkAddress;
+
+    @JsonProperty("annualincome")
+    private String annualIncome;
+
+    @JsonProperty("workphone")
+    private String workPhone;
+
+    @JsonProperty("BUSINESSDETAIL")
+    private String businessDetail;
+
+    @JsonProperty("REGISTFUND")
+    private String registFund;
+
+    @JsonProperty("REGISTCURRENCY")
+    private String registCurrency;
+
+    @JsonProperty("SUPPORTDOCUNAME")
+    private String supportDocuname;
+
+    @JsonProperty("SUPPORTDOCUNUMBER")
+    private String supportDocuNumber;
+
+    @JsonProperty("SUPPORTDOCUVALIDDATE")
+    private String supportDocuValidDate;
+
+    @JsonProperty("STOCKORCONTROLNAME")
+    private String stockorControlName;
+
+    @JsonProperty("SOCIDENTIFYNUMBER")
+    private String socIdentifyNumber;
+
+    @JsonProperty("SOCOTHERIDENTIFYTYPE")
+    private String socOtherIdentifyType;
+
+    @JsonProperty("SOCOTHERIDENTIFYNUMBER")
+    private String socOtherIdentifyNumber;
+
+    @JsonProperty("SOCOTHEREFFECTIVEDATE")
+    private String socOtherEffectiveDate;
+
+    @JsonProperty("LEADERNAME")
+    private String leaderName;
+
+    @JsonProperty("LEADERIDENTIFYNUMBER")
+    private String leaderIdentifyNumber;
+
+    @JsonProperty("LEADEROTHERIDENTIFYTYPE")
+    private String leaderOtherIdentifyType;
+
+    @JsonProperty("LEADEROTHERIDENTIFYNUMBER")
+    private String leaderOtherIdentifyNumber;
+
+    @JsonProperty("LEADEROTHEREFFECTIVEDATE")
+    private String leaderOtherEffectiveDate;
+
+    @JsonProperty("LEADERSTARTOTHEREFFECTIVEDATE")
+    private String leaderStartOtherEffectiveDate;
+
+    @JsonProperty("TRANIDENTIFYTYPE")
+    private String tranIdentifyType;
+
+    @JsonProperty("CUSTOMEROTHERIDENTIFYNUMBER")
+    private String customerOtherIdentifyNumber;
+
+    @JsonProperty("CUSTOMEROTHEREFFECTIVEDATE")
+    private String customerOtherEffectiveDate;
+
+    @JsonProperty("BUSINESSSOURCE")
+    private String businessSource;
+
+    @JsonProperty("airelation")
+    private String airelation;
+
+    @JsonProperty("bcustomerno")
+    private String bcustomerNo;
+
+    @JsonProperty("bWORKUNIT")
+    private String bworkUnit;
+
+    @JsonProperty("bWORKADDRESS")
+    private String bworkAddress;
+
+    @JsonProperty("bOTHERCONTACT")
+    private String botherContact;
+
+    @JsonProperty("bOTHERWORKADDRESS")
+    private String botherWorkAddress;
+
+    @JsonProperty("bannualincome")
+    private String bannualIncome;
+
+    @JsonProperty("bworkphone")
+    private String bworkPhone;
+
+    @JsonProperty("bBUSINESSDETAIL")
+    private String bbusinessDetail;
+
+    @JsonProperty("bREGISTFUND")
+    private String bregistFund;
+
+    @JsonProperty("bREGISTCURRENCY")
+    private String bregistCurrency;
+
+    @JsonProperty("bSUPPORTDOCUNAME")
+    private String bsupportDocuName;
+
+    @JsonProperty("bSUPPORTDOCUNUMBER")
+    private String bsupportDocuNumber;
+
+    @JsonProperty("bSUPPORTDOCUVALIDDATE")
+    private String bsupportDocuValidDate;
+
+    @JsonProperty("bSTOCKORCONTROLNAME")
+    private String bstockorControlName;
+
+    @JsonProperty("bSOCIDENTIFYNUMBER")
+    private String bsocIdentifyNumber;
+
+    @JsonProperty("bSOCOTHERIDENTIFYTYPE")
+    private String bsocOtherIdentifyType;
+
+    @JsonProperty("bSOCOTHERIDENTIFYNUMBER")
+    private String bsocOtherIdentifyNumber;
+
+    @JsonProperty("bSOCOTHEREFFECTIVEDATE")
+    private String bsocOtherEffectiveDate;
+
+    @JsonProperty("bLEADERNAME")
+    private String bleaderName;
+
+    @JsonProperty("bLEADERIDENTIFYNUMBER")
+    private String bleaderIdentifyNumber;
+
+    @JsonProperty("bLEADEROTHERIDENTIFYTYPE")
+    private String bleaderOtherIdentifyType;
+
+    @JsonProperty("bLEADEROTHERIDENTIFYNUMBER")
+    private String bleaderOtherIdentifyNumber;
+
+    @JsonProperty("bLEADEROTHEREFFECTIVEDATE")
+    private String bleaderothereffectivedate;
+
+    @JsonProperty("bLEADERSTARTOTHEREFFECTIVEDATE")
+    private String bleaderStartOtherEffectiveDate;
+
+    @JsonProperty("bTRANIDENTIFYTYPE")
+    private String btranIdentifyType;
+
+    @JsonProperty("bCUSTOMEROTHERIDENTIFYNUMBER")
+    private String bcustomerOtherIdentifyNumber;
+
+    @JsonProperty("bCUSTOMEROTHEREFFECTIVEDATE")
+    private String bcustomerothereffectivedate;
+
+    @JsonProperty("bBUSINESSSOURCE")
+    private String bbusinessSource;
+
+    @JsonProperty("tcustomerno")
+    private String tcustomerNo;
+
+    @JsonProperty("tWORKUNIT")
+    private String tworkUnit;
+
+    @JsonProperty("tWORKADDRESS")
+    private String tworkAddress;
+
+    @JsonProperty("tOTHERCONTACT")
+    private String totherContact;
+
+    @JsonProperty("tOTHERWORKADDRESS")
+    private String totherWorkAddress;
+
+    @JsonProperty("tannualincome")
+    private String tannualIncome;
+
+    @JsonProperty("tworkphone")
+    private String tworkPhone;
+
+    @JsonProperty("tBUSINESSDETAIL")
+    private String tbusinessDetail;
+
+    @JsonProperty("tREGISTFUND")
+    private String tregistFund;
+
+    @JsonProperty("tREGISTCURRENCY")
+    private String tregistcurrency;
+
+    @JsonProperty("tSUPPORTDOCUNAME")
+    private String tsupportDocuname;
+
+    @JsonProperty("tSUPPORTDOCUNUMBER")
+    private String tsupportDocunumber;
+
+    @JsonProperty("tSUPPORTDOCUVALIDDATE")
+    private String tsupportDocuValidDate;
+
+    @JsonProperty("tSTOCKORCONTROLNAME")
+    private String tstockorControlName;
+
+    @JsonProperty("tSOCIDENTIFYNUMBER")
+    private String tsocIdentifyNumber;
+
+    @JsonProperty("tSOCOTHERIDENTIFYTYPE")
+    private String tsocOtherIdentifyType;
+
+    @JsonProperty("tSOCOTHERIDENTIFYNUMBER")
+    private String tsocOtherIdentifyNumber;
+
+    @JsonProperty("tSOCOTHEREFFECTIVEDATE")
+    private String tsocOtherEffectiveDate;
+
+    @JsonProperty("tLEADERNAME")
+    private String tleadername;
+
+    @JsonProperty("tLEADERIDENTIFYNUMBER")
+    private String tleaderIdentifyNumber;
+
+    @JsonProperty("tLEADEROTHERIDENTIFYTYPE")
+    private String tleaderOtherIdentifyType;
+
+    @JsonProperty("tLEADEROTHERIDENTIFYNUMBER")
+    private String tleaderOtherIdentifyNumber;
+
+    @JsonProperty("tLEADEROTHEREFFECTIVEDATE")
+    private String tleaderOtherEffectiveDate;
+
+    @JsonProperty("tLEADERSTARTOTHEREFFECTIVEDATE")
+    private String tleaderStartOtherEffectiveDate;
+
+    @JsonProperty("tTRANIDENTIFYTYPE")
+    private String ttranIdentifyType;
+
+    @JsonProperty("tCUSTOMEROTHERIDENTIFYNUMBER")
+    private String tcustomerOtherIdentifyNumber;
+
+    @JsonProperty("tCUSTOMEROTHEREFFECTIVEDATE")
+    private String tcustomerOtherEffectiveDate;
+
+    @JsonProperty("tBUSINESSSOURCE")
+    private String tbusinessSource;
+
+    @JsonProperty("unitproperties")
+    private String unitProperties;
+
+    @JsonProperty("holderandcomrelation")
+    private String holderAndComrelation;
+
+    @JsonProperty("telemarketFlag")
+    private String teleMarketFlag;
+
+    @JsonProperty("channelCode")
+    private String channelCode;
+
+    @JsonProperty("telemarketrenewalpolicyno")
+    private String teleMarketRenewalPolicyNo;
+
+    @JsonProperty("dxRenewalFlag")
+    private String dxRenewalFlag;
+
+    @JsonProperty("accountManager")
+    private String accountManager;
+
+    @JsonProperty("bizno")
+    private String bizNo;
+
+    @JsonProperty("bbeneficiarylist")
+    private String bbeneficiaryList;
+
+    @JsonProperty("bshareholderlist")
+    private String bshareHolderList;
+
+    @JsonProperty("tbeneficiarylist")
+    private String tbeneficiaryList;
+
+    @JsonProperty("tshareholderlist")
+    private String tshareHolderList;
+
+    @JsonProperty("cshareholderlist")
+    private String cshareHolderList;
+
+    @JsonProperty("email")
+    private String email;
+
+    @JsonProperty("bemail")
+    private String bemail;
+
+    @JsonProperty("bprovince")
+    private String bprovince;
+
+    @JsonProperty("bcity")
+    private String bcity;
+
+    @JsonProperty("bdistrict")
+    private String bdistrict;
+
+    @JsonProperty("temail")
+    private String temail;
+
+    @JsonProperty("tprovince")
+    private String tprovince;
+
+    @JsonProperty("tcity")
+    private String tcity;
+
+    @JsonProperty("tdistrict")
+    private String tdistrict;
+
+    @JsonProperty("transactornamet")
+    private String transActornamet;
+
+    @JsonProperty("tranidentifynumber")
+    private String tranIdentifyNumber;
+
+    @JsonProperty("trancervaliddate")
+    private String trancervaliddate;
+
+    @JsonProperty("attribute1")
+    private String attribute1;
+
+    @JsonProperty("xbjgcomcode")
+    private String xbjgComCode;
+
+    @JsonProperty("xbComCodeToAdJustFlag")
+    private String xbComCodeToAdJustFlag;
+
+    @JsonProperty("xblastflag")
+    private String xbLastFlag;
+
+    @JsonProperty("onemoreflag")
+    private String oneMoreFlag;
+
+    @JsonProperty("onemorecheckflag")
+    private String oneMoreCheckFlag;
+
+    @JsonProperty("onemorecarerrormsg")
+    private String oneMoreCarErrorMsg;
+
+    @JsonProperty("onemorequoteflag")
+    private String oneMoreQuoteFlag;
+
+    @JsonProperty("whitestatus")
+    private String whiteStatus;
+
+    @JsonProperty("passportwhitestatus")
+    private String passPortWhiteStatus;
+
+    @JsonProperty("isplatCarKindCode")
+    private String isPlatCarKindCode;
+
+    @JsonProperty("platCarKindCodeList")
+    private List<String> platCarKindCodeList;
+
+    @JsonProperty("H1showPlatCarKindCode")
+    private String H1showPlatCarKindCode;
+
+    @JsonProperty("carid")
+    private String carId;
+
+    @JsonProperty("ownertype")
+    private String ownerType;
+
+    @JsonProperty("certitype")
+    private String certiType;
+
+    @JsonProperty("certicode")
+    private String certiCode;
+
+    @JsonProperty("ownername")
+    private String ownername;
+
+    @JsonProperty("gender")
+    private String gender;
+
+    @JsonProperty("tmppaperscrestartdate")
+    private String tmpPaperscreStartDate;
+
+    @JsonProperty("paperscrestartdate")
+    private String paperscreStartDate;
+
+    @JsonProperty("tmppapersvaliddate")
+    private String tmpPapersValidDate;
+
+    @JsonProperty("papersvaliddate")
+    private String papersValidDate;
+
+    @JsonProperty("position")
+    private String position;
+
+    @JsonProperty("position_name")
+    private String positionName;
+
+    @JsonProperty("ownrAge")
+    private String ownrAge;
+
+    @JsonProperty("onemorecarflag")
+    private String oneMoreCarFlag;
+
+    @JsonProperty("familymemberno")
+    private String familyMemberNo;
+
+    @JsonProperty("canChageFlag")
+    private String canChageFlag;
+
+    @JsonProperty("firstpersonnumber")
+    private String firstPersonNumber;
+
+    @JsonProperty("subcarlicenseno")
+    private String subcarLicenseNo;
+
+    @JsonProperty("subcarbizno")
+    private String subcarBizNo;
+
+    @JsonProperty("subcarrelation")
+    private String subcarRelation;
+
+    @JsonProperty("enterprisecertificateno")
+    private String enterPriseCertificateNo;
+
+    @JsonProperty("enterprisename")
+    private String enterPriseName;
+
+    @JsonProperty("nationalitycode")
+    private String nationalityCode;
+
+    @JsonProperty("transactorname")
+    private String transActorName;
+
+    @JsonProperty("comequitystructure")
+    private String comEquityStructure;
+
+    @JsonProperty("carAddress")
+    private String carAddress;
+
+    @JsonProperty("carMobile")
+    private String carMobile;
+
+    @JsonProperty("iscarwoner")
+    private String isCarwoner;
+
+    @JsonProperty("insuredid")
+    private String insuredId;
+
+    @JsonProperty("ownertype2")
+    private String ownerType2;
+
+    @JsonProperty("d_certi_type")
+    private String dCertiType;
+
+    @JsonProperty("d_certi_code")
+    private String dCertiCode;
+
+    @JsonProperty("insuredname")
+    private String insuredName;
+
+    @JsonProperty("insuredgender")
+    private String insuredGender;
+
+    @JsonProperty("tmpinsuredpaperscrestartdate")
+    private String tmpInsuredPaperscreStartDate;
+
+    @JsonProperty("insuredpaperscrestartdate")
+    private String insuredPaperscreStartDate;
+
+    @JsonProperty("insuredpapersvaliddate")
+    private String insuredPapersValidDate;
+
+    @JsonProperty("insuredpapersdate")
+    private String insuredPapersDate;
+
+    @JsonProperty("insuredposition")
+    private String insuredPosition;
+
+    @JsonProperty("insuredposition_name")
+    private String insuredPositionName;
+
+    @JsonProperty("carinsuredrelation")
+    private String carInsuredRelation;
+
+    @JsonProperty("insuredAge")
+    private String insuredAge;
+
+    @JsonProperty("insuredMobile")
+    private String insuredMobile;
+
+    @JsonProperty("insuredenterprisecertificateno")
+    private String insuredEnterPriseCertificateNo;
+
+    @JsonProperty("insuredenterprisename")
+    private String insuredEnterPriseName;
+
+    @JsonProperty("insurednationalitycode")
+    private String insuredNationalityCode;
+
+    @JsonProperty("insuredtransactorname")
+    private String insuredTransactorName;
+
+    @JsonProperty("comequitystructure1")
+    private String comequityStructure1;
+
+    @JsonProperty("carcominsuredrelation")
+    private String carComInsuredRelation;
+
+    @JsonProperty("tiscarwoner")
+    private String tiscarwoner;
+
+    @JsonProperty("tid")
+    private String tid;
+
+    @JsonProperty("ins_type")
+    private String insType;
+
+    @JsonProperty("t_certi_type")
+    private String tCertiType;
+
+    @JsonProperty("t_certi_code")
+    private String tCertiCode;
+
+    @JsonProperty("tname")
+    private String tname;
+
+    @JsonProperty("tgender")
+    private String tgender;
+
+    @JsonProperty("tmptpaperscrestartdate")
+    private String tmptPaperscreStartDate;
+
+    @JsonProperty("tpaperscrestartdate")
+    private String tpaperscreStartDate;
+
+    @JsonProperty("tpapersvaliddate")
+    private String tpapersValidDate;
+
+    @JsonProperty("tpapersdate")
+    private String tpapersDate;
+
+    @JsonProperty("tposition")
+    private String tposition;
+
+    @JsonProperty("tposition_name")
+    private String tpositionName;
+
+    @JsonProperty("tAge")
+    private String tAge;
+
+    @JsonProperty("tMobile")
+    private String tMobile;
+
+    @JsonProperty("tenterprisecertificateno")
+    private String tenterPriseCertificateNo;
+
+    @JsonProperty("tenterprisename")
+    private String tenterPriseName;
+
+    @JsonProperty("tnationalitycode")
+    private String tnationalityCode;
+
+    @JsonProperty("ttransactorname")
+    private String ttransactorName;
+
+    @JsonProperty("comequitystructure2")
+    private String comequityStructure2;
+
+    @JsonProperty("isXB")
+    private String isXB;
+
+    @JsonProperty("quotationNo")
+    private String quotationNo;
+
+    @JsonProperty("isNext")
+    private String isNext;
+
+    @JsonProperty("fullcomcode")
+    private String fullComCode;
+
+    @JsonProperty("isYD")
+    private String isYD;
+
+    @JsonProperty("comcodeByUserVo")
+    private String comcodeByUserVo;
+
+    @JsonProperty("newLicenseno")
+    private String newLicenseno;
+
+
+}

+ 26 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Request/HtCrawlerUploadUrlRequest.java

@@ -0,0 +1,26 @@
+package com.jzg.quote.huatai.crawler.entity.Request;
+
+import com.jzg.quote.huatai.crawler.constant.HtRequestConstant;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @description: 华泰财险 爬虫配置影像上传
+ * @author: shenwd
+ * @date: 2025/4/22 18:04
+ **/
+@Data
+public class HtCrawlerUploadUrlRequest implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 6421518360608185005L;
+
+    private String token;
+    private String bussModule = HtRequestConstant.BUSS_MODULE;
+    private String bussNo;
+    private String fileName;
+    private String saveFileName;
+    private String bucket = HtRequestConstant.LOCAL;
+    private String storageType = HtRequestConstant.LOCAL;
+}

+ 203 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Response/HtCrawlerCarQueryResponse.java

@@ -0,0 +1,203 @@
+package com.jzg.quote.huatai.crawler.entity.Response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quotation.commons.filter.CarModelsFilter;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description: 华泰财险 查询车型 返回参数
+ * @author: shenwd
+ * @date: 2025/4/15 10:03
+ **/
+@Data
+public class HtCrawlerCarQueryResponse implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -5451109570218394790L;
+    private String accessToken;
+    private String data;
+    private String sourceCode;
+
+    @Data
+    public static class DataDTO implements Serializable {
+        @Serial
+        private static final long serialVersionUID = 1537664915491382358L;
+
+        /**
+         * 返回状态编码
+         */
+        private String error;
+
+        /**
+         * 返回信息
+         */
+        private String msg;
+
+        /**
+         *
+         */
+        private String riskcode;
+
+        /**
+         *
+         */
+        private String transcodeStr;
+
+        /**
+         *
+         */
+        private String pmquerynoStr;
+
+        /**
+         *
+         */
+        private String totalpageStr;
+
+        private List<DataListDTO> datalist;
+
+        private List<DataList2DTO> datalist2;
+
+        @Data
+        public static class DataListDTO implements Serializable, CarModelsFilter {
+            @Serial
+            private static final long serialVersionUID = -3163344009672020282L;
+            private String absflag;
+            private String actualvalue;
+            private String airbagnum;
+            private String alarmflag;
+            private String basicratecode;
+            private String birthdate;
+            private String bodyCode;
+            private String bodyType;
+            private String brandcn;
+            private String caralias;
+            private String carbrandcode;
+            private String carkind;
+            private String carname;
+            private String carseriescode;
+            private String contpricedown;
+            private String contpriceup;
+            private String contrastflag;
+            private String datafrom;
+            private String displacement;
+            private String efficiency;
+            private String elecbatterytype;
+            private String engineDesc;
+            private String factory;
+            private String factorycode;
+            private String fronttrack;
+            private String fueltype;
+            private String fueltypename;
+            private String importflag;
+            private String inscarclass;
+            private String inscarclassname;
+            private String isbuyornot;
+            private String isnewenergy;
+            private String ispriced;
+            private String jyanalogyprice;
+            private String jyanalogypricetax;
+            private String jypurchaseprice;
+            private String jypurchasepricetax;
+            private String limitcabpersons;
+            private String limitload;
+            private String limitloadperson;
+            private String manufacturecompany;
+
+            @JsonProperty("marketyear")
+            private String carYear;
+            private String modelcode;
+            private String modelcodexh;
+            private String modeldesc;
+            private String modelflag;
+            private String modelname;
+            private String modelsegmentation;
+            private String monthdeprate;
+            private String newPower;
+            private String noticetype;
+            private String oldmark;
+            private String outlineheight;
+            private String outlinelength;
+            private String outlinewidth;
+            private String productstatus;
+
+            @JsonProperty("purchaseprice")
+            private String purchasePrice;
+            private String purerange;
+            private String qualitymax;
+            private String qualitymin;
+            private String reartrack;
+            private String refcode1;
+            private String refcode2;
+            private String remark;
+            private String riskflag;
+            private String risktype;
+            private String series;
+            private String shorthandcode;
+            private String tirespecifications;
+            private String topSpeed;
+            private String transmissiontype;
+            private String vehicleNewClassCode;
+            private String vehicleNewClassName;
+            private String vehicleWeight;
+            private String vehiclesort;
+            private String vehiclewheelbase;
+            private String wholeweight;
+
+            /**
+             * 获取车辆年款
+             *
+             * @return 年款
+             */
+            @Override
+            public String getCarYear() {
+                return this.carYear;
+            }
+
+            /**
+             * 获取新车购置价
+             *
+             * @return 新车购置价
+             */
+            @Override
+            public String getPurchasePrice() {
+                return this.purchasePrice;
+            }
+        }
+
+        @Data
+        public static class DataList2DTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = 8554190339319768189L;
+            private String brandcn;
+            private String branden;
+            private String certificatedate;
+            private String color;
+            private String engineno;
+            private String haulage;
+            private String ineffectualdate;
+            private String lastcheckdate;
+            private String lfdate;
+            private String liceenseplatetype;
+            private String licenseplateno;
+            private String limitload;
+            private String limitloadperson;
+            private String madefactory;
+            private String monthdeprate;
+            private String motorusagetypecode;
+            private String owner;
+            private String registmodelcode;
+            private String rejectdate;
+            private String status;
+            private String transferdate;
+            private String usetype;
+            private String vehiclemodel;
+            private String vehicleregisterdate;
+            private String vehiclestyle;
+            private String vin;
+            private String wholeweight;
+        }
+    }
+}

+ 20 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Response/HtCrawlerGerUploadUrlResponse.java

@@ -0,0 +1,20 @@
+package com.jzg.quote.huatai.crawler.entity.Response;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @description: 华泰财险 获取影像上传路径 返回参数
+ * @author: shenwd
+ * @date: 2025/4/22 17:43
+ **/
+@Data
+public class HtCrawlerGerUploadUrlResponse implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -4478712365508511687L;
+
+    private String flag;
+    private String url;
+}

+ 9 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Response/HtCrawlerLoginResponse.java

@@ -0,0 +1,9 @@
+package com.jzg.quote.huatai.crawler.entity.Response;
+
+/**
+ * @description:
+ * @author: shenwd
+ * @date: 2025/4/16 17:47
+ **/
+public class HtCrawlerLoginResponse {
+}

+ 892 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/Response/HtCrawlerQuoteResponse.java

@@ -0,0 +1,892 @@
+package com.jzg.quote.huatai.crawler.entity.Response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.huatai.crawler.entity.Request.HtCrawlerQuoteRequest;
+import lombok.Data;
+import org.bouncycastle.cms.PasswordRecipientId;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description: 华泰财险 报价 返回参数
+ * @author: shenwd
+ * @date: 2025/4/15 15:54
+ **/
+@Data
+public class HtCrawlerQuoteResponse implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 7942584277769829838L;
+    private String accessToken;
+    private String data;
+    private String sourceCode;
+
+    @Data
+    public static class DataDTO implements Serializable {
+        @Serial
+        private static final long serialVersionUID = 151305042182143639L;
+        private ApplicationDTO applicationdto;
+
+        private BasePartDTOListDTO basepartdtolist;
+
+        private BiAgentDataListDTO biagentdatalist;
+
+        private String birenewalyears;
+        private String blacklist;
+        private BusiClaimDTOList busiclaimdtolist;
+        private CarModelList carmodellist;
+        private Object carmodelpricelist;
+        private Object chargingpostlist;
+        private CiAgentDataList ciagentdatalist;
+        private Object cicarmodelpricelist;
+        private Object ciksqueryerrorlist;
+        private String cirenewalyears;
+        private ClaimDTOList claimdtolist;
+        private Object commissionagentdto;
+        private Object commissiondto;
+        /**
+         * 商业险险种信息
+         */
+        private CoverageDTOList coveragedtolist;
+        private Object deviceitemlist;
+        private Object driverdtolist;
+        private Object duplicatedlist;
+        private GlmResultList glmresultlist;
+        private Object ksqueryerrorlist;
+        private LastPolicyDTO lastpolicydto;
+        private LastYearPolicyDTO lastyearpolicy;
+        private LastYearPolicyDTO lastyearpolicyCi;
+
+        @JsonProperty("ownermessagedto")
+        private OwnerMessageDTO ownerMessageDTO;
+
+        private Object peccdtolist;
+
+        @JsonProperty("pmvehicledto")
+        private PmVehicleDTO pmVehicleDTO;
+
+        private ProfitDTOListDTO profitdtolist;
+
+        private String quotationRelaNo;
+
+        private RecommendKindInfo recommendkindinfo;
+
+        private ReinsureItemDTO reinsureitemdto;
+        private String relatedFlag;
+        private RenewalOutputDTOListDTO renewaloutputdtolist;
+        private String renewalrecommendlist;
+        private RiskItemDTO riskitemdto;
+        private String riskwarningdtolist;
+        private String vehiclepricedtolist;
+        /**
+         * 车船税信息
+         */
+        private VehicleTaxationDTO vehicletaxationdto;
+        private String preRecommendPremiumCi;
+        private String preRecommendTax;
+        private String TRANS_MESSAGE;
+        private String TRANS_CODE;
+        private String taxType;
+        private String isInsureTraffic;
+        private String isInsureBusi;
+        private String taxRemakeMessage;
+        private String comBinActionBoolFlag;
+
+        @Data
+        public static class ApplicationDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = 5773870974715517485L;
+            private String abbreviationname;
+            private String addDamage_bi;
+            private String addDamage_ci;
+            private String addDriver_bi;
+            private String addDriver_ci;
+            private String additionalcostrate;
+            private String allowdiscountflag;
+            private String beforeRiskfee_bi;
+            private String beforeRiskfee_ci;
+            private String beforefreepricingfactor;
+            private String biaddExpfee;
+            private String bicategory;
+            private String bidisfee;
+            private String biexpfee;
+            private String billdate;
+            private String biperffee;
+            private String biriskRankFlag;
+            private String biriskfee;
+            private String carbusinessriskstatus;
+            private String carcustomerriskstatus;
+            private String cargroupcode;
+            private String cargroupname;
+            private String ciaddExpfee;
+            private String cicategory;
+            private String cidisfee;
+            private String ciexpfee;
+            private String ciperffee;
+            private String cirenewalpolicyno;
+            private String ciriskRankFlag;
+            private String ciriskfee;
+            private String correctDateTips;
+            private String counterfee;
+            private String counterfee_ci;
+            private String currency;
+            private String custombusinesstype_bi;
+            private String custombusinesstype_ci;
+            private String defaultcalculateno;
+            private String discount;
+            private String disfeeregmaxbi;
+            private String disfeeregmaxci;
+            private String enddate;
+            private String expenserate;
+            private String expenserate_ci;
+            private String glmjson;
+            private String incentivedisrate_bi;
+            private String incentivedisrate_ci;
+            private String incetiveexpenserate;
+            private String iscargroup;
+            private String iscombinationproduct;
+            private String iswindowperiod;
+            private String lastpolicyno;
+            private String managerate;
+            private String managerate_ci;
+            private String new_autofactortotal_bi;
+            private String performancerate;
+            private String premiumexcludevat;
+            private String premiumexcludevatci;
+            private String premiunallowdiscountflag;
+            private String prepolicynobi;
+            private String prepolicynoci;
+            private String querydemandno;
+            private String renewalpolicyno;
+            private String salesys;
+            private String startdate;
+            private String totalbasicpremium;
+            private String totalstandardpremium;
+            private String tsorigin;
+            private String unsuccessfulquote;
+            private String vat;
+            private String vatci;
+            private String windowPeriodBIMSG;
+        }
+
+        @Data
+        public static class BasePartDTOListDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = 5416880281897777516L;
+            private List<BasePartDTO> basepartdto;
+
+            @Data
+            public static class BasePartDTO implements Serializable {
+                @Serial
+                private static final long serialVersionUID = -4372600634925594692L;
+                private String autocheckcode;
+                private String carmodelpriceflag;
+                private String checkcode;
+                private String claimrecordenddate;
+                private String claimrecordstartdate;
+                private String engineno;
+                private String frameno;
+                private String isnewcarflag;
+                private String peccancyrecordenddate;
+                private String peccancyrecordstartdate;
+                private String promptMessage;
+                private String querrysequenceno;
+                private String querypastdate;
+                private String question;
+                private String renewalflag;
+                private String riskfalg;
+                private String seatcount;
+                private String toncount;
+            }
+        }
+
+        @Data
+        public static class BiAgentDataListDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = -1432805746958080374L;
+            private List<BiAgentDataDTO> biagentdata;
+
+            @Data
+            public static class BiAgentDataDTO implements Serializable {
+                @Serial
+                private static final long serialVersionUID = 4754145122796717695L;
+
+                private String biagentcode;
+                private String bidisrate;
+                private String biexpenserate;
+                private String biexpenserateone;
+                private String biexpenserateonef;
+                private String biexpenseratetwo;
+                private String biexpenseratetwof;
+                private String bimainagentflag;
+                private String bimanagerate;
+                private String biperformancerate;
+            }
+        }
+
+        @Data
+        public static class BusiClaimDTOList implements Serializable {
+            @Serial
+            private static final long serialVersionUID = 92276511397303659L;
+
+            private List<BusiClaimDTO> busiclaimdto;
+
+            @Data
+            public static class BusiClaimDTO implements Serializable {
+                @Serial
+                private static final long serialVersionUID = 5587389650576576411L;
+            }
+        }
+
+        @Data
+        public static class CarModelList implements Serializable {
+            @Serial
+            private static final long serialVersionUID = -6891403456838917365L;
+            private List<CarModelDTO> carmodel;
+
+            @Data
+            public static class CarModelDTO implements Serializable {
+                @Serial
+                private static final long serialVersionUID = 689510104922839675L;
+            }
+        }
+
+        @Data
+        public static class CiAgentDataList implements Serializable {
+            @Serial
+            private static final long serialVersionUID = 8870960145549667471L;
+
+            private List<CiAgentDataDTO> ciagentdata;
+
+            @Data
+            public static class CiAgentDataDTO implements Serializable {
+                @Serial
+                private static final long serialVersionUID = -4923360910712324508L;
+
+                private String ciagentcode;
+                private String cidisrate;
+                private String ciexpenserate;
+                private String ciexpenserateone;
+                private String ciexpenserateonef;
+                private String ciexpenseratetwo;
+                private String ciexpenseratetwof;
+                private String cimainagentflag;
+                private String cimanagerate;
+                private String ciperformancerate;
+            }
+        }
+
+        @Data
+        public static class ClaimDTOList implements Serializable {
+            @Serial
+            private static final long serialVersionUID = 2789504553235605544L;
+
+            private List<ClaimDTO> claimdto;
+
+            @Data
+            public static class ClaimDTO implements Serializable {
+                @Serial
+                private static final long serialVersionUID = -333753789730313168L;
+
+                private String accidenttime;
+                private String areacode;
+                private String claimamount;
+                private ClaimCoverDTOList claimcoverdtolist;
+                private String claimno;
+                private String claimtype;
+                private String companyid;
+                private String effectivedate;
+                private String endcasetime;
+                private String expiredate;
+                private String regisreationno;
+
+                @Data
+                public static class ClaimCoverDTOList implements Serializable {
+                    @Serial
+                    private static final long serialVersionUID = 2421112238953443287L;
+
+                    private List<ClaimCoverDTO> claimcoverdto;
+
+                    @Data
+                    public static class ClaimCoverDTO implements Serializable {
+                        @Serial
+                        private static final long serialVersionUID = -2135859658226159465L;
+
+                        private String claimamount;
+                        private String coveragetype;
+                        private String policyno;
+                        private String serialno;
+                    }
+                }
+            }
+        }
+
+        @Data
+        public static class CoverageDTOList implements Serializable {
+            @Serial
+            private static final long serialVersionUID = 8789391867730380096L;
+
+            private List<CoverageDTO> coveragedto;
+
+            @Data
+            public static class CoverageDTO implements Serializable {
+                @Serial
+                private static final long serialVersionUID = -2573582333838228647L;
+
+                private String additionrate;
+                private String adjustrate;
+                private String basedpremium;
+                private String basicpremium;
+                private String basicriskpremiums;
+                private String benchmarkpremiums;
+                private String calculation;
+                private String comcoveragecode;
+                private String coveragecode;
+                private String coveragename;
+                private String coveragetype;
+                private String currency;
+                private String deductiblerate;
+                private String discount;
+                private String enddate;
+                private String isnondeductible;
+                private String kindpremiun;
+                private String lastbilldate;
+                private String lastenddate;
+                private String laststartdate;
+                /**
+                 * 保额
+                 */
+                private String limitamount;
+                private String otherRate;
+                private String premexcludevat;
+                private String profitscale;
+                private String quantity;
+                private String rate;
+                private String rateperiod;
+                private String reinsureflag;
+                private String serialno;
+                private String serviceCode;
+                private String serviceName;
+                private String serviceTimes;
+                private String shortrate;
+                /**
+                 * 实际需要收取的保费
+                 */
+                private String standardpremium;
+                private String startdate;
+                private String vat;
+            }
+        }
+
+        @Data
+        public static class GlmResultList implements Serializable {
+            @Serial
+            private static final long serialVersionUID = -2660451236781772305L;
+
+            private List<ResultDTO> result;
+
+            @Data
+            public static class ResultDTO implements Serializable {
+                @Serial
+                private static final long serialVersionUID = 8526551168643289212L;
+
+                private Object APInfoList;
+                private String addExpfee;
+                private String adjustmentScheme;
+                private String apPremium;
+                private String apRate;
+                private String category;
+                private String dataType;
+                private String dataValidMSG;
+                private String disfee;
+                private String endorseAppNo;
+                private String expfee;
+                private String factorInfos;
+                private String factorMax;
+                private String factorMin;
+                private String factorTotalRate;
+                private String feePrm1;
+                private String feePrm2;
+                private String feePrm3;
+                private String feeRate1;
+                private String feeRate10;
+                private String feeRate11;
+                private String feeRate12;
+                private String feeRate13;
+                private String feeRate14;
+                private String feeRate15;
+                private String feeRate2;
+                private String feeRate3;
+                private String feeRate4;
+                private String feeRate5;
+                private String feeRate6;
+                private String feeRate7;
+                private String feeRate8;
+                private String feeRate9;
+                private Object fittingInfoList;
+                private String fittingPrm;
+                private String fittingRate;
+                private String itemKindRecommend;
+                private String perffee;
+                private String policyAppNo;
+                private String policyNo;
+                private String popupWindowMSG;
+                private String promptMSG;
+                private String quoteAppNo;
+                private String resultCode;
+                private String reviewMSG;
+                private String riskItemKindInfoList;
+                private String riskfee;
+                private String underwriteMSG;
+            }
+        }
+
+        @Data
+        public static class LastPolicyDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = 6262069731679062232L;
+
+            private String busilastyearenddate;
+            private String busilastyearstartdate;
+            private String islocalpolicy;
+            private String lastpolicybilldate;
+            private String lastpolicyquerydate;
+            private String lastpolicytotalpremium;
+            private String lastproducercode;
+            private String lastyearenddate;
+            private String lastyearstartdate;
+            private String repeatinsuranceflag;
+        }
+
+        @Data
+        public static class LastYearPolicyDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = -9143671182243025069L;
+
+            private QuestionInfoDTO questionInfo;
+
+            private ReinsureItemLastDTO reinsureitemlast;
+
+            @Data
+            public static class QuestionInfoDTO implements Serializable {
+                @Serial
+                private static final long serialVersionUID = 8818092256646866258L;
+
+                private String answer;
+                private String autocheckcode;
+                private String checkcode;
+                private String demandno;
+            }
+
+            @Data
+            public static class ReinsureItemLastDTO implements Serializable {
+                @Serial
+                private static final long serialVersionUID = 8837264412599969613L;
+
+                private List<ReinsureItemDTO> reinsureitem;
+
+                @Data
+                public static class ReinsureItemDTO implements Serializable {
+                    @Serial
+                    private static final long serialVersionUID = -5327087226853035850L;
+
+                    /**
+                     * 上年保单截止日期
+                     */
+                    private String billdate;
+                    /**
+                     * 当前保单起始日期
+                     */
+                    private String effectivedate;
+                    private String engineno;
+                    private String expiredate;
+                    private String frameno;
+                    /**
+                     * 保险公司名称
+                     */
+                    private String insurecode;
+                    private KindsListDTO kindslist;
+                    private String licensecolorcode;
+                    private String licenseno;
+                    private String licensetype;
+                    /**
+                     * 当前保单号
+                     */
+                    private String policyno;
+
+                    @Data
+                    public static class KindsListDTO implements Serializable {
+                        @Serial
+                        private static final long serialVersionUID = 712965750457575192L;
+
+                        private List<KindInfoDTO> kindinfo;
+
+                        @Data
+                        public static class KindInfoDTO implements Serializable {
+                            @Serial
+                            private static final long serialVersionUID = -2263205085824524273L;
+
+                            /**
+                             * 华泰返回的数据,kindcode存储的是名称
+                             */
+                            @JsonProperty("kindcode")
+                            private String kindName;
+
+                            /**
+                             * 华泰返回的数据,kindname存储的是编码
+                             */
+                            @JsonProperty("kindname")
+                            private String kindCode;
+                        }
+                    }
+                }
+            }
+        }
+
+        @Data
+        public static class OwnerMessageDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = 6369269978843838400L;
+
+            private String bjcertificatedate;
+            private String isLicenseplateno;
+            private String isOwnernameSameToStage;
+            private String isSameToOwner;
+            private String isVehicleregisterdateSameToStage;
+            private String ownermessagetype;
+            private String ownername;
+            private String registerdate;
+        }
+
+        @Data
+        public static class PmVehicleDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = -949593797967767013L;
+
+            private String bjcertificatedate;
+            private String brandcn;
+            private String branden;
+            private String color;
+            private String displacement;
+            private String engineno;
+            private String fueltype;
+            private String haulage;
+            private String ineffectualdate;
+            private String iscommissiontax;
+            private String lastcheckdate;
+            private String lfdate;
+            private String liceenseplatetype;
+            private String licenseplateno;
+            private String limitload;
+            private String limitloadperson;
+            private String madefactory;
+            private String motorusagetypecode;
+            private String owner;
+            private String pmqueryno;
+            private String rejectdate;
+            private String status;
+            private String transferdate;
+            private String usetype;
+            private String usetypesource;
+            private String vehicleid;
+            private String vehiclemodel;
+            private String vehicleregisterdate;
+            private String vehiclestyle;
+            private String vin;
+            private String wholeweight;
+        }
+
+        @Data
+        public static class ProfitDTOListDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = 1968807370152552332L;
+
+            @JsonProperty("profitdto")
+            private List<ProfitDTO> profitDTO;
+
+            @Data
+            public static class ProfitDTO implements Serializable {
+                @Serial
+                private static final long serialVersionUID = -2471931039094309924L;
+                private String comcoveragecode;
+                private String condition;
+                private String conditioncode;
+                private String floatingcalculationenddate;
+                private String floatingcalculationstartdate;
+                private String floatingreasoncode;
+                private String itemkindno;
+                private String lowerprofitrate;
+                private String nofloatingreasoncode;
+                private String profitcode;
+                private String profitname;
+                private String profitrate;
+                private String profittype;
+                private String serialno;
+                private String upperprofitrate;
+                private String valueid;
+            }
+        }
+
+        @Data
+        public static class RecommendKindInfo implements Serializable {
+            @Serial
+            private static final long serialVersionUID = -312529146127051567L;
+            private String category;
+            private String recommendmsg;
+            private String sumpremium;
+            private RecommendKindListDTO recommendkindlist;
+
+            @Data
+            public static class RecommendKindListDTO implements Serializable {
+                @Serial
+                private static final long serialVersionUID = 4291053041057465163L;
+                private List<RecommendKindDTO> recommendkind;
+
+                @Data
+                public static class RecommendKindDTO implements Serializable {
+                    @Serial
+                    private static final long serialVersionUID = -4179431523634130153L;
+
+                }
+            }
+        }
+
+        @Data
+        public static class ReinsureItemDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = -348122622858300977L;
+            private String bidays;
+            private String billdate;
+            private String companyid;
+            private Object coveragettemdtolist;
+            private String enddate;
+            private String engineno;
+            private String licenseplatecolorcode;
+            private String licenseplateno;
+            private String licenseplatetype;
+            private String policyno;
+            private String reinsuremsg;
+            private String vin;
+        }
+
+        @Data
+        public static class RenewalOutputDTOListDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = -2348583493455417512L;
+
+            private List<RenewalOutputDTO> renewaloutputdto;
+
+            @Data
+            public static class RenewalOutputDTO implements Serializable {
+                @Serial
+                private static final long serialVersionUID = 2466749789004721748L;
+            }
+        }
+
+        @Data
+        public static class RiskItemDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = -425148440715680173L;
+            private String adjustvaluereason;
+            private String busiadjustend;
+            private String busiadjuststart;
+            private String changeflag;
+            private String chgvehiclemessage;
+            private String claimadjustLevel;
+            private String claimadjustreason;
+            private String claimadjustvalue;
+            private String claimadjustvaluebi;
+            private String claimadjustvalueci;
+            private String claimamountreason;
+            private String claimamountvalue;
+            private String claimtimes;
+            private String demandCarName;
+            private String demandVehicleCode;
+            private String driverAge;
+            private String driveradjustreason;
+            private String driveradjustvalue;
+            private String effectreason;
+            private String enrolldate;
+            private String experienceadjustlower;
+            private String experienceadjustupper;
+            private String fleetadjustvalue;
+            private String highRiskOrGreyCustomer;
+            private String highriskflag;
+            private String insureindoorreason;
+            private String insureindoorvalue;
+            private String insureyears;
+            private String iscustomerloy;
+            private String iscustomerloyal;
+            private String kindadjustreason;
+            private String kindadjustvalue;
+            private String lastmodel;
+            private String lastmodelcode;
+            private String lastpolicyquerydateplatform;
+            private String lastpolicytotalpremiumplatform;
+            private String lastreplacementvalue;
+            private String lastyearaccidenttimes;
+            private String lastyearaccidenttimesplatform;
+            private String lastyearcompanyid;
+            private String licensekindcode;
+            private String lossadjustvalue;
+            private String loyaltyadjustreason;
+            private String loyaltyadjustvalue;
+            private String loyaltyadjustvalueplatform;
+            private String managementadjustlower;
+            private String managementadjustupper;
+            private String mileageadjustreason;
+            private String mileageadjustvalue;
+            private String noclaimadjustreason;
+            private String noclaimamountreason;
+            private String nokindadjustreason;
+            private String noloyaltyadjustreason;
+            private String nonclaimadjust;
+            private String nonclaimadjustreason;
+            private String nopeccancyadjustreason;
+            private String nopmvehiclemessage;
+            private String peccancyadjustreason;
+            private String peccancyadjustreasonci;
+            private String peccancyadjustvalue;
+            private String peccancyadjustvaluebi;
+            private String peccancyadjustvalueci;
+            private String peccancyadjustvalueplatform;
+            private String postPoneRemark;
+            private String preferentialday;
+            private String preferentialformula;
+            private String preferentialpremium;
+            private String producertype;
+            private String ratefloatflag;
+            private String rescuecard;
+            private String restricflag1;
+            private String restricflag2;
+            private String saleprice;
+            private String theftadjustvalue;
+            private String transferflag;
+            private String traveladjustreason;
+            private String traveladjustvalue;
+            private String unmatchpmvehiclemessageinfo;
+            private String vehiclecode;
+            private String vehiclemodeladjustlower;
+            private String vehiclemodeladjustupper;
+            private String vehicletype;
+            private String violationList;
+            private String warnmessage;
+        }
+
+        @Data
+        public static class VehicleTaxationDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = 2738751889925503923L;
+            private AnnualTaxTypeDTO annualtaxtypedto;
+            private String calctaxflag;
+            private String calculatemode;
+            private String comcodetaxidentifyno;
+            private String deECLARESTATUSIA;
+            private String declaredate;
+            private String declarelimit;
+            private String declaretaxway;
+            private String declareyear;
+            private String delinquenttaxduedtolist;
+            private String hispolicyenddate;
+            private String insurednature;
+            private String measurementunit;
+            private String notCollectedPromptMessage;
+            private String obligorregisterno;
+            private String originalpoano;
+            private String payid;
+            private String paylastyear;
+            private String paylimit;
+            private String paytaxlimit;
+            private String paytaxway;
+            private String poacode;
+            private String recordtaxnature;
+            private String recordtaxrelief;
+            private String registerno;
+            private String responsepacketno;
+            private String respontaxcomcode;
+            private String returncode;
+            private String returninfo;
+            private String taxamount;
+            private TaxAmountDTO taxamountdto;
+            private String taxbasis;
+            private String taxconditioncode;
+            private String taxdescription;
+            private String taxitemcode;
+            private String taxitemname;
+            private String taxmonth;
+            private String taxnature;
+            private String taxno;
+            private String taxnotype;
+            private String taxpay;
+            private String taxpayeraddress;
+            private String taxpayercerticode;
+            private String taxpayercertitype;
+            private String taxpayerindentificationcode;
+            private String taxpayername;
+            private String taxrate;
+            private String taxregistrynumber;
+            private String taxtermtypecode;
+
+            @Data
+            public static class AnnualTaxTypeDTO implements Serializable {
+                @Serial
+                private static final long serialVersionUID = -5413646277590264939L;
+
+                private String annualtaxamount;
+                private String declaredate;
+                private DerateTypeDTO deratetypedto;
+                private String exceeddate;
+                private String exceeddayscount;
+                private String overdue;
+                private PaidTypeDTO paidtypedto;
+                private String taxdue;
+                private String taxenddate;
+                private String taxlocationcode;
+                private String taxratetypedto;
+                private String taxstartdate;
+                private String taxunittypecode;
+                private String totalamount;
+                private String unitrate;
+
+                @Data
+                public static class DerateTypeDTO implements Serializable {
+                    @Serial
+                    private static final long serialVersionUID = 4520995747562144394L;
+
+                    private String deduction;
+                    private String deductiondocumentnumber;
+                    private String deductionduecode;
+                    private String deductiondueproportion;
+                    private String deductionduetype;
+                    private String freeratetext;
+                    private String taxdepartment;
+                    private String taxdepartmentcode;
+                }
+
+                @Data
+                public static class PaidTypeDTO implements Serializable {
+                    @Serial
+                    private static final long serialVersionUID = 8567182794733269476L;
+                    private String taxdepartment;
+                    private String taxdepartmentcode;
+                    private String taxdepartmentnumber;
+                    private String taxdocumentdate;
+                    private String taxpaidareacode;
+                }
+            }
+
+            @Data
+            public static class TaxAmountDTO implements Serializable {
+                @Serial
+                private static final long serialVersionUID = -3583675610947083415L;
+
+                private String annualtaxdue;
+                private String sumoverdue;
+                private String sumtax;
+                private String sumtaxdefault;
+                private String taxamountflag;
+            }
+        }
+    }
+}

+ 14 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/dto/LoginDTO.java

@@ -0,0 +1,14 @@
+package com.jzg.quote.huatai.crawler.entity.dto;
+
+import com.jzg.quotation.commons.entity.vo.base.LoginBase;
+import lombok.Data;
+
+/**
+ * @description: 登录
+ * @author: shenwd
+ * @date: 2025/4/16 18:00
+ **/
+@Data
+public class LoginDTO extends LoginBase {
+    private String comcode;
+}

+ 26 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/entity/po/HtCrawlerOrder.java

@@ -0,0 +1,26 @@
+package com.jzg.quote.huatai.crawler.entity.po;
+
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * @description: 华泰财险 mongodb中操作数据
+ * @author: shenwd
+ * @date: 2025/4/22 15:29
+ **/
+@Data
+@Document("huatai.crawler.order")
+public class HtCrawlerOrder {
+    @Id
+    private String id;
+    /**
+     * 交互唯一订单 OrderBase类的ordersNo
+     */
+    private String ordersNo;
+
+    /**
+     * 华泰 报价单号
+     */
+    private String quotationRelaNo;
+}

+ 26 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/properties/HuaTaiCrawlerProperties.java

@@ -0,0 +1,26 @@
+package com.jzg.quote.huatai.crawler.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @description: 华泰财险 爬虫配置信息
+ * @author: shenwd
+ * @date: 2025/4/15 08:52
+ **/
+@Data
+@Component
+@ConfigurationProperties(prefix = "huatai.crawler")
+public class HuaTaiCrawlerProperties {
+    /**
+     * 华泰出单系统url http://172.16.100.37:9999
+     */
+    private String baseUrl;
+
+    /**
+     * 华泰影像系统url
+     * https://img-web.pc.ehuatai.com
+     */
+    private String imgUrl;
+}

+ 18 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/repository/HtCrawlerOrderRepository.java

@@ -0,0 +1,18 @@
+package com.jzg.quote.huatai.crawler.repository;
+
+import com.jzg.quote.huatai.crawler.entity.po.HtCrawlerOrder;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.mongodb.repository.Query;
+
+/**
+ * @description: 泰财险 mongodb中操作数据
+ * @author: shenwd
+ * @date: 2025/4/22 15:38
+ **/
+public interface HtCrawlerOrderRepository extends MongoRepository<HtCrawlerOrder, String> {
+    @Query("{'ordersNo' : ?0}")
+    HtCrawlerOrder findByOrdersNo(String ordersNo);
+
+    @Query(value = "{'ordersNo': ?0 }", delete = true)
+    void deleteByOrdersNo(String ordersNo);
+}

+ 18 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/service/HtCrawlerOrderService.java

@@ -0,0 +1,18 @@
+package com.jzg.quote.huatai.crawler.service;
+
+import com.jzg.quote.huatai.crawler.entity.po.HtCrawlerOrder;
+
+/**
+ * @description: 华泰财险 mongodb中操作数据
+ * @author: shenwd
+ * @date: 2025/4/22 15:39
+ **/
+public interface HtCrawlerOrderService {
+    HtCrawlerOrder findByOrdersNo(String ordersNo);
+
+    void deleteByOrdersNo(String ordersNo);
+
+    HtCrawlerOrder save(HtCrawlerOrder htCrawlerOrder);
+
+    HtCrawlerOrder update(HtCrawlerOrder htCrawlerOrder);
+}

+ 14 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/service/HuaTaiCrawlerRequest.java

@@ -0,0 +1,14 @@
+package com.jzg.quote.huatai.crawler.service;
+
+import com.jzg.quotation.commons.entity.vo.base.LoginBase;
+import com.jzg.quotation.commons.service.QuotationCrawlerBaseService;
+import com.jzg.quote.huatai.crawler.entity.dto.LoginDTO;
+
+/**
+ * @description: 华泰爬虫报价请求接口
+ * @author: shenwd
+ * @date: 2025/4/15 08:55
+ **/
+public interface HuaTaiCrawlerRequest extends QuotationCrawlerBaseService {
+    void login(LoginDTO loginDTO);
+}

+ 55 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/service/Impl/HtCrawlerOrderServiceImpl.java

@@ -0,0 +1,55 @@
+package com.jzg.quote.huatai.crawler.service.Impl;
+
+import com.jzg.quote.huatai.crawler.entity.po.HtCrawlerOrder;
+import com.jzg.quote.huatai.crawler.repository.HtCrawlerOrderRepository;
+import com.jzg.quote.huatai.crawler.service.HtCrawlerOrderService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @description: 华泰财险 mongodb中操作数据
+ * @author: shenwd
+ * @date: 2025/4/22 15:40
+ **/
+@Service
+@RequiredArgsConstructor
+@Transactional
+public class HtCrawlerOrderServiceImpl implements HtCrawlerOrderService {
+    private final HtCrawlerOrderRepository htCrawlerOrderRepository;
+    /**
+     * @param ordersNo
+     * @return
+     */
+    @Override
+    public HtCrawlerOrder findByOrdersNo(String ordersNo) {
+        return htCrawlerOrderRepository.findByOrdersNo(ordersNo);
+    }
+
+    /**
+     * @param ordersNo
+     */
+    @Override
+    public void deleteByOrdersNo(String ordersNo) {
+
+    }
+
+    /**
+     * @param hbCrawlerOrder
+     * @return
+     */
+    @Override
+    public HtCrawlerOrder save(HtCrawlerOrder hbCrawlerOrder) {
+        return htCrawlerOrderRepository.save(hbCrawlerOrder);
+    }
+
+    /**
+     * @param hbCrawlerOrder
+     * @return
+     */
+    @Override
+    public HtCrawlerOrder update(HtCrawlerOrder hbCrawlerOrder) {
+        htCrawlerOrderRepository.deleteByOrdersNo(hbCrawlerOrder.getOrdersNo());
+        return htCrawlerOrderRepository.save(hbCrawlerOrder);
+    }
+}

+ 169 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/service/Impl/HuaTaiCrawlerRequestImpl.java

@@ -0,0 +1,169 @@
+package com.jzg.quote.huatai.crawler.service.Impl;
+
+import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.commons.exception.SystemException;
+import com.jzg.quotation.commons.constant.InsuranceCode;
+import com.jzg.quotation.commons.entity.vo.aggregated.*;
+import com.jzg.quotation.commons.entity.vo.base.LoginBase;
+import com.jzg.quotation.commons.entity.vo.base.OrderBase;
+import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
+import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
+import com.jzg.quote.huatai.crawler.build.HuaTaiCrawlerQuoteResultsVoBuild;
+import com.jzg.quote.huatai.crawler.component.HtCrawlerRequestComponent;
+import com.jzg.quote.huatai.crawler.constant.HtRequestConstant;
+import com.jzg.quote.huatai.crawler.entity.HtCrawlerConfigureParameters;
+import com.jzg.quote.huatai.crawler.entity.Request.HtCrawlerCarQueryRequest;
+import com.jzg.quote.huatai.crawler.entity.Request.HtCrawlerGerUploadUrlRequest;
+import com.jzg.quote.huatai.crawler.entity.Request.HtCrawlerQuoteRequest;
+import com.jzg.quote.huatai.crawler.entity.Request.HtCrawlerSaveOneStepRequest;
+import com.jzg.quote.huatai.crawler.entity.Response.HtCrawlerCarQueryResponse;
+import com.jzg.quote.huatai.crawler.entity.Response.HtCrawlerGerUploadUrlResponse;
+import com.jzg.quote.huatai.crawler.entity.Response.HtCrawlerQuoteResponse;
+import com.jzg.quote.huatai.crawler.entity.dto.LoginDTO;
+import com.jzg.quote.huatai.crawler.entity.po.HtCrawlerOrder;
+import com.jzg.quote.huatai.crawler.service.HtCrawlerOrderService;
+import com.jzg.quote.huatai.crawler.service.HuaTaiCrawlerRequest;
+import com.jzg.quote.huatai.crawler.util.HuaTaiCryptUtil;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.HttpHeaders;
+import org.springframework.stereotype.Service;
+
+import java.net.http.HttpRequest;
+import java.util.List;
+
+/**
+ * @description: 华泰财险 爬虫报价
+ * @author: shenwd
+ * @date: 2025/4/15 08:56
+ **/
+@Service(value = InsuranceCode.INSURANCE_HTIC)
+@RequiredArgsConstructor
+public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
+    private final HtCrawlerRequestComponent htCrawlerRequestComponent;
+
+    private final HtCrawlerOrderService htCrawlerOrderService;
+
+    /**
+     * 登录
+     *
+     * @param loginBase 登录信息
+     */
+    @Override
+    public void login(LoginBase loginBase) {
+
+    }
+
+    /**
+     * @param loginDTO
+     */
+    @Override
+    public void login(LoginDTO loginDTO) {
+        htCrawlerRequestComponent.authenticate(loginDTO.getUsername(), loginDTO.getPassword(), loginDTO.getComcode(), HtRequestConstant.REQUEST_NUMBER);
+    }
+
+    /**
+     * 报价
+     *
+     * @param quoteVo 报价实体
+     * @return 报价信息
+     */
+    @Override
+    public QuoteResultsVo quote(QuoteVo quoteVo) throws JsonProcessingException {
+        CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
+        AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
+        //获取配置信息
+        HtCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(HtCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
+        HttpHeaders headers = htCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword(), parameters.getComCode());
+        HtCrawlerCarQueryRequest carQueryRequest = new HtCrawlerCarQueryRequest(carInfoVo);
+        HtCrawlerCarQueryResponse.DataDTO dataDTO = null;
+        try {
+            //获取车辆信息
+            dataDTO = htCrawlerRequestComponent.carQuery(carQueryRequest, headers);
+        } catch (Exception e) {
+            throw new SystemException(e.getMessage());
+        }
+
+        //过滤车型
+        HtCrawlerCarQueryResponse.DataDTO.DataListDTO carDTO = CarModelsFilterUtils.to(dataDTO.getDatalist(), carInfoVo);
+
+        //报价第一步,保存车辆信息和车主等信息
+        HtCrawlerSaveOneStepRequest htCrawlerSaveOneStepRequest = new HtCrawlerSaveOneStepRequest(quoteVo, carDTO, parameters);
+        htCrawlerRequestComponent.saveOneStept(htCrawlerSaveOneStepRequest, headers);
+
+        //报价第二步
+        HtCrawlerQuoteRequest htCrawlerQuoteRequest = new HtCrawlerQuoteRequest(quoteVo);
+        HtCrawlerQuoteResponse.DataDTO quoteResponseData = null;
+        try {
+            quoteResponseData = htCrawlerRequestComponent.quote(htCrawlerQuoteRequest, headers);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+        HtCrawlerOrder htCrawlerOrder = new HtCrawlerOrder();
+        htCrawlerOrder.setOrdersNo(quoteVo.getOrder().getOrdersNo());
+        htCrawlerOrder.setQuotationRelaNo(quoteResponseData.getQuotationRelaNo());
+        htCrawlerOrderService.save(htCrawlerOrder);
+        return HuaTaiCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo, quoteResponseData);
+    }
+
+    /**
+     * 提交核保 子订单
+     *
+     * @param underwritingVo
+     */
+    @Override
+    public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) throws JsonProcessingException {
+        return null;
+    }
+
+    /**
+     * 获取支付链接
+     *
+     * @param paymentLinkVo
+     */
+    @Override
+    public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) throws JsonProcessingException {
+        return null;
+    }
+
+    /**
+     * 上传影像
+     *
+     * @param insuranceUploadImageVo
+     */
+    @Override
+    public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
+        OrderBase orderBase = insuranceUploadImageVo.getOrder();
+        HtCrawlerOrder htCrawlerOrder = htCrawlerOrderService.findByOrdersNo(orderBase.getOrdersNo());
+        String quotationRelaNo = htCrawlerOrder.getQuotationRelaNo();
+        HtCrawlerGerUploadUrlRequest htCrawlerGerUploadUrlRequest = new HtCrawlerGerUploadUrlRequest(quotationRelaNo);
+        HtCrawlerGerUploadUrlResponse uploadUrlResponse = htCrawlerRequestComponent.getUploadUrl(htCrawlerGerUploadUrlRequest);
+        if (HtRequestConstant.GET_UPLOAD_URL_SUCCESS.equals(uploadUrlResponse.getFlag())) {
+            String token = uploadUrlResponse.getUrl().substring(uploadUrlResponse.getUrl().lastIndexOf("=") + 1);
+
+        }
+    }
+
+    /**
+     * 下载保单
+     *
+     * @param downloadPolicyVo
+     */
+    @Override
+    public DownloadPolicyResultVo downloadPolicy(DownloadPolicyVo downloadPolicyVo) {
+        return null;
+    }
+
+    /**
+     * 查询订单状态
+     *
+     * @param orderStatusVo
+     */
+    @Override
+    public void queryOrderState(OrderStatusVo orderStatusVo) throws JsonProcessingException {
+
+    }
+}

Разница между файлами не показана из-за своего большого размера
+ 68 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quote/huatai/crawler/util/HuaTaiCryptUtil.java


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