Explorar el Código

1.国任重复投保处理

wks hace 2 años
padre
commit
eb1ab0fe76

+ 5 - 2
src/main/java/com/ydtech/config/resttemplate/CustomResponseErrorHandler.java

@@ -19,12 +19,15 @@ public class CustomResponseErrorHandler implements ResponseErrorHandler {
     @Override
     public void handleError(ClientHttpResponse response) throws IOException {
         if (response.getStatusCode() == HttpStatus.REQUEST_TIMEOUT) {
-            throw new SystemException("服务器请求超时, 请重试!");
+            throw new SystemException("网络超时, 请重试!");
         }
         if (response.getStatusCode().value() > 500) {
-            throw new SystemException("远程服务器异常, 请重试!");
+            throw new SystemException("网络异常, 请重试!");
         }
         throw new SystemException("请求异常" + response.getStatusText());
     }
 
 }
+
+
+

+ 74 - 10
src/main/java/com/ydtech/modules/ins/model/guoren/PremiumReq.java

@@ -12,12 +12,14 @@ import com.ydtech.modules.ins.model.vo.CarInfoVo;
 import com.ydtech.modules.ins.model.vo.KindInfoVo;
 import com.ydtech.modules.ins.model.vo.RiskInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
+import com.ydtech.utils.DateTimeUtil;
 import com.ydtech.utils.InsUtils;
 import com.ydtech.utils.StringUtils;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -30,10 +32,15 @@ import java.util.List;
 @Data
 public class PremiumReq {
 
-
+    /**
+     * 交强险实体
+     */
     @JsonProperty(value = "ci")
     @JSONField(name = "ci")
     private CiDTO ci;
+    /**
+     * 商业险实体
+     */
     @JsonProperty(value = "bi")
     @JSONField(name = "bi")
     private BiDTO bi;
@@ -43,6 +50,12 @@ public class PremiumReq {
     @JsonProperty(value = "uuid")
     @JSONField(name = "uuid")
     private String uuid;
+    /**
+     * 商业险重复投保提示
+     */
+    @JsonProperty(value = "bireCoverMsg")
+    @JSONField(name = "bireCoverMsg")
+    private String bireCoverMsg;
 
     /**
      * 构造保费计算请求参数
@@ -80,15 +93,6 @@ public class PremiumReq {
             quoteReq.setBi(biDto);
         }
 
-
-//        Optional<RiskInfoVo> ciRiskInfo = riskList.stream().filter(x -> x.getRiskCode().equals("0507")).findFirst();
-//        Optional<RiskInfoVo> biRiskInfo = riskList.stream().filter(x -> x.getRiskCode().equals("0510")).findFirst();
-//
-//        CiDTO ciDto = buildCiDto(ciRiskInfo.get(),kindInfoVList);
-//        BiDTO biDto = buildBiDto(biRiskInfo.get(), kindInfoVList);
-//        quoteReq.setCi(ciDto);
-//        quoteReq.setBi(biDto);
-
         //车价查询uid
         quoteReq.setUuid(carPriceResult.getInputvo());
         //不超过业实际参考价格上下30%
@@ -550,6 +554,35 @@ public class PremiumReq {
         @JSONField(name = "prpTcarshipTax")
         private PrpTcarshipTaxDTO prpTcarshipTax;
 
+        public void setTrafficTime(String coverageEndDate) {
+            LocalDateTime start = DateTimeUtil.parseLocalDateTime(coverageEndDate, DateTimeUtil.DATETIME_PATTERN);
+            String newStartDate;
+            String newEndDate;
+
+            //及时起保
+            if (start.getHour() > 0) {
+                LocalDateTime end = start.plusYears(1L);
+                newStartDate = DateTimeUtil.format(start, DateTimeUtil.DATETIME_PATTERN);
+                newEndDate = DateTimeUtil.format(end, DateTimeUtil.DATETIME_PATTERN);
+
+                this.getPrpTmain().setStartHour(StringUtils.toString(start.getHour()));
+                this.getPrpTmain().setEndHour(StringUtils.toString(start.getHour()));
+                this.getPrpTmain().setImmeValidStartDate(newStartDate);
+                this.getPrpTmain().setImmeValidEndDate(newStartDate);
+                this.getPrpTmain().setImmeValiFlag("1");
+
+            } else {
+                LocalDateTime end = start.plusYears(1L).minusDays(1L);
+                newStartDate = DateTimeUtil.getStartTimeOfDayStr(start, DateTimeUtil.DATETIME_PATTERN);
+                newEndDate = DateTimeUtil.getEndTimeOfDayStr(end, DateTimeUtil.DATETIME_PATTERN);
+            }
+
+            this.getPrpTmain().setStartDate(newStartDate);
+            this.getPrpTmain().setEndDate(newEndDate);
+            this.getPrptitemkindList().get(0).setStartDate(newStartDate);
+            this.getPrptitemkindList().get(0).setEndDate(newEndDate);
+        }
+
         @NoArgsConstructor
         @Data
         public static class PrpTitemCarDTO {
@@ -615,6 +648,8 @@ public class PremiumReq {
             @JsonProperty(value = "startDate")
             @JSONField(name = "startDate")
             private String startDate;
+
+
         }
 
         @NoArgsConstructor
@@ -724,6 +759,34 @@ public class PremiumReq {
         @JSONField(name = "prpTmainRate")
         private PrpTmainRateDTO prpTmainRate;
 
+        public void setBusinessTime(String coverageEndDate) {
+            LocalDateTime start = DateTimeUtil.parseLocalDateTime(coverageEndDate, DateTimeUtil.DATETIME_PATTERN);
+            String newStartDate;
+            String newEndDate;
+            //及时起保
+            if (start.getHour() > 0) {
+                LocalDateTime end = start.plusYears(1L);
+                newStartDate = DateTimeUtil.format(start, DateTimeUtil.DATETIME_PATTERN);
+                newEndDate = DateTimeUtil.format(end, DateTimeUtil.DATETIME_PATTERN);
+                this.getPrpTmain().setStartHour(StringUtils.toString(start.getHour()));
+                this.getPrpTmain().setEndHour(StringUtils.toString(start.getHour()));
+                this.getPrpTmain().setImmeValidStartDate(newStartDate);
+                this.getPrpTmain().setImmeValidEndDate(newStartDate);
+                this.getPrpTmain().setImmeValiFlag("1");
+
+            } else {
+                LocalDateTime end = start.plusYears(1L).minusDays(1L);
+                newStartDate = DateTimeUtil.getStartTimeOfDayStr(start, DateTimeUtil.DATETIME_PATTERN);
+                newEndDate = DateTimeUtil.getEndTimeOfDayStr(end, DateTimeUtil.DATETIME_PATTERN);
+            }
+            this.getPrpTmain().setStartDate(newStartDate);
+            this.getPrpTmain().setEndDate(newEndDate);
+            this.getPrptitemkindList().forEach(x -> {
+                x.setStartDate(newStartDate);
+                x.setEndDate(newEndDate);
+            });
+        }
+
         @NoArgsConstructor
         @Data
         public static class PrpTitemCarDTO {
@@ -859,6 +922,7 @@ public class PremiumReq {
             @JsonProperty(value = "startDate")
             @JSONField(name = "startDate")
             private String startDate;
+
         }
 
         @NoArgsConstructor

+ 11 - 2
src/main/java/com/ydtech/modules/ins/model/guoren/PremiumResp.java

@@ -105,7 +105,7 @@ public class PremiumResp {
         private Object lastYearEndDate;
         @JsonProperty(value = "prpTChargingPostDataList")
         @JSONField(name = "prpTChargingPostDataList")
-        private List<?> prpTChargingPostDataList;
+        private List<PrpTChargingPostData> prpTChargingPostDataList;
         @JsonProperty(value = "ciLossCondition")
         @JSONField(name = "ciLossCondition")
         private Integer ciLossCondition;
@@ -144,7 +144,8 @@ public class PremiumResp {
         private Integer biprofit;
         @JsonProperty(value = "prpTenGearAllocationFeeList")
         @JSONField(name = "prpTenGearAllocationFeeList")
-        private List<?> prpTenGearAllocationFeeList;
+        private List<PrpTenGearAllocationFeeVo> prpTenGearAllocationFeeList;
+
         @JsonProperty(value = "ciInsureDemandPay")
         @JSONField(name = "ciInsureDemandPay")
         private List<CIInsureDemandPayVo> ciInsureDemandPay;
@@ -220,6 +221,14 @@ public class PremiumResp {
             private String InsurerArea;
         }
 
+        @NoArgsConstructor
+        @Data
+        public static class PrpTChargingPostData{}
+
+        @NoArgsConstructor
+        @Data
+        public static class PrpTenGearAllocationFeeVo{}
+
         @NoArgsConstructor
         @Data
         public static class CarShipTaxRespVODTO {

+ 128 - 0
src/main/java/com/ydtech/modules/order/components/gouren/GuorenDuplicateInsuranceComponent.java

@@ -0,0 +1,128 @@
+package com.ydtech.modules.order.components.gouren;
+
+
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.ins.model.guoren.PremiumReq;
+import com.ydtech.modules.ins.model.guoren.PremiumResp;
+import com.ydtech.utils.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @description: 国任财险重复投保
+ * @author: wenks
+ * @date: 2023/11/8 10:40
+ **/
+@Component
+public class GuorenDuplicateInsuranceComponent {
+
+    public static final String THE_FIRST_REGEX = "终保日期(.+?);";
+
+    public static final String THE_SECOND_REGEX = ".+终保日期(.+?);";
+
+    public static final String JQ = "交强险";
+
+    public static final String SY = "商业险";
+
+    public static final String TEST = "保费计算服务调用失败:<\\/br>交强险平台调用失败:号牌号码“晋AA346K”的保单发生重复投保,与其重复投保的其它公司的保单信息如下:投保确认码 02PICC140022112218491074173276;保单号 PDZA202214010000370638;起保日期 2022-11-18 00:00;终保日期 2023-11-18 00:00;号牌号码 晋AA346K;号牌种类 小型汽车号牌;车架号 LC0CG4CG0F1085522;发动机号 A15065963;地区 。承保公司 中国人民财产保险股份有限公司;;商业险重复投保上年保单信息:\\r\\n保单号:PDAA202214010000307454 \\r\\n车牌号:晋AA346K \\r\\n车架号:LC0CG4CG0F1085522 \\r\\n发动机号:A15065963 \\r\\n承保公司:中国人民财产保险股份有限公司  \\r\\n签单日期:2022-11-15  \\r\\n起保日期:2022-11-18  \\r\\n终保日期:2023-11-18\\r\\n承保平台险种(险别):机动车第三者责任保险,机动车车上人员责任保险(司机),机动车车上人员责任保险(乘客)\",";
+
+    protected static final Map<Integer, String> dateFormatMap;
+
+    static {
+        dateFormatMap = new HashMap<>();
+        dateFormatMap.put(8, "yyyyMMddHH");
+        dateFormatMap.put(10, "yyyyMMddHH");
+        dateFormatMap.put(12, "yyyyMMddHHmm");
+        dateFormatMap.put(16, "yyyyMMddHHmmss");
+    }
+
+    /**
+     * 获取终保日期
+     *
+     * @param rtnMsg 返回信息
+     * @param regex  正则
+     * @return 终保日期
+     */
+    public static String getEndDate(String rtnMsg, String regex) {
+        String endDate = getTheExpiryDate(rtnMsg, regex);
+        if (!endDate.isEmpty()) {
+            return endDate;
+        }
+        return "";
+    }
+
+    /**
+     * 获取终保日期
+     *
+     * @param message 重复投保返回信息
+     * @param regex   正则内容
+     * @return
+     */
+    public static String getTheExpiryDate(String message, String regex) {
+        Pattern pattern = Pattern.compile(regex);
+        String replace = message.replace("\\r", ";").replace("\\n", ";");
+        Matcher m = pattern.matcher(replace);
+
+        boolean b = m.find();
+        if (b) {
+            try {
+                String group = m.group(1);
+                String startDate = group.replace(":", "").replace("-", "").replace(" ", "");
+                String string = dateFormatMap.get(startDate.length());
+                SimpleDateFormat dateFormat = new SimpleDateFormat(string);
+                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                return simpleDateFormat.format(dateFormat.parse(startDate));
+            } catch (Exception e) {
+                throw new SystemException(message);
+            }
+
+
+        }
+        throw new SystemException(message);
+    }
+
+
+    public boolean processor(PremiumResp resp, List<String> requestInfoList, PremiumReq req) {
+        String jqEndDate = "";
+        String syEndDate = "";
+
+        if (StringUtils.isNotEmpty(req.getBireCoverMsg()) && req.getBireCoverMsg().contains("重复投保")) {
+            requestInfoList.add(req.getBireCoverMsg());
+            syEndDate = getTheExpiryDate(req.getBireCoverMsg(), THE_FIRST_REGEX);
+        }
+        String resultMsg = resp.getResultMsg();
+        //1. 交强重复投保 替换日期重新报价
+        if (StringUtils.isNotEmpty(resultMsg) && resultMsg.contains("重复投保")) {
+            requestInfoList.add(resultMsg);
+            jqEndDate = getEndDate(resultMsg, THE_FIRST_REGEX);
+            if (resp.getResultMsg().contains(SY)) {
+                syEndDate = getEndDate(resultMsg, THE_SECOND_REGEX);
+            }
+
+            if(StringUtils.isNotEmpty(syEndDate)){
+                // 商业险
+                PremiumReq.BiDTO bi = req.getBi();
+                bi.setBusinessTime(syEndDate);
+            }
+
+            if(StringUtils.isNotEmpty(jqEndDate)){
+                // 交强
+                PremiumReq.CiDTO ci = req.getCi();
+                ci.setTrafficTime(jqEndDate);
+            }
+
+            return true;
+        }
+
+        return false;
+
+    }
+
+
+}

+ 6 - 2
src/main/java/com/ydtech/modules/order/service/impl/GuorenOrderApiServiceImpl.java

@@ -20,6 +20,7 @@ import com.ydtech.modules.ins.model.vo.*;
 import com.ydtech.modules.ins.model.ya.YaQuoteInfoVo;
 import com.ydtech.modules.order.components.ConfigureParametersComponents;
 import com.ydtech.modules.order.components.InsOrdersComponents;
+import com.ydtech.modules.order.components.gouren.GuorenDuplicateInsuranceComponent;
 import com.ydtech.modules.order.components.gouren.GuorenRequestApiComponent;
 import com.ydtech.modules.order.dao.InsTaskImagesMapper;
 import com.ydtech.modules.order.entity.InsAreaCompany;
@@ -54,6 +55,7 @@ import org.apache.commons.httpclient.methods.multipart.StringPart;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -98,8 +100,9 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
 
     private final GuorenRequestApiComponent guorenRequestApiComponent;
 
+    private final GuorenDuplicateInsuranceComponent guorenDuplicateInsuranceComponent;
 
-    public GuorenOrderApiServiceImpl(GuorenApiConfigurationProperties properties, InsOrdersComponents insOrdersComponents, GuorenRequestApiComponent guorenRequestApiComponent, InsAreaCompanyService insAreaCompanyService, InsOrdersService insOrdersService, EsmInsCompanyService esmInsCompanyService, ConfigureParametersComponents configureParametersComponents, InsTaskImagesMapper insTaskImagesMapper) {
+    public GuorenOrderApiServiceImpl(GuorenApiConfigurationProperties properties, InsOrdersComponents insOrdersComponents, GuorenRequestApiComponent guorenRequestApiComponent, InsAreaCompanyService insAreaCompanyService, InsOrdersService insOrdersService, EsmInsCompanyService esmInsCompanyService, ConfigureParametersComponents configureParametersComponents, InsTaskImagesMapper insTaskImagesMapper, GuorenDuplicateInsuranceComponent guorenDuplicateInsuranceComponent) {
         this.properties = properties;
         this.insOrdersComponents = insOrdersComponents;
         this.guorenRequestApiComponent = guorenRequestApiComponent;
@@ -108,6 +111,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
         this.esmInsCompanyService = esmInsCompanyService;
         this.configureParametersComponents = configureParametersComponents;
         this.insTaskImagesMapper = insTaskImagesMapper;
+        this.guorenDuplicateInsuranceComponent = guorenDuplicateInsuranceComponent;
     }
 
     /**
@@ -844,7 +848,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
             req.getCi().getPrpTmain().setAnswer(null);
             req.getBi().getPrpTmain().setAnswer(null);
             //1、 交强险重复投保 替换时间
-            boo = buildCiRepeatParam(resp, requestInfoList, req);
+            boo = guorenDuplicateInsuranceComponent.processor(resp, requestInfoList, req);
             if (boo) {
                 flag.append("重复投保处理 |");
                 continue;