Explorar el Código

1.获取交管查询校验码接口编写完成,报错未知异常,请联系管理员暂未解决, 算费微服务返回报错信息_保信返回错误信息:录入的校验码有误此错误暂未复现暂不解决
2.处理商业险重复投保的问题,报价参数添加errorMsg商业险报错的错误码加以逻辑判断处理

hxl13994548489 hace 2 años
padre
commit
f19d06ed49

+ 11 - 0
src/main/java/com/ydtech/modules/order/components/bohai/BoHaiRequestApiComponent.java

@@ -242,4 +242,15 @@ public class BoHaiRequestApiComponent {
         return stringStringMap.get("content");
     }
 
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/7 10:01
+     *  @param request  请求
+     *  @param sysSourceCode  编码
+     *  @Description: 获取交管查询校验码接口  请求 3.17
+     */
+    public VehicleCheckCodeResponse getVehicleCheckCode(VehicleCheckCodeRequest request, String sysSourceCode) throws Exception {
+        return verificationResponse(request, properties.getUrl(), VehicleCheckCodeResponse.class, sysSourceCode, RequestType.Z00003);
+    }
 }

+ 38 - 1
src/main/java/com/ydtech/modules/order/entity/api/bohai/request/QuotationRequest.java

@@ -10,7 +10,6 @@ import com.ydtech.modules.ins.model.vo.KindInfoVo;
 import com.ydtech.modules.ins.model.vo.RiskInfoVo;
 import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
 import com.ydtech.modules.order.entity.api.bohai.constants.Coverages;
-import com.ydtech.modules.order.entity.api.bohai.constants.RequestType;
 import com.ydtech.modules.order.entity.config.BoHaiConfigureParameters;
 import com.ydtech.modules.order.entity.vo.bohai.BoHaiQuoteAccidentVo;
 import com.ydtech.utils.StringUtils;
