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