Просмотр исходного кода

人保核保后支付链接修复

wanghao 4 месяцев назад
Родитель
Сommit
a5c6a4c1f4

+ 1 - 1
tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerRequestBuilder.java

@@ -972,7 +972,7 @@ public class RenBaoNewCrawlerRequestBuilder {
     }
 
     /**
-     * 将险种信息列表转换为Map列表(使用反射,不依赖 KindInfoVo 的具体实现)
+     * 将险种信息列表转换为Map列表
      *
      * @param kindList 险种信息列表
      * @return Map列表,每个元素包含 kindCode, kindName, amount, serviceTimes, deductibleRate 等字段

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

@@ -631,50 +631,59 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
                 headers
         );
 
+        // ① 校验查询订单接口返回 —  :先检查message是否为Success
+        if (orderInfo == null || !"Success".equals(orderInfo.get("message"))) {
+            String statusText = orderInfo != null ? (String) orderInfo.get("statusText") : "查询订单响应为空";
+            throw new SystemException("查询订单异常: " + statusText);
+        }
+
+        // ② 获取result列表并校验长度 —  :只能为1或2条
+        Map<String, Object> data = (Map<String, Object>) orderInfo.get("data");
+        if (data == null || !data.containsKey("result")) {
+            throw new SystemException("查询订单异常: 未查询到订单");
+        }
+        List<Map<String, Object>> itemList = (List<Map<String, Object>>) data.get("result");
+        if (itemList == null || itemList.isEmpty()) {
+            throw new SystemException("查询订单异常: 未查询到订单");
+        }
+        if (itemList.size() > 2) {
+            throw new SystemException("查询订单异常");
+        }
+
+        // ③ 提取交强/商业单号,以及驾意险信息 —  
         String syProposalNo = "";
         String jqProposalNo = "";
-        List<String> documentnolist = new ArrayList<>();
         List<Map<String, String>> unitNoCarDataList = new ArrayList<>();
-
-        if (orderInfo != null && orderInfo.containsKey("data")) {
-            Map<String, Object> data = (Map<String, Object>) orderInfo.get("data");
-            if (data != null && data.containsKey("result")) {
-                List<Map<String, Object>> itemList = (List<Map<String, Object>>) data.get("result");
-                if (itemList != null && !itemList.isEmpty()) {
-                    for (Map<String, Object> item : itemList) {
-                         businessNo = (String) item.get("businessNo");
-                        if (businessNo != null) {
-                            if (businessNo.contains("DAA")) {
-                                syProposalNo = businessNo;
-                                documentnolist.add(businessNo);
-                            } else if (businessNo.contains("DZA")) {
-                                jqProposalNo = businessNo;
-                                documentnolist.add(businessNo);
-                            }
-                        }
-                    }
-
-                    Map<String, Object> firstItem = itemList.get(0);
-                    if (firstItem.containsKey("relationUPolicyInfolist")) {
-                        List<Map<String, Object>> relationList = (List<Map<String, Object>>) firstItem.get("relationUPolicyInfolist");
-                        if (relationList != null) {
-                            for (Map<String, Object> item : relationList) {
-                                String connectProposalNo = (String) item.get("connectProposalNo");
-                                if (connectProposalNo != null && !connectProposalNo.isEmpty()) {
-                                    documentnolist.add(connectProposalNo);
-                                    if (connectProposalNo.contains("EAD")) {
-                                        unitNoCarDataList.add(Map.of("uniteProposalNo", connectProposalNo, "riskCode", "EAD"));
-                                    } else if (connectProposalNo.contains("EBS")) {
-                                        unitNoCarDataList.add(Map.of("uniteProposalNo", connectProposalNo, "riskCode", "EBS"));
-                                    }
-                                }
-                            }
+        for (Map<String, Object> item : itemList) {
+            String bNo = (String) item.get("businessNo");
+            if (bNo == null) {
+                continue;
+            }
+            if (bNo.contains("DAA")) {
+                syProposalNo = bNo;
+            } else if (bNo.contains("DZA")) {
+                jqProposalNo = bNo;
+            }
+        }
+        // 提取驾意险关联单号(从relationUPolicyInfolist)
+        Map<String, Object> firstItem = itemList.get(0);
+        if (firstItem.containsKey("relationUPolicyInfolist")) {
+            List<Map<String, Object>> relationList = (List<Map<String, Object>>) firstItem.get("relationUPolicyInfolist");
+            if (relationList != null) {
+                for (Map<String, Object> relItem : relationList) {
+                    String connectProposalNo = (String) relItem.get("connectProposalNo");
+                    if (connectProposalNo != null && !connectProposalNo.isEmpty()) {
+                        if (connectProposalNo.contains("EAD")) {
+                            unitNoCarDataList.add(Map.of("uniteProposalNo", connectProposalNo, "riskCode", "EAD"));
+                        } else if (connectProposalNo.contains("EBS")) {
+                            unitNoCarDataList.add(Map.of("uniteProposalNo", connectProposalNo, "riskCode", "EBS"));
                         }
                     }
                 }
             }
         }
 
+        // ④ 提交核保
         RenBaoNewCrawlerUnderwritingRequest uwRequest = new RenBaoNewCrawlerUnderwritingRequest();
         uwRequest.setPrpbi(syProposalNo);
         uwRequest.setPrpci(jqProposalNo);
@@ -687,17 +696,22 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
         RenBaoNewCrawlerUnderwritingResponse uwResponse = requestComponent.submitUnderwriting(uwRequest, headers);
         log.info("Underwriting response: {}", JSONUtil.toJsonStr(uwResponse));
 
+        // ⑤ 校验核保返回 —  :检查message
         if (uwResponse == null || !"Success".equals(uwResponse.getMessage())) {
             String errorMsg = uwResponse != null ? uwResponse.getStatusText() : "核保响应为空";
             throw new SystemException("提交核保异常: " + errorMsg);
         }
 
+        // ⑥ 解析核保结果 —  :从undwrtForPassList和unitNoCarUnderWriteStateList中收集状态和错误信息
+        //    同时在这里构建documentnolist(支付接口用,必须在核保成功后才收集)
         String syState = "";
         String jqState = "";
         String eadState = "";
         String ebsState = "";
         String errorMessage = "";
         boolean errorFlag = false;
+        List<String> documentnolist = new ArrayList<>();
+        List<String> jyxBusinessNoList = new ArrayList<>();
 
         if (uwResponse.getData() != null && uwResponse.getData().getUndwrtForPassList() != null) {
             for (RenBaoNewCrawlerUnderwritingResponse.UndwrtForPassItem item : uwResponse.getData().getUndwrtForPassList()) {
@@ -707,9 +721,15 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
                     continue;
                 }
                 if (item.getProposalNo().contains("DAA")) {
+                    // 商业险
+                    syProposalNo = item.getProposalNo();
+                    documentnolist.add(syProposalNo);
                     syState = item.getUndwrtFlag() != null ? item.getUndwrtFlag() : item.getState();
                     errorMessage += "商业提核结果:" + item.getHandleText() + "; ";
                 } else if (item.getProposalNo().contains("DZA")) {
+                    // 交强险
+                    jqProposalNo = item.getProposalNo();
+                    documentnolist.add(jqProposalNo);
                     jqState = item.getUndwrtFlag() != null ? item.getUndwrtFlag() : item.getState();
                     errorMessage += "交强提核结果:" + item.getHandleText() + "; ";
                 }
@@ -724,43 +744,34 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
                     continue;
                 }
                 if (item.getBusinessNo().contains("EAD")) {
+                    // 驾意险EAD
+                    documentnolist.add(item.getBusinessNo());
+                    jyxBusinessNoList.add(item.getBusinessNo());
                     eadState = item.getState();
                     errorMessage += "驾意险EAD提核结果:" + item.getContent() + "; ";
                 } else if (item.getBusinessNo().contains("EBS")) {
+                    // 驾意险EBS
+                    documentnolist.add(item.getBusinessNo());
+                    jyxBusinessNoList.add(item.getBusinessNo());
                     ebsState = item.getState();
                     errorMessage += "驾意险EBS提核结果:" + item.getContent() + "; ";
                 }
             }
         }
 
+        // ⑦ errorFlag为true时直接抛异常 —  
         if (errorFlag) {
             throw new SystemException(errorMessage);
         }
 
-        if ("2".equals(jqState) || "2".equals(syState)) {
-            StringBuilder detailErrorMessage = new StringBuilder();
-            if (!jqProposalNo.isEmpty() && "2".equals(jqState)) {
-                Map<String, Object> jqUndwrtDetail = requestComponent.viewUndwrt(jqProposalNo, loginInfo.getUserCode(), headers);
-                String jqHandleText = parseViewUndwrtHandleText(jqUndwrtDetail);
-                detailErrorMessage.append("交强返回:").append(jqHandleText != null ? jqHandleText : errorMessage).append("; ");
-            }
-            if (!syProposalNo.isEmpty() && "2".equals(syState)) {
-                Map<String, Object> syUndwrtDetail = requestComponent.viewUndwrt(syProposalNo, loginInfo.getUserCode(), headers);
-                String syHandleText = parseViewUndwrtHandleText(syUndwrtDetail);
-                detailErrorMessage.append("商业返回:").append(syHandleText != null ? syHandleText : errorMessage);
-            }
-            if (detailErrorMessage.length() > 0) {
-                throw new SystemException(detailErrorMessage.toString());
-            }
-            throw new SystemException(errorMessage);
-        }
-
+        // ⑧ 交强险/商业险状态校验 —  :只允许 3/4/5/9
         if (!jqState.isEmpty() && !"3".equals(jqState) && !"4".equals(jqState) && !"5".equals(jqState) && !"9".equals(jqState)) {
             throw new SystemException(errorMessage);
         }
         if (!syState.isEmpty() && !"3".equals(syState) && !"4".equals(syState) && !"5".equals(syState) && !"9".equals(syState)) {
             throw new SystemException(errorMessage);
         }
+        // 驾意险状态校验 —  :只允许 3/4/5(驾意险没有9状态)
         if (!eadState.isEmpty() && !"3".equals(eadState) && !"4".equals(eadState) && !"5".equals(eadState)) {
             throw new SystemException(errorMessage);
         }
@@ -768,80 +779,30 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
             throw new SystemException(errorMessage);
         }
 
+        // 状态为9(待人工核保)—  :直接返回
         if ("9".equals(jqState) || "9".equals(syState)) {
-            String processInfo = "";
-            if (!jqProposalNo.isEmpty() && "9".equals(jqState)) {
-                Map<String, Object> jqProcessInfo = requestComponent.getUndwrtProcessInfo(jqProposalNo, headers);
-                String jqMsg = parseUndwrtProcessInfoMsg(jqProcessInfo);
-                if (jqMsg != null && !jqMsg.isEmpty()) {
-                    processInfo = jqMsg;
-                }
-            }
-            if (!syProposalNo.isEmpty() && "9".equals(syState)) {
-                Map<String, Object> syProcessInfo = requestComponent.getUndwrtProcessInfo(syProposalNo, headers);
-                String syMsg = parseUndwrtProcessInfoMsg(syProcessInfo);
-                if (syMsg != null && !syMsg.isEmpty()) {
-                    processInfo = processInfo.isEmpty() ? syMsg : (processInfo + "; " + syMsg);
-                }
-            }
-            String finalErrorMessage = processInfo.isEmpty() ? errorMessage : processInfo;
             UnderwritingResultsVo resultsVo = new UnderwritingResultsVo();
             resultsVo.setUnderwritingStatus(InsOrderStatusEnum.STAFF_PROCESS);
-            resultsVo.setUnderwritingResult(finalErrorMessage);
+            resultsVo.setUnderwritingResult(errorMessage);
+            resultsVo.setJqApplyNo(jqProposalNo);
+            resultsVo.setSyApplyNo(syProposalNo);
+            resultsVo.setJyApplyNo(jyxBusinessNoList.isEmpty() ? "" : String.join(",", jyxBusinessNoList));
             return resultsVo;
         }
 
+        // ⑩ 正常核保通过 — 获取支付链接(带重试,与Python的get_pay_url循环一致)
         String payUrl = getPaymentUrlWithRetry(documentnolist, loginInfo, headers);
 
         UnderwritingResultsVo resultsVo = new UnderwritingResultsVo();
         resultsVo.setPaymentLink(payUrl);
         resultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
         resultsVo.setUnderwritingResult("操作成功");
+        resultsVo.setJqPolicyno(jqProposalNo);
+        resultsVo.setSyPolicyno(syProposalNo);
+        resultsVo.setJyPolicyno(jyxBusinessNoList.isEmpty() ? "" : String.join(",", jyxBusinessNoList));
         return resultsVo;
     }
 
-    private String parseViewUndwrtHandleText(Map<String, Object> response) {
-        if (response == null) {
-            return null;
-        }
-        Object dataObj = response.get("data");
-        if (dataObj == null) {
-            return null;
-        }
-        if (dataObj instanceof List) {
-            @SuppressWarnings("unchecked")
-            List<Map<String, Object>> dataList = (List<Map<String, Object>>) dataObj;
-            if (!dataList.isEmpty()) {
-                Object handleText = dataList.get(0).get("handleText");
-                return handleText != null ? handleText.toString() : null;
-            }
-        }
-        return null;
-    }
-
-    private String parseUndwrtProcessInfoMsg(Map<String, Object> response) {
-        if (response == null) {
-            return null;
-        }
-        Object dataObj = response.get("data");
-        if (dataObj == null || !(dataObj instanceof Map)) {
-            return null;
-        }
-        @SuppressWarnings("unchecked")
-        Map<String, Object> data = (Map<String, Object>) dataObj;
-        Object underwritingInfosObj = data.get("underwritingInfos");
-        if (underwritingInfosObj == null || !(underwritingInfosObj instanceof List)) {
-            return null;
-        }
-        @SuppressWarnings("unchecked")
-        List<Map<String, Object>> underwritingInfos = (List<Map<String, Object>>) underwritingInfosObj;
-        if (!underwritingInfos.isEmpty()) {
-            Object msg = underwritingInfos.get(0).get("msg");
-            return msg != null ? msg.toString() : null;
-        }
-        return null;
-    }
-
     private String getPaymentUrlWithRetry(List<String> documentnolist, LoginInfoBO loginInfo, HttpHeaders headers) {
         RenBaoNewCrawlerPayRequest payRequest = new RenBaoNewCrawlerPayRequest();
         payRequest.setDocumentnolist(documentnolist);