Sfoglia il codice sorgente

fix 恒邦交三报错问题

liub 3 mesi fa
parent
commit
bd7f3bc600

+ 15 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/DateUtil.java

@@ -429,6 +429,21 @@ public class DateUtil {
         return toUtcDateTime(beijingTime);
     }
 
+    /**
+     * 获取指定UTC日期时间的下一天0点(北京时间)并转为UTC ISO8601格式
+     * 驾意险不支持即时起保,需调整起保日期为主险投保日期的下一日0时
+     *
+     * @param utcDateTime 主险起保UTC时间(ISO8601格式,如 2026-07-04T16:00:00.000Z)
+     * @return 下一天北京时间0点对应的UTC ISO8601格式
+     */
+    public static String getNextDayMidnightUtc(String utcDateTime) {
+        ZonedDateTime utcZoned = ZonedDateTime.parse(utcDateTime, DateTimeFormatter.ISO_DATE_TIME);
+        ZonedDateTime beijingZoned = utcZoned.withZoneSameInstant(ZoneId.of("Asia/Shanghai"));
+        LocalDate nextDay = beijingZoned.toLocalDate().plusDays(1);
+        String beijingTime = nextDay.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + " 00:00:00";
+        return toUtcDateTime(beijingTime);
+    }
+
     /**
      * 将北京时间(yyyy-MM-dd HH:mm:ss)转换为UTC时间(ISO8601格式)
      */

+ 36 - 19
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/entity/request/HbCrawlerCalculationRequest.java