@@ -51,6 +50,9 @@ public class QuotationRequest extends BoHaiBaseRequest {
     @JsonProperty("unAutos")
     private List<UnAutoDTO> unAutos;
 
+    //@JsonProperty("checkInfoList")
+    //private List<CheckInfoDTO> checkInfoList=null;
+
     public QuotationRequest(BoHaiConfigureParameters parameters,
                             List<RiskInfoVo> riskList,
                             List<KindInfoVo> kindList,
@@ -246,4 +248,39 @@ public class QuotationRequest extends BoHaiBaseRequest {
         @JsonProperty("busSrePhone")
         private String busSrePhone;
     }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/7 10:25
+     *  @Description:  交管验证码信息
+     */
+    @NoArgsConstructor
+    @Data
+    public static class CheckInfoDTO implements Serializable {
+
+        private static final long serialVersionUID = 422012236525748899L;
+        /***
+         *   Y	1:问题形式,2:图形验证码形式
+         */
+        @JsonProperty("answerFlag")
+        private String answerFlag;
+        /***
+         *   Y	问题类型为1时为回答问题的答案,
+         * 问题类型为2时为图形验证码值
+         */
+        @JsonProperty("answer")
+        private String answer;
+        /***
+         *  Y	返回值原样送请求
+         * Y:交强险,N:商业险
+         */
+        @JsonProperty("isTrafficQuestion")
+        private String isTrafficQuestion;
+
+        public CheckInfoDTO(String answerFlag, String answer, String isTrafficQuestion) {
+            this.answerFlag = answerFlag;
+            this.answer = answer;
+            this.isTrafficQuestion = isTrafficQuestion;
+        }
+    }
 }

+ 49 - 0
src/main/java/com/ydtech/modules/order/entity/api/bohai/request/VehicleCheckCodeRequest.java

@@ -0,0 +1,49 @@
+package com.ydtech.modules.order.entity.api.bohai.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.config.BoHaiConfigureParameters;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+
+/**
+ *  @version  获取交管查询校验码接口  入参参数封装
+ *  @author: hxl
+ *  @Date: 2024/4/7 9:44
+ *  @Description:
+ */ 
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class VehicleCheckCodeRequest extends BoHaiBaseRequest {
+
+    private static final long serialVersionUID = 895674542981964966L;
+
+    /**
+     * 车架号
+     */
+    @JsonProperty("vin")
+    private String vin;
+
+    /**
+     * 发动机号
+     */
+    @JsonProperty("engineNo")
+    private String engineNo;
+
+    /**
+     * 号牌号码
+     */
+    @JsonProperty("plateNo")
+    private String plateNo;
+
+
+    public VehicleCheckCodeRequest(BoHaiConfigureParameters parameters, String orderNo, String vin,String engineNo,String plateNo) {
+        this.setBaseParam(parameters, orderNo);
+        this.vin = vin;
+        this.engineNo = engineNo;
+        this.plateNo = plateNo;
+    }
+
+}

+ 3 - 2
src/main/java/com/ydtech/modules/order/entity/api/bohai/response/QuotationResponse.java

@@ -1,11 +1,9 @@
 package com.ydtech.modules.order.entity.api.bohai.response;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
-import com.ydtech.utils.StringUtils;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
-import org.apache.commons.lang3.ObjectUtils;
 
 import java.io.Serializable;
 import java.util.List;
@@ -178,6 +176,9 @@ public class QuotationResponse extends BoHaiBaseResponse {
             private String startDate;
             @JsonProperty("endDate")
             private String endDate;
+            //  add by hxl  2024-04-07
+            @JsonProperty("errorMsg")
+            private String errorMsg;
 
             @NoArgsConstructor
             @Data

+ 39 - 0
src/main/java/com/ydtech/modules/order/entity/api/bohai/response/VehicleCheckCodeResponse.java

@@ -0,0 +1,39 @@
+package com.ydtech.modules.order.entity.api.bohai.response;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+/**
+ *  @version   获取交管查询校验码接口  出参参数封装
+ *  @author: hxl
+ *  @Date: 2024/4/7 9:52
+ *  @Description:
+ */
+@NoArgsConstructor
+@Data
+public class VehicleCheckCodeResponse extends BoHaiBaseResponse {
+
+    private static final long serialVersionUID = -6468400287877400921L;
+
+
+    @JsonProperty("data")
+    private DataDTO data;
+
+    @NoArgsConstructor
+    @Data
+    public static class DataDTO {
+        /***
+         * 图形校验码字
+         */
+        @JsonProperty("checkCode")
+        private String checkCode;
+        /***
+         * 查询码
+         */
+        @JsonProperty("checkNo")
+        private String checkNo;
+    }
+}

+ 72 - 8
src/main/java/com/ydtech/modules/order/service/impl/BoHaiOrderApiServiceImpl.java

@@ -137,11 +137,14 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
 
         // 车辆实际价值
         String currentValue = vehicleConfirmationResponse.getData().getVehicleModels().get(0).getCurrentValue();
-
         // 4. 报价接口
         QuotationRequest quotationRequest = new QuotationRequest(parameters, quoteInfoVo.getRiskList(), quoteInfoVo.getKindList(),
                 currentValue, orderNo, carInfo, quoteVo.getAccidentalDrivingVo());
         QuotationResponse response = boHaiRequestApiComponent.quotation(quotationRequest, parameters.getSysSourceCode());
+        //商业险重复投保  重复投保保单信息 :保单号:314042303060007485车牌号:晋A881SR车架号:LMGAC1381K1535834发动机号:F699317保险公司代码:YAIC签单日期:20230414起保日期:202305030000终保日期:202405030000险别:机动车第三者责任保险,附加医保外用药责任险(机动车第三者责任保险)
+        response = getQuotationResponse(response,quotationRequest,parameters.getSysSourceCode());
+
+        //response = getQuotationResponseNew(quoteInfoVo, quoteVo, parameters, orderNo, carInfo, currentValue, response);
         //add by  2024-04-03  会发生重复投保   算费微服务返回报错信息_保信返回错误信息:
         // 平台返回错误信息号牌号码“晋J60L55”的保单发生重复投保,与其重复投保的其它公司的保单信息如下:投保确认码 02PAIC140023031919549498257741;保单号 13312993901973801278;起保日期 2023-04-11 00:00;终保日期 2024-04-11 00:00;号牌号码 晋J60L55;号牌种类 02;车架号 LZWADAGA5LG477030;发动机号 8LB1921291;地区 山西。
         //重新赋值交强的投保开始日期
@@ -156,18 +159,22 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
                     trafficPolicyDTOEndDateStr=trafficPolicyDTOEndDateStr+":00";
                     // 结束日期为59:59:59
                     String endDateStr = DateUtil_N.getNextYearDateStr(trafficPolicyDTOEndDateStr);
-                    QuotationRequest quotationRequestNew = new QuotationRequest(parameters, quoteInfoVo.getRiskList(), quoteInfoVo.getKindList(),
-                            currentValue, orderNo, carInfo, quoteVo.getAccidentalDrivingVo());
-                    QuotationRequest.TrafficPolicyDTO trafficPolicy = quotationRequestNew.getTrafficPolicy();
+                    QuotationRequest.TrafficPolicyDTO trafficPolicy = quotationRequest.getTrafficPolicy();
                     trafficPolicy.setStartDate(trafficPolicyDTOEndDateStr);
                     trafficPolicy.setEndDate(endDateStr);
-                    quotationRequestNew.setTrafficPolicy(trafficPolicy);
-                    response = boHaiRequestApiComponent.quotation(quotationRequestNew, parameters.getSysSourceCode());
+                    quotationRequest.setTrafficPolicy(trafficPolicy);
+                    response = boHaiRequestApiComponent.quotation(quotationRequest, parameters.getSysSourceCode());
+                    // 判断是否商业险重复投保
+                    response = getQuotationResponse(response,quotationRequest,parameters.getSysSourceCode());
+
                     if (!ResponseCode.R_Z00001.getCode().equals(response.getResponseCode())) {
-                        throw new SystemException(responseMsg);
+                        throw new SystemException(response.getResponseMsg());
                     }
                 }
-                //商业重复投保
+                // add by hxl  2024-04-07  报价接口报错  算费微服务返回报错信息_保信返回错误信息:录入的校验码有误
+                // 需要调用 获取交管查询校验码接口   传入到报价参数中  暂未复现不处理 注释掉
+            }else if(responseMsg.contains("录入的校验码有误")){
+                //response = getQuotationResponseNew(quoteInfoVo, quoteVo, parameters, orderNo, carInfo, currentValue, response);
             }else{
                 throw new SystemException(responseMsg);
             }
