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

save: 太平财险 报价相关

wks 1 год назад
Родитель
Сommit
d5447c4924
21 измененных файлов с 474 добавлено и 105 удалено
  1. 0 1
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/enums/RequestUrl.java
  2. 30 2
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java
  3. 1 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/filter/CarModelsFilterUtils.java
  4. 18 0
      tenant/insurance/quotation-commons/src/main/java/repository/BaseRepository.java
  5. 2 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/DaJiaCrawlerCacheComponent.java
  6. 5 3
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/DaJiaCrawlerRequestComponent.java
  7. 2 6
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/repository/DaJiaCrawlerOrderRepository.java
  8. 4 4
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerRequestImpl.java
  9. 64 0
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/build/TaiPingCrawlerQuoteResultsVoBuild.java
  10. 46 0
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/component/TaiPingCrawlerCacheComponent.java
  11. 122 6
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/component/TaiPingCrawlerRequestComponent.java
  12. 4 3
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/constant/enums/RequestUrl.java
  13. 31 0
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/po/TaiPingCrawlerOrder.java
  14. 4 0
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/properties/TaiPingCrawlerProperties.java
  15. 9 0
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/repository/TaiPingCrawlerOrderRepository.java
  16. 1 1
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/TaiPingCrawlerOrderService.java
  17. 1 1
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/TaiPingCrawlerQuoteProcessService.java
  18. 0 70
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/impl/TaiPingApiOrderServiceImpl.java
  19. 126 0
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/impl/TaiPingCrawlerOrderServiceImpl.java
  20. 2 2
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/impl/TaiPingCrawlerQuoteProcessServiceImpl.java
  21. 2 4
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/repository/ZiJinApiOrderRepository.java

+ 0 - 1
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/enums/RequestUrl.java

@@ -18,7 +18,6 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
     Z00010("SHUB-ChacInsureSMSReissueShub", "获取支付链接"),
     Z00011("SHUB-ChacInsureSearchDownPolicyAddressShub", "保单下载"),
     Z00012("SHUB-ChacCancelOrderShub", "撤销订单");
-    ;
 
     private final String uri;
 

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

@@ -23,14 +23,12 @@ import java.util.function.Consumer;
  * @author: wenks
  * @date: 2025/2/15 11:59
  **/
