Przeglądaj źródła

人保的上一年险别数据新增

wanghao 1 miesiąc temu
rodzic
commit
3ad917f8c5

+ 4 - 0
tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/entity/response/RenBaoNewCrawlerQuoteResponse.java

@@ -144,6 +144,10 @@ public class RenBaoNewCrawlerQuoteResponse {
          * 非车险报价主信息
          */
         private Map<String, Object> prpQmainDDA;
+        /**
+         * 上一年保险
+         */
+        private List<Map<String, Object>> ReInsureItems;
     }
 
     /**

+ 70 - 4
tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerRequestImpl.java

@@ -111,7 +111,8 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
         // 1. 构建并执行报价请求
         String username = quoteVo.getOrder().getAttributionInformationVo().getUsername();
         RenBaoNewCrawlerQuoteRequest quoteRequest = requestBuilder.buildQuoteRequest(quoteVo, loginInfo, headers, username);
-        RenBaoNewCrawlerQuoteResponse quoteResponse = executeQuote(quoteRequest, headers, loginInfo, username);
+        List<Map<String,Object>> lastYeseRisks = new ArrayList<>();
+        RenBaoNewCrawlerQuoteResponse quoteResponse = executeQuote(quoteRequest, headers, loginInfo, username,lastYeseRisks);
         // 2. 构建保存投保单请求(将报价响应数据合并到请求中)
         RenBaoNewCrawlerQuoteRequest saveRequest = requestBuilder.buildSaveRequest(quoteRequest, quoteResponse);
 
@@ -119,7 +120,7 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
         RenBaoNewCrawlerSaveResponse saveResponse = requestComponent.saveAsProposal(saveRequest, headers);
 
         // 4. 构建结果
-        QuoteResultsVo resultsVo = buildQuoteResultsVo(quoteVo, quoteRequest, quoteResponse, saveResponse, headers, username);
+        QuoteResultsVo resultsVo = buildQuoteResultsVo(quoteVo, quoteRequest, quoteResponse, saveResponse, headers, username,lastYeseRisks);
 
         // 5. 保存订单信息
         orderService.saveOrder(
@@ -160,7 +161,7 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
      * @return 报价响应对象
      */
     private RenBaoNewCrawlerQuoteResponse executeQuote(RenBaoNewCrawlerQuoteRequest request, HttpHeaders headers,
-                                                        LoginInfoBO loginInfo, String username) {
+                                                        LoginInfoBO loginInfo, String username,List<Map<String,Object>> lastYeseRisks) {
         int modelCodeRetryCount = 0;
         int duplicateInsuranceRetryCount = 0;
         int hkcs = 0; // 滑块风控重试计数器
@@ -192,7 +193,35 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
                     throw new SystemException("触发滑块风控,未通过,请稍后报价");
                 }
             }
+            // 处理上一年险别
+            if(isLastYeseRisk(response)){
+                //处理重复投保时显示的上年投保险别
+                String[] biDateArr = new String[1];
+                if(response.getData().getReInsureItems() != null && response.getData().getReInsureItems().size()>0){
+                    response.getData().getReInsureItems().forEach(item ->{
+                        // 1. 获取 coverageItemList 数组
+                        Object coverageObj = item.get("coverageItemList");
+                        // 强转为 List<Map<String,Object>>(里面每一项是 {"coverageCode":"xxx"})
+                        List<Map<String, Object>> coverageList = (List<Map<String, Object>>) coverageObj;
+                        lastYeseRisks.addAll(coverageList);
+                        if(item.get("billDate") != null){
+                            String expireDate =item.get("expireDate")+"";
+                            biDateArr[0] = expireDate != null && expireDate.length()>10 ? expireDate.substring(0,10):"";
+                        }
+
+                    });
 
+                }
+                // 上一年险别属于商业险重复投保,需要拦截并重新请求
+                java.time.LocalDate startDate = java.time.LocalDate.parse(biDateArr[0]);
+                java.time.LocalDate startDate1 = startDate.plusDays(1);
+                java.time.LocalDate endDate = startDate.plusDays(364);
+                request.getPrpCmain().put("endDate", endDate.toString());
+                request.getPrpCmain().put("endHour", "24");
+                request.getPrpCmain().put("endMinute", "00");
+                request.getPrpCmain().put("startDate", startDate1);
+                continue;
+            }
             if (isSuccess(response)) {
                 return response;
             }
@@ -211,9 +240,12 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
                 }
             }
 
+
             // 处理重复投保
             if (isDuplicateInsurance(response) || isRenewalWithStartDate(response)) {
                 java.util.Map<String, String> expireDates = parseExpireDateFromError(response);
+
+
                 if (expireDates != null && !expireDates.isEmpty()) {
                     duplicateInsuranceRetryCount++;
                     if (duplicateInsuranceRetryCount > 3) {
@@ -332,6 +364,17 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
         String message = response.getData().getError();
         return message != null && message.contains("重复投保");
     }
+    /**
+     * 判断是否有上一年险别    *
+     * @param response 报价响应
+     * @return     */
+    private boolean isLastYeseRisk(RenBaoNewCrawlerQuoteResponse response) {
+        if (response == null || response.getData() == null) {
+            return false;
+        }
+        List<Map<String, Object>> reInsureItems = response.getData().getReInsureItems();
+        return reInsureItems != null && !reInsureItems.isEmpty();
+    }
 
     /**
      * 调整保险日期
@@ -738,7 +781,7 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
     private QuoteResultsVo buildQuoteResultsVo(QuoteVo quoteVo, RenBaoNewCrawlerQuoteRequest quoteRequest,
                                                RenBaoNewCrawlerQuoteResponse quoteResponse,
                                                RenBaoNewCrawlerSaveResponse saveResponse,
-                                               HttpHeaders headers, String username) {
+                                               HttpHeaders headers, String username,List<Map<String,Object>> lastYeseRisks) {
         QuoteResultsVo resultsVo = new QuoteResultsVo();
         resultsVo.setCarActualValue(new BigDecimal(quoteRequest.getCarActualValue()));
         resultsVo.setOrdersNo(quoteVo.getOrder().getOrdersNo());
@@ -918,6 +961,29 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
                 log.warn("获取人保评分失败: {}", e.getMessage());
             }
         }
+        // 处理上一年的投保险别
+        if(!lastYeseRisks.isEmpty()){
+            try{
+                StringBuilder lastYearRiskSb = new StringBuilder();
+                lastYeseRisks.forEach(item->{
+                    String riskName = InsuranceKindCodeMapping.getKindNameByRbCode(item.get("coverageCode").toString());
+                    lastYearRiskSb.append(riskName).append(",");
+
+                });
+                JSONArray scoreJson = resultsVo.getScoreVo().getScoreJson();
+                scoreJson.add(new JSONObject()
+                        .fluentPut("scoreName", "上年承保险别")
+                        .fluentPut("scoreKey", "lastYearRisk")
+                        .fluentPut("score", lastYearRiskSb.toString()));
+
+
+            }catch (Exception e){
+                log.warn("获取人保上一年的投保险别失败: {}", e.getMessage());
+            }
+
+
+        }
+
 
         // 获取交强险出险次数
         RenBaoNewCrawlerQuoteResponse.CarQuoteRiskItemCIRsp carQuoteRiskItemCIRsp = quoteResponse.getData().getCarQuoteRiskItemCIRsp();