@@ -176,6 +183,63 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
 
         return getQuoteRespVo(response, quoteInfoVo, vehicleModelsDTO, ptlAgreementAttribution, orderNo, accidentalDrivingVo);
     }
+    /**
+     *  @version  报价传递获取交管查询校验码 报错  未知异常,请联系管理员
+     *  @author: hxl
+     *  @Date: 2024/4/7 16:50
+     *  @Description:
+     */
+    private QuotationResponse getQuotationResponseNew(BaseQuoteInfoVo quoteInfoVo, BaseQuoteVo<List<BoHaiQuoteAccidentVo>> quoteVo, BoHaiConfigureParameters parameters, String orderNo, CarInfoVo carInfo, String currentValue, QuotationResponse response) throws Exception {
+        VehicleCheckCodeRequest vehicleCheckCodeRequest = new VehicleCheckCodeRequest(parameters, orderNo, carInfo.getVinNo(), carInfo.getEngineNo(), carInfo.getLicenseNo());
+        VehicleCheckCodeResponse vehicleCheckCodeResponse = boHaiRequestApiComponent.getVehicleCheckCode(vehicleCheckCodeRequest, parameters.getSysSourceCode());
+        if(ResponseCode.R_Z00001.getCode().equals(vehicleCheckCodeResponse.getResponseCode())){
+            String checkCode = vehicleCheckCodeResponse.getData().getCheckCode();
+            //重新报价
+            QuotationRequest quotationRequestNew = new QuotationRequest(parameters, quoteInfoVo.getRiskList(), quoteInfoVo.getKindList(),
+                    currentValue, orderNo, carInfo, quoteVo.getAccidentalDrivingVo());
+            List<QuotationRequest.CheckInfoDTO> checkInfoList=new ArrayList<QuotationRequest.CheckInfoDTO>();
+            QuotationRequest.CheckInfoDTO  checkInfo=new QuotationRequest.CheckInfoDTO("2",checkCode,"N");
+            checkInfoList.add(checkInfo);
+            //quotationRequestNew.setCheckInfoList(checkInfoList);
+            response = boHaiRequestApiComponent.quotation(quotationRequestNew, parameters.getSysSourceCode());
+            if (!ResponseCode.R_Z00001.getCode().equals(response.getResponseCode())) {
+                throw new SystemException(response.getResponseMsg());
+            }
+        }
+        return response;
+    }
+
+    /**
+     *  @version  商业险发生重复投保
+     *  @author: hxl
+     *  @Date: 2024/4/7 16:07
+     *  @Description:
+     */
+    private QuotationResponse getQuotationResponse(QuotationResponse response, QuotationRequest quotationRequest,String sysSourCode) throws Exception {
+        if(ResponseCode.R_Z00001.getCode().equals(response.getResponseCode()) && response.getData().getBusinessPolicy().getErrorMsg()!=null){
+            String errorMsg = response.getData().getBusinessPolicy().getErrorMsg();
+            if(errorMsg.contains("重复投保")){
+                //重新给商业险的开始和结束时间赋值赋值重新填报
+                String businessPolicyEndDateStr = StringSubStringUtils.subjectStringContentByBusinessPolicyEndDate(errorMsg,"终保日期:");
+                if(!"".equals(businessPolicyEndDateStr) && !"".equals(businessPolicyEndDateStr)){
+                    //结束投保日期为开始日期,结束日期为结束投保日期后一年的日期
+                    businessPolicyEndDateStr=businessPolicyEndDateStr+"00";
+                    String beginDateStr = DateUtil_N.strAllToDateToStr(businessPolicyEndDateStr, "yyyyMMddHHmmss", "yyyy-MM-dd HH:mm:ss");
+                    // 结束日期为59:59:59
+                    String endDateStr = DateUtil_N.getNextYearDateStrTranfer(businessPolicyEndDateStr);
+                    QuotationRequest.BusinessPolicyDTO businessPolicy = quotationRequest.getBusinessPolicy();
+                    businessPolicy.setStartDate(beginDateStr);
+                    businessPolicy.setEndDate(endDateStr);
+                    quotationRequest.setBusinessPolicy(businessPolicy);
+                    response = boHaiRequestApiComponent.quotation(quotationRequest, sysSourCode);
+                    if (!ResponseCode.R_Z00001.getCode().equals(response.getResponseCode())) {
+                        throw new SystemException(response.getResponseMsg());
+                    }
+                }
+            }
+        }
+        return response;
+    }
 
     /**
      * @version 调用车型查询和车辆确认

+ 29 - 4
src/main/java/com/ydtech/modules/order/utils/StringSubStringUtils.java

@@ -13,10 +13,13 @@ public class StringSubStringUtils {
     public static void main(String[] args) {
        // String input = "ESB车型及纯风险保费查询服务返回错误信息_选择车辆的行业车型编码(BBWABBUA0005)在平台不存在!请使用正确的行业车型编码(BBWABBUB0007)";
        // String result = extractLastParenthesesContent(input);
-        String input="算费微服务返回报错信息_保信返回错误信息:平台返回错误信息号牌号码“晋J60L55”的保单发生重复投保,与其重复投保的其它公司的保单信息如下:投保确认码 02PAIC140023031919549498257741;保单号 13312993901973801278;起保日期 2023-04-11 00:00;终保日期 2024-04-11 00:00;号牌号码 晋J60L55;号牌种类 02;车架号 LZWADAGA5LG477030;发动机号 8LB1921291;地区 山西。";
-        String keywords=":";
-        String key="起保日期";
-        String result = subjectStringContentByTrafficPolicyDTOBenginDate(input,keywords,key);
+       // String input="算费微服务返回报错信息_保信返回错误信息:平台返回错误信息号牌号码“晋J60L55”的保单发生重复投保,与其重复投保的其它公司的保单信息如下:投保确认码 02PAIC140023031919549498257741;保单号 13312993901973801278;起保日期 2023-04-11 00:00;终保日期 2024-04-11 00:00;号牌号码 晋J60L55;号牌种类 02;车架号 LZWADAGA5LG477030;发动机号 8LB1921291;地区 山西。";
+       // String keywords=":";
+      //  String key="起保日期";
+       // String result = subjectStringContentByTrafficPolicyDTOBenginDate(input,keywords,key);
+         String input="重复投保保单信息 :保单号:314042303060007485车牌号:晋A881SR车架号:LMGAC1381K1535834发动机号:F699317保险公司代码:YAIC签单日期:20230414起保日期:202305030000终保日期:202405030000险别:机动车第三者责任保险,附加医保外用药责任险(机动车第三者责任保险)";
+         String keywords="终保日期:";
+        String result = subjectStringContentByBusinessPolicyEndDate(input, keywords);
         System.out.println(result);
     }
     /**
@@ -65,4 +68,26 @@ public class StringSubStringUtils {
         }
         return returnStr;
     }
+    /**
+    * @Description  截取商业险报错信息
+     * 重复投保保单信息 :保单号:314042303060007485车牌号:晋A881SR车架号:LMGAC1381K1535834发动机号:F699317保险公司代码:YAIC签单日期:20230414起保日期:202305030000终保日期:202405030000险别:机动车第三者责任保险,附加医保外用药责任险(机动车第三者责任保险)
+    * @Author  hxl
+    * @Date   2024/4/7 15:20
+    * @Param
+    * @Return
+    * @Exception
+    *
+    */
+    public static String subjectStringContentByBusinessPolicyEndDate(String allStr,String keywords) {
+        int startIndex = allStr.indexOf(keywords);
+        String returnStr="";
+        if (startIndex != -1) {
+            //截取与其重复投保的其它公司的保单信息如下:之后的字符串
+             allStr = allStr.substring(startIndex + keywords.length());
+            //202405030000险别:机动车第三者责任保险,附加医保外用药责任险(机动车第三者责任保险)
+            //截取前12为日期为终保日期
+            returnStr = allStr.substring(0, 11);
+        }
+        return returnStr;
+    }
 }