-@Getter
 @Slf4j
 @Component
 @RequiredArgsConstructor
 public class RequestComponent {
 
     /**
-     * -- GETTER --
      * 获取webClient
      *
      * @return webClient
@@ -87,6 +85,36 @@ public class RequestComponent {
         return bodyIsEmpty(responseEntity, description);
     }
 
+    /**
+     * 异步POST 请求 不需要处理结果
+     *
+     * @param url     请求链接
+     * @param body    请求体
+     * @param headers 请求头
+     */
+    public void asyncPost(String url, Object body, HttpHeaders headers) {
+        webClient.post()
+                .uri(url)
+                .headers(setHeaders(headers))
+                .body(BodyInserters.fromValue(body))
+                .retrieve();
+    }
+
+    /**
+     * 异步GET 请求 不需要处理结果
+     *
+     * @param url     请求链接
+     * @param param   请求参数
+     * @param headers 请求头
+     */
+    public void asyncGet(String url, Map<String, Object> param, HttpHeaders headers) {
+        webClient.get()
+                .uri(url, param)
+                .headers(setHeaders(headers))
+                .retrieve();
+    }
+
+
     /**
      * @param url               请求地址
      * @param param             get 拼接对象

+ 1 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/filter/CarModelsFilterUtils.java

@@ -13,7 +13,7 @@ import java.util.stream.Collectors;
  * @author: wenks
  * @date: 2023/8/22 9:54
  **/
-public class CarModelsFilterUtils {
+public final class CarModelsFilterUtils {
 
     public static <T extends CarModelsFilter> T to(List<T> carModelsFilterList, CarInfoVo carInfo) {
         if (carModelsFilterList.isEmpty()) {

+ 18 - 0
tenant/insurance/quotation-commons/src/main/java/repository/BaseRepository.java

@@ -0,0 +1,18 @@
+package repository;
+
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.repository.NoRepositoryBean;
+
+@NoRepositoryBean
+public interface BaseRepository<T> extends MongoRepository<T, String> {
+
+    /**
+     * 通过Id 获取订单信息
+     *
+     * @param id 订单号
+     * @return 订单信息
+     */
+    T getById(String id);
+
+}

+ 2 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/DaJiaCacheComponent.java → tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/DaJiaCrawlerCacheComponent.java

@@ -20,7 +20,7 @@ import java.time.Duration;
 @Slf4j
 @Component
 @RequiredArgsConstructor
-public class DaJiaCacheComponent {
+public class DaJiaCrawlerCacheComponent {
 
     private final RedissonClient redissonClient;
 
@@ -50,4 +50,5 @@ public class DaJiaCacheComponent {
         return JSON.parseObject(bucket.get(), DaJiaCrawlerSaveResponse.class);
     }
 
+
 }

+ 5 - 3
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/DaJiaCrawlerRequestComponent.java

@@ -24,6 +24,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
 import org.springframework.web.reactive.function.BodyInserters;
+import org.springframework.web.reactive.function.client.WebClient;
 import reactor.core.publisher.Mono;
 
 import java.lang.reflect.InvocationTargetException;
@@ -35,6 +36,8 @@ import java.util.*;
 @RequiredArgsConstructor
 public class DaJiaCrawlerRequestComponent {
 
+    private final WebClient webClient;
+
     private final RequestComponent requestComponent;
 
     private final RedissonClient redissonClient;
@@ -307,10 +310,9 @@ public class DaJiaCrawlerRequestComponent {
         HttpHeaders headers = new HttpHeaders();
         headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
         byte[] fileData = Base64.getDecoder().decode(base64Str);
-        return requestComponent.getWebClient()
-                .put()
+        return webClient.put()
                 .uri(url)
-                .headers(requestComponent.setHeaders(headers))
+                .headers(RequestComponent.setHeaders(headers))
                 .body(BodyInserters.fromValue(fileData))
                 .exchangeToMono(response -> {
                     String obsRequestId = response.headers().header("x-obs-request-id").stream().findFirst().orElse("");

+ 2 - 6
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/repository/DaJiaCrawlerOrderRepository.java

@@ -1,13 +1,9 @@
 package com.jzg.quotation.dajia.crawler.repository;
 
 import com.jzg.quotation.dajia.crawler.entity.po.DaJiaCrawlerOrder;
-import org.springframework.data.mongodb.repository.MongoRepository;
+import repository.BaseRepository;
 
-import java.util.List;
-
-public interface DaJiaCrawlerOrderRepository extends MongoRepository<DaJiaCrawlerOrder, String> {
-
-    DaJiaCrawlerOrder getFirstById(String id);
+public interface DaJiaCrawlerOrderRepository extends BaseRepository<DaJiaCrawlerOrder> {
 
 
 }

+ 4 - 4
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerRequestImpl.java

@@ -14,7 +14,7 @@ import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.dajia.crawler.build.DaJiaCrawlerQuoteResultsVoBuild;
 import com.jzg.quotation.dajia.crawler.component.BuildingAttributionInformation;
-import com.jzg.quotation.dajia.crawler.component.DaJiaCacheComponent;
+import com.jzg.quotation.dajia.crawler.component.DaJiaCrawlerCacheComponent;
 import com.jzg.quotation.dajia.crawler.component.DaJiaCrawlerRequestComponent;
 import com.jzg.quotation.dajia.crawler.entity.DaJiaCrawlerConfigureParameters;
 import com.jzg.quotation.dajia.crawler.entity.po.DaJiaCrawlerOrder;
@@ -40,7 +40,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
 
     private final BuildingAttributionInformation buildingAttributionInformation;
 
-    private final DaJiaCacheComponent daJiaCacheComponent;
+    private final DaJiaCrawlerCacheComponent daJiaCrawlerCacheComponent;
 
     private final DaJiaCrawlerOrderService daJiaCrawlerOrderService;
 
@@ -76,7 +76,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         DaJiaCrawlerSaveRequest daJiaCrawlerSaveRequest = new DaJiaCrawlerSaveRequest(crawlerPriceResponse, userCode);
         DaJiaCrawlerSaveResponse daJiaCrawlerSaveResponse = daJiaCrawlerRequestComponent.save(daJiaCrawlerSaveRequest, headers);
         // 3.3 缓存数据
-        daJiaCacheComponent.cacheDaJiaCrawlerSaveResponse(daJiaCrawlerSaveResponse, quoteVo.getOrder().getOrdersNo());
+        daJiaCrawlerCacheComponent.cacheDaJiaCrawlerSaveResponse(daJiaCrawlerSaveResponse, quoteVo.getOrder().getOrdersNo());
         // 4.0 保存数据
         daJiaCrawlerOrderService.saveOrderInfo(quoteVo, daJiaCrawlerSaveResponse);
         // 返回报价信息
@@ -91,7 +91,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
                 .getAttributionInformationVo();
         HttpHeaders headers = daJiaCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
 
-        DaJiaCrawlerSaveResponse daJiaCrawlerSaveResponse = daJiaCacheComponent.getDaJiaCrawlerSaveResponse(underwritingVo.getOrder()
+        DaJiaCrawlerSaveResponse daJiaCrawlerSaveResponse = daJiaCrawlerCacheComponent.getDaJiaCrawlerSaveResponse(underwritingVo.getOrder()
                 .getOrdersNo());
         DaJiaCrawlerGenerateResponse response = daJiaCrawlerRequestComponent.generate(daJiaCrawlerSaveResponse, headers);
 

+ 64 - 0
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/build/TaiPingCrawlerQuoteResultsVoBuild.java

@@ -0,0 +1,64 @@
+package com.jzg.quotation.taiping.crawler.build;
+
+import com.google.common.collect.Lists;
+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.quote.ExpenseFactor;
+import com.jzg.quotation.commons.entity.vo.quote.KindInfoVo;
+import com.jzg.quotation.commons.entity.vo.quote.RiskInfoVo;
+import com.jzg.quotation.taiping.crawler.entity.response.TaiPingCrawlerPremiumCalculateData;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class TaiPingCrawlerQuoteResultsVoBuild {
+
+    public static QuoteResultsVo buildQuoteResultsVo(TaiPingCrawlerPremiumCalculateData taiPingCrawlerPremiumCalculateData, QuoteVo quoteVo) {
+        QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
+        quoteResultsVo.setOrdersNo(quoteVo.getOrder().getOrdersNo());
+
+        quoteResultsVo.setCiRiskInfoVo(new RiskInfoVo());
+        quoteResultsVo.setBiRiskInfoVo(new RiskInfoVo());
+
+        List<TaiPingCrawlerPremiumCalculateData.PfItemKindDto0802ListDTO> pfItemKindDto0802List = taiPingCrawlerPremiumCalculateData.getPfItemKindDto0802List();
+        List<KindInfoVo> kindInfoVos = buildKindInfoVo(pfItemKindDto0802List, quoteVo.getKindInfoVo());
+        quoteResultsVo.setKindInfoVo(kindInfoVos);
+
+        List<ExpenseFactor> expenseFactors = buildExpenseFactors();
+        quoteResultsVo.setExpenseFactors(expenseFactors);
+
+        List<TaiPingCrawlerPremiumCalculateData.PfRiskDtoListDTO> pfRiskDtoList = taiPingCrawlerPremiumCalculateData.getPfRiskDtoList();
+        TaiPingCrawlerPremiumCalculateData.PfCarShipTaxDTO pfCarShipTax = taiPingCrawlerPremiumCalculateData.getPfCarShipTax();
+        buildOtherInfo(pfRiskDtoList, pfCarShipTax, quoteResultsVo);
+        return quoteResultsVo;
+    }
+
+    private static List<ExpenseFactor> buildExpenseFactors() {
+        return Lists.newArrayList();
+    }
+
+    private static void buildOtherInfo(List<TaiPingCrawlerPremiumCalculateData.PfRiskDtoListDTO> pfRiskDtoList,
+                                       TaiPingCrawlerPremiumCalculateData.PfCarShipTaxDTO pfCarShipTax,
+                                       QuoteResultsVo quoteResultsVo
+    ) {
+        quoteResultsVo.setCiPremium("");
+        quoteResultsVo.setBiPremium("");
+        quoteResultsVo.setNiPremium("");
+
+        quoteResultsVo.setCiPolicyNumber("");
+        quoteResultsVo.setBiPolicyNumber("");
+
+        quoteResultsVo.setVvTax("");
+    }
+
+    private static List<KindInfoVo> buildKindInfoVo(List<TaiPingCrawlerPremiumCalculateData.PfItemKindDto0802ListDTO> pfItemKindDto0802List, List<KindInfoVo> kindInfoVo) {
+        Map<String, TaiPingCrawlerPremiumCalculateData.PfItemKindDto0802ListDTO> collect = pfItemKindDto0802List.stream()
+                .collect(Collectors.toMap(TaiPingCrawlerPremiumCalculateData.PfItemKindDto0802ListDTO::getKindCode, x -> x));
+        kindInfoVo.forEach(kind -> {
+            kind.setPremium(String.valueOf(collect.get(kind.getKindCode()).getPriceTaxTotal()));
+        });
+        return kindInfoVo;
+    }
+
+}

+ 46 - 0
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/component/TaiPingCrawlerCacheComponent.java

@@ -0,0 +1,46 @@
+package com.jzg.quotation.taiping.crawler.component;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.jzg.quotation.taiping.crawler.entity.response.TaiPingCrawlerPremiumCalculateData;
+import lombok.RequiredArgsConstructor;
+import org.redisson.api.RBucket;
+import org.redisson.api.RedissonClient;
+import org.springframework.stereotype.Component;
+
+import java.time.Duration;
+
+@Component
+@RequiredArgsConstructor
+public class TaiPingCrawlerCacheComponent {
+
+    private final RedissonClient redissonClient;
+
+    private final static String PREMIUM_CALCULATE = "taiping:premiumCalculate:";
+
+    public static final Duration PREMIUM_CALCULATE_TIME = Duration.ofHours(3L);
+
+    /**
+     * 保存订单财险
+     *
+     * @param taiPingCrawlerPremiumCalculateData 太平财险 保存订单数据
+     * @param ordersNo                           订单号
+     */
+    public void cacheTaiPingCrawlerPremiumCalculateData(TaiPingCrawlerPremiumCalculateData taiPingCrawlerPremiumCalculateData, String ordersNo) {
+        String response = JSONObject.toJSONString(taiPingCrawlerPremiumCalculateData);
+        RBucket<String> bucket = redissonClient.getBucket(PREMIUM_CALCULATE + ordersNo);
+        bucket.set(response, PREMIUM_CALCULATE_TIME);
+    }
+
+    /**
+     * 获取太平财险订单保存数据
+     *
+     * @param ordersNo 订单号
+     */
+    public TaiPingCrawlerPremiumCalculateData getTaiPingCrawlerPremiumCalculateData(String ordersNo) {
+        RBucket<String> bucket = redissonClient.getBucket(PREMIUM_CALCULATE + ordersNo);
+        return JSON.parseObject(bucket.get(), TaiPingCrawlerPremiumCalculateData.class);
+    }
+
+
+}

+ 122 - 6
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/component/TaiPingCrawlerRequestComponent.java

@@ -12,12 +12,23 @@ import com.jzg.quotation.taiping.crawler.properties.TaiPingCrawlerProperties;
 import com.jzg.quotation.taiping.crawler.utils.AESEncryption;
 import com.jzg.quotation.taiping.crawler.utils.VerifyCodeCreate;
 import lombok.RequiredArgsConstructor;
+import org.reactivestreams.Publisher;
 import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.core.io.buffer.DataBuffer;
+import org.springframework.core.io.buffer.DataBufferUtils;
 import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.web.reactive.function.client.WebClient;
+import reactor.core.publisher.Mono;
 
+import java.nio.channels.WritableByteChannel;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
 import java.util.Map;
 
 @Component
@@ -26,6 +37,8 @@ public class TaiPingCrawlerRequestComponent {
 
     private final RequestComponent requestComponent;
 
+    private final WebClient webClient;
+
     private final TaiPingCrawlerProperties taiPingCrawlerProperties;
 
     public <Response> Response requestPost(RequestUrl requestUrl, Object body, ParameterizedTypeReference<Response> bodyTypeReference, HttpHeaders headers) {
@@ -49,6 +62,18 @@ public class TaiPingCrawlerRequestComponent {
         }, new HttpHeaders());
     }
 
+    /**
+     * 获取请求头
+     *
+     * @return 请求头信息
+     */
+    public HttpHeaders getHeaders() {
+        String cookie = getCookie();
+        HttpHeaders headers = new HttpHeaders();
+        headers.set(HttpHeaders.COOKIE, cookie);
+        return headers;
+    }
+
     /**
      * 获取cookie
      *
@@ -119,8 +144,7 @@ public class TaiPingCrawlerRequestComponent {
         httpHeaders.set(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded");
 
         String url = RequestUrl.LOGIN.getRequestUrl(taiPingCrawlerProperties.getUrl());
-        ResponseEntity<TaiPingCrawlerBaseResponse<TaiPingCrawlerLoginData>> responseEntity = requestComponent.getWebClient()
-                .post()
+        ResponseEntity<TaiPingCrawlerBaseResponse<TaiPingCrawlerLoginData>> responseEntity = webClient.post()
                 .uri(url)
                 .headers(RequestComponent.setHeaders(httpHeaders))
                 .bodyValue(multiValueMap)
@@ -157,7 +181,7 @@ public class TaiPingCrawlerRequestComponent {
      * @param httpHeaders 请求头
      * @return 订单号
      */
-    public String orderCreate(TaiPingCrawlerFindSolutionCodeRequest request, HttpHeaders httpHeaders) {
+    public String orderCreate(TaiPingCrawlerCreateOrderRequest request, HttpHeaders httpHeaders) {
         TaiPingCrawlerBaseResponse<String> response = requestPostStrDecrypt(RequestUrl.CREATE_ORDER, request, new TypeReference<>() {
         }, httpHeaders);
         return response.getData();
@@ -188,9 +212,6 @@ public class TaiPingCrawlerRequestComponent {
         }, httpHeaders);
     }
 
-
-
-
     /**
      * 提交验证
      *
@@ -203,6 +224,31 @@ public class TaiPingCrawlerRequestComponent {
         }, httpHeaders);
     }
 
+    /**
+     * 上传影像
+     *
+     * @param request     上传影像请求信息
+     * @param httpHeaders 请求头
+     * @return 上传影像响应
+     */
+    public TaiPingCrawlerBaseResponse<String> imageIntoOneFile(TaiPingCrawlerImageIntoOneFileRequest request, HttpHeaders httpHeaders) {
+        return requestPostStrDecrypt(RequestUrl.IMAGE_INTO_ONE_FILE, request, new TypeReference<>() {
+        }, httpHeaders);
+    }
+
+    /**
+     * ocr 识别影像
+     *
+     * @param request     ocr识别影像请求信息
+     * @param httpHeaders 请求头
+     * @return ocr 识别影像返回信息
+     */
+    public TaiPingCrawlerBaseResponse<TaiPingCrawlerOCRResultConfirmData> ocrResultConfirm(TaiPingCrawlerOCRResultConfirmRequest request, HttpHeaders httpHeaders) {
+        return requestPostStrDecrypt(RequestUrl.IMAGE_INTO_ONE_FILE, request, new TypeReference<>() {
+        }, httpHeaders);
+    }
+
+
     /**
      * 提交核保
      *
@@ -228,5 +274,75 @@ public class TaiPingCrawlerRequestComponent {
         }, httpHeaders);
     }
 
+    /**
+     * 查询订单
+     *
+     * @param request     查询订单请求
+     * @param httpHeaders 请求头
+     * @return 订单信息
+     */
+    public TaiPingCrawlerQueryListData.RecordsDTO queryList(TaiPingCrawlerQueryListRequest request, HttpHeaders httpHeaders) {
+        TaiPingCrawlerBaseResponse<TaiPingCrawlerQueryListData> response = requestPostStrDecrypt(RequestUrl.QUERY_LIST, request, new TypeReference<>() {
+        }, httpHeaders);
+        return response.getData().getRecords().get(0);
+    }
+
+    public void policyListQuery(String Str, HttpHeaders httpHeaders) {
+        // 报文信息
+        LinkedMultiValueMap<String, Object> multiValueMap = new LinkedMultiValueMap<>();
+        multiValueMap.add("insuredIdNoInput", "");
+        multiValueMap.add("insuredIdNo", "");
+        multiValueMap.add("carInfoType", "");
+        multiValueMap.add("carInfoInput", "");
+        multiValueMap.add("licenseNo", "");
+        multiValueMap.add("frameNo", "");
+        multiValueMap.add("engineNo", "");
+        multiValueMap.add("carInfoType1", "");
+        multiValueMap.add("frameNo1", "");
+        multiValueMap.add("engineNo1", "");
+        multiValueMap.add("rand", "");
+        multiValueMap.add("randMsg", "");
+        multiValueMap.add("visitType", "b2c");
+        // 请求头
+        httpHeaders.set(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded");
+        ResponseEntity<String> responseEntity = webClient.post()
+                .uri(taiPingCrawlerProperties.getUrl() + RequestUrl.POLICY_LIST_QUERY.getUri())
+                .headers(RequestComponent.setHeaders(httpHeaders))
+                .bodyValue(multiValueMap)
+                .retrieve()
+                .toEntity(String.class)
+                .block();
+    }
+
+    public void getCarPolicyFile(){
+
+    }
+
+    /**
+     * 下载非车险保单
+     *
+     * @param orderNo     订单号
+     * @param filePath    文件位置
+     * @param httpHeaders 请求头
+     */
+    public void downloadFC(String orderNo, String filePath, HttpHeaders httpHeaders) {
+        Path outputPath = Paths.get(filePath);
+        try (WritableByteChannel outputChannel = Files.newByteChannel(outputPath, StandardOpenOption.CREATE, StandardOpenOption.WRITE);) {
+            webClient.get()
+                    .uri(taiPingCrawlerProperties.getUrl() + RequestUrl.DOWNLOAD_FC.uri() + orderNo)
+                    .headers(RequestComponent.setHeaders(httpHeaders))
+                    .accept(MediaType.APPLICATION_OCTET_STREAM)
+                    .retrieve()
+                    .bodyToFlux(DataBuffer.class)
+                    .flatMap(dataBuffer -> {
+                        Publisher<DataBuffer> publisher = Mono.just(dataBuffer);
+                        return DataBufferUtils.write(publisher, outputChannel);
+                    })
+
+                    .blockLast();
+        } catch (Exception e) {
+            throw new SystemException("文件下载失败");
+        }
+    }
 
 }

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

@@ -25,14 +25,15 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
     //上传影像
     IMAGE_INTO_ONE_FILE("/image/imgServer/imageIntoOneFile", "上传影像"),
     OCR_RESULT_CONFIRM("/image/imgServer/OCRResultConfirm", "ocr识别"),
-
     // 提交核保
     SUBMIT_VALIDATE("/proposalform/proposalSubmit/submitValidate", "提交验证"),
     SUBMIT_TO_AUDIT("/submitaudit/proposalSubmitAudit/submitToAudit", "提交核保"),
     //支付二维码
     SEND_SMS("/proposalform/elecInsurance/sendSMS", "支付二维码"),
-    //保单查询
-
+    //保单
+    POLICY_LIST_QUERY("/TPEBizWeb/pages/B2C/show/policyListQuery.do", "保单查询"),
+    GET_CAR_POLICY_FILE("TPEBizWeb/pages/B2C/show/getCarPolicyFile.do", "保单下载"),
+    DOWNLOAD_FC("/api/proposalform/elecPolicy/downloadFC/", "非车保单下载"),
     //订单状态查询
     QUERY_LIST("/proposalform/proposal/queryList/", "订单查询"),
     ;

+ 31 - 0
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/po/TaiPingCrawlerOrder.java

@@ -0,0 +1,31 @@
+package com.jzg.quotation.taiping.crawler.entity.po;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * @description: 太平财险 爬虫订单信息
+ * @author: wenks
+ * @date: 2025/3/17 10:50
+ **/
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+@Document("taiping.crawler.order")
+public class TaiPingCrawlerOrder {
+
+    @Id
+    private String id;
+
+    /**
+     * 保险公司订单号
+     */
+    private String orderNo;
+
+
+
+}

+ 4 - 0
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/properties/TaiPingCrawlerProperties.java

@@ -18,5 +18,9 @@ public class TaiPingCrawlerProperties {
      * 获取cookie的url
      */
     private String cookieUrl;
+    /**
+     * 获取保单地址
+     */
+    private String policyUrl;
 
 }

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

@@ -0,0 +1,9 @@
+package com.jzg.quotation.taiping.crawler.repository;
+
+import com.jzg.quotation.taiping.crawler.entity.po.TaiPingCrawlerOrder;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import repository.BaseRepository;
+
+public interface TaiPingCrawlerOrderRepository extends BaseRepository<TaiPingCrawlerOrder> {
+
+}

+ 1 - 1
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/TaiPingApiOrderService.java → tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/TaiPingCrawlerOrderService.java

@@ -2,5 +2,5 @@ package com.jzg.quotation.taiping.crawler.service;
 
 import com.jzg.quotation.commons.service.QuotationCrawlerBaseService;
 
-public interface TaiPingApiOrderService extends QuotationCrawlerBaseService {
+public interface TaiPingCrawlerOrderService extends QuotationCrawlerBaseService {
 }

+ 1 - 1
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/TaiPingApiQuoteProcessService.java → tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/TaiPingCrawlerQuoteProcessService.java

@@ -1,6 +1,6 @@
 package com.jzg.quotation.taiping.crawler.service;
 
-public interface TaiPingApiQuoteProcessService {
+public interface TaiPingCrawlerQuoteProcessService {
 
     /**
      * 登录

+ 0 - 70
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/impl/TaiPingApiOrderServiceImpl.java

@@ -1,70 +0,0 @@
-package com.jzg.quotation.taiping.crawler.service.impl;
-
-import com.jzg.quotation.commons.constant.InsuranceCode;
-import com.jzg.quotation.commons.entity.vo.aggregated.InsuranceUploadImageVo;
-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.aggregated.UnderwritingVo;
-import com.jzg.quotation.commons.entity.vo.base.LoginBase;
-import com.jzg.quotation.commons.entity.vo.base.OrderBase;
-import com.jzg.quotation.taiping.crawler.component.TaiPingCrawlerRequestComponent;
-import com.jzg.quotation.taiping.crawler.constant.enums.RequestUrl;
-import com.jzg.quotation.taiping.crawler.entity.request.TaiPingCrawlerBrandNameQueryRequest;
-import com.jzg.quotation.taiping.crawler.entity.request.TaiPingCrawlerPremiumCalculateRequest;
-import com.jzg.quotation.taiping.crawler.service.TaiPingApiOrderService;
-import com.jzg.quotation.taiping.crawler.service.TaiPingApiQuoteProcessService;
-import lombok.RequiredArgsConstructor;
-import org.springframework.http.HttpHeaders;
-import org.springframework.stereotype.Service;
-
-@Service(value = InsuranceCode.INSURANCE_TPIC)
-@RequiredArgsConstructor
-public class TaiPingApiOrderServiceImpl implements TaiPingApiOrderService {
-
-    private final TaiPingApiQuoteProcessService taiPingApiQuoteProcessService;
-
-    private final TaiPingCrawlerRequestComponent taiPingCrawlerRequestComponent;
-
-    @Override
-    public void login(LoginBase loginBase) {
-        taiPingApiQuoteProcessService.login(loginBase.getUsername(), loginBase.getPassword());
-    }
-
-    @Override
-    public QuoteResultsVo quote(QuoteVo quoteVo) {
-        // 车型查询
-        TaiPingCrawlerBrandNameQueryRequest taiPingCrawlerBrandNameQueryRequest = new TaiPingCrawlerBrandNameQueryRequest();
-        taiPingCrawlerRequestComponent.queryBrand(RequestUrl.BRAND_NAME_QUERY, taiPingCrawlerBrandNameQueryRequest, new HttpHeaders());
-        // 报价
-        TaiPingCrawlerPremiumCalculateRequest taiPingCrawlerPremiumCalculateRequest = new TaiPingCrawlerPremiumCalculateRequest();
-        taiPingCrawlerRequestComponent.premiumCalculate(taiPingCrawlerPremiumCalculateRequest, new HttpHeaders());
-        return null;
-    }
-
-    @Override
-    public void underwriting(UnderwritingVo underwritingVo) {
-
-    }
-
-    @Override
-    public String getPaymentLink(OrderBase orderBase) {
-
-        return "";
-    }
-
-    @Override
-    public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
-
-    }
-
-    @Override
-    public void downloadPolicy(OrderBase orderBase) {
-
-    }
-
-    @Override
-    public void queryOrderState(OrderBase orderBase) {
-
-    }
-
-}

+ 126 - 0
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/impl/TaiPingCrawlerOrderServiceImpl.java

@@ -0,0 +1,126 @@
+package com.jzg.quotation.taiping.crawler.service.impl;
+
+import com.jzg.quotation.commons.constant.InsuranceCode;
+import com.jzg.quotation.commons.entity.vo.aggregated.InsuranceUploadImageVo;
+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.aggregated.UnderwritingVo;
+import com.jzg.quotation.commons.entity.vo.base.LoginBase;
+import com.jzg.quotation.commons.entity.vo.base.OrderBase;
+import com.jzg.quotation.commons.entity.vo.image.InsuranceImageVo;
+import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
+import com.jzg.quotation.taiping.crawler.build.TaiPingCrawlerQuoteResultsVoBuild;
+import com.jzg.quotation.taiping.crawler.component.TaiPingCrawlerCacheComponent;
+import com.jzg.quotation.taiping.crawler.component.TaiPingCrawlerRequestComponent;
+import com.jzg.quotation.taiping.crawler.constant.enums.RequestUrl;
+import com.jzg.quotation.taiping.crawler.entity.po.TaiPingCrawlerOrder;
+import com.jzg.quotation.taiping.crawler.entity.request.*;
+import com.jzg.quotation.taiping.crawler.entity.response.*;
+import com.jzg.quotation.taiping.crawler.repository.TaiPingCrawlerOrderRepository;
+import com.jzg.quotation.taiping.crawler.service.TaiPingCrawlerOrderService;
+import com.jzg.quotation.taiping.crawler.service.TaiPingCrawlerQuoteProcessService;
+import lombok.RequiredArgsConstructor;
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.http.HttpHeaders;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service(value = InsuranceCode.INSURANCE_TPIC)
+@RequiredArgsConstructor
+public class TaiPingCrawlerOrderServiceImpl implements TaiPingCrawlerOrderService {
+
+    private final TaiPingCrawlerQuoteProcessService taiPingCrawlerQuoteProcessService;
+
+    private final TaiPingCrawlerRequestComponent taiPingCrawlerRequestComponent;
+
+    private final TaiPingCrawlerCacheComponent taiPingCrawlerCacheComponent;
+
+    private final TaiPingCrawlerOrderRepository taiPingCrawlerOrderRepository;
+
+    @Override
+    public void login(LoginBase loginBase) {
+        taiPingCrawlerQuoteProcessService.login(loginBase.getUsername(), loginBase.getPassword());
+    }
+
+    @Override
+    public QuoteResultsVo quote(QuoteVo quoteVo) {
+        HttpHeaders httpHeaders = taiPingCrawlerRequestComponent.getHeaders();
+        // 创建订单
+        TaiPingCrawlerCreateOrderRequest taiPingCrawlerCreateOrderRequest = new TaiPingCrawlerCreateOrderRequest();
+        taiPingCrawlerRequestComponent.orderCreate(taiPingCrawlerCreateOrderRequest, httpHeaders);
+        // 车型查询
+        TaiPingCrawlerBrandNameQueryRequest brandNameQueryRequest = new TaiPingCrawlerBrandNameQueryRequest();
+        TaiPingCrawlerBaseResponse<TaiPingCrawlerBrandNameQueryData> brandNameQuery = taiPingCrawlerRequestComponent.queryBrand(RequestUrl.BRAND_NAME_QUERY, brandNameQueryRequest, httpHeaders);
+        List<TaiPingCrawlerBrandNameQueryData.ItemMotorDtoListDTO> itemMotorDtoList = brandNameQuery.getData()
+                .getItemMotorDtoList();
+        TaiPingCrawlerBrandNameQueryData.ItemMotorDtoListDTO itemMotorDtoListDTO = CarModelsFilterUtils.to(itemMotorDtoList, quoteVo.getCarInfoVo());
+        // 计算折旧价
+
+        // 报价
+        TaiPingCrawlerPremiumCalculateRequest taiPingCrawlerPremiumCalculateRequest = new TaiPingCrawlerPremiumCalculateRequest(quoteVo, "", itemMotorDtoListDTO);
+        TaiPingCrawlerBaseResponse<TaiPingCrawlerPremiumCalculateData> premiumCalculateResponse = taiPingCrawlerRequestComponent.premiumCalculate(taiPingCrawlerPremiumCalculateRequest, httpHeaders);
+        // 缓存数据
+        taiPingCrawlerCacheComponent.cacheTaiPingCrawlerPremiumCalculateData(premiumCalculateResponse.getData(), quoteVo.getOrder()
+                .getOrdersNo());
+
+        return TaiPingCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(premiumCalculateResponse.getData(), quoteVo);
+
+    }
+
+    @Override
+    public void underwriting(UnderwritingVo underwritingVo) {
+        HttpHeaders httpHeaders = taiPingCrawlerRequestComponent.getHeaders();
+        TaiPingCrawlerOrder taiPingCrawlerOrder = taiPingCrawlerOrderRepository.getById(underwritingVo.getOrder().getOrdersNo());
+
+        // 验证信息
+        TaiPingCrawlerPremiumCalculateData taiPingCrawlerPremiumCalculateData = taiPingCrawlerCacheComponent.getTaiPingCrawlerPremiumCalculateData(underwritingVo.getOrder()
+                .getOrdersNo());
+        taiPingCrawlerRequestComponent.submitValidate(taiPingCrawlerPremiumCalculateData, httpHeaders);
+        // 核保
+        TaiPingCrawlersSubmitToAuditRequest submitToAuditRequest = new TaiPingCrawlersSubmitToAuditRequest();
+        taiPingCrawlerRequestComponent.submitToAudit(submitToAuditRequest, httpHeaders);
+
+    }
+
+    @Override
+    public String getPaymentLink(OrderBase orderBase) {
+        HttpHeaders httpHeaders = taiPingCrawlerRequestComponent.getHeaders();
+        TaiPingCrawlerOrder taiPingCrawlerOrder = taiPingCrawlerOrderRepository.getById(orderBase.getOrdersNo());
+
+        TaiPingCrawlerSendSMSRequest taiPingCrawlerSendSMSRequest = new TaiPingCrawlerSendSMSRequest();
+        TaiPingCrawlerBaseResponse<TaiPingCrawlerSendSMSData> sendSMS = taiPingCrawlerRequestComponent.sendSMS(taiPingCrawlerSendSMSRequest, httpHeaders);
+        TaiPingCrawlerSendSMSData data = sendSMS.getData();
+        return "";
+    }
+
+    @Override
+    public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
+        HttpHeaders httpHeaders = taiPingCrawlerRequestComponent.getHeaders();
+        TaiPingCrawlerOrder taiPingCrawlerOrder = taiPingCrawlerOrderRepository.getById(insuranceUploadImageVo.getOrder().getOrdersNo());
+
+        List<InsuranceImageVo> imageVoList = insuranceUploadImageVo.getImageVoList();
+        imageVoList.forEach(imageVo -> {
+            TaiPingCrawlerImageIntoOneFileRequest oneFileRequest = new TaiPingCrawlerImageIntoOneFileRequest();
+            taiPingCrawlerRequestComponent.imageIntoOneFile(oneFileRequest, httpHeaders);
+            TaiPingCrawlerOCRResultConfirmRequest confirmRequest = new TaiPingCrawlerOCRResultConfirmRequest();
+            taiPingCrawlerRequestComponent.ocrResultConfirm(confirmRequest, httpHeaders);
+        });
+    }
+
+    @Override
+    public void downloadPolicy(OrderBase orderBase) {
+        HttpHeaders httpHeaders = taiPingCrawlerRequestComponent.getHeaders();
+        TaiPingCrawlerOrder taiPingCrawlerOrder = taiPingCrawlerOrderRepository.getById(orderBase.getOrdersNo());
+
+
+    }
+
+    @Override
+    public void queryOrderState(OrderBase orderBase) {
+        HttpHeaders httpHeaders = taiPingCrawlerRequestComponent.getHeaders();
+        TaiPingCrawlerQueryListData.RecordsDTO recordsDTO = taiPingCrawlerRequestComponent.queryList(new TaiPingCrawlerQueryListRequest(), httpHeaders);
+
+    }
+
+}

+ 2 - 2
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/impl/TaiPingApiQuoteProcessServiceImpl.java → tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/impl/TaiPingCrawlerQuoteProcessServiceImpl.java

@@ -4,13 +4,13 @@ import com.jzg.quotation.taiping.crawler.component.TaiPingCrawlerRequestComponen
 import com.jzg.quotation.taiping.crawler.entity.request.TaiPingCrawlerAuthRequest;
 import com.jzg.quotation.taiping.crawler.entity.response.TaiPingCrawlerAuthData;
 import com.jzg.quotation.taiping.crawler.entity.response.TaiPingCrawlerBaseResponse;
-import com.jzg.quotation.taiping.crawler.service.TaiPingApiQuoteProcessService;
+import com.jzg.quotation.taiping.crawler.service.TaiPingCrawlerQuoteProcessService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
 @Service
 @RequiredArgsConstructor
-public class TaiPingApiQuoteProcessServiceImpl implements TaiPingApiQuoteProcessService {
+public class TaiPingCrawlerQuoteProcessServiceImpl implements TaiPingCrawlerQuoteProcessService {
 
     private final TaiPingCrawlerRequestComponent taiPingCrawlerRequestComponent;
 

+ 2 - 4
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/repository/ZiJinApiOrderRepository.java

@@ -1,7 +1,7 @@
 package com.jzg.quotation.zijin.api.repository;
 
 import com.jzg.quotation.zijin.api.entity.po.ZiJinApiOrder;
-import org.springframework.data.mongodb.repository.MongoRepository;
+import repository.BaseRepository;
 
 
 /**
@@ -9,8 +9,6 @@ import org.springframework.data.mongodb.repository.MongoRepository;
  * @author: wenks
  * @date: 2025/2/26 16:55
  **/
-public interface ZiJinApiOrderRepository extends MongoRepository<ZiJinApiOrder, String> {
-
-    ZiJinApiOrder getById(String id);
+public interface ZiJinApiOrderRepository extends BaseRepository<ZiJinApiOrder> {
 
 }