Bladeren bron

渤海报价修改

Qchen 1 jaar geleden
bovenliggende
commit
4065d39e82

+ 15 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/build/BoHaiApiQuoteResultsVoBuild.java

@@ -108,4 +108,19 @@ public class BoHaiApiQuoteResultsVoBuild {
             quoteResultsVo.setNiPremium(unAutoPremium.getPremium());
         }
     }
+
+    /**
+     * 处理报价失败结果
+     * @param boHaiQuoteResponse
+     * @return
+     */
+    public static QuoteResultsVo buildQuoteFailResultsVo(QuotationResponse boHaiQuoteResponse) {
+        QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
+        // 交易流水号
+        quoteResultsVo.setCompanyOrderNo(boHaiQuoteResponse.getData().getBusUniqueId());
+        // 报价失败提示
+        quoteResultsVo.setErrorMessage(boHaiQuoteResponse.getResponseMsg());
+        quoteResultsVo.setQuoteStatus(InsOrderStatusEnum.QUOTE_FAIL);
+        return quoteResultsVo;
+    }
 }

+ 4 - 1
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/service/BoHaiApiOrderService.java

@@ -1,6 +1,9 @@
 package com.jzg.quotation.bohai.api.service;
 
 import com.jzg.quotation.bohai.api.entity.po.BoHaiApiOrder;
