|
|
@@ -11,6 +11,7 @@ import com.jzg.quotation.commons.constant.InsuranceCode;
|
|
|
import com.jzg.quotation.commons.entity.GetCaptchaRequest;
|
|
|
import com.jzg.quotation.commons.entity.GetCaptchaResponse;
|
|
|
import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
|
|
|
+import com.jzg.quotation.commons.utils.TimeProcessing;
|
|
|
import com.jzg.quotation.guoren.crawler.build.GuoRenCrawlerQuoteResultsVoBuild;
|
|
|
import com.jzg.quotation.guoren.crawler.component.GuoRenCrawlerRequestComponent;
|
|
|
import com.jzg.quotation.guoren.crawler.constant.enums.RequestUrl;
|
|
|
@@ -28,6 +29,9 @@ import org.springframework.http.HttpHeaders;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
+import java.util.regex.Matcher;
|
|
|
+import java.util.regex.Pattern;
|
|
|
+
|
|
|
@QuoteCrawlerService(value = InsuranceCode.INSURANCE_XDCX)
|
|
|
@Service
|
|
|
@RequiredArgsConstructor
|
|
|
@@ -81,16 +85,47 @@ public class GuoRenCrawlerRequestImpl implements GuoRenCrawlerRequest {
|
|
|
GuoRenCrawlerWriteBackAddressData insuredPersonAddr = writeBackAddress(quoteVo.getInsuredPersonInfo().getAddr(), quoteVo.getPolicyHolderInfo().getAddr(), ownersAddr, headers);
|
|
|
// 保费计算
|
|
|
GuoRenCrawlerCalculationPremiumRequest crawlerCalculationPremiumRequest = new GuoRenCrawlerCalculationPremiumRequest(quoteVo, prpTmainDTO, prpTitemCar, policyHolderAddr, insuredPersonAddr, insuredTypeTmp);
|
|
|
- GuoRenCrawlerCalculationPremiumData calculationPremium = guoRenCrawlerRequestComponent.calculationPremium(crawlerCalculationPremiumRequest, headers);
|
|
|
-
|
|
|
+ GuoRenCrawlerBaseResponse<GuoRenCrawlerCalculationPremiumData> calculationPremium = guoRenCrawlerRequestComponent.calculationPremium(crawlerCalculationPremiumRequest, headers);
|
|
|
+ // 处理重复投保
|
|
|
+ String message = calculationPremium.getResultMsg();
|
|
|
+ if (calculationPremium.getResultCode() == 1 && message.contains("重复投保")) {
|
|
|
+ String startTime = extractDuplicateEndTime(message);
|
|
|
+ String endTime;
|
|
|
+ if (startTime == null) {
|
|
|
+ GuoRenCrawlerQuoteResultsVoBuild.buildFailQuoteResultsVo(quoteVo, calculationPremium);
|
|
|
+ }
|
|
|
+ if (startTime != null && startTime.endsWith("00:00:00")) {
|
|
|
+ endTime = TimeProcessing.minusOneSecondAfterYear(startTime);
|
|
|
+ } else {
|
|
|
+ endTime = TimeProcessing.minusOneDayAfterYear(startTime);
|
|
|
+ }
|
|
|
+ String startDate = TimeProcessing.dateTimeToDate(startTime);
|
|
|
+ String endDate = TimeProcessing.dateTimeToDate(endTime);
|
|
|
+ // 交强
|
|
|
+ crawlerCalculationPremiumRequest.getCi().getPrpTmain().setStartDate(startDate);
|
|
|
+ crawlerCalculationPremiumRequest.getCi().getPrpTmain().setEndDate(endDate);
|
|
|
+ crawlerCalculationPremiumRequest.getCi().getPrptitemkindList().forEach(item -> {
|
|
|
+ item.setStartDate(startDate);
|
|
|
+ item.setEndDate(endDate);
|
|
|
+ });
|
|
|
+ // 商业
|
|
|
+ crawlerCalculationPremiumRequest.getBi().getPrpTmain().setStartDate(startDate);
|
|
|
+ crawlerCalculationPremiumRequest.getBi().getPrpTmain().setEndDate(endDate);
|
|
|
+ crawlerCalculationPremiumRequest.getBi().getPrptitemkindList().forEach(item -> {
|
|
|
+ item.setStartDate(startDate);
|
|
|
+ item.setEndDate(endDate);
|
|
|
+ });
|
|
|
+ calculationPremium = guoRenCrawlerRequestComponent.calculationPremium(crawlerCalculationPremiumRequest, headers);
|
|
|
+ } else if (calculationPremium.getResultCode() == 1) {
|
|
|
+ GuoRenCrawlerQuoteResultsVoBuild.buildFailQuoteResultsVo(quoteVo, calculationPremium);
|
|
|
+ }
|
|
|
// 投保验证码处理
|
|
|
- calculationPremium = guoRenCrawlerQuoteProcessService.insuranceVerificationCodeProcessing(crawlerCalculationPremiumRequest, calculationPremium, headers);
|
|
|
-
|
|
|
+ GuoRenCrawlerCalculationPremiumData calculationPremiumData = guoRenCrawlerQuoteProcessService.insuranceVerificationCodeProcessing(crawlerCalculationPremiumRequest, calculationPremium.getData(), headers);
|
|
|
// 保存投保单号
|
|
|
- GuoRenCrawlerProposalNoSaveData proposalNoSave = guoRenCrawlerRequestComponent.proposalNoSave(crawlerCalculationPremiumRequest, calculationPremium, headers);
|
|
|
+ GuoRenCrawlerProposalNoSaveData proposalNoSave = guoRenCrawlerRequestComponent.proposalNoSave(crawlerCalculationPremiumRequest, calculationPremiumData, headers);
|
|
|
// 保存数据
|
|
|
guoRenCrawlerOrderService.saveOrderInfo(quoteVo, proposalNoSave);
|
|
|
- return GuoRenCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo, calculationPremium, proposalNoSave);
|
|
|
+ return GuoRenCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo, calculationPremiumData, proposalNoSave);
|
|
|
}
|
|
|
|
|
|
private GuoRenCrawlerWriteBackAddressData writeBackAddress(String addressNew, String addressOld, GuoRenCrawlerWriteBackAddressData writeBackAddressData, HttpHeaders headers) {
|
|
|
@@ -100,6 +135,23 @@ public class GuoRenCrawlerRequestImpl implements GuoRenCrawlerRequest {
|
|
|
return guoRenCrawlerRequestComponent.writeBackAddress(addressNew, headers);
|
|
|
}
|
|
|
|
|
|
+ // 截取重复投保终保日期
|
|
|
+ private static final Pattern DUPLICATE_END_TIME_PATTERN = Pattern.compile("终保日期 (\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2})");
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 提取系统自动分配的起保时间
|
|
|
+ * @param returnMessage 核心提示
|
|
|
+ * @return 提取到的时间字符串,未提取到返回 null
|
|
|
+ */
|
|
|
+ private String extractDuplicateEndTime(String returnMessage) {
|
|
|
+ Matcher matcher = DUPLICATE_END_TIME_PATTERN.matcher(returnMessage);
|
|
|
+ if (matcher.find()) {
|
|
|
+ String shortEndTime = matcher.group(1);
|
|
|
+ return shortEndTime + ":00";
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) throws Exception {
|
|
|
String username = underwritingVo.getOrder().getAttributionInformationVo().getUsername();
|