瀏覽代碼

Merge remote-tracking branch 'origin/master'

wanghao 2 周之前
父節點
當前提交
215750f52a

+ 2 - 2
commons/src/main/java/com/jzg/commons/entity/vo/RuleAttrMappingVo.java

@@ -81,9 +81,9 @@ public class RuleAttrMappingVo {
         long between = ChronoUnit.YEARS.between(registrationDate, currentDate) + 1;
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleAge", String.valueOf(between)));
         //转续保 交强
-        ruleAttrMappingVoList.add(new RuleAttrMappingVo("JqRenewalOfInsurance", insOrdersOther.getJqRenewal() != null && insOrdersOther.getJqRenewal() == 2 ? "是" : "否"));
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("JqRenewalOfInsurance", insOrdersOther.getJqRenewal() != null && insOrdersOther.getJqRenewal() == 2 ? "1" : "0"));
         //转续保 商业
-        ruleAttrMappingVoList.add(new RuleAttrMappingVo("SyRenewalOfInsurance", insOrdersOther.getSyRenewal() != null && insOrdersOther.getSyRenewal() == 2 ? "是" : "否"));
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("SyRenewalOfInsurance", insOrdersOther.getSyRenewal() != null && insOrdersOther.getSyRenewal() == 2 ? "1" : "0"));
         // 车主
         InsOrdersCarUserInfo ownerInfo = insOrdersCarUserInfos.stream()
                 .filter(insOrdersCarUserInfo -> insOrdersCarUserInfo.getPolicyPersonType().equals(1)).findFirst().orElse(null);

+ 12 - 25
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/component/HengBangCrawlerRequestComponent.java

@@ -12,7 +12,6 @@ import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.commons.component.RequestComponent;
 import com.jzg.quotation.commons.constant.CacheConstant;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
-import com.jzg.quotation.commons.utils.DateUtil;
 import com.jzg.quotation.commons.utils.RequestObjectConversion;
 import com.jzg.quotation.hengbang.crawler.constant.RequestConstant;
 import com.jzg.quotation.hengbang.crawler.constant.enums.RequestUrl;
@@ -329,35 +328,23 @@ public class HengBangCrawlerRequestComponent {
                 if (status == 500) {
                     JSONObject resObj = JSONObject.parseObject(responseBody);
                     String detail = resObj.getString("detail");
-                    if (StrUtil.isNotBlank(detail) && detail.contains("重复投保")) {
-                        String time = extractDuplicateEndTime(detail);
-                        if (time != null) {
-                            String utcTime = DateUtil.toUtcDateTime(time);
-                            // 保司返回的终保时间直接作为起保时间会仍然重叠,统一调整为次日北京时间0点(已0点则不变)
-                            utcTime = DateUtil.getNextDayMidnightUtc(utcTime);
-                            // 根据重复投保类型分别设置起保时间:交强险只改 begintimeCi,商业险只改 begintimeBi
-                            // 注意:商业险错误信息不含"商业险平台返回",故通过"交强险平台返回"反推
-                            if (detail.contains("交强险平台返回")) {
-                                calculationRequest.setBegintimeCi(utcTime);
-                            } else {
-                                calculationRequest.setBegintimeBi(utcTime);
-                            }
-                            // 驾意险不支持即时起保:北京时间0点则直接复用,非0点则自动设为下一日0点
-                            calculationRequest.setBegintimeAccident(DateUtil.isBeijingMidnight(utcTime)
-                                    ? utcTime
-                                    : DateUtil.getNextDayMidnightUtc(utcTime));
-                            return getCalculationResult(calculationRequest, headers);
-                        } else {
-                            return StrUtil.isNotBlank(detail) ? detail : responseBody;
-                        }
-                    }
-                    return StrUtil.isNotBlank(detail) ? detail : responseBody;
+                    // HTTP 500 也可能是正常的重复投保业务提示。这里只转换响应格式,
+                    // 重试和起保时间调整统一由上层服务处理,避免首次报价在组件内递归重试后丢失提示。
+                    return JSON.toJSONString(new JSONObject()
+                            .fluentPut("status", status)
+                            .fluentPut("message", StrUtil.isNotBlank(detail) ? detail : responseBody)
+                            .fluentPut("responseBody", resObj.get("responseBody")));
                 } else if (status == 400) {
                     JSONObject resObj = JSONObject.parseObject(responseBody);
                     String title = resObj.getString("title");
-                    return StrUtil.isNotBlank(title) ? title : responseBody;
+                    return JSON.toJSONString(new JSONObject()
+                            .fluentPut("status", status)
+                            .fluentPut("message", StrUtil.isNotBlank(title) ? title : responseBody));
                 }
                 log.error("恒邦calculation接口返回非2xx: {}, 响应: {}", status, responseBody);
+                return JSON.toJSONString(new JSONObject()
+                        .fluentPut("status", status)
+                        .fluentPut("message", responseBody));
             }
 
             // Jackson解析响应

+ 24 - 2
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/service/Impl/HengBangCrawlerRequestImpl.java

@@ -168,6 +168,9 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
             return buildErrorResult(quoteVo);
         }
         String errorMsg = resJsonObj.getString("message");
+        if (errorMsg == null) {
+            errorMsg = "";
+        }
         // 提前记录重复投保信息,避免重试成功后丢失
         String duplicateMessage = errorMsg.contains("重复投保") ? errorMsg : null;
 
@@ -213,6 +216,9 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
                 return buildErrorResult(quoteVo);
             }
             errorMsg = resJsonObj.getString("message");
+            if (errorMsg == null) {
+                errorMsg = "";
+            }
         }
 
         if (errorMsg.contains("该车是转保车,请输入对应的转保验证码")) {
@@ -254,7 +260,19 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
      */
     private JSONObject callCalculation(HbCrawlerCalculationRequest calculationRequest, HttpHeaders headers) {
         String resJson = hbCrawlerRequestComponent.getCalculationResult(calculationRequest, headers);
-        return JSONObject.parseObject(resJson);
+        if (StrUtil.isBlank(resJson)) {
+            return null;
+        }
+        try {
+            JSONObject result = JSONObject.parseObject(resJson);
+            if (result != null) {
+                return result;
+            }
+        } catch (RuntimeException e) {
+            // 兼容旧版组件返回的纯文本错误,统一转换为业务 message 交给上层处理。
+            log.warn("恒邦calculation返回非JSON响应,按业务错误处理: {}", resJson, e);
+        }
+        return new JSONObject().fluentPut("message", resJson);
     }
 
     /**
@@ -262,7 +280,11 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
      */
     private String retryCalculation(HbCrawlerCalculationRequest calculationRequest, HttpHeaders headers) {
         JSONObject resJsonObj = callCalculation(calculationRequest, headers);
-        return resJsonObj != null ? resJsonObj.getString("message") : null;
+        if (resJsonObj == null) {
+            return null;
+        }
+        String message = resJsonObj.getString("message");
+        return message == null ? "" : message;
     }
 
     /**

文件差異過大導致無法顯示
+ 3 - 2
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/utils/HengBangAESUtil.java


部分文件因文件數量過多而無法顯示