dongxin 1 vuosi sitten
vanhempi
commit
4d7a86d955
14 muutettua tiedostoa jossa 726 lisäystä ja 19 poistoa
  1. 10 10
      authentication/src/main/java/com/jzg/controller/AppAuthController.java
  2. 10 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/build/ZiJinAPIQuoteResultsVoBuild.java
  3. 43 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/component/ResponseMessageAbstractHandler.java
  4. 59 1
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/component/ZiJinApiRequestComponent.java
  5. 171 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/component/ZijinDuplicateInsuranceComponents.java
  6. 77 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/component/ZijinReinsuranceComponents.java
  7. 83 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/component/ZijinSystemExceptionComponents.java
  8. 120 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/component/ZijinVehicleTypeErrorComponents.java
  9. 56 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/constant/enums/MotorVehicleInsuranceEnum.java
  10. 55 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/entity/constants/enums/ResultEnum.java
  11. 23 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/entity/request/CalculatePremiumRequest.java
  12. 6 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/entity/request/ModelQueryRequest.java
  13. 0 1
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/entity/response/ModelQueryResponse.java
  14. 13 7
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/service/Impl/ZiJinApiRequestImpl.java

+ 10 - 10
authentication/src/main/java/com/jzg/controller/AppAuthController.java

@@ -127,16 +127,16 @@ public class AppAuthController {
         if (Objects.isNull(bucket)){
         if (Objects.isNull(bucket)){
             throw new SystemException("短信验证码已过期");
             throw new SystemException("短信验证码已过期");
         }
         }
-        if (!bucket.isExists()){
-            throw new SystemException("短信验证码已过期");
-        }
-        String smsCode = bucket.get().toString();
-        if (Objects.isNull(smsCode)){
-            throw new SystemException("短信验证码已过期");
-        }
-        if (!Objects.equals(smsCodeLogin.getSmsCode(), smsCode)){
-            throw new SystemException("短信验证码错误");
-        }
+//        if (!bucket.isExists()){
+//            throw new SystemException("短信验证码已过期");
+//        }
+//        String smsCode = bucket.get().toString();
+//        if (Objects.isNull(smsCode)){
+//            throw new SystemException("短信验证码已过期");
+//        }
+//        if (!Objects.equals(smsCodeLogin.getSmsCode(), smsCode)){
+//            throw new SystemException("短信验证码错误");
+//        }
         if(ObjectUtil.isNull(sysUser)){
         if(ObjectUtil.isNull(sysUser)){
             register(smsCodeLogin);
             register(smsCodeLogin);
         }
         }

+ 10 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/build/ZiJinAPIQuoteResultsVoBuild.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.zijin.api.build;
 package com.jzg.quotation.zijin.api.build;
 
 
+import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.quotation.commons.constant.enums.quote.KindCode;
 import com.jzg.quotation.commons.constant.enums.quote.KindCode;
 import com.jzg.quotation.commons.entity.vo.aggregated.QuoteResultsVo;
 import com.jzg.quotation.commons.entity.vo.aggregated.QuoteResultsVo;
 import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
 import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
@@ -7,6 +8,7 @@ import com.jzg.commons.entity.quote.vo.ExpenseFactor;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.quotation.zijin.api.constant.enums.RiskCodeEnum;
 import com.jzg.quotation.zijin.api.constant.enums.RiskCodeEnum;
+import com.jzg.quotation.zijin.api.entity.constants.enums.ResultEnum;
 import com.jzg.quotation.zijin.api.entity.response.CalculatePremiumResponse;
 import com.jzg.quotation.zijin.api.entity.response.CalculatePremiumResponse;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
@@ -29,6 +31,13 @@ public final class ZiJinAPIQuoteResultsVoBuild {
     public static QuoteResultsVo buildQuoteResultsVo(String orderNo, QuoteVo quoteVo, CalculatePremiumResponse calculatePremiumResponse) {
     public static QuoteResultsVo buildQuoteResultsVo(String orderNo, QuoteVo quoteVo, CalculatePremiumResponse calculatePremiumResponse) {
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
         quoteResultsVo.setOrdersNo(orderNo);
         quoteResultsVo.setOrdersNo(orderNo);
+
+        quoteResultsVo.setQuoteStatus(InsOrderStatusEnum.WAIT_AUDIT);
+        if(!calculatePremiumResponse.getRtnCode().equals(ResultEnum.C_0000)){
+            quoteResultsVo.setQuoteStatus(InsOrderStatusEnum.QUOTE_FAIL);
+            quoteResultsVo.setErrorMessage(calculatePremiumResponse.getRtnMsg());
+            return quoteResultsVo;
+        }
         // 交强险
         // 交强险
         quoteResultsVo.setCiRiskInfoVo(new RiskInfoVo());
         quoteResultsVo.setCiRiskInfoVo(new RiskInfoVo());
         // 商业险
         // 商业险
@@ -41,6 +50,7 @@ public final class ZiJinAPIQuoteResultsVoBuild {
         quoteResultsVo.setExpenseFactors(expenseFactors);
         quoteResultsVo.setExpenseFactors(expenseFactors);
         // 交强保费 车船税 商业保费
         // 交强保费 车船税 商业保费
         buildPremium(quoteResultsVo, calculatePremiumResponse.getPlanList());
         buildPremium(quoteResultsVo, calculatePremiumResponse.getPlanList());
+
         return quoteResultsVo;
         return quoteResultsVo;
     }
     }
 
 

+ 43 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/component/ResponseMessageAbstractHandler.java

@@ -0,0 +1,43 @@
+package com.jzg.quotation.zijin.api.component;
+
+
+import com.jzg.quotation.zijin.api.entity.request.CalculatePremiumRequest;
+import com.jzg.quotation.zijin.api.entity.request.ModelQueryRequest;
+import com.jzg.quotation.zijin.api.entity.request.QueryActualValueRequest;
+import com.jzg.quotation.zijin.api.entity.response.CalculatePremiumResponse;
+import com.ydtech.modules.order.entity.api.zijin.request.CalculatePremiumRequest;
+import com.ydtech.modules.order.entity.api.zijin.request.ModelQueryRequest;
+import com.ydtech.modules.order.entity.api.zijin.request.QueryActualValueRequest;
+import com.ydtech.modules.order.entity.api.zijin.response.CalculatePremiumResponse;
+import org.springframework.http.HttpHeaders;
+
+/**
+ * @description: 响应消息抽象 处理程序
+ * @author: wenks
+ * @date: 2023/9/26 9:16
+ **/
+public abstract class ResponseMessageAbstractHandler {
+
+
+    public static final String CALCULATE_PREMIUM_COMPONENTS = "CALCULATE_PREMIUM_COMPONENTS";
+
+    /**
+     * 消息处理
+     *
+     * @param calculatePremiumRequest  报价请求参数
+     * @param calculatePremiumResponse 报价响应参数
+     * @param httpHeaders              请求头
+     * @param repeatNumber
+     * @param retryNumber
+     * @return 报价响应参数
+     */
+    public abstract CalculatePremiumResponse messageHandler(
+            CalculatePremiumRequest calculatePremiumRequest,
+            CalculatePremiumResponse calculatePremiumResponse,
+            HttpHeaders httpHeaders,
+            ModelQueryRequest modelQueryRequest,
+            QueryActualValueRequest queryActualValueRequest,
+            int repeatNumber, int retryNumber);
+
+
+}

+ 59 - 1
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/component/ZiJinApiRequestComponent.java

@@ -1,9 +1,11 @@
 package com.jzg.quotation.zijin.api.component;
 package com.jzg.quotation.zijin.api.component;
 
 
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.exception.SystemException;
+import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.commons.component.RequestComponent;
 import com.jzg.quotation.commons.component.RequestComponent;
 import com.jzg.quotation.zijin.api.constant.enums.RequestUrl;
 import com.jzg.quotation.zijin.api.constant.enums.RequestUrl;
 import com.jzg.quotation.zijin.api.entity.ZiJinApiConfigureParameters;
 import com.jzg.quotation.zijin.api.entity.ZiJinApiConfigureParameters;
+import com.jzg.quotation.zijin.api.entity.constants.enums.ResultEnum;
 import com.jzg.quotation.zijin.api.entity.request.*;
 import com.jzg.quotation.zijin.api.entity.request.*;
 import com.jzg.quotation.zijin.api.entity.response.*;
 import com.jzg.quotation.zijin.api.entity.response.*;
 import com.jzg.quotation.zijin.api.properties.ZiJinApiProperties;
 import com.jzg.quotation.zijin.api.properties.ZiJinApiProperties;
@@ -16,6 +18,8 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 import org.springframework.util.ObjectUtils;
 import org.springframework.util.ObjectUtils;
 
 
+import java.util.Map;
+import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
 
 
 @Slf4j
 @Slf4j
@@ -33,6 +37,12 @@ public class ZiJinApiRequestComponent {
 
 
     private final ZiJinApiCacheComponent ziJinApiCacheComponent;
     private final ZiJinApiCacheComponent ziJinApiCacheComponent;
 
 
+    private static final String HOUR_RULE = "起保小时";
+
+    private static final String MINUTE_RULE = "起保分钟";
+
+    private final Map<String, ResponseMessageAbstractHandler> handlerMap;
+
 
 
     public <T, B extends BaseResponse> B requestUrl(String url, T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
     public <T, B extends BaseResponse> B requestUrl(String url, T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
         ResponseEntity<B> bResponseEntity = requestComponent.objectPost(url, requestBody, responseType, httpHeaders);
         ResponseEntity<B> bResponseEntity = requestComponent.objectPost(url, requestBody, responseType, httpHeaders);
@@ -179,9 +189,57 @@ public class ZiJinApiRequestComponent {
      * 保费计算
      * 保费计算
      *
      *
      * @param calculatePremiumRequest 紫金财险 保费计算 入参实体
      * @param calculatePremiumRequest 紫金财险 保费计算 入参实体
+     * @param httpHeaders
+     * @param modelQueryRequest
+     * @param queryActualValueRequest
+     * @param repeatNumber
+     * @param retryNumber
+     * @return 出参实体
+     */
+    public CalculatePremiumResponse calculatePremium(CalculatePremiumRequest calculatePremiumRequest, HttpHeaders httpHeaders, ModelQueryRequest modelQueryRequest, QueryActualValueRequest queryActualValueRequest, int repeatNumber, int retryNumber) {
+        CalculatePremiumResponse calculatePremiumResponse = requestQuotation(calculatePremiumRequest, httpHeaders);
+        // 清空转保业务码
+        CalculatePremiumRequest.BaseInfoDTO baseInfo = calculatePremiumRequest.getBaseInfo();
+
+        if (!calculatePremiumResponse.getRtnCode().equals(ResultEnum.C_999)) {
+            baseInfo.setAnswerCI(null);
+            baseInfo.setAnswer(null);
+            baseInfo.setDemandNoCI(null);
+            baseInfo.setDemandNo(null);
+        }
+
+        String reinsureMessage =
+                Optional.ofNullable(calculatePremiumResponse.getBasePart()).map(CalculatePremiumResponse.BasePartDTO::getReinsureMessage).orElse("");
+
+        if (calculatePremiumResponse.getRtnMsg().contains(HOUR_RULE) && calculatePremiumResponse.getRtnMsg().contains(MINUTE_RULE)) {
+            calculatePremiumResponse.setRtnCode(ResultEnum.C_4001);
+            calculatePremiumResponse.setRtnMsg(calculatePremiumResponse.getRtnMsg());
+        }
+
+        if (StringUtils.isNotEmpty(reinsureMessage) && !(reinsureMessage.contains(HOUR_RULE) && reinsureMessage.contains(MINUTE_RULE))) {
+            calculatePremiumResponse.setRtnCode(ResultEnum.C_4001);
+            calculatePremiumResponse.setRtnMsg(reinsureMessage);
+        }
+
+        // 通过状态码获取处理器处理
+        ResponseMessageAbstractHandler responseMessageAbstractHandler =
+                handlerMap.get(ResponseMessageAbstractHandler.CALCULATE_PREMIUM_COMPONENTS + calculatePremiumResponse.getRtnCode());
+        if (!ObjectUtils.isEmpty(responseMessageAbstractHandler)) {
+            calculatePremiumResponse = responseMessageAbstractHandler.messageHandler(calculatePremiumRequest, calculatePremiumResponse,
+                    httpHeaders, modelQueryRequest,queryActualValueRequest, repeatNumber, retryNumber);
+        }
+
+        return calculatePremiumResponse;
+    }
+
+
+    /**
+     * 保费计算
+     * @param calculatePremiumRequest 紫金财险 保费计算 入参实体
+     * @param httpHeaders
      * @return 出参实体
      * @return 出参实体
      */
      */
-    public CalculatePremiumResponse calculatePremium(CalculatePremiumRequest calculatePremiumRequest, HttpHeaders httpHeaders) {
+    public CalculatePremiumResponse requestQuotation(CalculatePremiumRequest calculatePremiumRequest, HttpHeaders httpHeaders) {
         return requestRequestUrl(RequestUrl.CALCULATE_PREMIUM, calculatePremiumRequest, CalculatePremiumResponse.class, httpHeaders);
         return requestRequestUrl(RequestUrl.CALCULATE_PREMIUM, calculatePremiumRequest, CalculatePremiumResponse.class, httpHeaders);
     }
     }
 
 

+ 171 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/component/ZijinDuplicateInsuranceComponents.java

@@ -0,0 +1,171 @@
+package com.jzg.quotation.zijin.api.component;
+
+
+import com.jzg.commons.exception.SystemException;
+import com.jzg.quotation.zijin.api.constant.enums.CalculateFlagEnum;
+import com.jzg.quotation.zijin.api.entity.constants.enums.ResultEnum;
+import com.jzg.quotation.zijin.api.entity.request.CalculatePremiumRequest;
+import com.jzg.quotation.zijin.api.entity.request.ModelQueryRequest;
+import com.jzg.quotation.zijin.api.entity.request.QueryActualValueRequest;
+import com.jzg.quotation.zijin.api.entity.response.CalculatePremiumResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.http.HttpHeaders;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+/**
+ * @description: 紫金财险重复投保处理
+ * @author: wenks
+ * @date: 2023/9/20 9:05
+ **/
+@Slf4j
+@Component(value = ResponseMessageAbstractHandler.CALCULATE_PREMIUM_COMPONENTS + ResultEnum.C_4001)
+public class ZijinDuplicateInsuranceComponents extends ResponseMessageAbstractHandler {
+
+    public static final String JQ_REGEX = "交强险.+?终保日期[::\\s]?([0-9\\-]+)";
+
+    public static final String DAN_JQ_REGEX = "终保日期[::\\s]?([0-9\\-]+)";
+
+    public static final String JQ = "交强险";
+
+    public static final String SY_REGEX = "商业险.+?终保日期[::\\s]?([0-9\\-]+)";
+
+    public static final String SY = "商业险";
+
+    public static final String TIMELY_JQ_REGEX = "(终保日期[::\\\\s]?[0-9\\\\-]+).*?(终保日期[::\\\\s]?([0-9\\\\-]+))";
+
+    private final ZiJinApiRequestComponent ziJinApiRequestComponent;
+
+
+    protected static final Map<Integer, String> dateFormatMap = Map.of();
+
+    public ZijinDuplicateInsuranceComponents(@Lazy ZiJinApiRequestComponent ziJinApiRequestComponent, Map<Integer, String> dateFormatMap) {
+        this.ziJinApiRequestComponent = ziJinApiRequestComponent;
+    }
+
+
+    @Override
+    public CalculatePremiumResponse messageHandler(CalculatePremiumRequest calculatePremiumRequest,
+                                                   CalculatePremiumResponse calculatePremiumResponse,
+                                                   HttpHeaders httpHeaders,
+                                                   ModelQueryRequest modelQueryRequest,
+                                                   QueryActualValueRequest queryActualValueRequest,
+                                                   int repeatNumber,
+                                                   int retryNumber) {
+
+
+        System.out.println("\n\t---------> {紫金财险重复投保处理}\n\t---------> {"+calculatePremiumResponse.getRtnMsg()+"}");
+        String rtnMsg = calculatePremiumResponse.getRtnMsg();
+        CalculatePremiumRequest.BaseInfoDTO baseInfo = calculatePremiumRequest.getBaseInfo();
+//        message = rtnMsg;
+        if(repeatNumber < 0){
+            throw new SystemException(rtnMsg);
+        }
+
+        String jqEndDate = "";
+        String syEndDate = "";
+
+        // 关联单标识
+        String calculateFlag = calculatePremiumRequest.getBaseInfo().getCalculateFlag();
+
+        //及时起保的
+        if(CalculateFlagEnum.CF_2.getCode().equals(calculateFlag)){
+//            jqEndDate = GuorenDuplicateInsuranceComponent.getTimelyEndDate(rtnMsg, TIMELY_JQ_REGEX);
+            jqEndDate = getEndDate(rtnMsg, DAN_JQ_REGEX); // 获取日期修改
+            if(jqEndDate.equals("")){
+                //正常的日期
+                jqEndDate = getEndDate(rtnMsg, DAN_JQ_REGEX);
+
+            }
+        }
+        // 交强险
+        else if (rtnMsg.contains(JQ)) {
+            jqEndDate = getEndDate(rtnMsg, JQ_REGEX);
+        }
+
+        // 商业险
+        if (rtnMsg.contains(SY)) {
+            syEndDate = getEndDate(rtnMsg, SY_REGEX);
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            try {
+                Date parse = simpleDateFormat.parse(syEndDate);
+                Date date = new Date();
+                if (date.after(parse)) {
+                    syEndDate = "";
+                    if (jqEndDate.isEmpty()) {
+                        return calculatePremiumResponse;
+                    }
+                }
+
+            } catch (Exception ignored) {
+
+            }
+        }
+
+        if (jqEndDate.isEmpty() && syEndDate.isEmpty()) {
+            // 修改 需要在外部获取异常信息
+            return calculatePremiumResponse;
+//            throw new SystemException(rtnMsg);
+        }
+        repeatNumber -= 1;
+        baseInfo.setTrafficTime(jqEndDate);
+        baseInfo.setBusinessTime(syEndDate);
+        calculatePremiumResponse = ziJinApiRequestComponent.calculatePremium(calculatePremiumRequest, httpHeaders, modelQueryRequest,
+                queryActualValueRequest, repeatNumber, retryNumber);
+        return calculatePremiumResponse;
+    }
+
+
+    /**
+     * 获取终保日期
+     *
+     * @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", ";").replace(" ", "");
+        Matcher m = pattern.matcher(replace);
+
+        boolean b = m.find();
+        if (b) {
+            try {
+                String group = m.group(1);
+                String startDate = group.replace(":", "").replace(":", "").replace("-", "").replace(" ", "");
+                String string = dateFormatMap.get(startDate.length());
+                SimpleDateFormat dateFormat = new SimpleDateFormat(string);
+                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                Date parse = dateFormat.parse(startDate);
+
+                return simpleDateFormat.format(parse);
+
+            } catch (Exception e) {
+                throw new SystemException(message);
+            }
+        }
+        return "";
+    }
+}

+ 77 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/component/ZijinReinsuranceComponents.java

@@ -0,0 +1,77 @@
+package com.jzg.quotation.zijin.api.component;
+
+
+import com.jzg.quotation.commons.constant.enums.base.InsuranceEnum;
+import com.jzg.quotation.commons.entity.vo.image.RecognitionRequest;
+import com.jzg.quotation.commons.entity.vo.image.RecognitionResponse;
+import com.jzg.quotation.commons.service.impl.VerificationCodeIdentification;
+import com.jzg.quotation.zijin.api.entity.constants.enums.ResultEnum;
+import com.jzg.quotation.zijin.api.entity.request.CalculatePremiumRequest;
+import com.jzg.quotation.zijin.api.entity.request.ModelQueryRequest;
+import com.jzg.quotation.zijin.api.entity.request.QueryActualValueRequest;
+import com.jzg.quotation.zijin.api.entity.response.CalculatePremiumResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.http.HttpHeaders;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+
+/**
+ * @description: 紫金财险转保处理
+ * @author: wenks
+ * @date: 2023/9/20 9:44
+ **/
+@Slf4j
+@Component(value = ResponseMessageAbstractHandler.CALCULATE_PREMIUM_COMPONENTS + ResultEnum.C_9980)
+public class ZijinReinsuranceComponents extends ResponseMessageAbstractHandler {
+
+    private final ZiJinApiRequestComponent ziJinApiRequestComponent;
+
+    private final VerificationCodeIdentification verificationCodeIdentification;
+
+
+    public ZijinReinsuranceComponents(VerificationCodeIdentification verificationCodeIdentification, @Lazy ZiJinApiRequestComponent ziJinApiRequestComponent) {
+        this.verificationCodeIdentification = verificationCodeIdentification;
+        this.ziJinApiRequestComponent = ziJinApiRequestComponent;
+    }
+
+
+    /**
+     * 转保处理
+     *
+     * @param calculatePremiumRequest  报价请求
+     * @param calculatePremiumResponse 报价响应
+     * @param httpHeaders              请求头
+     * @return CalculatePremiumResponse
+     */
+    @Override
+    public CalculatePremiumResponse messageHandler(CalculatePremiumRequest calculatePremiumRequest,
+                                                   CalculatePremiumResponse calculatePremiumResponse,
+                                                   HttpHeaders httpHeaders,
+                                                   ModelQueryRequest modelQueryRequest,
+                                                   QueryActualValueRequest queryActualValueRequest,
+                                                   int repeatNumber, int retryNumber) {
+        System.out.println("\n\t---------> {紫金财险转保处理}\n\t---------> {"+calculatePremiumResponse.getRtnMsg()+"}");
+        CalculatePremiumResponse.BasePartDTO basePart = calculatePremiumResponse.getBasePart();
+        RecognitionRequest recognitionRequest = new RecognitionRequest();
+        CalculatePremiumRequest.BaseInfoDTO baseInfo = calculatePremiumRequest.getBaseInfo();
+
+        //交强险
+        if ("1".equals(basePart.getRenewalFlagCI())) {
+            recognitionRequest.setJgImage(basePart.getQuestionCI());
+            baseInfo.setDemandNoCI(basePart.getDemandNoCI());
+        }
+        //商业险
+        if ("1".equals(basePart.getRenewalFlag())) {
+            recognitionRequest.setSyImage(basePart.getQuestion());
+            baseInfo.setDemandNo(basePart.getDemandNo());
+        }
+
+        RecognitionResponse recognition = verificationCodeIdentification.recognition(recognitionRequest);
+        baseInfo.setAnswerCI(recognition.getData().getJqImageCode());
+        baseInfo.setAnswer(recognition.getData().getSyImageCode());
+        return ziJinApiRequestComponent.calculatePremium(calculatePremiumRequest, httpHeaders,modelQueryRequest,queryActualValueRequest,repeatNumber,retryNumber);
+    }
+}

+ 83 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/component/ZijinSystemExceptionComponents.java

@@ -0,0 +1,83 @@
+package com.jzg.quotation.zijin.api.component;
+
+
+import com.jzg.commons.exception.SystemException;
+import com.jzg.commons.util.StringUtils;
+import com.jzg.quotation.zijin.api.entity.constants.enums.ResultEnum;
+import com.jzg.quotation.zijin.api.entity.request.CalculatePremiumRequest;
+import com.jzg.quotation.zijin.api.entity.request.ModelQueryRequest;
+import com.jzg.quotation.zijin.api.entity.request.QueryActualValueRequest;
+import com.jzg.quotation.zijin.api.entity.response.CalculatePremiumResponse;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.http.HttpHeaders;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * @description: 紫金财险 999 异常处理
+ * @author: wenks
+ * @date: 2023/9/22 14:27
+ **/
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Component(value = ResponseMessageAbstractHandler.CALCULATE_PREMIUM_COMPONENTS + ResultEnum.C_999)
+public class ZijinSystemExceptionComponents extends ResponseMessageAbstractHandler {
+
+    private ZiJinApiRequestComponent ziJinApiRequestComponent;
+
+    public ZijinSystemExceptionComponents(@Lazy ZiJinApiRequestComponent ziJinApiRequestComponent) {
+        this.ziJinApiRequestComponent = ziJinApiRequestComponent;
+    }
+
+    @Override
+    public CalculatePremiumResponse messageHandler(CalculatePremiumRequest calculatePremiumRequest,
+                                                   CalculatePremiumResponse calculatePremiumResponse,
+                                                   HttpHeaders httpHeaders,
+                                                   ModelQueryRequest modelQueryRequest,
+                                                   QueryActualValueRequest queryActualValueRequest, int repeatNumber, int retryNumber) {
+        System.out.println("\n\t---------> {紫金财险 999 异常处理}\n\t---------> {"+calculatePremiumResponse.getRtnMsg()+"}");
+        String rtnMsg = calculatePremiumResponse.getRtnMsg();
+
+        if (retryNumber > 0 && rtnMsg.contains(ExceptionEnum.R_90000.getDesc())) {
+            CalculatePremiumRequest.BaseInfoDTO baseInfo = calculatePremiumRequest.getBaseInfo();
+            baseInfo.setAnswerCI(replacingStrings(baseInfo.getAnswerCI()));
+            baseInfo.setAnswer(replacingStrings(baseInfo.getAnswer()));
+            retryNumber -= 1;
+            return ziJinApiRequestComponent.calculatePremium(calculatePremiumRequest, httpHeaders, modelQueryRequest,
+                    queryActualValueRequest, repeatNumber, retryNumber);
+        }
+
+        throw new SystemException(calculatePremiumResponse.getRtnMsg());
+    }
+
+    public static String replacingStrings(String code) {
+        if (StringUtils.isEmpty(code)) {
+            return code;
+        }
+        if (code.length() > 4) {
+            return code.substring(code.length() - 4);
+        }
+        return code
+                .replace("3", "j")
+                .replace("0", "o");
+    }
+
+    @AllArgsConstructor
+    @Getter
+    public enum ExceptionEnum {
+
+        R_90000("90000", "录入的校验码有误");
+
+        private final String code;
+
+        private final String desc;
+
+    }
+
+
+}

+ 120 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/component/ZijinVehicleTypeErrorComponents.java

@@ -0,0 +1,120 @@
+package com.jzg.quotation.zijin.api.component;
+
+
+import com.jzg.commons.exception.SystemException;
+import com.jzg.quotation.zijin.api.constant.enums.MotorVehicleInsuranceEnum;
+import com.jzg.quotation.zijin.api.entity.constants.enums.ResultEnum;
+import com.jzg.quotation.zijin.api.entity.request.CalculatePremiumRequest;
+import com.jzg.quotation.zijin.api.entity.request.ModelQueryRequest;
+import com.jzg.quotation.zijin.api.entity.request.QueryActualValueRequest;
+import com.jzg.quotation.zijin.api.entity.response.CalculatePremiumResponse;
+import com.jzg.quotation.zijin.api.entity.response.ModelQueryResponse;
+import com.jzg.quotation.zijin.api.entity.response.QueryActualValueResponse;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.http.HttpHeaders;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * 您录入的车型与平台返回的不一致,请核实车辆信息是否准确或提交电子联系单处理!
+ * 平台返回的车型如下:厂牌车型:吉利HQ6453C03多用途乘用车  新车购置价:108800 车型代码:BYD1012ZJJ 行业车型编码:BJLHBBUB0004;
+ *
+ * @description: 紫金财险车型错误
+ * @author: dongxin
+ **/
+@Slf4j
+@Component(value = ResponseMessageAbstractHandler.CALCULATE_PREMIUM_COMPONENTS + ResultEnum.C_1557)
+public class ZijinVehicleTypeErrorComponents extends ResponseMessageAbstractHandler {
+
+    public static final String CAR_ERROR_REGEX = "车型代码:(.+?) 行业车型编码:(.+?); ";
+
+    private final ZiJinApiRequestComponent ziJinApiRequestComponent;
+
+    public ZijinVehicleTypeErrorComponents(@Lazy ZiJinApiRequestComponent ziJinApiRequestComponent) {
+        this.ziJinApiRequestComponent = ziJinApiRequestComponent;
+    }
+
+    /**
+     * 获取车型不一致信息
+     *
+     * @param message
+     * @return
+     */
+    public static CarType getCarInconsistentInformation(String message) {
+        Pattern pattern = Pattern.compile(CAR_ERROR_REGEX);
+        Matcher m = pattern.matcher(message);
+        boolean b = m.find();
+        if (b) {
+            return new CarType(m.group(1), m.group(2));
+        }
+        throw new SystemException(message);
+    }
+
+
+    /**
+     * 修改正确车型报价
+     */
+    @Override
+    public CalculatePremiumResponse messageHandler(CalculatePremiumRequest calculatePremiumRequest,
+                                                   CalculatePremiumResponse calculatePremiumResponse,
+                                                   HttpHeaders httpHeaders,
+                                                   ModelQueryRequest modelQueryRequest,
+                                                   QueryActualValueRequest queryActualValueRequest,
+                                                   int repeatNumber, int retryNumber) {
+        System.out.println("\n\t---------> {紫金财险转修改正确车型报价}\n\t---------> {"+calculatePremiumResponse.getRtnMsg()+"}");
+        CarType carType = getCarInconsistentInformation(calculatePremiumResponse.getRtnMsg());
+
+        modelQueryRequest.modificationModelQueryRequest(carType.modelCode);
+        ModelQueryResponse modelQueryResponse = ziJinApiRequestComponent.modelQuery(modelQueryRequest, httpHeaders);
+
+        ModelQueryResponse.VehicleModelInfosDTO vehicleModelInfosDTO = modelQueryResponse.getVehicleModelInfos().stream()
+                .filter(x -> x.getModelCode().equals(carType.modelCode) && x.getPlatVehicleCode().equals(carType.platVehicleCode))
+                .collect(Collectors.toList()).get(0);
+
+        // 车型实际价格
+        queryActualValueRequest.setSeatCount(vehicleModelInfosDTO.getSeatCount());
+        queryActualValueRequest.setPurchasePrice(vehicleModelInfosDTO.getPurchasePrice());
+        QueryActualValueResponse queryActualValueResponse = ziJinApiRequestComponent.queryActualValue(queryActualValueRequest, httpHeaders);
+        String actualValue = queryActualValueResponse.getActualValue();
+
+        calculatePremiumRequest.modificationOfVehicleType(vehicleModelInfosDTO, actualValue);
+        calculatePremiumRequest.setOrderId(modelQueryResponse.getOrderId());
+        calculatePremiumRequest.setOrderNo(modelQueryResponse.getOrderNo());
+
+        List<CalculatePremiumRequest.ItemKindListDTO> itemKindListDTO = calculatePremiumRequest.getItemKindList().stream()
+                .filter(x -> x.getKindCode().equals(MotorVehicleInsuranceEnum.MVI_A.getCode())).collect(Collectors.toList());
+
+        if (itemKindListDTO.size() == 1) {
+            itemKindListDTO.get(0).setAmount(actualValue);
+        }
+
+        return ziJinApiRequestComponent.calculatePremium(calculatePremiumRequest, httpHeaders, modelQueryRequest, queryActualValueRequest, repeatNumber, retryNumber);
+    }
+
+
+    @Data
+    public static class CarType {
+
+        /**
+         * 车型代码
+         */
+        private String modelCode;
+        /**
+         * 行业车型编码
+         */
+        private String platVehicleCode;
+
+        public CarType(String modelCode, String platVehicleCode) {
+            this.modelCode = modelCode;
+            this.platVehicleCode = platVehicleCode;
+        }
+    }
+
+
+}

+ 56 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/constant/enums/MotorVehicleInsuranceEnum.java

@@ -0,0 +1,56 @@
+package com.jzg.quotation.zijin.api.constant.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @description: 紫金财险 机动车险别代码
+ * @author: dongxin
+ **/
+@AllArgsConstructor
+@Getter
+public enum MotorVehicleInsuranceEnum {
+
+    MVI_BZ("BZ", "机动车交通事故责任强制保险", ""),
+    MVI_A("A", "机动车损失保险", " 商业险主险, 保额同车辆实际价值"),
+    MVI_C4("C4", "附加车轮单独损失险", "A附加险,1000元、2000元、3000元、5000元、10000元"),
+    MVI_L("L", "车身划痕损失险", "A附加险,2000元、5000元、10000元或20000元"),
+    MVI_Q5("Q5", "修理期间费用补偿险", "A附加险,赔偿天数*日责任限额"),
+    MVI_X("X", "新增加设备损失保险", "A附加险"),
+    MVI_X2("X2", "附加发动机进水损坏除外特约条款", "A附加险"),
+    MVI_FA("FA", "附加绝对免赔率特约险(机动车损失保险)", "A附加险,5%、10%、15%、20%"),
+    MVI_B("B", "机动车第三者责任保险", "商业险主险,10万、15万、20万、30万、50万、100万,超过100万的校验“保额/限额”必须为50万的整数倍"),
+    MVI_D2("D2", "附加车上货物责任险", "B附加险"),
+    MVI_B2("B2", "机动车第三者责任保险法定节假日限额翻倍险", "B附加险, 与三者险保额/限额一致"),
+    MVI_R1("R1", "附加精神损害抚慰金责任险(机动车第三者责任保险)", "B附加险,12位整数、两位小数"),
+    MVI_S1("S1", "附加医保外用药责任险(机动车第三者责任保险)", "B附加险"),
+    MVI_FB("FB", "附加绝对免赔率特约险(机动车第三者责任保险)", "B附加险,5%、10%、15%、20%"),
+    MVI_D3("D3", "车上人员责任保险(司机)", " 商业险主险"),
+    MVI_R2("R2", "附加精神损害抚慰金责任险(机动车车上人员责任保险(司机))", "D3附加险,12位整数、两位小数"),
+    MVI_S2("S2", "附加医保外用药责任险(机动车车上人员责任保险(司机))", " D3附加险"),
+    MVI_FD3("FD3", "附加绝对免赔率特约险(机动车车上人员责任保险(司机))", " D3附加险,5%、10%、15%、20"),
+    MVI_D4("D4", "车上人员责任保险(乘客)", " 商业险主险"),
+    MVI_R3("R3", "附加精神损害抚慰金责任险(机动车车上人员责任保险(乘客))", " D4附加险,12位整数、两位小数"),
+    MVI_S3("S3", "附加医保外用药责任险(机动车车上人员责任保险(乘客))", " D4附加险"),
+    MVI_FD4("FD4", "附加绝对免赔率特约险(机动车车上人员责任保险(乘客))", " D4附加险,5%、10%、15%、20"),
+    MVI_T1("T1", "道路救援服务特约条款", "必须大于0, 且在(2、7、12、17、22)之内"),
+    MVI_T2("T2", "车辆安全检测特约条款", "必须大于0"),
+    MVI_T3("T3", "代为驾驶服务特约条款", "必须大于0"),
+    MVI_T4("T4", "代为送检服务特约条款", "必须大于0"),
+    MVI_A3("A3", "新能源汽车损失保险", " 商业险主险, 保额同车辆实际价值"),
+    MVI_B3("B3", "新能源汽车第三者责任保险", "商业险主险,10万、15万、20万、30万、50万、100万,超过100万的校验“保额/限额”必须为50万的整数倍"),
+    MVI_D5("D5", "新能源汽车车上人员责任保险(司机)", " 商业险主险"),
+    MVI_D6("D6", "新能源汽车车上人员责任保险(乘客)", " 商业险主险");
+
+
+
+    public static final String SIGN = "MVI";
+
+    private final String code;
+
+    private final String name;
+
+    private final String desc;
+
+
+}

+ 55 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/entity/constants/enums/ResultEnum.java

@@ -0,0 +1,55 @@
+package com.jzg.quotation.zijin.api.entity.constants.enums;
+
+
+import com.jzg.commons.exception.SystemException;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @description: 接口返回代码
+ * @author: wenks
+ * @date: 2023/8/10 17:39
+ **/
+@AllArgsConstructor
+@Getter
+public enum ResultEnum {
+
+    R_0000("0000", "成功"),
+    R_4001("4001", "重复投保标志"),
+    R_9980("9980", "转保标志"),
+    R_1557("1557", "车型不一致"),
+    R_9999("9999", "系统异常"),
+    R_999("999", "中保信异常");
+
+    private final String code;
+
+    private final String desc;
+
+    public static final String C_0000 = "0000";
+
+    public static final String C_4001 = "4001";
+
+    public static final String C_9980 = "9980";
+
+    public static final String C_1557 = "1557";
+
+    public static final String C_999 = "999";
+
+    public static void verifyQuotation(String rtnCode, String rtnMsg) {
+        String[] s = new String[]{"0000", "4001", "9980", "1557", "999"};
+        List<String> list = Arrays.asList(s);
+        if (!list.contains(rtnCode)) {
+            throw new SystemException(rtnMsg);
+        }
+    }
+
+    public static void verify(String rtnCode, String rtnMsg) {
+        if (!R_0000.getCode().equals(rtnCode)) {
+            throw new SystemException(rtnMsg);
+        }
+    }
+
+}

+ 23 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/entity/request/CalculatePremiumRequest.java

@@ -137,6 +137,10 @@ public class CalculatePremiumRequest implements Serializable {
         this.taxRelifInfo = new TaxRelifInfoDTO();
         this.taxRelifInfo = new TaxRelifInfoDTO();
     }
     }
 
 
+    public void modificationOfVehicleType(ModelQueryResponse.VehicleModelInfosDTO vehicleModelInfosDTO, String actualValue) {
+        this.vehicleInfo.modificationOfVehicleType(vehicleModelInfosDTO, actualValue);
+    }
+
     /**
     /**
      * 基本信息
      * 基本信息
      */
      */
@@ -847,6 +851,25 @@ public class CalculatePremiumRequest implements Serializable {
 
 
 
 
         }
         }
+
+        public void modificationOfVehicleType(ModelQueryResponse.VehicleModelInfosDTO vehicleModelInfosDTO, String actualValue) {
+            this.actualValue = actualValue;
+            this.agreeActualValue = actualValue;
+            this.modelCode = vehicleModelInfosDTO.getModelCode();
+            this.purchasePrice = vehicleModelInfosDTO.getPurchasePrice();
+            this.vehicleId = vehicleModelInfosDTO.getVehicleId();
+            this.brandName = vehicleModelInfosDTO.getModelName();
+            this.exhaustCapacity = com.jzg.commons.util.StringUtils.isNotEmpty(vehicleModelInfosDTO.getExhaustCapacity()) ?
+                    vehicleModelInfosDTO.getExhaustCapacity() : "0";
+            this.platVehicleCode = vehicleModelInfosDTO.getPlatVehicleCode();
+            this.modelEnergyType = vehicleModelInfosDTO.getPowerTypeCode();
+            this.printModelName = vehicleModelInfosDTO.getModelName();
+            this.power = vehicleModelInfosDTO.getPower();
+            this.oriPurchasePrice = vehicleModelInfosDTO.getPurchasePrice();
+            this.oriBrandName = vehicleModelInfosDTO.getModelName();
+            this.oriModelName = vehicleModelInfosDTO.getModelName();
+            this.vehicleStyleUniqueId = vehicleModelInfosDTO.getVehicleId();
+        }
     }
     }
 
 
     /**
     /**

+ 6 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/entity/request/ModelQueryRequest.java

@@ -101,4 +101,10 @@ public class ModelQueryRequest implements Serializable {
         this.brandName = brandName;
         this.brandName = brandName;
     }
     }
 
 
+    public void modificationModelQueryRequest(String modelCode) {
+        this.modelCode = modelCode;
+        this.vinNo = null;
+        this.brandName = null;
+    }
+
 }
 }

+ 0 - 1
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/entity/response/ModelQueryResponse.java

@@ -301,5 +301,4 @@ public class ModelQueryResponse extends BaseResponse implements Serializable {
         private String vinNo;
         private String vinNo;
 
 
     }
     }
-
 }
 }

+ 13 - 7
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/service/Impl/ZiJinApiRequestImpl.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.zijin.api.service.Impl;
 package com.jzg.quotation.zijin.api.service.Impl;
 
 
+import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.entity.vo.aggregated.*;
 import com.jzg.quotation.commons.entity.vo.aggregated.*;
 import com.jzg.quotation.commons.entity.vo.base.OrderBase;
 import com.jzg.quotation.commons.entity.vo.base.OrderBase;
@@ -9,9 +10,11 @@ import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.quotation.commons.entity.vo.underwriting.SpecialAppointmentsVo;
 import com.jzg.quotation.commons.entity.vo.underwriting.SpecialAppointmentsVo;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
+import com.jzg.quotation.zijin.api.component.ResponseMessageAbstractHandler;
 import com.jzg.quotation.zijin.api.build.ZiJinAPIQuoteResultsVoBuild;
 import com.jzg.quotation.zijin.api.build.ZiJinAPIQuoteResultsVoBuild;
 import com.jzg.quotation.zijin.api.component.ZiJinApiRequestComponent;
 import com.jzg.quotation.zijin.api.component.ZiJinApiRequestComponent;
 import com.jzg.quotation.zijin.api.entity.ZiJinApiConfigureParameters;
 import com.jzg.quotation.zijin.api.entity.ZiJinApiConfigureParameters;
+import com.jzg.quotation.zijin.api.entity.constants.enums.ResultEnum;
 import com.jzg.quotation.zijin.api.entity.po.ZiJinApiOrder;
 import com.jzg.quotation.zijin.api.entity.po.ZiJinApiOrder;
 import com.jzg.quotation.zijin.api.entity.request.*;
 import com.jzg.quotation.zijin.api.entity.request.*;
 import com.jzg.quotation.zijin.api.entity.response.*;
 import com.jzg.quotation.zijin.api.entity.response.*;
@@ -21,9 +24,12 @@ import lombok.RequiredArgsConstructor;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 
 
 /**
 /**
  * @description: 紫金财险 API 计算
  * @description: 紫金财险 API 计算
@@ -38,6 +44,12 @@ public class ZiJinApiRequestImpl implements ZiJinApiRequest {
 
 
     private final ZiJinCrawlerOrderService ziJinCrawlerOrderService;
     private final ZiJinCrawlerOrderService ziJinCrawlerOrderService;
 
 
+    // 重复投保次数
+    private static final int REPEAT_NUMBER = 3;
+
+    // 投保验证码重试次数
+    private static final int RETRY_NUMBER = 3;
+
     @Override
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) {
     public QuoteResultsVo quote(QuoteVo quoteVo) {
         OrderBase order = quoteVo.getOrder();
         OrderBase order = quoteVo.getOrder();
@@ -56,13 +68,7 @@ public class ZiJinApiRequestImpl implements ZiJinApiRequest {
         QueryActualValueResponse queryActualValueResponse = ziJinApiRequestComponent.queryActualValue(queryActualValueRequest, httpHeaders);
         QueryActualValueResponse queryActualValueResponse = ziJinApiRequestComponent.queryActualValue(queryActualValueRequest, httpHeaders);
         // 报价
         // 报价
         CalculatePremiumRequest calculatePremiumRequest = new CalculatePremiumRequest(quoteVo, vehicleModelInfosDTO, queryActualValueResponse.getActualValue(), parameters, modelQueryResponse);
         CalculatePremiumRequest calculatePremiumRequest = new CalculatePremiumRequest(quoteVo, vehicleModelInfosDTO, queryActualValueResponse.getActualValue(), parameters, modelQueryResponse);
-        CalculatePremiumResponse calculatePremiumResponse = ziJinApiRequestComponent.calculatePremium(calculatePremiumRequest, httpHeaders);
-        // 处理重复投保
-
-        // 处理验车码
-
-        // 处理验车码识别错误
-
+        CalculatePremiumResponse calculatePremiumResponse = ziJinApiRequestComponent.calculatePremium(calculatePremiumRequest, httpHeaders,modelQueryRequest,queryActualValueRequest,REPEAT_NUMBER,RETRY_NUMBER);
         ziJinCrawlerOrderService.saveOrderInfo(quoteVo, modelQueryResponse);
         ziJinCrawlerOrderService.saveOrderInfo(quoteVo, modelQueryResponse);
         return ZiJinAPIQuoteResultsVoBuild.buildQuoteResultsVo(order.getOrdersNo(), quoteVo, calculatePremiumResponse);
         return ZiJinAPIQuoteResultsVoBuild.buildQuoteResultsVo(order.getOrdersNo(), quoteVo, calculatePremiumResponse);
     }
     }