Explorar el Código

Merge remote-tracking branch 'origin/master'

wanghao hace 2 meses
padre
commit
77915efb7b

+ 8 - 1
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/build/GuoRenCrawlerQuoteResultsVoBuild.java

@@ -22,7 +22,7 @@ import java.util.stream.Collectors;
  */
 public final class GuoRenCrawlerQuoteResultsVoBuild {
 
-    public static QuoteResultsVo buildQuoteResultsVo(QuoteVo quoteVo, GuoRenCrawlerCalculationPremiumData calculationPremium, GuoRenCrawlerProposalNoSaveData proposalNoSave) {
+    public static QuoteResultsVo buildQuoteResultsVo(QuoteVo quoteVo, GuoRenCrawlerCalculationPremiumData calculationPremium, GuoRenCrawlerProposalNoSaveData proposalNoSave, String duplicateMessage) {
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
         quoteResultsVo.setOrdersNo(quoteVo.getOrder().getOrdersNo());
 
@@ -92,6 +92,13 @@ public final class GuoRenCrawlerQuoteResultsVoBuild {
                     .fluentPut("scoreKey", "syScore")
                     .fluentPut("score", calculationPremium.getBi().getPrpTmainRate().getBillcomeGroup()));
         }
+        // 重试成功时,将提前记录的重复投保信息放入评分字段
+        if (duplicateMessage != null) {
+            scoreJson.add(new JSONObject()
+                    .fluentPut("scoreName", "重复投保信息")
+                    .fluentPut("scoreKey", "duplicateInfo")
+                    .fluentPut("score", duplicateMessage));
+        }
 
         scoreVo.setScoreJson(scoreJson);
         quoteResultsVo.setScoreVo(scoreVo);

+ 35 - 2
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/impl/GuoRenCrawlerRequestImpl.java

@@ -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列表

+ 2 - 7
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementUndwrtRulesServiceImpl.java

@@ -25,12 +25,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.time.ZoneId;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -176,7 +171,7 @@ public class PtlAgreementUndwrtRulesServiceImpl extends ServiceImpl<PtlAgreement
             return true;
         }
 
-        // 兼容旧的单条规则模式
+        // 兼容旧的单条规则模式F
         PtlAgreementUndwrtRules rules = buildRulesRecord(param, null, startOrderNum);
         List<PtlAgreementUndwrtRulesAttrLink> rulesAttrList = param.getRulesAttrList();
         List<PtlAgreementUndwrtRulesAttrLink> costsAttrLink = new ArrayList<>();