@@ -84,17 +84,23 @@ public class HbCrawlerCalculationRequest extends HbBaseRequest {
         this.risktype = "0";
         if (Objects.nonNull(quoteVo.getCiRiskInfoVo())) {
             this.begintimeCi = DateUtil.toUtcDateTime(quoteVo.getCiRiskInfoVo().getStartDate());
-            this.begintimeAccident = DateUtil.getNextDayMidnightUtc();
             this.risktype = "1";
         }
         if (CollUtil.isNotEmpty(kindInfoVoList)) {
             this.epersonliabilityList = getEpersonliabilityList(kindInfoVoList, depreciationPrice);
             this.begintimeBi = DateUtil.toUtcDateTime(quoteVo.getBiRiskInfoVo().getStartDate());
-            this.begintimeAccident = DateUtil.getNextDayMidnightUtc();
             this.risktype = "2";
         } else {
             this.epersonliabilityList = new ArrayList<>();
         }
+        // 驾意险不支持即时起保,起保日期为主险投保日期的下一日0时(北京时间)
+        if ("2".equals(this.risktype) && this.begintimeBi != null) {
+            this.begintimeAccident = DateUtil.getNextDayMidnightUtc(this.begintimeBi);
+        } else if ("1".equals(this.risktype) && this.begintimeCi != null) {
+            this.begintimeAccident = DateUtil.getNextDayMidnightUtc(this.begintimeCi);
+        } else {
+            this.begintimeAccident = DateUtil.getNextDayMidnightUtc();
+        }
         // 驾意险列表需在 accidentEpolicyFlag 之前赋值
         this.accidentInsuranceList = getAccidentInsuranceList(quoteVo.getBiRiskInfoVo(), quoteVo.getAccidentalDrivings());
         this.plyappno = plyappno;
@@ -111,7 +117,7 @@ public class HbCrawlerCalculationRequest extends HbBaseRequest {
         this.carInsureDevices = new ArrayList<>();
         this.outofwarrantytype = "N";
         this.drivingtype = "";
-        this.endtimeAccident = null;
+        this.endtimeAccident = "";
     }
 
     public List<EpersonliabilityDTO> getEpersonliabilityList(List<KindInfoVo> kindInfoVoList, String depreciationPrice) {
@@ -189,17 +195,28 @@ public class HbCrawlerCalculationRequest extends HbBaseRequest {
         AccidentInsuranceDTO dto = new AccidentInsuranceDTO();
         dto.setNonriskcode(vo.getProductCode().split("_")[1]);
         dto.setProgramcode(vo.getProductCode());
-        // programname/companycode/begintime/endtime/relationcarowner 正确请求中均不包含,移除以避免保司API 500
-        dto.setSuminsured(parseNumeric("525000"));
-        dto.setSumgrosspremium(parseNumeric(vo.getPremium()));
+        dto.setProgramname("1119险种5座非营运客车保额525000保费99.9(山西)");
+        dto.setCompanycode("0107");
         dto.setIfdefault(true);
         dto.setBuynum(vo.getQuantity());
+        List<GgriskprogramdetailsDTO> detailsList = getGgriskprogramdetailsList(vo.getProductCode().split("_")[1], vo.getProductCode());
+        dto.setGgriskprogramdetailslist(detailsList);
         dto.setGgriskprogramclauselist(getGgriskprogramclauseList(vo.getProductCode().split("_")[1], vo.getProductCode()));
-        dto.setGgriskprogramdetailslist(getGgriskprogramdetailsList(vo.getProductCode().split("_")[1], vo.getProductCode()));
         dto.setGgriskprogramdeductiblelist(new ArrayList<>());
         List<GgriskprogramparamlDTO> ggriskprogramparamlist = new ArrayList<>();
-        ggriskprogramparamlist.add(new GgriskprogramparamlDTO("2021-05-19T07:00:00.000+0000", "subsidy", "99.9", "0107_1119_003", "2021-05-19T07:00:00.000+0000", "1"));
+        ggriskprogramparamlist.add(new GgriskprogramparamlDTO("2021-05-19T07:00:00.000+0000", "subsidy", "99.9", vo.getProductCode(), "2021-05-19T07:00:00.000+0000", "1"));
         dto.setGgriskprogramparamlist(ggriskprogramparamlist);
+
+        // 根据硬编码明细汇总计算 suminsured/sumgrosspremium,保证父子级数据一致
+        java.math.BigDecimal totalSuminsured = java.math.BigDecimal.ZERO;
+        java.math.BigDecimal totalGrossPremium = java.math.BigDecimal.ZERO;
+        for (GgriskprogramdetailsDTO detail : detailsList) {
+            totalSuminsured = totalSuminsured.add(new java.math.BigDecimal(detail.getKindsuminsured().toString()));
+            totalGrossPremium = totalGrossPremium.add(new java.math.BigDecimal(detail.getKindgrosspremium().toString()));
+        }
+        dto.setSuminsured(totalSuminsured);
+        // sumgrosspremium 使用硬编码值 99.9(与保司正确请求一致),不与 vo.getPremium() 挂钩
+        dto.setSumgrosspremium(parseNumeric("99.9"));
         return dto;
     }
 
@@ -276,7 +293,7 @@ public class HbCrawlerCalculationRequest extends HbBaseRequest {
         detail1.setKindunitinsured(parseNumeric("50000"));
         detail1.setKindsuminsured(parseNumeric("250000"));
         detail1.setKindunitpremium(parseNumeric("4.9"));
-        detail1.setKindgrosspremium(parseNumeric("54"));
+        detail1.setKindgrosspremium(parseNumeric("24.5"));
         list.add(detail1);
 
         // 机动车辆驾乘意外伤害保险意外残疾保险责任(2024款)
@@ -286,11 +303,11 @@ public class HbCrawlerCalculationRequest extends HbBaseRequest {
         detail2.setSerialno(2);
         detail2.setKindcode("1119067");
         detail2.setKindname("机动车辆驾乘意外伤害保险意外残疾保险责任(2024款)");
-        detail2.setKindrate(parseNumeric("0.09166"));
-        detail2.setKindunitinsured(parseNumeric("30000"));
-        detail2.setKindsuminsured(parseNumeric("240000"));
-        detail2.setKindunitpremium(parseNumeric("2.75"));
-        detail2.setKindgrosspremium(parseNumeric("22"));
+        detail2.setKindrate(parseNumeric("0.039"));
+        detail2.setKindunitinsured(parseNumeric("50000"));
+        detail2.setKindsuminsured(parseNumeric("250000"));
+        detail2.setKindunitpremium(parseNumeric("1.95"));
+        detail2.setKindgrosspremium(parseNumeric("9.75"));
         list.add(detail2);
 
         // 附加机动车辆驾乘意外伤害医疗保险(2024款)
@@ -300,11 +317,11 @@ public class HbCrawlerCalculationRequest extends HbBaseRequest {
         detail3.setSerialno(3);
         detail3.setKindcode("1119065");
         detail3.setKindname("附加机动车辆驾乘意外伤害医疗保险(2024款)");
-        detail3.setKindrate(parseNumeric("1.0001"));
-        detail3.setKindunitinsured(parseNumeric("3000"));
-        detail3.setKindsuminsured(parseNumeric("24000"));
-        detail3.setKindunitpremium(parseNumeric("3"));
-        detail3.setKindgrosspremium(parseNumeric("24"));
+        detail3.setKindrate(parseNumeric("2.626"));
+        detail3.setKindunitinsured(parseNumeric("5000"));
+        detail3.setKindsuminsured(parseNumeric("25000"));
+        detail3.setKindunitpremium(parseNumeric("13.13"));
+        detail3.setKindgrosspremium(parseNumeric("65.65"));
         list.add(detail3);
 
         return list;