소스 검색

紫金财险
1.重复投保修改
2.转保修改

wks 3 년 전
부모
커밋
5f8fe2a52e

+ 4 - 3
src/main/java/com/ydtech/modules/order/components/InsCrawlerOrderComponents.java

@@ -23,12 +23,12 @@ public class InsCrawlerOrderComponents {
         this.restTemplate = restTemplate;
     }
 
-    public <T, B> B post(String url, String companyId, String message, @Nullable T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
+    public <T, B> B post(String url, String logId, String message, @Nullable T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
         httpHeaders.setContentType(MediaType.APPLICATION_JSON);
         HttpEntity<T> yaQuoteInfoVoHttpEntity = new HttpEntity<>(requestBody, httpHeaders);
 
         String request = JSON.toJSONString(requestBody);
-        InsuranceLog.infoLog(companyId, "---------> {} \n\t---------> URL: {} \n\t---------> 请求参数: {}", message, url, request);
+        InsuranceLog.infoLog(logId, "---------> {} \n\t---------> URL: {} \n\t---------> 请求参数: {}", message, url, request);
         ResponseEntity<B> stringResponseEntity = restTemplate.postForEntity(url, yaQuoteInfoVoHttpEntity, responseType);
         B body = stringResponseEntity.getBody();
         if (body == null) {
@@ -36,7 +36,7 @@ public class InsCrawlerOrderComponents {
         }
 
         String response = JSON.toJSONString(body);
-        InsuranceLog.infoLog(companyId, "---------> {} \n\t---------> 响应参数:{}", message, response);
+        InsuranceLog.infoLog(logId, "---------> {} \n\t---------> 响应参数:{}", message, response);
         return body;
     }
 
@@ -56,5 +56,6 @@ public class InsCrawlerOrderComponents {
         return this.post(url, insuranceEnum.getPinyin(), message, requestBody, responseType, httpHeaders);
     }
 
+
 }
 

+ 34 - 0
src/main/java/com/ydtech/modules/order/components/VerificationCodeIdentification.java

@@ -0,0 +1,34 @@
+package com.ydtech.modules.order.components;
+
+
+import com.ydtech.modules.order.entity.crawler.request.RecognitionRequest;
+import com.ydtech.modules.order.entity.crawler.response.RecognitionResponse;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpHeaders;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * @description: 验证码识别
+ * @author: wenks
+ * @date: 2023/9/19 18:17
+ **/
+@Component
+public class VerificationCodeIdentification {
+
+    @Value("${image.identificationUrl}")
+    private String identificationUrl;
+
+    private final InsCrawlerOrderComponents insCrawlerOrderComponents;
+
+    public VerificationCodeIdentification(InsCrawlerOrderComponents insCrawlerOrderComponents) {
+        this.insCrawlerOrderComponents = insCrawlerOrderComponents;
+    }
+
+    public RecognitionResponse recognition(RecognitionRequest request) {
+        final String identificationLogId = "verification-code";
+        return insCrawlerOrderComponents.post(identificationUrl, identificationLogId, "验证码识别", request, RecognitionResponse.class, new HttpHeaders());
+    }
+
+
+}

+ 89 - 0
src/main/java/com/ydtech/modules/order/components/zj/ZijinDuplicateInsuranceComponents.java

@@ -0,0 +1,89 @@
+package com.ydtech.modules.order.components.zj;
+
+
+import com.ydtech.modules.order.entity.api.zj.constants.enums.CalculateFlagEnum;
+import com.ydtech.modules.order.entity.api.zj.constants.enums.ResultEnum;
+import com.ydtech.modules.order.entity.api.zj.request.CalculatePremiumRequest;
+import com.ydtech.modules.order.entity.api.zj.response.CalculatePremiumResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpHeaders;
+import org.springframework.stereotype.Component;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+/**
+ * @description: 紫金财险重复投保处理
+ * @author: wenks
+ * @date: 2023/9/20 9:05
+ **/
+
+@Slf4j
+@Component
+public class ZijinDuplicateInsuranceComponents {
+
+    public static final String JQ_REGEX = "交强险:.+?起保日期 (.+?);终保日期 (.+?);";
+
+    public static final String SY_REGEX = "商业险:.+?起保日期 (.+?);终保日期 (.+?);";
+
+    private final ZijinRequestApiComponents zijinRequestApiComponents;
+
+    public ZijinDuplicateInsuranceComponents(ZijinRequestApiComponents zijinRequestApiComponents) {
+        this.zijinRequestApiComponents = zijinRequestApiComponents;
+    }
+
+    /**
+     * 获取终保日期
+     *
+     * @param message 重复投保返回信息
+     * @param regex   正则内容
+     * @return
+     */
+    public static String getTheExpiryDate(String message, String regex) {
+        Pattern pattern = Pattern.compile(regex);
+        Matcher m = pattern.matcher(message);
+        boolean b = m.find();
+        if (b) {
+            return m.group(2) + ":00";
+        }
+        return "";
+    }
+
+    /**
+     * 重复投保处理
+     *
+     * @param calculatePremiumRequest  报价请求
+     * @param calculatePremiumResponse 报价响应
+     * @param httpHeaders              请求头
+     * @return CalculatePremiumResponse
+     */
+    public CalculatePremiumResponse duplicate(CalculatePremiumRequest calculatePremiumRequest, CalculatePremiumResponse calculatePremiumResponse, HttpHeaders httpHeaders) {
+        if (ResultEnum.R_4001.getCode().equals(calculatePremiumResponse.getRtnCode())) {
+            String rtnMsg = calculatePremiumResponse.getRtnMsg();
+            CalculatePremiumRequest.BaseInfoDTO baseInfo = calculatePremiumRequest.getBaseInfo();
+            String calculateFlag = baseInfo.getCalculateFlag();
+
+            // 交强险
+            if (CalculateFlagEnum.CF_0.getCode().equals(calculateFlag) || CalculateFlagEnum.CF_2.getCode().equals(calculateFlag)) {
+                String jqEndDate = getTheExpiryDate(rtnMsg, JQ_REGEX);
+                if (!jqEndDate.isEmpty()) {
+                    baseInfo.setTrafficTime(jqEndDate);
+                }
+            }
+
+            // 商业险
+            if (CalculateFlagEnum.CF_0.getCode().equals(calculateFlag) || CalculateFlagEnum.CF_1.getCode().equals(calculateFlag)) {
+                String syEndDate = getTheExpiryDate(rtnMsg, SY_REGEX);
+                if (!syEndDate.isEmpty()) {
+                    baseInfo.setBusinessTime(syEndDate);
+                }
+            }
+
+            return zijinRequestApiComponents.calculatePremium(calculatePremiumRequest, httpHeaders);
+        }
+        return calculatePremiumResponse;
+    }
+
+
+}

+ 71 - 0
src/main/java/com/ydtech/modules/order/components/zj/ZijinReinsuranceComponents.java

@@ -0,0 +1,71 @@
+package com.ydtech.modules.order.components.zj;
+
+
+import com.ydtech.modules.order.components.VerificationCodeIdentification;
+import com.ydtech.modules.order.entity.api.zj.constants.enums.CalculateFlagEnum;
+import com.ydtech.modules.order.entity.api.zj.constants.enums.ResultEnum;
+import com.ydtech.modules.order.entity.api.zj.request.CalculatePremiumRequest;
+import com.ydtech.modules.order.entity.api.zj.response.CalculatePremiumResponse;
+import com.ydtech.modules.order.entity.crawler.request.RecognitionRequest;
+import com.ydtech.modules.order.entity.crawler.response.RecognitionResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * @description: 紫金财险转保处理
+ * @author: wenks
+ * @date: 2023/9/20 9:44
+ **/
+
+@Slf4j
+@Component
+public class ZijinReinsuranceComponents {
+
+    private final ZijinRequestApiComponents zijinRequestApiComponents;
+
+
+    private final VerificationCodeIdentification verificationCodeIdentification;
+
+    public ZijinReinsuranceComponents(ZijinRequestApiComponents zijinRequestApiComponents, VerificationCodeIdentification verificationCodeIdentification) {
+        this.zijinRequestApiComponents = zijinRequestApiComponents;
+        this.verificationCodeIdentification = verificationCodeIdentification;
+    }
+
+
+    /**
+     * 转保处理
+     *
+     * @param calculatePremiumRequest  报价请求
+     * @param calculatePremiumResponse 报价响应
+     * @param httpHeaders              请求头
+     * @return CalculatePremiumResponse
+     */
+    public CalculatePremiumResponse reinsurance(CalculatePremiumRequest calculatePremiumRequest, CalculatePremiumResponse calculatePremiumResponse, HttpHeaders httpHeaders) {
+        if (ResultEnum.R_9980.getCode().equals(calculatePremiumResponse.getRtnCode())) {
+            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 zijinRequestApiComponents.calculatePremium(calculatePremiumRequest, httpHeaders);
+        }
+        return calculatePremiumResponse;
+    }
+}

+ 3 - 1
src/main/java/com/ydtech/modules/order/components/ZijinRequestApiComponents.java → src/main/java/com/ydtech/modules/order/components/zj/ZijinRequestApiComponents.java

@@ -1,9 +1,11 @@
-package com.ydtech.modules.order.components;
+package com.ydtech.modules.order.components.zj;
 
 
 import com.ydtech.config.properties.ZjApiConfigurationProperties;
 import com.ydtech.constants.InsuranceEnum;
 import com.ydtech.exception.SystemException;
+import com.ydtech.modules.order.components.ConfigureParametersComponents;
+import com.ydtech.modules.order.components.InsCrawlerOrderComponents;
 import com.ydtech.modules.order.constants.OrderCacheConstant;
 import com.ydtech.modules.order.entity.api.zj.constants.enums.RequestUrl;
 import com.ydtech.modules.order.entity.api.zj.constants.enums.ResultEnum;

+ 7 - 4
src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java

@@ -263,10 +263,6 @@ public class InsAreaCompany implements Serializable {
     private String syEndDate;
 
 
-
-
-
-
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 
@@ -286,6 +282,13 @@ public class InsAreaCompany implements Serializable {
         this.riskinfo = JSON.parseArray(JSON.toJSONString(quoteRespVo.getRiskList()));
         this.kindinfo = JSON.parseArray(JSON.toJSONString(quoteRespVo.getKindList()));
         this.orderstatus = InsOrderStatus.S_0.getCode();
+
+        this.jqStartDate =  quoteRespVo.getStartDateJq();
+        this.jqEndDate = quoteRespVo.getEndDateJq();
+
+        this.syStartDate = quoteRespVo.getStartDateSy();
+        this.syEndDate = quoteRespVo.getEndDateSy();
+
     }
 
 }

+ 24 - 0
src/main/java/com/ydtech/modules/order/entity/api/zj/constants/enums/CalculateFlagEnum.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.order.entity.api.zj.constants.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @version
+ * @description: 关联单标识
+ * @author: wenks
+ * @date: 2023/9/20 9:19
+ **/
+
+@Getter
+@AllArgsConstructor
+public enum CalculateFlagEnum {
+
+    CF_0("0", "关联单"),
+    CF_1("1", "单商业"),
+    CF_2("2", "单交强");
+
+    private final String code;
+
+    private final String desc;
+}

+ 3 - 1
src/main/java/com/ydtech/modules/order/entity/api/zj/constants/enums/ResultEnum.java

@@ -15,6 +15,8 @@ import lombok.Getter;
 public enum ResultEnum {
 
     R_0000("0000", "成功"),
+    R_4001("4001", "重复投保标志"),
+    R_9980("9980", "转保标志"),
     R_9999("9999", "系统异常");
 
     private final String code;
@@ -22,7 +24,7 @@ public enum ResultEnum {
     private final String desc;
 
     public static void verify(String rtnCode, String rtnMsg) {
-        if (!R_0000.getCode().equals(rtnCode)) {
+        if (R_9999.getCode().equals(rtnCode)) {
             throw new SystemException(rtnMsg);
         }
     }

+ 64 - 3
src/main/java/com/ydtech/modules/order/entity/api/zj/request/CalculatePremiumRequest.java

@@ -11,6 +11,7 @@ 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.zj.constants.DateTimeConstants;
+import com.ydtech.modules.order.entity.api.zj.constants.enums.CalculateFlagEnum;
 import com.ydtech.modules.order.entity.api.zj.constants.enums.CarKindDetailIdEnum;
 import com.ydtech.modules.order.entity.api.zj.constants.enums.MotorVehicleInsuranceEnum;
 import com.ydtech.modules.order.entity.api.zj.constants.enums.RiskCodeEnum;
@@ -24,6 +25,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.Getter;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
@@ -137,6 +139,35 @@ public class CalculatePremiumRequest implements Serializable {
     public static class BaseInfoDTO implements Serializable {
 
         private static final long serialVersionUID = -1913236191334012218L;
+
+        /**
+         * 商业险转保校验码
+         * 转保业务第二次交互时必传(商业险)
+         */
+        @JsonProperty("answer")
+        private String answer;
+
+        /**
+         * 交强险转保校验码
+         * 转保业务第二次交互时必传(交强险)
+         */
+        @JsonProperty("answerCI")
+        private String answerCI;
+
+        /**
+         * 商业险转保校验码
+         * 如果是转保业务,第二次交互时必传。取返回图片校验码那次的demandNo(商业险)
+         */
+        @JsonProperty("demandNo")
+        private String demandNo;
+
+        /**
+         * 交强险转保校验码
+         * 如果是转保业务,第二次交互时必传。取返回图片校验码那次的demandNoCI(交强险)
+         */
+        @JsonProperty("demandNoCI")
+        private String demandNoCI;
+
         /**
          * 关联单标识(0关联单;1单商业;2单交强)
          */
@@ -203,6 +234,31 @@ public class CalculatePremiumRequest implements Serializable {
         @JsonProperty("startMinuteCI")
         private String startMinuteCI;
 
+
+        /**
+         * 商业险
+         *
+         * @param startDate 起保时间
+         */
+        public void setBusinessTime(String startDate) {
+            setStrengthTime(startDate);
+        }
+
+
+        /**
+         * 交强险
+         *
+         * @param startDate 起保时间
+         */
+        public void setTrafficTime(String startDate) {
+            setCommerceTime(startDate);
+        }
+
+        /**
+         * 商业险
+         *
+         * @param startDate 起保时间
+         */
         private void setStrengthTime(String startDate) {
             if (startDate.contains(TimeConstants.START_TIME)) {
                 InsuranceTimeProcessing.UntimelyInsurancePeriod untimely = InsuranceTimeProcessing.untimely(startDate);
@@ -224,6 +280,11 @@ public class CalculatePremiumRequest implements Serializable {
             }
         }
 
+        /**
+         * 交强险
+         *
+         * @param startDate 起保时间
+         */
         private void setCommerceTime(String startDate) {
             if (startDate.contains(TimeConstants.START_TIME)) {
                 InsuranceTimeProcessing.UntimelyInsurancePeriod untimely = InsuranceTimeProcessing.untimely(startDate);
@@ -248,12 +309,12 @@ public class CalculatePremiumRequest implements Serializable {
         public BaseInfoDTO(List<RiskInfoVo> riskInfoVoList) {
             if (riskInfoVoList.size() == 1) {
                 if (InsuranceRisk.BUSINESS.getCode().equals(riskInfoVoList.get(0).getRiskCode())) {
-                    this.calculateFlag = "1";
+                    this.calculateFlag = CalculateFlagEnum.CF_1.getCode();
                 } else {
-                    this.calculateFlag = "2";
+                    this.calculateFlag = CalculateFlagEnum.CF_2.getCode();
                 }
             } else {
-                this.calculateFlag = "0";
+                this.calculateFlag = CalculateFlagEnum.CF_0.getCode();
             }
 
             for (RiskInfoVo riskInfoVo : riskInfoVoList) {

+ 50 - 0
src/main/java/com/ydtech/modules/order/entity/api/zj/response/CalculatePremiumResponse.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.order.entity.api.zj.response;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ydtech.modules.ins.model.vo.AccidentResponseVo;
 import com.ydtech.modules.order.entity.vo.zj.ZjQuoteAccidentVo;
+import com.ydtech.utils.StringUtils;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
@@ -139,6 +140,18 @@ public class CalculatePremiumResponse extends BaseResponse implements Serializab
 
         private static final long serialVersionUID = 4315673340895809849L;
 
+        /**
+         * 商业险校验答案
+         */
+        @JsonProperty("answer")
+        private String answer;
+
+        /**
+         * 交强险校验答案
+         */
+        @JsonProperty("answerCI")
+        private String answerCI;
+
         @JsonProperty("comCode")
         private String comCode;
 
@@ -202,9 +215,15 @@ public class CalculatePremiumResponse extends BaseResponse implements Serializab
         @JsonProperty("reinsureMessage")
         private String reinsureMessage;
 
+        /**
+         * 商业险转保标志
+         */
         @JsonProperty("renewalFlag")
         private String renewalFlag;
 
+        /**
+         * 交强险转保标志
+         */
         @JsonProperty("renewalFlagCI")
         private String renewalFlagCI;
 
@@ -237,6 +256,37 @@ public class CalculatePremiumResponse extends BaseResponse implements Serializab
 
         @JsonProperty("xbFlagCI")
         private String xbFlagCI;
+
+        public static final String DATE_FORMAT = "%s %s:%s:%s";
+
+        public String getJqStartTime() {
+            if (StringUtils.isEmpty(this.getStartDateCI())) {
+                return null;
+            }
+            return String.format(DATE_FORMAT, this.getStartDateCI(), this.getStartHourCI(), this.getStartMinuteCI(), "00");
+        }
+
+        public String getJqEndTime() {
+            if (StringUtils.isEmpty(this.getEndDateCI())) {
+                return null;
+            }
+            return String.format(DATE_FORMAT, this.getEndDateCI(), this.getEndHourCI(), this.getEndMinuteCI(), "00");
+        }
+
+        public String getSyStartTime() {
+            if (StringUtils.isEmpty(this.getStartDate())) {
+                return null;
+            }
+            return String.format(DATE_FORMAT, this.getStartDate(), this.getStartHour(), this.getStartMinute(), "00");
+        }
+
+        public String getSyEndTime() {
+            if (StringUtils.isEmpty(this.getEndDate())) {
+                return null;
+            }
+            return String.format(DATE_FORMAT, this.getEndDate(), this.getEndHour(), this.getEndMinute(), "00");
+        }
+
     }
 
     @NoArgsConstructor

+ 33 - 0
src/main/java/com/ydtech/modules/order/entity/crawler/request/RecognitionRequest.java

@@ -0,0 +1,33 @@
+package com.ydtech.modules.order.entity.crawler.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+/**
+ * @description: 验证码识别请求参数
+ * @author: wenks
+ * @date: 2023/9/19 18:24
+ **/
+
+@Data
+public class RecognitionRequest implements Serializable {
+
+    private static final long serialVersionUID = 6961550851143654920L;
+
+    /**
+     * 交强影像
+     */
+    @JsonProperty("jgImage")
+    private String jgImage;
+
+    /**
+     * 商业影像
+     */
+    @JsonProperty("syImage")
+    private String syImage;
+
+
+}

+ 46 - 0
src/main/java/com/ydtech/modules/order/entity/crawler/response/RecognitionResponse.java

@@ -0,0 +1,46 @@
+package com.ydtech.modules.order.entity.crawler.response;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+
+/**
+ * @description: 验证码识别响应参数
+ * @author: wenks
+ * @date: 2023/9/19 18:23
+ **/
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class RecognitionResponse extends CrawlerBaseResponse implements Serializable {
+
+    private static final long serialVersionUID = 9056060624107609678L;
+
+    @JsonProperty("data")
+    private Code data;
+
+
+    @Data
+    public static class Code implements Serializable{
+
+        private static final long serialVersionUID = 794225022248404083L;
+        /**
+         * 交强识别返回
+         */
+        @JsonProperty(value = "jqImageCode")
+        private String jqImageCode;
+
+        /**
+         * 商业识别返回
+         */
+        @JsonProperty(value = "syImageCode")
+        private String syImageCode;
+    }
+
+
+
+}

+ 24 - 2
src/main/java/com/ydtech/modules/order/service/impl/ZijinOrderApiServiceImpl.java

@@ -11,7 +11,9 @@ import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.ins.model.vo.*;
 import com.ydtech.modules.order.components.ConfigureParametersComponents;
-import com.ydtech.modules.order.components.ZijinRequestApiComponents;
+import com.ydtech.modules.order.components.zj.ZijinDuplicateInsuranceComponents;
+import com.ydtech.modules.order.components.zj.ZijinReinsuranceComponents;
+import com.ydtech.modules.order.components.zj.ZijinRequestApiComponents;
 import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
@@ -39,6 +41,7 @@ import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
 import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
 import com.ydtech.utils.CalculateUtils;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 
@@ -64,14 +67,19 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
 
     private final ConfigureParametersComponents configureParametersComponents;
 
+    private final ZijinDuplicateInsuranceComponents zijinDuplicateInsuranceComponents;
 
-    public ZijinOrderApiServiceImpl(ZijinRequestApiComponents zijinRequestApiComponents, InsAreaCompanyService insAreaCompanyService, InsOrdersService insOrdersService, InsTaskImagesService insTaskImagesService, PtlAgreementAttributionService ptlAgreementAttributionService, ConfigureParametersComponents configureParametersComponents) {
+    private final ZijinReinsuranceComponents zijinReinsuranceComponents;
+
+    public ZijinOrderApiServiceImpl(ZijinRequestApiComponents zijinRequestApiComponents, InsAreaCompanyService insAreaCompanyService, InsOrdersService insOrdersService, InsTaskImagesService insTaskImagesService, PtlAgreementAttributionService ptlAgreementAttributionService, ConfigureParametersComponents configureParametersComponents, ZijinDuplicateInsuranceComponents zijinDuplicateInsuranceComponents, ZijinReinsuranceComponents zijinReinsuranceComponents) {
         this.zijinRequestApiComponents = zijinRequestApiComponents;
         this.insAreaCompanyService = insAreaCompanyService;
         this.insOrdersService = insOrdersService;
         this.insTaskImagesService = insTaskImagesService;
         this.ptlAgreementAttributionService = ptlAgreementAttributionService;
         this.configureParametersComponents = configureParametersComponents;
+        this.zijinDuplicateInsuranceComponents = zijinDuplicateInsuranceComponents;
+        this.zijinReinsuranceComponents = zijinReinsuranceComponents;
     }
 
 
@@ -124,6 +132,12 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
                 = new CalculatePremiumRequest(quoteInfoVo, vehicleModelInfosDTO, queryActualValueResponse.getActualValue(), quoteVo.getAccidentalDrivingVo(), zjConfigureParameters, modelQueryResponse);
 
         CalculatePremiumResponse calculatePremiumResponse = zijinRequestApiComponents.calculatePremium(calculatePremiumRequest, httpHeaders);
+
+        // 5. 重复投保
+        calculatePremiumResponse = zijinDuplicateInsuranceComponents.duplicate(calculatePremiumRequest, calculatePremiumResponse, httpHeaders);
+        // 6. 转保标志
+        calculatePremiumResponse = zijinReinsuranceComponents.reinsurance(calculatePremiumRequest, calculatePremiumResponse, httpHeaders);
+
         QuoteRespVo quoteRespVo = getQuoteRespVo(calculatePremiumResponse, quoteInfoVo, quoteVo.getAccidentalDrivingVo());
         return responseOrder(calculatePremiumResponse, quoteRespVo, ptlAgreementAttribution, modelQueryResponse.getOrderId(), modelQueryResponse.getOrderNo());
     }
@@ -349,6 +363,14 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
             }
         }
 
+        // 交强
+        quoteRespVo.setStartDateJq(calculatePremiumResponse.getBasePart().getJqStartTime());
+        quoteRespVo.setEndDateJq(calculatePremiumResponse.getBasePart().getJqEndTime());
+
+        // 商业
+        quoteRespVo.setStartDateSy(calculatePremiumResponse.getBasePart().getSyStartTime());
+        quoteRespVo.setEndDateSy(calculatePremiumResponse.getBasePart().getSyEndTime());
+
         List<QuoteKindRespVo> kindList1 = new ArrayList<>();
         List<RiskInfoVo> riskList = yaQuoteInfoVo.getRiskList();
         //  报价险种放入保费