|
|
@@ -143,9 +143,12 @@ public class GuoRenCrawlerRequestImpl implements GuoRenCrawlerRequest {
|
|
|
}
|
|
|
|
|
|
GuoRenCrawlerBaseResponse<GuoRenCrawlerCalculationPremiumData> calculationPremium = guoRenCrawlerRequestComponent.calculationPremium(crawlerCalculationPremiumRequest, headers);
|
|
|
+ // 提前记录重复投保信息,避免重试成功后丢失
|
|
|
+ String duplicateMessage = null;
|
|
|
// 处理重复投保
|
|
|
String message = calculationPremium.getResultMsg();
|
|
|
if (calculationPremium.getResultCode() == 1 && message.contains("重复投保")) {
|
|
|
+ duplicateMessage = message;
|
|
|
String startTime = extractDuplicateEndTime(message);
|
|
|
String endTime;
|
|
|
if (startTime == null) {
|
|
|
@@ -213,7 +216,14 @@ public class GuoRenCrawlerRequestImpl implements GuoRenCrawlerRequest {
|
|
|
// 第一步:驾意险校验
|
|
|
GuoRenCrawlerBaseResponse<GuoRenCrawlerCreateOrderCheckData> checkResponse = guoRenCrawlerRequestComponent.createOrderCheck(createOrderRequest, headers);
|
|
|
if (!checkResponse.getCode().equals("0000")) {
|
|
|
- throw new SystemException("驾意险订单校验失败:" + checkResponse.getMessage());
|
|
|
+ // 身份证有效期错误时,切换certiValidity后重试
|
|
|
+ if ("9999".equals(checkResponse.getCode()) && "请输入正确的身份证有效期".equals(checkResponse.getMessage())) {
|
|
|
+ toggleCertiValidity(createOrderRequest);
|
|
|
+ checkResponse = guoRenCrawlerRequestComponent.createOrderCheck(createOrderRequest, headers);
|
|
|
+ }
|
|
|
+ if (!checkResponse.getCode().equals("0000")) {
|
|
|
+ throw new SystemException("驾意险订单校验失败:" + checkResponse.getMessage());
|
|
|
+ }
|
|
|
}
|
|
|
// 第二步:驾意险投保
|
|
|
GuoRenCrawlerBaseResponse<GuoRenCrawlerCreateOrderDataData> dataResponse = guoRenCrawlerRequestComponent.createOrderData(createOrderRequest, headers);
|
|
|
@@ -233,7 +243,7 @@ public class GuoRenCrawlerRequestImpl implements GuoRenCrawlerRequest {
|
|
|
|
|
|
// 保存数据
|
|
|
guoRenCrawlerOrderService.saveOrderInfo(quoteVo, proposalNoSave, niPolicyNumber);
|
|
|
- return GuoRenCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo, calculationPremiumData, proposalNoSave);
|
|
|
+ return GuoRenCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo, calculationPremiumData, proposalNoSave, duplicateMessage);
|
|
|
}
|
|
|
|
|
|
private GuoRenCrawlerWriteBackAddressData writeBackAddress(String addressNew, String addressOld, GuoRenCrawlerWriteBackAddressData writeBackAddressData, HttpHeaders headers) {
|
|
|
@@ -312,6 +322,29 @@ public class GuoRenCrawlerRequestImpl implements GuoRenCrawlerRequest {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 切换身份证有效期类型:4(长期有效)↔ 2(有效期限)
|
|
|
+ * 当 createOrderCheck 返回"请输入正确的身份证有效期"时,尝试切换后重试
|
|
|
+ */
|
|
|
+ private void toggleCertiValidity(GuoRenCrawlerCreateOrderRequest request) {
|
|
|
+ List<GuoRenCrawlerCreateOrderRequest.OrderListDTO> orderList = request.getData().getOrderList();
|
|
|
+ if (CollUtil.isEmpty(orderList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ GuoRenCrawlerCreateOrderRequest.OrderListDTO order = orderList.get(0);
|
|
|
+ // 切换 insuredList 中的 certiValidity
|
|
|
+ if (CollUtil.isNotEmpty(order.getInsuredList())) {
|
|
|
+ for (GuoRenCrawlerCreateOrderRequest.InsuredListDTO insured : order.getInsuredList()) {
|
|
|
+ insured.setCertiValidity("4".equals(insured.getCertiValidity()) ? "2" : "4");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 切换 orderAppl 中的 certiValidity
|
|
|
+ if (order.getOrderAppl() != null) {
|
|
|
+ GuoRenCrawlerCreateOrderRequest.OrderApplDTO appl = order.getOrderAppl();
|
|
|
+ appl.setCertiValidity("4".equals(appl.getCertiValidity()) ? "2" : "4");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 获取特约数据
|
|
|
* 从报价单中的特约条款列表转换为国任特约VO列表
|