|
|
@@ -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);
|