Browse Source

1.修改华泰校验码和重复投保
2.修改订单号生成规则

wks 2 years ago
parent
commit
b1e8010b1c

+ 0 - 3
src/main/java/com/ydtech/components/OrderComponents.java

@@ -286,9 +286,6 @@ public class OrderComponents {
         if (StringUtils.isEmpty(yaQuoteInfoVo.getCarInfo().getFrameNo())) {
             throw new SystemException("车架号不能为空");
         }
-        if (StringUtils.isEmpty(yaQuoteInfoVo.getQuoteno())) {
-            throw new SystemException("报价号不能为空");
-        }
         if (yaQuoteInfoVo.getRiskList() == null || yaQuoteInfoVo.getRiskList().isEmpty()) {
             throw new SystemException("riskList 不能为空!");
         } else {

+ 4 - 8
src/main/java/com/ydtech/config/MvcConfig.java

@@ -1,9 +1,12 @@
 package com.ydtech.config;
 
-import cn.dev33.satoken.interceptor.SaInterceptor;
+import cn.dev33.satoken.SaManager;
+import cn.dev33.satoken.context.SaHolder;
+import cn.dev33.satoken.filter.SaServletFilter;
 import cn.dev33.satoken.router.SaHttpMethod;
 import cn.dev33.satoken.router.SaRouter;
 import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.util.SaResult;
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
@@ -14,23 +17,18 @@ import com.ydtech.config.properties.WechatOpenProperties;
 import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
 import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.http.HttpMethod;
 import org.springframework.http.converter.HttpMessageConverter;
 import org.springframework.http.converter.StringHttpMessageConverter;
-import org.springframework.web.client.RestTemplate;
 import org.springframework.web.method.support.HandlerMethodArgumentResolver;
-import org.springframework.web.servlet.config.annotation.CorsRegistry;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 import javax.annotation.Resource;
 import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
 import java.util.List;
 
 @Configuration
@@ -148,7 +146,6 @@ public class MvcConfig implements WebMvcConfigurer {
     }
 
 
-
     // 注册拦截器
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
@@ -163,5 +160,4 @@ public class MvcConfig implements WebMvcConfigurer {
     }
 
 
-
 }

+ 62 - 0
src/main/java/com/ydtech/modules/order/components/huatai/HuaTaiQuotationProcessorComponent.java

@@ -0,0 +1,62 @@
+package com.ydtech.modules.order.components.huatai;
+
+
+import com.ydtech.modules.order.entity.api.huatai.request.HuaTaiQuotedPriceRequest;
+import com.ydtech.modules.order.entity.api.huatai.response.HuaTaiQuotedPriceResponse;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @description: 华泰报价处理器
+ * @author: wenks
+ * @date: 2023/11/30 15:24
+ **/
+
+@Component
+@RequiredArgsConstructor
+public class HuaTaiQuotationProcessorComponent {
+
+    private final HuaTaiReinsuranceComponents huaTaiReinsuranceComponents;
+
+    private final HuaTaiRequestApiComponents huaTaiRequestApiComponents;
+
+    private final HuaTaiRepeatInsuranceComponents huaTaiRepeatInsuranceComponents;
+
+    public HuaTaiQuotedPriceResponse handler(HuaTaiQuotedPriceRequest quotedPriceRequest, BaseQuoteInfoVo quoteInfo) {
+        boolean b;
+        HuaTaiQuotedPriceResponse quotedPriceResponse = huaTaiRequestApiComponents.quotedPrice(quotedPriceRequest,
+                HuaTaiQuotedPriceResponse.class);
+
+        List<HuaTaiQuotedPriceRequest.ContractDto> contract1 = quotedPriceRequest.getBusinessData().getContract();
+        for (HuaTaiQuotedPriceRequest.ContractDto contractDto : contract1) {
+            contractDto.setPlatFormMessage(null);
+        }
+
+        // 重复投保
+        b = huaTaiRepeatInsuranceComponents.dealRepeatDate(quotedPriceRequest, quotedPriceResponse, quoteInfo);
+        if (b) {
+            return handler(quotedPriceRequest, quoteInfo);
+        }
+
+        // 校验码
+        b = huaTaiReinsuranceComponents.processor(quotedPriceResponse, quotedPriceRequest);
+        if (b) {
+            return handler(quotedPriceRequest, quoteInfo);
+        }
+
+        // 校验码有误
+        b = huaTaiReinsuranceComponents.processor(quotedPriceResponse);
+        if (b) {
+            return handler(quotedPriceRequest, quoteInfo);
+        }
+
+
+        return quotedPriceResponse;
+    }
+
+
+}

+ 115 - 0
src/main/java/com/ydtech/modules/order/components/huatai/HuaTaiReinsuranceComponents.java

@@ -0,0 +1,115 @@
+package com.ydtech.modules.order.components.huatai;
+
+
+import com.ydtech.modules.order.components.VerificationCodeIdentification;
+import com.ydtech.modules.order.entity.api.huatai.HuaTaiBaseResponseHead;
+import com.ydtech.modules.order.entity.api.huatai.constants.HuaTaiRiskCode;
+import com.ydtech.modules.order.entity.api.huatai.request.HuaTaiQuotedPriceRequest;
+import com.ydtech.modules.order.entity.api.huatai.response.HuaTaiQuotedPriceResponse;
+import com.ydtech.modules.order.entity.crawler.request.RecognitionRequest;
+import com.ydtech.modules.order.entity.crawler.response.RecognitionResponse;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.util.HashMap;
+import java.util.List;
+
+
+/**
+ * @description: 华泰财险转保处理
+ * @author: wenks
+ * @date: 2023/11/30 11:44
+ **/
+@Component
+@RequiredArgsConstructor
+public class HuaTaiReinsuranceComponents {
+
+    private final VerificationCodeIdentification verificationCodeIdentification;
+
+
+    public boolean processor(HuaTaiQuotedPriceResponse quotedPriceResponse) {
+        if (quotedPriceResponse.getHead().getReturnMessage().contains("录入的校验码有误")) {
+            return true;
+        }
+        return false;
+    }
+
+
+    public boolean processor(HuaTaiQuotedPriceResponse quotedPriceResponse, HuaTaiQuotedPriceRequest quotedPriceRequest) {
+        HuaTaiBaseResponseHead head = quotedPriceResponse.getHead();
+        if ("-1".equals(head.getReturnCode())) {
+            return false;
+        }
+
+        HashMap<String, HuaTaiQuotedPriceResponse.ContractDto> map =
+                getStringPlatFormMessageDtoHashMap(quotedPriceResponse);
+
+        RecognitionRequest recognitionRequest = new RecognitionRequest();
+        // 交强险
+        HuaTaiQuotedPriceResponse.ContractDto jq = map.get(HuaTaiRiskCode.R_1002.getCode());
+        // 商业险
+        HuaTaiQuotedPriceResponse.ContractDto sy = map.get(HuaTaiRiskCode.R_1251.getCode());
+        boolean isExitJQ = true;
+        boolean isExitSy = true;
+
+        if (!ObjectUtils.isEmpty(jq) && !ObjectUtils.isEmpty(jq.getPlatFormMessage()) && !StringUtils.isEmpty(jq.getPlatFormMessage().getCheckCode())) {
+            recognitionRequest.setJgImage(jq.getPlatFormMessage().getCheckCode());
+            isExitJQ = false;
+        }
+
+        if (!ObjectUtils.isEmpty(sy) && !ObjectUtils.isEmpty(sy.getPlatFormMessage()) && !StringUtils.isEmpty(sy.getPlatFormMessage().getCheckCode())) {
+            recognitionRequest.setSyImage(sy.getPlatFormMessage().getCheckCode());
+            isExitSy = false;
+        }
+
+        if (isExitJQ && isExitSy) {
+            return false;
+        }
+
+        RecognitionResponse recognition = verificationCodeIdentification.recognition(recognitionRequest);
+        RecognitionResponse.Code data = recognition.getData();
+
+        List<HuaTaiQuotedPriceRequest.ContractDto> contract1 = quotedPriceRequest.getBusinessData().getContract();
+        for (HuaTaiQuotedPriceRequest.ContractDto contractDto : contract1) {
+            String riskCode = contractDto.getContractMain().getRiskCode();
+
+            // 交强校验码
+            if (HuaTaiRiskCode.R_1002.getCode().equals(riskCode) && StringUtils.isNotEmpty(data.getJqImageCode())) {
+                contractDto.getContractMain().setContractNo(jq.getContractMain().getContractNo());
+                contractDto.setPlatFormMessage(new HuaTaiQuotedPriceRequest.ContractDto.PlatFormMessageDto());
+                contractDto.getPlatFormMessage().setQuerySequenceNo(jq.getPlatFormMessage().getQuerySequenceNo());
+                contractDto.getPlatFormMessage().setCheckCodeRe(data.getJqImageCode());
+
+                // 商业校验码
+            } else if (HuaTaiRiskCode.R_1251.getCode().equals(riskCode) && StringUtils.isNotEmpty(data.getSyImageCode())) {
+                contractDto.getContractMain().setContractNo(sy.getContractMain().getContractNo());
+                contractDto.setPlatFormMessage(new HuaTaiQuotedPriceRequest.ContractDto.PlatFormMessageDto());
+                contractDto.getPlatFormMessage().setQuerySequenceNo(sy.getPlatFormMessage().getQuerySequenceNo());
+                contractDto.getPlatFormMessage().setCheckCodeRe(data.getSyImageCode());
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * 取出 PlatFormMessageDto 实体
+     *
+     * @param quotedPriceResponse 报价返回实体
+     * @return key 险种代码 value  PlatFormMessageDto
+     */
+    public static HashMap<String, HuaTaiQuotedPriceResponse.ContractDto> getStringPlatFormMessageDtoHashMap(HuaTaiQuotedPriceResponse quotedPriceResponse) {
+        HashMap<String, HuaTaiQuotedPriceResponse.ContractDto> map = new HashMap<>();
+        List<HuaTaiQuotedPriceResponse.ContractDto> contract = quotedPriceResponse.getBusinessData().getContract();
+        for (HuaTaiQuotedPriceResponse.ContractDto contractDto : contract) {
+            HuaTaiQuotedPriceResponse.ContractDto.ContractMainDto contractMain = contractDto.getContractMain();
+            String riskCode = contractMain.getRiskCode();
+            map.put(riskCode, contractDto);
+        }
+        return map;
+    }
+
+
+}

+ 59 - 96
src/main/java/com/ydtech/modules/order/components/huatai/HuaTaiRepeatInsuranceComponents.java

@@ -4,23 +4,23 @@ package com.ydtech.modules.order.components.huatai;
 import com.ydtech.constants.InsuranceEnum;
 import com.ydtech.constants.enums.InsuranceRisk;
 import com.ydtech.modules.ins.model.vo.RiskInfoVo;
-import com.ydtech.modules.order.components.ZhongmeiRequestApiComponents;
+import com.ydtech.modules.order.components.gouren.GuorenDuplicateInsuranceComponent;
+import com.ydtech.modules.order.entity.api.huatai.HuaTaiBaseResponseHead;
+import com.ydtech.modules.order.entity.api.huatai.constants.HuaTaiRiskCode;
 import com.ydtech.modules.order.entity.api.huatai.request.HuaTaiQuotedPriceRequest;
 import com.ydtech.modules.order.entity.api.huatai.response.HuaTaiQuotedPriceResponse;
 import com.ydtech.modules.order.entity.api.zhongmei.constants.TimeConstants;
-import com.ydtech.modules.order.entity.api.zhongmei.request.QuotedPriceRequest;
-import com.ydtech.modules.order.entity.api.zhongmei.response.QuotedPriceResponse;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.utils.InsuranceLog;
-import com.ydtech.utils.DateTimeUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
 import java.util.List;
 
 
@@ -31,116 +31,79 @@ import java.util.List;
 @Component
 public class HuaTaiRepeatInsuranceComponents {
 
-    private final HuaTaiRequestApiComponents huaTaiRequestApiComponents;
-
-    public HuaTaiRepeatInsuranceComponents(@Lazy HuaTaiRequestApiComponents huaTaiRequestApiComponents) {
-        this.huaTaiRequestApiComponents = huaTaiRequestApiComponents;
-    }
+    public boolean dealRepeatDate(HuaTaiQuotedPriceRequest huaTaiQuotedPriceRequest, HuaTaiQuotedPriceResponse quotedPriceResponse,
+                                  BaseQuoteInfoVo quoteInfo) {
+        HuaTaiBaseResponseHead head = quotedPriceResponse.getHead();
+        if ("0".equals(head.getReturnCode())) {
+            return false;
+        }
 
+        String returnMessage = quotedPriceResponse.getHead().getReturnMessage();
+        InsuranceLog.infoLog(InsuranceEnum.ZMBX.getPinyin(), "\n\t---------> {}\n\t---------> {}", "华泰财险重复投保处理", returnMessage);
 
-    public HuaTaiQuotedPriceResponse dealRepeatDate(HuaTaiQuotedPriceRequest huaTaiQuotedPriceRequest, HuaTaiQuotedPriceResponse huaTaiQuotedPriceResponse, BaseQuoteInfoVo quoteInfo) {
-        String rtnMsgBz = "";
-        String rtnMsgBusi = "";
-        List<RiskInfoVo> riskList = quoteInfo.getRiskList();
-        InsuranceLog.infoLog(InsuranceEnum.ZMBX.getPinyin(), "\n\t---------> {}\n\t---------> {}", "中煤财险重复投保处理", rtnMsgBz + rtnMsgBusi);
-       /* rtnMsgBz = "交强险平台返回:号牌号码“晋HQE092”的保单发生重复投保,与其重复投保的其它公司的保单信息如下:投保确认码 02CCIC140022102196416712744293;保单号 PDFA22140123250000001413;起保日期 2022-10-24 00:00;终保日期 2023-10-24 00:00;号牌号码 晋HQE092;号牌种类 02;车架号 LSGBC5356HG101426;发动机号 170971343;地区 山西。";
-        rtnMsgBusi = "平台校验:成功 投保查询码:V0101ZMBX140023092205710579353 平台校验,可能存在重复投保,请关注以下平台返回的信息。保单号:6605212022140193005587; 保险公司:中国人寿财产保险公司: 起保日期:2022-10-1600:00:00; 终保日期:2023-10-16; 录单日期:2022-09-15; 险种名称:机动车第三者责任保险: 号牌号码:晋A711BW; 号牌种类代码:02; 号牌底色:01; 车辆识别代号: LGWEF4A52HF424155; 发动机号:1725091016";
-        投保查询码:V0101ZMBX140023102198367810970平台校验,可能存在重复投保,请关注以下平台返回的信息。保单号:;保险公司:;起保日期:;终保日期:;录单日期:;车辆识别代号:LVHRE4876B5049915;发动机号:5049956;重复投保公司种类:其他公司
-*/
+        // 交强险重复投保
         HuaTaiQuotedPriceRequest.ContractDto.ContractMainDto contractMainDTOBiz = null;
+
+        // 商业险重复投保
         HuaTaiQuotedPriceRequest.ContractDto.ContractMainDto contractMainDTOBusi = null;
-        List<HuaTaiQuotedPriceRequest.ContractDto> contractDtoList = huaTaiQuotedPriceRequest.getBusinessData().getContract();
-
-        for (HuaTaiQuotedPriceRequest.ContractDto contractDto : contractDtoList) {
-            HuaTaiQuotedPriceRequest.ContractDto.ContractMainDto contractMainDTO = contractDto.getContractMain();
-            if ("1002".equals(contractMainDTO.getRiskCode())) {
-                contractMainDTOBiz = contractDto.getContractMain();
-            } else {
-                contractMainDTOBusi = contractDto.getContractMain();
-            }
 
-        }
-        String jqEndDate = "";
-        String syEndDate = "";
-
-        if (StringUtils.isNotEmpty(rtnMsgBz) && rtnMsgBz.contains("起保日期") && rtnMsgBz.contains("终保日期")) {
-            String coverageEndDate = rtnMsgBz.substring(rtnMsgBz.indexOf("终保日期") + 5, rtnMsgBz.indexOf("终保日期") + 5 + 16);
-            if(coverageEndDate.contains("-")){
-                LocalDateTime start = DateTimeUtil.parseLocalDateTime(coverageEndDate, DateTimeUtil.DATETIME_PATTERN_EXT1);
-                jqEndDate = DateTimeUtil.getStartTimeOfDayStr(start, DateTimeUtil.DATETIME_PATTERN);
-                contractMainDTOBiz = getPeriodDate(jqEndDate, contractMainDTOBiz);
-                for (RiskInfoVo riskInfoVo : riskList) {
-                    if (InsuranceRisk.TRAFFIC.getCode().equals(riskInfoVo.getRiskCode())) {
-                        riskInfoVo.setStartDate(contractMainDTOBiz.getValidDate());
-                        riskInfoVo.setEndDate(contractMainDTOBiz.getExpiryDate());
-                    }
-                }
-            }else{
-                return huaTaiQuotedPriceResponse;
+        List<HuaTaiQuotedPriceRequest.ContractDto> contractDTOList = huaTaiQuotedPriceRequest.getBusinessData().getContract();
+        for (HuaTaiQuotedPriceRequest.ContractDto contractDTO : contractDTOList) {
+
+            HuaTaiQuotedPriceRequest.ContractDto.ContractMainDto contractMainDTO = contractDTO.getContractMain();
+            if (HuaTaiRiskCode.R_1002.getCode().equals(contractMainDTO.getRiskCode())) {
+                contractMainDTOBiz = contractDTO.getContractMain();
+            } else if (HuaTaiRiskCode.R_1251.getCode().equals(contractMainDTO.getRiskCode())) {
+                contractMainDTOBusi = contractDTO.getContractMain();
             }
+        }
+
+        List<RiskInfoVo> riskList = quoteInfo.getRiskList();
 
+        // 交强险重复投保
+        if (StringUtils.isNotEmpty(returnMessage) && returnMessage.contains("重复投保")) {
+            String jqEndDate = GuorenDuplicateInsuranceComponent.getEndDate(returnMessage,
+                    GuorenDuplicateInsuranceComponent.THE_FIRST_REGEX);
+            getPeriodDate(jqEndDate, contractMainDTOBiz);
+            extracted(riskList, contractMainDTOBusi, contractMainDTOBiz);
+            return true;
         }
 
-        // 商业险
-        if (StringUtils.isNotEmpty(rtnMsgBusi) && rtnMsgBusi.contains("起保日期") && rtnMsgBusi.contains("终保日期")) {
-            String coverageEndDate = rtnMsgBusi.substring(rtnMsgBusi.indexOf("终保日期") + 5, rtnMsgBusi.indexOf("终保日期") + 5 + 10);
-            if(coverageEndDate.contains("-")){
-                DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-                LocalDateTime start = LocalDate.parse(coverageEndDate, dateTimeFormatter).atStartOfDay();
-                syEndDate = DateTimeUtil.getStartTimeOfDayStr(start, DateTimeUtil.DATETIME_PATTERN);
-                contractMainDTOBusi = getPeriodDate(syEndDate, contractMainDTOBusi);
-                for (RiskInfoVo riskInfoVo : riskList) {
-                    if (InsuranceRisk.BUSINESS.getCode().equals(riskInfoVo.getRiskCode())) {
-                        riskInfoVo.setStartDate(contractMainDTOBusi.getValidDate());
-                        riskInfoVo.setEndDate(contractMainDTOBusi.getExpiryDate());
-                    }
-                }
-            }else{
-                return huaTaiQuotedPriceResponse;
-            }
+        HashMap<String, HuaTaiQuotedPriceResponse.ContractDto> map =
+                HuaTaiReinsuranceComponents.getStringPlatFormMessageDtoHashMap(quotedPriceResponse);
+        HuaTaiQuotedPriceResponse.ContractDto contractDto = map.get(HuaTaiRiskCode.R_1251.getCode());
+        HuaTaiQuotedPriceResponse.ContractDto.PlatFormMessageDto platFormMessage = contractDto.getPlatFormMessage();
+        String reInsureMsg = platFormMessage.getReInsureMsg();
+
+        // 商业险重复投保
+        if (!ObjectUtils.isEmpty(contractDto) && !ObjectUtils.isEmpty(platFormMessage) && !StringUtils.isEmpty(reInsureMsg)) {
+            String syEndDate = GuorenDuplicateInsuranceComponent.getEndDate(reInsureMsg, GuorenDuplicateInsuranceComponent.THE_FIRST_REGEX);
+            getPeriodDate(syEndDate, contractMainDTOBusi);
+            extracted(riskList, contractMainDTOBusi, contractMainDTOBiz);
+            return true;
         }
 
-        return huaTaiRequestApiComponents.quotedPrice(huaTaiQuotedPriceRequest, HuaTaiQuotedPriceResponse.class);
+        return false;
     }
 
-    public HuaTaiQuotedPriceResponse dealRepeatDateFormError(HuaTaiQuotedPriceRequest quotedPriceRequest, HuaTaiQuotedPriceResponse quotedPriceResponse, BaseQuoteInfoVo quoteInfo) {
-        InsuranceLog.infoLog(InsuranceEnum.ZMBX.getPinyin(), "\n\t---------> {}\n\t---------> {}", "华泰财险重复投保处理", quotedPriceResponse.getHead().getReturnMessage());
-        String rtnMsgBusi = quotedPriceResponse.getHead().getReturnMessage();
-        List<RiskInfoVo> riskList = quoteInfo.getRiskList();
-
-        HuaTaiQuotedPriceRequest.ContractDto.ContractMainDto contractMainDTOBiz = null;
-        HuaTaiQuotedPriceRequest.ContractDto.ContractMainDto contractMainDTOBusi = null;
-        List<HuaTaiQuotedPriceRequest.ContractDto> contractDTOList = quotedPriceRequest.getBusinessData().getContract();
-
-        for (HuaTaiQuotedPriceRequest.ContractDto contractDTO : contractDTOList) {
-            HuaTaiQuotedPriceRequest.ContractDto.ContractMainDto contractMainDTO = contractDTO.getContractMain();
-            if ("1002".equals(contractMainDTO.getRiskCode())) {
-                contractMainDTOBiz = contractDTO.getContractMain();
-            } else {
-                contractMainDTOBusi = contractDTO.getContractMain();
+    private static void extracted(List<RiskInfoVo> riskList, HuaTaiQuotedPriceRequest.ContractDto.ContractMainDto contractMainDTOBusi,
+                                  HuaTaiQuotedPriceRequest.ContractDto.ContractMainDto contractMainDTOBiz) {
+        for (RiskInfoVo riskInfoVo : riskList) {
+            if (InsuranceRisk.BUSINESS.getCode().equals(riskInfoVo.getRiskCode())) {
+                riskInfoVo.setStartDate(contractMainDTOBusi.getValidDate());
+                riskInfoVo.setEndDate(contractMainDTOBusi.getExpiryDate());
             }
 
-        }
-        String syEndDate = "";
-        // 商业险
-        if (StringUtils.isNotEmpty(rtnMsgBusi) && rtnMsgBusi.contains("起保日期") && rtnMsgBusi.contains("终保日期")) {
-            String coverageEndDate = rtnMsgBusi.substring(rtnMsgBusi.indexOf("终保日期") + 5, rtnMsgBusi.indexOf("终保日期") + 5 + 10);
-            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-            LocalDateTime start = LocalDate.parse(coverageEndDate, dateTimeFormatter).atStartOfDay().plusDays(1);
-            syEndDate = DateTimeUtil.getStartTimeOfDayStr(start, DateTimeUtil.DATETIME_PATTERN);
-            contractMainDTOBusi = getPeriodDate(syEndDate, contractMainDTOBusi);
-            for (RiskInfoVo riskInfoVo : riskList) {
-                if (InsuranceRisk.BUSINESS.getCode().equals(riskInfoVo.getRiskCode())) {
-                    riskInfoVo.setStartDate(contractMainDTOBusi.getValidDate());
-                    riskInfoVo.setEndDate(contractMainDTOBusi.getExpiryDate());
-                }
+            if (InsuranceRisk.TRAFFIC.getCode().equals(riskInfoVo.getRiskCode())) {
+                riskInfoVo.setStartDate(contractMainDTOBiz.getValidDate());
+                riskInfoVo.setEndDate(contractMainDTOBiz.getExpiryDate());
             }
         }
-
-        return huaTaiRequestApiComponents.quotedPrice(quotedPriceRequest, HuaTaiQuotedPriceResponse.class);
     }
 
-    private HuaTaiQuotedPriceRequest.ContractDto.ContractMainDto getPeriodDate(String startDate, HuaTaiQuotedPriceRequest.ContractDto.ContractMainDto contractMainDto) {
+
+    private HuaTaiQuotedPriceRequest.ContractDto.ContractMainDto getPeriodDate(String startDate,
+                                                                               HuaTaiQuotedPriceRequest.ContractDto.ContractMainDto contractMainDto) {
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDate localDate = LocalDate.parse(startDate, formatter);
         LocalDate nextYears = localDate.plusYears(1);

+ 1 - 1
src/main/java/com/ydtech/modules/order/components/huatai/HuaTaiRequestApiComponents.java

@@ -203,7 +203,7 @@ public class HuaTaiRequestApiComponents {
      * 报价 传入必要投保方案信息,返回投保单保费及车船税
      */
     public HuaTaiQuotedPriceResponse quotedPrice(HuaTaiQuotedPriceRequest request, Class<HuaTaiQuotedPriceResponse> tClass) {
-        return routineRequest(request, tClass, true, "");
+        return routineRequest(request, tClass, false, "");
     }
 
     /**

+ 0 - 1
src/main/java/com/ydtech/modules/order/entity/api/huatai/constants/HuaTaiBaseCode.java

@@ -62,7 +62,6 @@ public class HuaTaiBaseCode {
 
     /**
      * 职业
-     * @return
      */
     public static List<String> getOccupation() {
         return Occupation;

+ 26 - 0
src/main/java/com/ydtech/modules/order/entity/api/huatai/constants/HuaTaiRiskCode.java

@@ -0,0 +1,26 @@
+package com.ydtech.modules.order.entity.api.huatai.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+
+/**
+ * @description: 华泰财险 险种代码
+ * @author: wenks
+ * @date: 2023/11/30 14:16
+ **/
+
+@Getter
+@AllArgsConstructor
+public enum HuaTaiRiskCode {
+
+    R_1002("1002", "交强险(08版)"),
+    R_1251("1251", "机动车商业保险示范条款(2020版)"),
+    R_1252("1252", "特种车商业保险示范条款(2020版)"),
+    R_1253("1253", "摩托车、拖拉机商业保险示范条款(2020版)"),
+    R_1255("1255", "新能源汽车商业保险示范条款(试行)");
+
+    private final String code;
+
+    private final String name;
+}

+ 7 - 0
src/main/java/com/ydtech/modules/order/entity/api/huatai/request/HuaTaiQuotedPriceRequest.java

@@ -418,6 +418,8 @@ public class HuaTaiQuotedPriceRequest extends HuaTaiBaseRequest {
         @NoArgsConstructor
         @Data
         public static class ContractMainDto implements Serializable {
+
+            private static final long serialVersionUID = 7688777472649812180L;
             //CY	报价单号(初次报价为空,同一单再次报价需传入之前接口返回的值)
             @JSONField(name = "contractNo")
             private String contractNo;
@@ -468,6 +470,7 @@ public class HuaTaiQuotedPriceRequest extends HuaTaiBaseRequest {
         @NoArgsConstructor
         @Data
         public static class CoverageDto implements Serializable {
+            private static final long serialVersionUID = -4784793249784721550L;
             //Y	保额(传值要求参见险别代码)
             @JSONField(name = "amount")
             private double amount;
@@ -589,6 +592,10 @@ public class HuaTaiQuotedPriceRequest extends HuaTaiBaseRequest {
             //CY	平台校验图片转码后得到的验证码
             @JSONField(name = "checkCode")
             private String checkCode;
+
+            @JSONField(name = "checkCodeRe")
+            private String checkCodeRe;
+
             //CY	平台校验图片转码后得到的验证码(获取上年保单信息)
             @JSONField(name = "checkCodeForBiRe")
             private String checkCodeForBiRe;

+ 2 - 0
src/main/java/com/ydtech/modules/order/entity/api/huatai/request/HuaTaiSubmitRequest.java

@@ -490,9 +490,11 @@ public class HuaTaiSubmitRequest extends HuaTaiBaseRequest {
         public InsuredLinkerBean(CustomerInfoVo customerInfoVo, HuaTaiConfigureParameters huaTaiConfigureParameters) {
             this.linkName = customerInfoVo.getName();
             this.linkerRelation = "01";
+
             this.province = huaTaiConfigureParameters.getProvince();
             this.city = huaTaiConfigureParameters.getCity();
             this.district = huaTaiConfigureParameters.getDistrict();
+
             this.street = customerInfoVo.getAddr();
             this.mobile = customerInfoVo.getMobile();
             this.email = "123@qq.com";

+ 8 - 0
src/main/java/com/ydtech/modules/order/entity/api/huatai/response/HuaTaiQuotedPriceResponse.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.order.entity.api.huatai.response;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ydtech.modules.order.entity.api.huatai.HuaTaiBaseResponse;
 import com.ydtech.modules.order.entity.api.huatai.request.HuaTaiQuotedPriceRequest;
+import com.ydtech.utils.StringUtils;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -148,6 +149,13 @@ public class HuaTaiQuotedPriceResponse extends HuaTaiBaseResponse {
             //CY	平台重复投保提示信息(如果报价返回,则需要前台展示,选择对应车型后重新保费计算)
             @JsonProperty("reInsureMsg")
             private String reInsureMsg;
+
+            public String getCheckCode() {
+                if(StringUtils.isNotEmpty(checkCode)){
+                    return checkCode.replace("\n", "");
+                }
+                return checkCode;
+            }
         }
         @NoArgsConstructor
         @Data

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

@@ -10,6 +10,7 @@ import com.ydtech.modules.fee.service.FeeRuleSchemeService;
 import com.ydtech.modules.ins.model.vo.*;
 import com.ydtech.modules.ins.model.ya.YaQuoteInfoVo;
 import com.ydtech.modules.order.components.ConfigureParametersComponents;
+import com.ydtech.modules.order.components.huatai.HuaTaiQuotationProcessorComponent;
 import com.ydtech.modules.order.components.huatai.HuaTaiRequestApiComponents;
 import com.ydtech.modules.order.components.huatai.HuiTaiUploadImageComponents;
 import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
@@ -71,6 +72,8 @@ public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
 
     private final InsHuataiContributingService insHuataiContributingService;
 
+    private final HuaTaiQuotationProcessorComponent huaTaiQuotationProcessorComponent;
+
     @Value("${upload.file.path}")
     private String uploadFilePath;
 
@@ -127,8 +130,9 @@ public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
                 zmQuoteVo.getAccidentalDrivingVo(), huaTaiConfigureParameters);
         quotedPriceRequest.setHead(baseRequestHead);
 
-        HuaTaiQuotedPriceResponse quotedPriceResponse = huaTaiRequestApiComponents.quotedPrice(quotedPriceRequest,
-                HuaTaiQuotedPriceResponse.class);
+        // 3.1 处理报价请求
+        HuaTaiQuotedPriceResponse quotedPriceResponse = huaTaiQuotationProcessorComponent.handler(quotedPriceRequest, quoteInfo);
+
         QuoteRespVo quoteRespVo = getQuoteRespVo(quotedPriceResponse, quoteInfo);
         //这里调用费用匹配功能
         //feeRuleSchemeService.dealFeeOrderInfo(quoteInfo,quoteRespVo,ptlAgreementAttribution.getId(),quotedPriceResponse.getBusinessNo());

+ 5 - 1
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -38,6 +38,7 @@ import com.ydtech.modules.order.service.InsAreaCompanyService;
 import com.ydtech.modules.order.service.InsOrdersService;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
 import com.ydtech.modules.protocol.service.PtlAgreementService;
+import com.ydtech.utils.SnowFlakeUtil;
 import com.ydtech.utils.idgen.IdGenerate;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.context.annotation.Lazy;
@@ -194,6 +195,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             // 存入订单
             String orderno = IdGenerate.nextId();
             insOrders.setOrderno(orderno);
+            // 将报价号返回
+            long l = new SnowFlakeUtil().nextId();
+            insOrders.setQuoteno(String.valueOf(l));
             boolean save = this.save(insOrders);
             if (!save) {
                 throw new SystemException("订单生成失败");
@@ -325,7 +329,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         }
         //查询费用审核状态
         List<InsFeeAudit> feeAuditList = insFeeAuditService.query().eq("ins_order_no", companyId).list();
-        if (feeAuditList != null && feeAuditList.size() > 0) {
+        if (feeAuditList != null && !feeAuditList.isEmpty()) {
             orderAndAreaCompany.setFeeStatus(feeAuditList.get(0).getAuditstatus());
         }
         //add 解决返回null页面错误  lig 2023-09-14

+ 2 - 2
src/main/resources/application-prod.yml

@@ -235,12 +235,12 @@ logging:
 # 华泰
 huatai:
   api:
-    insuredCode: HT27f3c417f1e241ca01
+    insuredCode: HTf02fb8988203427491
     sourceCode: '016'
     baseUrl: https://gears.pc.ehuatai.com:9003/interFaces/common/AutoInsuranceQuotation.do
     selfPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYUuKVmeF5N66v6MQmOR8pt4o33yrio/ZrDf2ehk/kHJ2BYdI+xE9dLrZW5dm0y8yPpIHN39JaLuYOlWz5DVsWJTSPj9eaq0hOiY9BGAHJ3yMHdX3wygpcD11BVc5v4wbX/kyAhmatK69sb4zzAtEve1NS/YwZVuGch0CrkGw3YQIDAQAB
     selfPrivateKey: MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJhS4pWZ4Xk3rq/oxCY5Hym3ijffKuKj9msN/Z6GT+QcnYFh0j7ET10utlbl2bTLzI+kgc3f0lou5g6VbPkNWxYlNI+P15qrSE6Jj0EYAcnfIwd1ffDKClwPXUFVzm/jBtf+TICGZq0rr2xvjPMC0S97U1L9jBlW4ZyHQKuQbDdhAgMBAAECgYAktOyXYoK8RFfbWjtSfrdsxScQub3K6foq6C8y8Wj1LpQiJqGUsJfze5tDK5agA/CiuODy7LnzM5QK9aVSCw7k0r8EeGpHcYRdLYZM0vXVFK2gIQctFemK4c6sg5p0Bn1LNRbJG7rgMMEA/OxcF6vyQahhFtPVtAQwc+dT0PV51QJBANd66rfTuxSRvIC/RE4W6iqzed2YZtx+0kd7KiN78Y4X6spposFCH4ALf4jUeRRXZAm+Qu71cq21m2GsQZ8bZdMCQQC096ilZXEjmEuvopQR3JvPbgAF+MtItusyDDsMR1CWwXq9XGMmxi6GhFY7r7C8b40j1IchVAEY5BcwxJwfjql7AkAp5QYZs5reBu/FgGqBXEcvAjIheW4WVLoBl9q7h2+RlujZbexs8rQ5KwMi0VyxLcSPeGR/HU2spHCPbvRbQPJtAkBANK4tIHSnwFz6D6ChRbgyPEDd3YuiXOPNefFpRdQd6L93d9Pl6eKP71v5CTiXYqyczcaz2G4bOrHPp7IMsD0JAkBO/q3ZMT+Nj2jdMn2AR1h+ngn38JnK46PznU0WoRPx72YoWbLxvaGWpu8scZAhpYeq/n+52NHFfu8ayDRNWjP2
-    huaTaiPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDn+lfw5D34liwPpnjHSGQ8SrJi4ZzPpxT33hBbXzOQUeM5ckWpcIv8XM/TapgvUi8mPkcU5m4Ro2CMIzRZ1o5O1kVA1MPPJ9sYehsQfEQd8UuZ9b/nEQeCaz7N6zLSVHFAsGhD+Q/XifFTgjvwS/PzBOnPhK7H6QkCJVGHc5wCUwIDAQAB
+    huaTaiPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYyF2SBNzLOP5N5fFW2T2eQ5+iaI5wVpsedu+UY290TVuG152tkdtSuTXsx+8BKnd79/PF966/2aSP4EUm7vD9kvQUnX2EDUiMooorGvDTRxoHNXFGqOtxdMiUOuqx19HwNb4gOXZ1WdjWJwSmqC6ZP6OgxKIotCHJwe826Q/w8wIDAQAB
 
 # api url
 api: