|
|
@@ -1,19 +1,16 @@
|
|
|
package com.jzg.quotation.zhongmei.crawler.service.Impl;
|
|
|
|
|
|
-import cn.hutool.crypto.digest.MD5;
|
|
|
-import com.alibaba.fastjson.JSON;
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
import com.jzg.commons.entity.quote.vo.AccidentalDrivingVo;
|
|
|
import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
|
|
|
import com.jzg.commons.entity.quote.vo.CarInfoVo;
|
|
|
import com.jzg.commons.entity.quote.vo.QuoteVo;
|
|
|
import com.jzg.commons.entity.quote.vo.aggregated.*;
|
|
|
-import com.jzg.commons.exception.SystemException;
|
|
|
+import com.jzg.commons.entity.quote.vo.base.LoginBase;
|
|
|
+import com.jzg.commons.entity.quote.vo.base.OrderBase;
|
|
|
import com.jzg.commons.util.StringUtils;
|
|
|
import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
|
|
|
import com.jzg.quotation.commons.constant.InsuranceCode;
|
|
|
-import com.jzg.commons.entity.quote.vo.base.LoginBase;
|
|
|
-import com.jzg.commons.entity.quote.vo.base.OrderBase;
|
|
|
import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
|
|
|
import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
|
|
|
import com.jzg.quotation.zhongmei.api.entity.BaseRequestHead;
|
|
|
@@ -33,10 +30,10 @@ import lombok.RequiredArgsConstructor;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
-import java.util.*;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @description: 中煤财险 爬虫报价
|
|
|
@@ -71,54 +68,59 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
|
|
|
*/
|
|
|
@Override
|
|
|
public QuoteResultsVo quote(QuoteVo quoteVo) throws JsonProcessingException {
|
|
|
- // 1.0获取token的请求头
|
|
|
- AttributionInformationVo attributionInformationVo = quoteVo
|
|
|
- .getOrder()
|
|
|
- .getAttributionInformationVo();
|
|
|
- String authorization = zmCrawlerRequestComponent.getAuthorization(attributionInformationVo);
|
|
|
- String userCode = zmCrawlerRequestComponent.getUserCode(attributionInformationVo.getUsername());
|
|
|
- // 1.1 配置信息
|
|
|
- ZmCrawlerConfigureParameters zmCrawlerConfigureParameters = ConfigureParametersConversion.conversionEntity(ZmCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
|
|
|
- BaseRequestHead head = new BaseRequestHead(authorization, "2");
|
|
|
- // 1.2 获取归属信息
|
|
|
- SaleInfoDTO saleInfoDTO = zmCrawlerRequestComponent.getSaleInfoDTO(zmCrawlerConfigureParameters, head);
|
|
|
- // 2.0 车型查询
|
|
|
- CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
|
|
|
- ZmCrawlerModelQueryRequest modelQueryRequest = new ZmCrawlerModelQueryRequest(saleInfoDTO,head,carInfoVo);
|
|
|
- List<ZmCrawlerModelQueryResponse.FullCarDataDTO> fullCarDataDTOS = zmCrawlerRequestComponent.modelQuery(modelQueryRequest);
|
|
|
- // 2.1 获取相同的车型
|
|
|
- ZmCrawlerModelQueryResponse.FullCarDataDTO fullCarDataDTO = CarModelsFilterUtils.to(fullCarDataDTOS, quoteVo.getCarInfoVo());
|
|
|
- // 2.2 计算折旧价格
|
|
|
- ZmCrawlerActualValueRequest actualValueRequest = new ZmCrawlerActualValueRequest(quoteVo.getCarInfoVo(),head);
|
|
|
- ZmCrawlerActualValueResponse actualValueResponse = zmCrawlerRequestComponent.getActualValue(actualValueRequest);
|
|
|
- List<ZmCrawlerRideAccidentResponse.BaseInfoDTO> accident = new ArrayList<>();
|
|
|
- if (quoteVo.getAccidentalDrivings() != null) {
|
|
|
- // 获取非车列表
|
|
|
- ZmCrawlerRideAccidentRequest rideAccidentRequest = new ZmCrawlerRideAccidentRequest(quoteVo,saleInfoDTO,fullCarDataDTO,head);
|
|
|
- ZmCrawlerRideAccidentResponse rideAccidentResponse = zmCrawlerRequestComponent.rideAccident(rideAccidentRequest);
|
|
|
- matchingAccident(quoteVo, rideAccidentResponse,accident);
|
|
|
- }
|
|
|
- // 3.0 保费计算
|
|
|
- ZmCrawlerQuotedPriceRequest quotedPriceRequest = new ZmCrawlerQuotedPriceRequest(zmCrawlerConfigureParameters, quoteVo, saleInfoDTO, fullCarDataDTO, actualValueResponse, userCode, head,accident);
|
|
|
- ZmCrawlerQuotedPriceResponse quotedPriceResponse = zmCrawlerRequestComponent.quotedPrice(quotedPriceRequest);
|
|
|
- // 重复投保处理
|
|
|
- if (quotedPriceResponse.getHead().getReturnCode().equals("-1") && quotedPriceResponse.getHead().getReturnMessage().contains("重复投保")) {
|
|
|
- String startTime = extractDuplicateEndTime(quotedPriceResponse.getHead().getReturnMessage());
|
|
|
- String endTime = calculateEndTime(startTime);
|
|
|
- List<ZmCrawlerQuotedPriceRequest.BusinessDataDTO.ContractDTO> contract =quotedPriceRequest.getBusinessData().getContract();
|
|
|
- contract.forEach(contractDTO -> {
|
|
|
- contractDTO.getContractMain().setValidDate(startTime);
|
|
|
- contractDTO.getContractMain().setExpiryDate(endTime);
|
|
|
- });
|
|
|
- quotedPriceResponse = zmCrawlerRequestComponent.quotedPrice(quotedPriceRequest);
|
|
|
- }
|
|
|
- // 3.1 缓存数据
|
|
|
- if(quotedPriceResponse.getHead().getReturnCode().equals("0")){
|
|
|
- zmCrawlerRequestComponent.cacheZmCrawlerSaveResponse(quotedPriceResponse, quotedPriceResponse.getBussinessMain().getContractMainNo());
|
|
|
- // 4.0 保存数据
|
|
|
- zmCrawlerOrderService.save(quoteVo,quotedPriceResponse);
|
|
|
+ try {
|
|
|
+ // 1.0获取token的请求头
|
|
|
+ AttributionInformationVo attributionInformationVo = quoteVo
|
|
|
+ .getOrder()
|
|
|
+ .getAttributionInformationVo();
|
|
|
+ String authorization = zmCrawlerRequestComponent.getAuthorization(attributionInformationVo);
|
|
|
+ String userCode = zmCrawlerRequestComponent.getUserCode(attributionInformationVo.getUsername());
|
|
|
+ // 1.1 配置信息
|
|
|
+ ZmCrawlerConfigureParameters zmCrawlerConfigureParameters = ConfigureParametersConversion.conversionEntity(ZmCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
|
|
|
+ BaseRequestHead head = new BaseRequestHead(authorization, "2");
|
|
|
+ // 1.2 获取归属信息
|
|
|
+ SaleInfoDTO saleInfoDTO = zmCrawlerRequestComponent.getSaleInfoDTO(zmCrawlerConfigureParameters, head);
|
|
|
+ // 2.0 车型查询
|
|
|
+ CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
|
|
|
+ ZmCrawlerModelQueryRequest modelQueryRequest = new ZmCrawlerModelQueryRequest(saleInfoDTO,head,carInfoVo);
|
|
|
+ List<ZmCrawlerModelQueryResponse.FullCarDataDTO> fullCarDataDTOS = zmCrawlerRequestComponent.modelQuery(modelQueryRequest);
|
|
|
+ // 2.1 获取相同的车型
|
|
|
+ ZmCrawlerModelQueryResponse.FullCarDataDTO fullCarDataDTO = CarModelsFilterUtils.to(fullCarDataDTOS, quoteVo.getCarInfoVo());
|
|
|
+ // 2.2 计算折旧价格
|
|
|
+ ZmCrawlerActualValueRequest actualValueRequest = new ZmCrawlerActualValueRequest(quoteVo.getCarInfoVo(),head);
|
|
|
+ ZmCrawlerActualValueResponse actualValueResponse = zmCrawlerRequestComponent.getActualValue(actualValueRequest);
|
|
|
+ List<ZmCrawlerRideAccidentResponse.BaseInfoDTO> accident = new ArrayList<>();
|
|
|
+ if (quoteVo.getAccidentalDrivings() != null) {
|
|
|
+ // 获取非车列表
|
|
|
+ ZmCrawlerRideAccidentRequest rideAccidentRequest = new ZmCrawlerRideAccidentRequest(quoteVo,saleInfoDTO,fullCarDataDTO,head);
|
|
|
+ ZmCrawlerRideAccidentResponse rideAccidentResponse = zmCrawlerRequestComponent.rideAccident(rideAccidentRequest);
|
|
|
+ matchingAccident(quoteVo, rideAccidentResponse,accident);
|
|
|
+ }
|
|
|
+ // 3.0 保费计算
|
|
|
+ ZmCrawlerQuotedPriceRequest quotedPriceRequest = new ZmCrawlerQuotedPriceRequest(zmCrawlerConfigureParameters, quoteVo, saleInfoDTO, fullCarDataDTO, actualValueResponse, userCode, head,accident);
|
|
|
+ ZmCrawlerQuotedPriceResponse quotedPriceResponse = zmCrawlerRequestComponent.quotedPrice(quotedPriceRequest);
|
|
|
+ // 重复投保处理
|
|
|
+ if (quotedPriceResponse.getHead().getReturnCode().equals("-1") && quotedPriceResponse.getHead().getReturnMessage().contains("重复投保")) {
|
|
|
+ String startTime = extractDuplicateEndTime(quotedPriceResponse.getHead().getReturnMessage());
|
|
|
+ String endTime = calculateEndTime(startTime);
|
|
|
+ List<ZmCrawlerQuotedPriceRequest.BusinessDataDTO.ContractDTO> contract =quotedPriceRequest.getBusinessData().getContract();
|
|
|
+ contract.forEach(contractDTO -> {
|
|
|
+ contractDTO.getContractMain().setValidDate(startTime);
|
|
|
+ contractDTO.getContractMain().setExpiryDate(endTime);
|
|
|
+ });
|
|
|
+ quotedPriceResponse = zmCrawlerRequestComponent.quotedPrice(quotedPriceRequest);
|
|
|
+ }
|
|
|
+ // 3.1 缓存数据
|
|
|
+ if(quotedPriceResponse.getHead().getReturnCode().equals("0")){
|
|
|
+ zmCrawlerRequestComponent.cacheZmCrawlerSaveResponse(quotedPriceResponse, quotedPriceResponse.getBussinessMain().getContractMainNo());
|
|
|
+ // 4.0 保存数据
|
|
|
+ zmCrawlerOrderService.save(quoteVo,quotedPriceResponse);
|
|
|
+ }
|
|
|
+ return ZmCrawlerQuoteResultVoBuild.build(quoteVo, quotedPriceResponse);
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new RuntimeException("报价异常,请联系管理员");
|
|
|
}
|
|
|
- return ZmCrawlerQuoteResultVoBuild.build(quoteVo, quotedPriceResponse);
|
|
|
}
|
|
|
|
|
|
// 非车险匹配
|