Kaynağa Gözat

诚泰转保车校验码录入

dongxin 1 yıl önce
ebeveyn
işleme
ee3449764c

+ 1 - 1
src/main/java/com/ydtech/modules/order/components/chengtai/ChengTaiRequestApiComponents.java

@@ -213,7 +213,7 @@ public class ChengTaiRequestApiComponents {
         if (!flag){
             throw new SystemException("验签失败");
         }
-        if (!ResponseCode.R_000.getCode().equals(responseCode) && !responseMsg.contains("重复投保")) {
+        if (!ResponseCode.R_000.getCode().equals(responseCode) && !responseMsg.contains("重复投保") && !responseMsg.contains("录入的校验码有误")) {
             throw new SystemException(responseMsg);
         }
     }

+ 147 - 0
src/main/java/com/ydtech/modules/order/entity/api/chengtai/request/InsurePremiumRequest.java

@@ -14,6 +14,7 @@ import com.ydtech.modules.order.entity.InsDrivingIntentionInsurance;
 import com.ydtech.modules.order.entity.InsDrivingIntentionInsuranceSon;
 import com.ydtech.modules.order.entity.api.chengtai.constants.*;
 import com.ydtech.modules.order.entity.api.chengtai.response.CarInfoResponse;
+import com.ydtech.modules.order.entity.api.chengtai.response.InsurePremiumResponse;
 import com.ydtech.modules.order.entity.api.chengtai.response.QueryCarActualValueResponse;
 import com.ydtech.modules.order.entity.config.ChengTaiConfigureParameters;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
@@ -211,6 +212,8 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
         private ContractMainDTO contractMain;
         @JsonProperty("coverage")
         private List<CoverageDTO> coverage;
+        @JsonProperty("platFormMessage")
+        private PlatFormMessageDTO platFormMessage;
 
         public BiContractDTO(BaseQuoteInfoVo quoteInfoVo,BigDecimal actualValue){
             boolean isNewEnergy = quoteInfoVo.getCarInfo().isNewEnergy();
@@ -221,6 +224,77 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
             this.coverage = CoverageDTO.toCoverageList(isNewEnergy,quoteInfoVo,actualValue);
         }
 
+        @NoArgsConstructor
+        @Data
+        public static class PlatFormMessageDTO {
+//            @JsonProperty("scoreCode")
+//            private String scoreCode;
+//            @JsonProperty("lastPolicyQueryDate")
+//            private String lastPolicyQueryDate;
+//            @JsonProperty("insureYears")
+//            private String insureYears;
+//            @JsonProperty("ciCarKind")
+//            private String ciCarKind;
+//            @JsonProperty("peccancyAdjustCI")
+//            private String peccancyAdjustCI;
+//            @JsonProperty("lastPolicyExpireDate")
+//            private String lastPolicyExpireDate;
+//            @JsonProperty("noClaimAdjustReasonCodeBI")
+//            private String noClaimAdjustReasonCodeBI;
+//            @JsonProperty("modelEnergyType")
+//            private String modelEnergyType;
+//            @JsonProperty("noClaimAdjustReason")
+//            private String noClaimAdjustReason;
+//            @JsonProperty("score")
+//            private String score;
+//            @JsonProperty("queryDate")
+//            private String queryDate;
+//            @JsonProperty("claimAdjustReasonCodeBI")
+//            private String claimAdjustReasonCodeBI;
+//            @JsonProperty("ciModelCode")
+//            private String ciModelCode;
+//            @JsonProperty("lastPolicyEffectiveDate")
+//            private String lastPolicyEffectiveDate;
+//            @JsonProperty("unMatchLicenseNoMessage")
+//            private String unMatchLicenseNoMessage;
+//            @JsonProperty("lastReplacementValue")
+//            private String lastReplacementValue;
+//            @JsonProperty("expireDate")
+//            private String expireDate;
+//            @JsonProperty("repeatedMsg")
+//            private String repeatedMsg;
+            @JsonProperty("question")
+            private String question;
+//            @JsonProperty("noClaimAdjustReasonBI")
+//            private String noClaimAdjustReasonBI;
+//            @JsonProperty("nonClaimAdjust")
+//            private String nonClaimAdjust;
+            @JsonProperty("querySequenceNo")
+            private String querySequenceNo;
+//            @JsonProperty("noClaimAdjustReasonCodeCI")
+//            private String noClaimAdjustReasonCodeCI;
+//            @JsonProperty("lastModelCode")
+//            private String lastModelCode;
+//            @JsonProperty("claimAdjustReasonCodeCI")
+//            private String claimAdjustReasonCodeCI;
+//            @JsonProperty("lastModel")
+//            private String lastModel;
+            @JsonProperty("answer")
+            private String answer;
+//            @JsonProperty("claimCoeff")
+//            private String claimCoeff;
+//            @JsonProperty("claimAdjustLevel")
+//            private String claimAdjustLevel;
+//            @JsonProperty("peccancyAdjustReasonCI")
+//            private String peccancyAdjustReasonCI;
+            @JsonProperty("reinsuranceFlag")
+            private String reinsuranceFlag;
+//            @JsonProperty("claimTimes")
+//            private String claimTimes;
+//            @JsonProperty("rateFloatFlag")
+//            private String rateFloatFlag;
+        }
+
         @NoArgsConstructor
         @Data
         public static class ContractMainDTO {
@@ -606,6 +680,8 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
         private List<CoverageDTO> coverage;
         @JsonProperty("tax")
         private TaxDTO tax;
+        @JsonProperty("platFormMessage")
+        private PlatFormMessageDTO platFormMessage;
 
         public CiContractDTO(BaseQuoteInfoVo quoteInfoVo){
             // 险种信息
@@ -616,6 +692,77 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
             this.tax = new TaxDTO(quoteInfoVo);
         }
 
+        @NoArgsConstructor
+        @Data
+        public static class PlatFormMessageDTO {
+//            @JsonProperty("scoreCode")
+//            private String scoreCode;
+//            @JsonProperty("lastPolicyQueryDate")
+//            private String lastPolicyQueryDate;
+//            @JsonProperty("insureYears")
+//            private String insureYears;
+//            @JsonProperty("ciCarKind")
+//            private String ciCarKind;
+//            @JsonProperty("peccancyAdjustCI")
+//            private String peccancyAdjustCI;
+//            @JsonProperty("lastPolicyExpireDate")
+//            private String lastPolicyExpireDate;
+//            @JsonProperty("noClaimAdjustReasonCodeBI")
+//            private String noClaimAdjustReasonCodeBI;
+//            @JsonProperty("modelEnergyType")
+//            private String modelEnergyType;
+//            @JsonProperty("noClaimAdjustReason")
+//            private String noClaimAdjustReason;
+//            @JsonProperty("score")
+//            private String score;
+//            @JsonProperty("queryDate")
+//            private String queryDate;
+//            @JsonProperty("claimAdjustReasonCodeBI")
+//            private String claimAdjustReasonCodeBI;
+//            @JsonProperty("ciModelCode")
+//            private String ciModelCode;
+//            @JsonProperty("lastPolicyEffectiveDate")
+//            private String lastPolicyEffectiveDate;
+//            @JsonProperty("unMatchLicenseNoMessage")
+//            private String unMatchLicenseNoMessage;
+//            @JsonProperty("lastReplacementValue")
+//            private String lastReplacementValue;
+//            @JsonProperty("expireDate")
+//            private String expireDate;
+//            @JsonProperty("repeatedMsg")
+//            private String repeatedMsg;
+            @JsonProperty("question")
+            private String question;
+//            @JsonProperty("noClaimAdjustReasonBI")
+//            private String noClaimAdjustReasonBI;
+//            @JsonProperty("nonClaimAdjust")
+//            private String nonClaimAdjust;
+            @JsonProperty("querySequenceNo")
+            private String querySequenceNo;
+//            @JsonProperty("noClaimAdjustReasonCodeCI")
+//            private String noClaimAdjustReasonCodeCI;
+//            @JsonProperty("lastModelCode")
+//            private String lastModelCode;
+//            @JsonProperty("claimAdjustReasonCodeCI")
+//            private String claimAdjustReasonCodeCI;
+//            @JsonProperty("lastModel")
+//            private String lastModel;
+            @JsonProperty("answer")
+            private String answer;
+//            @JsonProperty("claimCoeff")
+//            private String claimCoeff;
+//            @JsonProperty("claimAdjustLevel")
+//            private String claimAdjustLevel;
+//            @JsonProperty("peccancyAdjustReasonCI")
+//            private String peccancyAdjustReasonCI;
+            @JsonProperty("reinsuranceFlag")
+            private String reinsuranceFlag;
+//            @JsonProperty("claimTimes")
+//            private String claimTimes;
+//            @JsonProperty("rateFloatFlag")
+//            private String rateFloatFlag;
+        }
+
         @NoArgsConstructor
         @Data
         public static class ContractMainDTO {

+ 128 - 5
src/main/java/com/ydtech/modules/order/service/impl/ChengTaiOrderApiServiceImpl.java

@@ -1,11 +1,13 @@
 package com.ydtech.modules.order.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ydtech.constants.enums.InsuranceOrderPdf;
 import com.ydtech.constants.enums.InsuranceRisk;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
@@ -16,7 +18,9 @@ import com.ydtech.modules.admin.service.SysAreaService;
 import com.ydtech.modules.ins.model.vo.*;
 import com.ydtech.modules.order.components.ConfigureParametersComponents;
 import com.ydtech.modules.order.components.InsImagesUploadCacheComponents;
+import com.ydtech.modules.order.components.VerificationCodeIdentification;
 import com.ydtech.modules.order.components.chengtai.ChengTaiRequestApiComponents;
+import com.ydtech.modules.order.components.gouren.GuorenDuplicateInsuranceComponent;
 import com.ydtech.modules.order.constants.UnderwritingStatus;
 import com.ydtech.modules.order.entity.*;
 import com.ydtech.modules.order.entity.api.chengtai.constants.CtKindCodeEnum;
@@ -25,7 +29,10 @@ import com.ydtech.modules.order.entity.api.chengtai.constants.ResponseCode;
 import com.ydtech.modules.order.entity.api.chengtai.constants.RiskCodeEnum;
 import com.ydtech.modules.order.entity.api.chengtai.request.*;
 import com.ydtech.modules.order.entity.api.chengtai.response.*;
+import com.ydtech.modules.order.entity.api.zijin.request.CalculatePremiumRequest;
 import com.ydtech.modules.order.entity.config.ChengTaiConfigureParameters;
+import com.ydtech.modules.order.entity.crawler.request.RecognitionRequest;
+import com.ydtech.modules.order.entity.crawler.response.RecognitionResponse;
 import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.filter.CarModelsFilterUtils;
 import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
@@ -35,10 +42,10 @@ import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
 import com.ydtech.modules.order.service.*;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
 import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
-import com.ydtech.utils.CalculateUtils;
-import com.ydtech.utils.DateTimeUtil;
-import com.ydtech.utils.StringUtils;
+import com.ydtech.utils.*;
 import com.ydtech.utils.baidu.FileUtil;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpHeaders;
@@ -166,12 +173,117 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
         if(!ResponseCode.R_000.getCode().equals(insurePremiumResponse.getCode()) && insurePremiumResponse.getMessage().contains("重复投保")){
             // 交强险 商业险 重复投保处理
             this.repetitionInsure(insurePremiumResponse,insurePremiumRequest);
-            InsurePremiumResponse response = chengTaiRequestApiComponents.quoteApi(insurePremiumRequest,httpHeaders);
-            return response;
+            insurePremiumResponse = chengTaiRequestApiComponents.quoteApi(insurePremiumRequest,httpHeaders);
+        }
+
+        // 转保车处理
+        InsurePremiumResponse.BiContractDTO biContract = insurePremiumResponse.getBiContract();
+        InsurePremiumResponse.CiContractDTO ciContract = insurePremiumResponse.getCiContract();
+        Double biTotalPremium = null;
+        Double ciTotalPremium = null;
+        Boolean biBoo = false;
+        Boolean ciBoo = false;
+        if(Objects.nonNull(biContract)){
+            biTotalPremium = biContract.getContractMain().getTotalPremium();
+            if(Objects.isNull(biTotalPremium)){
+                biBoo = true;
+            }
+        }
+        if(Objects.nonNull(ciContract)){
+            ciTotalPremium = ciContract.getContractMain().getTotalPremium();
+            if(Objects.isNull(ciTotalPremium)){
+                ciBoo = true;
+            }
+        }
+        if (biBoo || ciBoo) {
+            this.platRepetition(biContract,ciContract,insurePremiumRequest);
+            insurePremiumResponse = chengTaiRequestApiComponents.quoteApi(insurePremiumRequest,httpHeaders);
+        }
+
+        if(!ResponseCode.R_000.getCode().equals(insurePremiumResponse.getCode()) && insurePremiumResponse.getMessage().contains("录入的校验码有误")){
+            this.replaceByte(insurePremiumRequest);
+            insurePremiumResponse = chengTaiRequestApiComponents.quoteApi(insurePremiumRequest,httpHeaders);
         }
         return insurePremiumResponse;
     }
 
+    /**
+     * 错误字符替换
+     * @param insurePremiumRequest
+     */
+    private void replaceByte(InsurePremiumRequest insurePremiumRequest) {
+        InsurePremiumRequest.CiContractDTO ciContractReq = insurePremiumRequest.getCiContract();
+        InsurePremiumRequest.BiContractDTO biContractReq = insurePremiumRequest.getBiContract();
+        if(Objects.nonNull(ciContractReq)){
+            InsurePremiumRequest.CiContractDTO.PlatFormMessageDTO platFormMessageDTO = ciContractReq.getPlatFormMessage();
+            platFormMessageDTO.setAnswer(replacingStrings(platFormMessageDTO.getAnswer()));
+        }
+        if(Objects.nonNull(biContractReq)){
+            InsurePremiumRequest.BiContractDTO.PlatFormMessageDTO platFormMessageDTO = biContractReq.getPlatFormMessage();
+            platFormMessageDTO.setAnswer(replacingStrings(platFormMessageDTO.getAnswer()));
+        }
+    }
+
+    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");
+    }
+    /**
+     * 转保车处理
+     * @param biContract
+     * @param ciContract
+     * @param insurePremiumRequest
+     */
+    private void platRepetition(InsurePremiumResponse.BiContractDTO biContract, InsurePremiumResponse.CiContractDTO ciContract, InsurePremiumRequest insurePremiumRequest) {
+        String jqImageStr = null;
+        String syImageStr = null;
+
+        //交强险
+        if (Objects.nonNull(ciContract)) {
+            jqImageStr = ciContract.getPlatFormMessage().getQuestion();
+        }
+        //商业险
+        if (Objects.nonNull(biContract)) {
+            syImageStr = biContract.getPlatFormMessage().getQuestion();
+        }
+        Map<String, String> bodyMap = new HashMap<>();
+        bodyMap.put("jqImage", com.ydtech.utils.StringUtils.toString(jqImageStr, ""));
+        bodyMap.put("syImage", com.ydtech.utils.StringUtils.toString(syImageStr, ""));
+        String sendBody = JsonUtils.toJson(bodyMap);
+        String ocrStr = HttpUtil.sendPost("http://39.98.41.104:8088/getres", sendBody);
+        CheckCodeResp resp = JSONUtil.toBean(ocrStr, CheckCodeResp.class);
+
+        if(Objects.nonNull(ciContract)){
+            InsurePremiumRequest.CiContractDTO ciContractReq = insurePremiumRequest.getCiContract();
+            InsurePremiumRequest.CiContractDTO.PlatFormMessageDTO platFormMessage = ciContractReq.getPlatFormMessage();
+            if(Objects.isNull(platFormMessage)){
+                platFormMessage = new InsurePremiumRequest.CiContractDTO.PlatFormMessageDTO();
+            }
+            BeanUtils.copyProperties(ciContract.getPlatFormMessage(), platFormMessage);
+            platFormMessage.setAnswer(resp.jqImageCode);
+            ciContractReq.setPlatFormMessage(platFormMessage);
+            insurePremiumRequest.setCiContract(ciContractReq);
+        }
+        if(Objects.nonNull(biContract)){
+            InsurePremiumRequest.BiContractDTO biContractReq = insurePremiumRequest.getBiContract();
+            InsurePremiumRequest.BiContractDTO.PlatFormMessageDTO platFormMessage = biContractReq.getPlatFormMessage();
+            if(Objects.isNull(platFormMessage)){
+                platFormMessage = new InsurePremiumRequest.BiContractDTO.PlatFormMessageDTO();
+            }
+            BeanUtils.copyProperties(biContract.getPlatFormMessage(), platFormMessage);
+            platFormMessage.setAnswer(resp.syImageCode);
+            biContractReq.setPlatFormMessage(platFormMessage);
+            insurePremiumRequest.setBiContract(biContractReq);
+        }
+    }
+
     /**
      * 重复投保时间处理
      *
@@ -845,4 +957,15 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
         String dir = "carInsPolicy/" + licensePlate + "/";
         return FileUtil.netUrlToFile(url, dir, fileName, uploadFilePath, apiUrl + showFileUrl);
     }
+
+    @Data
+    static class CheckCodeResp {
+
+        @JsonProperty(value = "jqImageCode")
+        String jqImageCode;
+
+        @JsonProperty(value = "syImageCode")
+        String syImageCode;
+
+    }
 }