+ 57 - 0
src/main/java/com/ydtech/utils/DateUtil_N.java

@@ -25,6 +25,8 @@ public class DateUtil_N {
     private static final String DATEFORMAT = "yyyy-MM-dd";
 
     private static final String DATEFORMATALL = "yyyy-MM-dd HH:mm:ss";
+
+    private static final String DATEFORMATALLSHORT = "yyyyMMddHHmmss";
     public static Date getNextNDate;
 
     private DateUtil_N() {
@@ -766,4 +768,59 @@ public class DateUtil_N {
         String newDateStr = formatDate(newDate, "yyyy-MM-dd HH:mm:ss");
         return newDateStr;
     }
+    /**
+     *  @version  商业险字符串计算下一年的时间
+     *  @author: hxl
+     *  @Date: 2024/4/7 15:36
+     *  @Description:
+     */
+    public static String getNextYearDateStrTranfer(String str) {
+
+        Date beginDate = strAllToDateT(str,DATEFORMATALLSHORT);
+        Date nextYear = getNextYear(beginDate);
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(nextYear);
+        // 减去一秒
+        calendar.add(Calendar.SECOND, -1);
+        Date newDate = calendar.getTime();
+        String newDateStr = formatDate(newDate, "yyyy-MM-dd HH:mm:ss");
+        return newDateStr;
+    }
+
+   /**
+    *  @version  字符串转换格式 yyyyMMddHHmmss
+    *  @author: hxl
+    *  @Date: 2024/4/7 15:38
+    *  @Description:
+    */
+    public static Date strAllToDateT(String str,String formatStr) {
+
+        SimpleDateFormat format = new SimpleDateFormat(formatStr);
+        Date date = null;
+        try {
+            date = format.parse(str);
+        } catch (ParseException e) {
+            logger.info(e.getMessage());
+        }
+        return date;
+    }
+    /**
+     *  @version  格式化字符串
+     *  @author: hxl
+     *  @Date: 2024/4/7 16:40
+     *  @Description:
+     */
+    public static String strAllToDateToStr(String dateString,String formatStrOld,String formatStrNew) {
+
+        SimpleDateFormat inputFormat = new SimpleDateFormat(formatStrOld);
+        SimpleDateFormat outputFormat = new SimpleDateFormat(formatStrNew);
+        String formattedDate="";
+        try {
+            Date date = inputFormat.parse(dateString);
+            formattedDate = outputFormat.format(date);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return formattedDate;
+    }
 }