+import com.jzg.quotation.bohai.api.entity.response.GenerateOrderNoResponse;
+import com.jzg.quotation.bohai.api.entity.response.QuotationResponse;
+import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
 
 /**
  * @description: 渤海财险 mongodb操作数据
@@ -8,7 +11,7 @@ import com.jzg.quotation.bohai.api.entity.po.BoHaiApiOrder;
  * @date: 2025/3/6 11:27
  **/
 public interface BoHaiApiOrderService {
-    void save(BoHaiApiOrder bohaiApiOrder);
+    void save(QuoteVo quoteVo, QuotationResponse response, GenerateOrderNoResponse generateOrderNoResponse);
 
     BoHaiApiOrder findByOrdersNo(String ordersNo);
 

+ 10 - 2
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/service/impl/BoHaiApiOrderServiceImpl.java

@@ -1,8 +1,11 @@
 package com.jzg.quotation.bohai.api.service.impl;
 
 import com.jzg.quotation.bohai.api.entity.po.BoHaiApiOrder;
+import com.jzg.quotation.bohai.api.entity.response.GenerateOrderNoResponse;
+import com.jzg.quotation.bohai.api.entity.response.QuotationResponse;
 import com.jzg.quotation.bohai.api.repository.BoHaiApiOrderRepository;
 import com.jzg.quotation.bohai.api.service.BoHaiApiOrderService;
+import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -18,10 +21,15 @@ public class BoHaiApiOrderServiceImpl implements BoHaiApiOrderService {
     private final BoHaiApiOrderRepository bohaiApiOrderRepository;
 
     /**
-     * @param bohaiApiOrder
+     * @param quoteVo
+     * @param response
      */
     @Override
-    public void save(BoHaiApiOrder bohaiApiOrder) {
+    public void save(QuoteVo quoteVo, QuotationResponse response, GenerateOrderNoResponse generateOrderNoResponse) {
+        BoHaiApiOrder bohaiApiOrder = new BoHaiApiOrder();
+        bohaiApiOrder.setOrdersNo(quoteVo.getOrder().getOrdersNo());
+        bohaiApiOrder.setBusUniqueId(response.getData().getBusUniqueId());
+        bohaiApiOrder.setOrderNo(generateOrderNoResponse.getData().getOrderNo());
         bohaiApiOrderRepository.save(bohaiApiOrder);
     }
 

+ 66 - 12
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/service/impl/BoHaiApiRequestImpl.java

@@ -1,7 +1,9 @@
 package com.jzg.quotation.bohai.api.service.impl;
 
-import com.jzg.commons.entity.quote.vo.AccidentalDrivingVo;
+import com.jzg.commons.constants.InsuranceRisk;
+import com.jzg.commons.entity.quote.vo.*;
 import com.jzg.commons.exception.SystemException;
+import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.bohai.api.entity.request.*;
 import com.jzg.quotation.bohai.api.entity.response.*;
 import com.jzg.quotation.bohai.api.service.BoHaiApiOrderService;
@@ -9,9 +11,6 @@ import com.jzg.quotation.bohai.api.service.BoHaiApiRequest;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.entity.vo.aggregated.*;
 import com.jzg.quotation.commons.entity.vo.base.OrderBase;
-import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
-import com.jzg.commons.entity.quote.vo.CarInfoVo;
-import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.bohai.api.build.BoHaiApiQuoteResultsVoBuild;
 import com.jzg.quotation.bohai.api.component.BoHaiRequestApiComponent;
@@ -21,13 +20,14 @@ import com.jzg.quotation.bohai.api.entity.vo.BoHaiQuoteAccidentVo;
 import com.jzg.quotation.bohai.api.entity.vo.PersonAreaVo;
 import com.jzg.quotation.bohai.api.entity.BoHaiConfigureParameters;
 import com.jzg.quotation.bohai.api.util.StringSubStringUtils;
+import com.jzg.quotation.commons.utils.DateUtil;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @description:
@@ -41,8 +41,62 @@ public class BoHaiApiRequestImpl implements BoHaiApiRequest {
     private final BoHaiApiOrderService boHaiApiOrderService;
 
     private final BoHaiRequestApiComponent boHaiRequestApiComponent;
+
+    /**
+     * 重复报价
+     * @return
+     */
+    private QuotationResponse repeatQuote(QuotationRequest quotationRequest,String sysSourceCode,List<KindInfoVo> kindList,QuotationResponse quotationResponse) throws Exception {
+        quotationResponse = boHaiRequestApiComponent.quotation(quotationRequest, sysSourceCode);
+
+        List<KindInfoVo> collect =
+                kindList.stream().filter(x -> InsuranceRisk.BUSINESS.getCode().equals(x.getKindCode())).toList();
+        if (!collect.isEmpty()) {
+            if (ResponseCode.R_Z00001.getCode().equals(quotationResponse.getResponseCode()) && quotationResponse.getData().getBusinessPolicy().getErrorMsg() != null) {
+                String errorMsg = quotationResponse.getData().getBusinessPolicy().getErrorMsg();
+                if (errorMsg.contains("重复投保")) {
+                    //重新给商业险的开始和结束时间赋值赋值重新填报
+                    String businessPolicyEndDateStr = StringSubStringUtils.subjectStringContentByBusinessPolicyEndDate(errorMsg, "终保日期:");
+                    if (!StringUtils.isEmpty(businessPolicyEndDateStr) && !StringUtils.isEmpty((businessPolicyEndDateStr))) {
+                        //结束投保日期为开始日期,结束日期为结束投保日期后一年的日期
+                        businessPolicyEndDateStr = businessPolicyEndDateStr + "00";
+                        String beginDateStr = DateUtil.strAllToDateToStr(businessPolicyEndDateStr, "yyyyMMddHHmmss", "yyyy-MM-dd HH:mm:ss");
+                        // 结束日期为59:59:59
+                        String endDateStr = DateUtil.getNextYearDateStrTranfer(businessPolicyEndDateStr);
+                        QuotationRequest.BusinessPolicyDTO businessPolicy = quotationRequest.getBusinessPolicy();
+                        businessPolicy.setStartDate(beginDateStr);
+                        businessPolicy.setEndDate(endDateStr);
+                        quotationRequest.setBusinessPolicy(businessPolicy);
+                        quotationResponse = repeatQuote(quotationRequest, sysSourceCode, kindList,quotationResponse);
+                    }
+                }
+            }
+        }
+        if (ResponseCode.R_Z00004.getCode().equals(quotationResponse.getResponseCode())) {
+            String responseMsg = quotationResponse.getResponseMsg();
+            if (responseMsg.contains("发生重复投保")) {
+                //交强重复投保
+                String trafficPolicyDTOBenginDateStr = StringSubStringUtils.subjectStringContentByTrafficPolicyDTOBenginDate(responseMsg,
+                        ":", "起保日期");
+                String trafficPolicyDTOEndDateStr = StringSubStringUtils.subjectStringContentByTrafficPolicyDTOBenginDate(responseMsg,
+                        ":", "终保日期");
+                if (!StringUtils.isEmpty(trafficPolicyDTOBenginDateStr) && !StringUtils.isEmpty(trafficPolicyDTOEndDateStr)) {
+                    //结束投保日期为开始日期,结束日期为结束投保日期后一年的日期
+                    trafficPolicyDTOEndDateStr = trafficPolicyDTOEndDateStr + ":00";
+                    // 结束日期为59:59:59
+                    String endDateStr = DateUtil.getNextYearDateStr(trafficPolicyDTOEndDateStr);
+                    QuotationRequest.TrafficPolicyDTO trafficPolicy = quotationRequest.getTrafficPolicy();
+                    trafficPolicy.setStartDate(trafficPolicyDTOEndDateStr);
+                    trafficPolicy.setEndDate(endDateStr);
+                    quotationRequest.setTrafficPolicy(trafficPolicy);
+                    quotationResponse = repeatQuote(quotationRequest, sysSourceCode, kindList,quotationResponse);
+                }
+            }
+        }
+        return quotationResponse;
+    }
     @Override
-    public QuoteResultsVo quote(QuoteVo quoteVo) {
+    public QuoteResultsVo quote(QuoteVo quoteVo) throws Exception {
         OrderBase order = quoteVo.getOrder();
         AttributionInformationVo attributionInformationVo = order.getAttributionInformationVo();
         //配置信息
@@ -99,12 +153,12 @@ public class BoHaiApiRequestImpl implements BoHaiApiRequest {
         QuotationRequest quotationRequest = new QuotationRequest(parameters, quoteVo, currentValue, orderNo, accidentVos, discount);
 
         //报价接口调用
-        QuotationResponse quotationResponse;
-        try {
-            quotationResponse = boHaiRequestApiComponent.quotation(quotationRequest, parameters.getSysSourceCode());
-        } catch (Exception e) {
-            throw new SystemException(e.getMessage());
+        QuotationResponse quotationResponse = repeatQuote(quotationRequest,parameters.getSysSourceCode(),quoteVo.getKindInfoVo(),null);
+        //处理报价失败
+        if(!ResponseCode.R_Z00001.getCode().equals(quotationResponse.getResponseCode())) {
+            return BoHaiApiQuoteResultsVoBuild.buildQuoteFailResultsVo(quotationResponse);
         }
+        boHaiApiOrderService.save(quoteVo, quotationResponse, generateOrderNoResponse);
         return BoHaiApiQuoteResultsVoBuild.buildQuoteResultsVo(order.getOrdersNo(), quoteVo, quotationResponse);
     }
 
@@ -119,9 +173,9 @@ public class BoHaiApiRequestImpl implements BoHaiApiRequest {
         UnderwritingRequest underwritingRequest = new UnderwritingRequest(parameters, apiOrder.getOrderNo());
         UnderwritingResponse underwritingResponse;
         UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
-
         try {
             underwritingResponse = boHaiRequestApiComponent.underwriting(underwritingRequest, parameters.getSysSourceCode());
+
         } catch (Exception e) {
             throw new SystemException(e.getMessage());
         }

+ 1 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/service/QuotationBaseService.java

@@ -17,7 +17,7 @@ public interface QuotationBaseService {
      * @param quoteVo 报价实体
      * @return 报价信息
      */
-    QuoteResultsVo quote(QuoteVo quoteVo) throws JsonProcessingException;
+    QuoteResultsVo quote(QuoteVo quoteVo) throws Exception;
 
     /**
      * 提交核保 子订单

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

@@ -1,5 +1,9 @@
 package com.jzg.quotation.commons.utils;
 
+import com.jzg.commons.util.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.*;
@@ -16,6 +20,11 @@ import java.util.Locale;
  */
 public class DateUtil {
 
+    /**
+     * log日志
+     */
+    private static final Logger logger = LoggerFactory.getLogger(DateUtil.class);
+
     public static final String FULL_TIME_PATTERN = "yyyyMMddHHmmss";
 
     public static final String FULL_TIME_SPLIT_PATTERN = "yyyy-MM-dd HH:mm:ss";
@@ -263,6 +272,135 @@ public class DateUtil {
         return date;
 
     }
+    /***
+     * 格式化日期的方法
+     *
+     * @param date
+     *            带格式化的日期
+     * @param pattern
+     *            格式化的表达式 比如 yyyy-MM-dd
+     * @return 格式化后的字符串
+     */
+    public static String formatDate(Date date, String pattern) {
+        // 建立日期FORMAT的实例
+        SimpleDateFormat df = new SimpleDateFormat(pattern);
+        if (null != date) {
+            return df.format(date);
+        }
+        return null;
+    }
+
+
+    /**
+     *  @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;
+    }
+
+    /**
+     *  @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;
+    }
+
+    /***
+     * 获取传入日期下一年的日期对象
+     *
+     * @param date
+     *            传入的日期对象
+     * @return 下一年的日期对象
+     */
+    public static Date getNextYear(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(Calendar.YEAR, 1);
+        return calendar.getTime();
+    }
+
+    /**
+     *  @version  商业险字符串计算下一年的时间
+     *  @author: hxl
+     *  @Date: 2024/4/7 15:36
+     *  @Description:
+     */
+    public static String getNextYearDateStrTranfer(String str) {
+
+        Date beginDate = strAllToDateT(str,FULL_TIME_PATTERN);
+        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;
+    }
+
+    /**
+     * 字符串转换成日期  yyyy-MM-dd HH:mm:ss
+     *
+     * @param str
+     * @return date
+     * @作者:滑立敏
+     * @日期:2010-01-26
+     */
+    public static Date strAllToDate(String str) {
+
+        SimpleDateFormat format = new SimpleDateFormat(FULL_TIME_SPLIT_PATTERN);
+        Date date = null;
+        try {
+            if(StringUtils.isNotBlank(str)){
+                date = format.parse(str);
+            }
+        } catch (ParseException e) {
+            logger.info(e.getMessage());
+        }
+        return date;
+    }
+
+    /**
+     *  @version  获取明年的今天的日期数据
+     *  @author: hxl
+     *  @Date: 2024/4/3 18:53
+     *  @Description:
+     */
+    public static String getNextYearDateStr(String str) {
+        Date beginDate = strAllToDate(str);
+        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;
+    }
 
 
 

+ 23 - 0
tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/build/YangGuangApiQuoteResultsVoBuild.java

@@ -20,6 +20,12 @@ import java.util.stream.Collectors;
  */
 
 public final class YangGuangApiQuoteResultsVoBuild {
+    /**
+     * 构建报价结果
+     * @param quoteVo
+     * @param yangGuangAccuracyCalculateResponse
+     * @return
+     */
     public static QuoteResultsVo buildQuoteResultsVo(QuoteVo quoteVo, YangGuangAccuracyCalculateResponse yangGuangAccuracyCalculateResponse) {
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
         // 交易流水号
@@ -40,6 +46,23 @@ public final class YangGuangApiQuoteResultsVoBuild {
         return quoteResultsVo;
     }
 
+    /**
+     * 处理报价失败结果
+     * @param yangGuangAccuracyCalculateResponse
+     * @return
+     */
+    public static QuoteResultsVo buildQuoteFailResultsVo(YangGuangAccuracyCalculateResponse yangGuangAccuracyCalculateResponse) {
+        QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
+        // 交易流水号
+        quoteResultsVo.setCompanyOrderNo(yangGuangAccuracyCalculateResponse.getInfotransNo());
+        // 报价失败提示
+        quoteResultsVo.setErrorMessage(yangGuangAccuracyCalculateResponse.getErrorMessage());
+        quoteResultsVo.setQuoteStatus(InsOrderStatusEnum.QUOTE_FAIL);
+        return quoteResultsVo;
+    }
+
+
+
     /**
      * 处理商业险信息
      * @param kindInfoVo

+ 3 - 7
tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/service/impl/YangGuangApiRequestImpl.java

@@ -95,12 +95,8 @@ public class YangGuangApiRequestImpl implements YangGuangApiRequest {
         return handleSuccessfulQuote(response, quoteVo);
     }
 
-    private void handleFailedQuote(YangGuangAccuracyCalculateResponse response) {
-        if (response.getErrorMessage().contains("重复投保")) {
-//            insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
-            throw new SystemException(response.getErrorMessage());
-        }
-        throw new SystemException(response.getErrorMessage());
+    private QuoteResultsVo handleFailedQuote(YangGuangAccuracyCalculateResponse response) {
+        return YangGuangApiQuoteResultsVoBuild.buildQuoteFailResultsVo(response);
     }
 
     private QuoteResultsVo handleSuccessfulQuote(YangGuangAccuracyCalculateResponse response, QuoteVo quoteVo) {
@@ -143,7 +139,7 @@ public class YangGuangApiRequestImpl implements YangGuangApiRequest {
         UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
         if (yangGuangSubmitResponse.getErrorCode().equals("0")) {
             // 如果有驾意险 获取驾意险投保单号
-            if (yangGuangSubmitResponse.getPtptNonVehicleProductInformationList() != null) {
+            if (yangGuangSubmitResponse.getPtptNonVehicleProductInformationList().size() > 0) {
                 String jyApplyNo = yangGuangSubmitResponse.getPtptNonVehicleProductInformationList().get(0).getFcProposalNo(); // 驾意险投保单号
                 underwritingResultsVo.setJyApplyNo(jyApplyNo);
             }