|
@@ -32,6 +32,7 @@ import com.jzg.quotation.zhongmei.crawler.service.ZhongMeiCrawlerRequest;
|
|
|
import com.jzg.quotation.zhongmei.crawler.service.ZmCrawlerOrderService;
|
|
import com.jzg.quotation.zhongmei.crawler.service.ZmCrawlerOrderService;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
|
|
|
|
|
+import java.text.ParseException;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
import java.time.temporal.ChronoUnit;
|
|
@@ -72,8 +73,7 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
|
|
|
* @return 报价信息
|
|
* @return 报价信息
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
- public QuoteResultsVo quote(QuoteVo quoteVo) throws JsonProcessingException {
|
|
|
|
|
- try {
|
|
|
|
|
|
|
+ public QuoteResultsVo quote(QuoteVo quoteVo) throws JsonProcessingException, ParseException {
|
|
|
// 1.0获取token的请求头
|
|
// 1.0获取token的请求头
|
|
|
AttributionInformationVo attributionInformationVo = quoteVo
|
|
AttributionInformationVo attributionInformationVo = quoteVo
|
|
|
.getOrder()
|
|
.getOrder()
|
|
@@ -103,31 +103,7 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
|
|
|
}
|
|
}
|
|
|
// 3.0 保费计算
|
|
// 3.0 保费计算
|
|
|
ZmCrawlerQuotedPriceRequest quotedPriceRequest = new ZmCrawlerQuotedPriceRequest(zmCrawlerConfigureParameters, quoteVo, saleInfoDTO, fullCarDataDTO, actualValueResponse, userCode, head,accident);
|
|
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);
|
|
|
|
|
- if (startTime != null && endTime != null) {
|
|
|
|
|
- List<ZmCrawlerQuotedPriceRequest.BusinessDataDTO.ContractDTO> contract = quotedPriceRequest.getBusinessData().getContract();
|
|
|
|
|
- contract.forEach(contractDTO -> {
|
|
|
|
|
- contractDTO.getContractMain().setValidDate(startTime);
|
|
|
|
|
- contractDTO.getContractMain().setExpiryDate(endTime);
|
|
|
|
|
- contractDTO.getCoverage().forEach(coverageDTO -> {
|
|
|
|
|
- coverageDTO.setValidDate(startTime);
|
|
|
|
|
- coverageDTO.setExpiryDate(endTime);
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
- // 重复投保 获取日期重新计算折旧价
|
|
|
|
|
- ZmCrawlerActualValueRequest actualValueReq = new ZmCrawlerActualValueRequest(quoteVo.getCarInfoVo(),fullCarDataDTO,head,startTime);
|
|
|
|
|
- ZmCrawlerActualValueResponse actualValueResp = zmCrawlerRequestComponent.getActualValue(actualValueReq);
|
|
|
|
|
- quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar().setActualValue(actualValueResp.getActualValue());
|
|
|
|
|
- quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar().setActualValueCarLoss(actualValueResp.getActualValue());
|
|
|
|
|
- quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar().setUseYears(actualValueResp.getUseYears());
|
|
|
|
|
- quotedPriceRequest.getHead().setTransCode(TransCode.QUOTE_PRICE);
|
|
|
|
|
- quotedPriceResponse = zmCrawlerRequestComponent.quotedPrice(quotedPriceRequest);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ ZmCrawlerQuotedPriceResponse quotedPriceResponse = repeatQuote(quotedPriceRequest,quoteVo, fullCarDataDTO,head);
|
|
|
// 3.1 缓存数据
|
|
// 3.1 缓存数据
|
|
|
if(quotedPriceResponse.getHead().getReturnCode().equals("0")){
|
|
if(quotedPriceResponse.getHead().getReturnCode().equals("0")){
|
|
|
zmCrawlerRequestComponent.cacheZmCrawlerSaveResponse(quotedPriceResponse, quotedPriceResponse.getBussinessMain().getContractMainNo());
|
|
zmCrawlerRequestComponent.cacheZmCrawlerSaveResponse(quotedPriceResponse, quotedPriceResponse.getBussinessMain().getContractMainNo());
|
|
@@ -135,10 +111,57 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
|
|
|
zmCrawlerOrderService.save(quoteVo,quotedPriceResponse);
|
|
zmCrawlerOrderService.save(quoteVo,quotedPriceResponse);
|
|
|
}
|
|
}
|
|
|
return ZmCrawlerQuoteResultVoBuild.build(quoteVo, quotedPriceResponse);
|
|
return ZmCrawlerQuoteResultVoBuild.build(quoteVo, quotedPriceResponse);
|
|
|
- }catch (Exception e){
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- throw new RuntimeException("报价异常,请联系管理员");
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 重复投保处理
|
|
|
|
|
+ private ZmCrawlerQuotedPriceResponse repeatQuote(ZmCrawlerQuotedPriceRequest quotedPriceRequest,QuoteVo quoteVo,ZmCrawlerModelQueryResponse.FullCarDataDTO fullCarDataDTO,BaseRequestHead head) throws ParseException {
|
|
|
|
|
+ ZmCrawlerQuotedPriceResponse quotedPriceResponse = zmCrawlerRequestComponent.quotedPrice(quotedPriceRequest);
|
|
|
|
|
+ // 商业险重复投保
|
|
|
|
|
+ if (!quotedPriceResponse.getHead().getReturnCode().equals("0") && quotedPriceResponse.getHead().getReturnMessage().contains("商业险重复投保")) {
|
|
|
|
|
+ String startTime = extractDuplicateEndTime(quotedPriceResponse.getHead().getReturnMessage());
|
|
|
|
|
+ String endTime = calculateEndTime(startTime);
|
|
|
|
|
+ if (startTime != null && endTime != null) {
|
|
|
|
|
+ ZmCrawlerQuotedPriceRequest.BusinessDataDTO.ContractDTO contract =
|
|
|
|
|
+ quotedPriceRequest.getBusinessData().getContract().stream()
|
|
|
|
|
+ .filter(contractDTO -> "0361".equals(contractDTO.getContractMain().getRiskCode()))
|
|
|
|
|
+ .findFirst()
|
|
|
|
|
+ .orElse(null);
|
|
|
|
|
+ contract.getContractMain().setValidDate(startTime);
|
|
|
|
|
+ contract.getContractMain().setExpiryDate(endTime);
|
|
|
|
|
+ contract.getCoverage().forEach(coverageDTO -> {
|
|
|
|
|
+ coverageDTO.setValidDate(startTime);
|
|
|
|
|
+ coverageDTO.setExpiryDate(endTime);
|
|
|
|
|
+ });
|
|
|
|
|
+ // 重复投保 获取日期重新计算折旧价
|
|
|
|
|
+ ZmCrawlerActualValueRequest actualValueReq = new ZmCrawlerActualValueRequest(quoteVo.getCarInfoVo(),fullCarDataDTO,head,startTime);
|
|
|
|
|
+ ZmCrawlerActualValueResponse actualValueResp = zmCrawlerRequestComponent.getActualValue(actualValueReq);
|
|
|
|
|
+ quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar().setActualValue(actualValueResp.getActualValue());
|
|
|
|
|
+ quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar().setActualValueCarLoss(actualValueResp.getActualValue());
|
|
|
|
|
+ quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar().setUseYears(actualValueResp.getUseYears());
|
|
|
|
|
+ quotedPriceRequest.getHead().setTransCode(TransCode.QUOTE_PRICE);
|
|
|
|
|
+ quotedPriceResponse = zmCrawlerRequestComponent.quotedPrice(quotedPriceRequest);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // 交强险重复投保
|
|
|
|
|
+ if (!quotedPriceResponse.getHead().getReturnCode().equals("0") && quotedPriceResponse.getHead().getReturnMessage().contains("重复投保")) {
|
|
|
|
|
+ String startTime = extractDuplicateEndTime(quotedPriceResponse.getHead().getReturnMessage());
|
|
|
|
|
+ String endTime = calculateEndTime(startTime);
|
|
|
|
|
+ if (startTime != null && endTime != null) {
|
|
|
|
|
+ ZmCrawlerQuotedPriceRequest.BusinessDataDTO.ContractDTO contract =
|
|
|
|
|
+ quotedPriceRequest.getBusinessData().getContract().stream()
|
|
|
|
|
+ .filter(contractDTO -> "0330".equals(contractDTO.getContractMain().getRiskCode()))
|
|
|
|
|
+ .findFirst()
|
|
|
|
|
+ .orElse(null);
|
|
|
|
|
+ contract.getContractMain().setValidDate(startTime);
|
|
|
|
|
+ contract.getContractMain().setExpiryDate(endTime);
|
|
|
|
|
+ contract.getCoverage().forEach(coverageDTO -> {
|
|
|
|
|
+ coverageDTO.setValidDate(startTime);
|
|
|
|
|
+ coverageDTO.setExpiryDate(endTime);
|
|
|
|
|
+ });
|
|
|
|
|
+ quotedPriceResponse = zmCrawlerRequestComponent.quotedPrice(quotedPriceRequest);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
+ return quotedPriceResponse;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 非车险匹配
|
|
// 非车险匹配
|