Ver código fonte

诚泰重复投保和验车码的处理

dongxin 1 ano atrás
pai
commit
82049f3458

+ 220 - 4
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/service/impl/ChengTaiApiRequestImpl.java

@@ -1,9 +1,14 @@
 package com.jzg.quotation.chengtai.api.service.impl;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.util.StringUtils;
+import com.jzg.commons.util.http.HttpUtils;
 import com.jzg.quotation.chengtai.api.build.ChengTaiAPIQuoteResultsVoBuild;
 import com.jzg.quotation.chengtai.api.component.ChengTaiRequestApiComponent;
 import com.jzg.quotation.chengtai.api.entity.ChengTaiApiConfigureParameters;
+import com.jzg.quotation.chengtai.api.entity.constants.ResponseCode;
 import com.jzg.quotation.chengtai.api.entity.po.ChengTaiApiOrder;
 import com.jzg.quotation.chengtai.api.entity.request.*;
 import com.jzg.quotation.chengtai.api.entity.response.*;
@@ -18,11 +23,17 @@ import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
+import com.jzg.quotation.commons.utils.DateTimeUtil;
+import com.jzg.quotation.commons.utils.HttpUtil;
+import lombok.Data;
 import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
 import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 
 /**
  * @description: 诚泰财险 API 计算
@@ -61,15 +72,209 @@ public class ChengTaiApiRequestImpl implements ChengTaiApiRequest {
         InsurePremiumResponse insurePremiumResponse = chengTaiRequestApiComponent.calculatePremium(insurePremiumRequest,httpHeaders,chengTaiApiProperties.getPartnerCode());
 
         // 处理重复投保
-
+        repeatCoverhandler(insurePremiumRequest, insurePremiumResponse,httpHeaders);
         // 处理验车码
-
+        codeRecognitionHandler(insurePremiumRequest, insurePremiumResponse,httpHeaders);
         // 处理验车码识别错误
+        this.codeRecognitionErrHandler(insurePremiumRequest, insurePremiumResponse,httpHeaders);
+
         chengTaiCrawlerOrderService.saveOrderInfo(quoteVo,insurePremiumResponse);
 
         return ChengTaiAPIQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo, insurePremiumResponse);
     }
 
+    /**
+     * 验车码识别错误处理
+     * @param insurePremiumRequest
+     * @param insurePremiumResponse
+     * @param httpHeaders
+     */
+    private void codeRecognitionErrHandler(InsurePremiumRequest insurePremiumRequest,
+                                           InsurePremiumResponse insurePremiumResponse,
+                                           HttpHeaders httpHeaders) {
+        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()));
+        }
+        insurePremiumResponse = chengTaiRequestApiComponent.calculatePremium(insurePremiumRequest,httpHeaders,chengTaiApiProperties.getPartnerCode());
+    }
+
+    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 insurePremiumRequest
+     * @param insurePremiumResponse
+     * @param httpHeaders
+     */
+    private void codeRecognitionHandler(InsurePremiumRequest insurePremiumRequest,
+                                        InsurePremiumResponse insurePremiumResponse,
+                                        HttpHeaders httpHeaders) {
+        InsurePremiumResponse.BiContractDTO biContract = insurePremiumResponse.getBiContract();
+        InsurePremiumResponse.CiContractDTO ciContract = insurePremiumResponse.getCiContract();
+
+        Boolean biBoo = false;
+        Boolean ciBoo = false;
+        if(Objects.nonNull(biContract)){
+            Double biTotalPremium = biContract.getContractMain().getTotalPremium();
+            if(Objects.isNull(biTotalPremium)){
+                biBoo = true;
+            }
+        }
+        if(Objects.nonNull(ciContract)){
+            Double ciTotalPremium = ciContract.getContractMain().getTotalPremium();
+            if(Objects.isNull(ciTotalPremium)){
+                ciBoo = true;
+            }
+        }
+
+        if (biBoo || ciBoo) {
+            this.platRepetition(insurePremiumResponse,insurePremiumRequest);
+            insurePremiumResponse = chengTaiRequestApiComponent.calculatePremium(insurePremiumRequest,httpHeaders,chengTaiApiProperties.getPartnerCode());
+        }
+
+    }
+
+    /**
+     * 转保车处理
+     * @param response
+     * @param insurePremiumRequest
+     */
+    private void platRepetition(InsurePremiumResponse response, InsurePremiumRequest insurePremiumRequest) {
+        String jqImageStr = null;
+        String syImageStr = null;
+        insurePremiumRequest.setOrderId(response.getOrderId());
+        InsurePremiumResponse.CiContractDTO ciContract = response.getCiContract();
+        InsurePremiumResponse.BiContractDTO biContract = response.getBiContract();
+        //交强险
+        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", StringUtils.toString(jqImageStr, ""));
+        bodyMap.put("syImage", StringUtils.toString(syImageStr, ""));
+        String sendBody = JSON.toJSONString(bodyMap);
+        String ocrStr = HttpUtils.sendPost("http://39.98.41.104:8088/getres", sendBody);
+        CheckCodeResp resp = JSON.parseObject(ocrStr).toJavaObject(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);
+        }
+    }
+
+    /**
+     * 处理重复投保
+     *
+     * @param insurePremiumRequest
+     * @param insurePremiumResponse
+     * @param httpHeaders
+     */
+    private void repeatCoverhandler(InsurePremiumRequest insurePremiumRequest,
+                                    InsurePremiumResponse insurePremiumResponse,
+                                    HttpHeaders httpHeaders) {
+        if(!ResponseCode.R_000.getCode().equals(insurePremiumResponse.getCode()) && insurePremiumResponse.getMessage().contains("重复投保")){
+            String err = insurePremiumResponse.getMessage();
+            List<String> errList = Arrays.asList(err.split("。"));
+            if(CollUtil.isEmpty(errList)){ return; }
+            errList.stream().forEach(a ->{
+                if (a.contains("交强险平台") && a.contains("重复投保")){
+                    InsurePremiumRequest.CiContractDTO ciContract = insurePremiumRequest.getCiContract();
+                    InsurePremiumRequest.CiContractDTO.ContractMainDTO contractMain = ciContract.getContractMain();
+                    Map<String, String> timeMap = this.timeHandler(a, contractMain.getExpiryDate());
+                    contractMain.setValidDate(timeMap.get("startTime"));
+                    contractMain.setExpiryDate(timeMap.get("endTime"));
+                    ciContract.setContractMain(contractMain);
+                    insurePremiumRequest.setCiContract(ciContract);
+                }
+                if (a.contains("商业险险平台") && a.contains("重复投保")){
+                    InsurePremiumRequest.BiContractDTO biContract = insurePremiumRequest.getBiContract();
+                    InsurePremiumRequest.BiContractDTO.ContractMainDTO contractMain = biContract.getContractMain();
+                    Map<String, String> timeMap = this.timeHandler(a, contractMain.getExpiryDate());
+                    contractMain.setValidDate(timeMap.get("startTime"));
+                    contractMain.setExpiryDate(timeMap.get("endTime"));
+                    biContract.setContractMain(contractMain);
+                    insurePremiumRequest.setBiContract(biContract);
+                }
+            });
+            insurePremiumResponse = chengTaiRequestApiComponent.calculatePremium(insurePremiumRequest,httpHeaders,chengTaiApiProperties.getPartnerCode());
+        }
+    }
+
+    /**
+     * 重复投保时间处理再报价
+     * @param errStr
+     * @param expiryDate
+     * @return
+     */
+    private Map<String, String> timeHandler(String errStr, String expiryDate) {
+        // 定义时间格式
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
+        LocalDateTime dateTime = null;
+        if(errStr.contains("终保日期")){
+            String startTime = errStr.substring(errStr.indexOf("终保日期")+5,errStr.indexOf("终保日期")+21);
+            // 解析原始时间
+            dateTime =  LocalDateTime.parse(startTime, formatter1);
+        }else{
+            String startTime = expiryDate;
+            // 解析原始时间
+            dateTime = LocalDateTime.parse(startTime, formatter);
+        }
+        LocalDateTime tomorrowMidnight = dateTime;
+        //判断是否是整点  如果是整点则不进行明天的零点操作
+        if(dateTime.getHour() != 0 || dateTime.getMinute() != 0 || dateTime.getSecond() != 0)
+        {
+            tomorrowMidnight = dateTime.toLocalDate().plusDays(1).atStartOfDay();
+        }
+        LocalDateTime end = tomorrowMidnight.plusYears(1L);
+        String startTime = DateTimeUtil.format(tomorrowMidnight, DateTimeUtil.DATETIME_PATTERN);
+        LocalDateTime localDateTime = end.minusSeconds(1L);
+        String endTime = DateTimeUtil.format(localDateTime, DateTimeUtil.DATETIME_PATTERN);
+        Map<String, String> timeMap = new HashMap<String, String>();
+        timeMap.put("startTime", startTime);
+        timeMap.put("endTime", endTime);
+        return timeMap;
+    }
+
     @Override
     public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) {
         OrderBase orderBase = underwritingVo.getOrder();
@@ -127,4 +332,15 @@ public class ChengTaiApiRequestImpl implements ChengTaiApiRequest {
     public void queryOrderState(OrderBase orderBase) {
 
     }
+
+    @Data
+    static class CheckCodeResp {
+
+        @JsonProperty(value = "jqImageCode")
+        String jqImageCode;
+
+        @JsonProperty(value = "syImageCode")
+        String syImageCode;
+
+    }
 }