Просмотр исходного кода

安盛交三核保提示页面默认协商价与重新计算的客户协商价不一致

xuqiang 1 месяц назад
Родитель
Сommit
35c4a475f0

+ 68 - 1
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerRequestImpl.java

@@ -8,6 +8,7 @@ import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.quote.vo.AccidentalDrivingVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.commons.exception.SystemException;
@@ -48,6 +49,7 @@ import java.nio.charset.StandardCharsets;
 import java.time.Year;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -159,6 +161,7 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
         if (anShengCrawlerAutoResetTimeResponse.getCode() != 200){
             throw new SystemException(anShengCrawlerAutoResetTimeResponse.getMessage());
         }
+        log.info("安盛报价返回起始时间:{}",JSONObject.toJSONString(anShengCrawlerAutoResetTimeResponse));
         if (wantRebuild(quoteVo,anShengCrawlerAutoResetTimeResponse)){
             crawlerCalculatePremiumApply = new AnShengCrawlerCalculatePremiumApplyMessage(quoteVo, dataDTO, userDetailResponse, departmentPlanCode, checkVehicleCodeSecretGenerate);
         }
@@ -173,10 +176,13 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
                 String endTime = TimeProcessing.minusOneSecondAfterYear(startTime);
                 crawlerCalculatePremiumApply.getContracts().get(0).getPolicyBase().setInsuranceBeginTime(startTime);
                 crawlerCalculatePremiumApply.getContracts().get(0).getPolicyBase().setInsuranceEndTime(endTime);
-                log.info("安盛报价重复投保参数:{}", JSONObject.toJSONString(crawlerCalculatePremiumApply));
                 calculatePremiumApply = anShengCrawlerRequestComponent.calculatePremiumApply(crawlerCalculatePremiumApply, httpHeaders);
             }
         }
+        if (verifyQuotationTime(calculatePremiumApply,crawlerCalculatePremiumApply,quoteVo)){
+            crawlerCalculatePremiumApply = new AnShengCrawlerCalculatePremiumApplyMessage(quoteVo, dataDTO, userDetailResponse, departmentPlanCode, checkVehicleCodeSecretGenerate);
+            calculatePremiumApply = anShengCrawlerRequestComponent.calculatePremiumApply(crawlerCalculatePremiumApply, httpHeaders);
+        }
         if (calculatePremiumApply.getCode() == 200) {
             // 缓存报价信息
             //  处理报价返回起止时间
@@ -212,6 +218,67 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
     }
 
 
+    public boolean verifyQuotationTime(AnShengCrawlerCalculatePremiumApplyResponse response, AnShengCrawlerCalculatePremiumApplyMessage request, QuoteVo quoteVo) {
+        if (isInvalidInput(response, request)) {
+            return false;
+        }
+        Map<String, AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO> respContractMap =
+                response.getData().getContracts().stream()
+                        .filter(dto -> StringUtils.isNotBlank(dto.getPlanCode()))
+                        .collect(Collectors.toMap(
+                                AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO::getPlanCode,
+                                Function.identity(),
+                                (v1, v2) -> v1
+                        ));
+
+        boolean timeUpdated = false;
+        for (AnShengCrawlerCalculatePremiumApplyMessage.ContractsDTO reqContract : request.getContracts()) {
+            AnShengCrawlerCalculatePremiumApplyMessage.ContractsDTO.PolicyBaseDTO policyBase = reqContract.getPolicyBase();
+            if (policyBase == null || StringUtils.isBlank(policyBase.getPlanCode())) {
+                continue;
+            }
+            AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO respContract = respContractMap.get(policyBase.getPlanCode());
+            if (respContract == null) {
+                continue;
+            }
+            if (!Objects.equals(policyBase.getInsuranceBeginTime(), respContract.getInsuranceBeginTime())) {
+                RiskInfoVo riskInfoVo = resolveRiskInfoVo(policyBase.getPlanCode(), quoteVo);
+                if (riskInfoVo != null) {
+                    riskInfoVo.setStartDate(respContract.getInsuranceBeginTime());
+                    riskInfoVo.setEndDate(respContract.getInsuranceEndTime());
+                    timeUpdated = true;
+                }
+            }
+        }
+        return timeUpdated;
+    }
+
+    /**
+     * 校验入参是否合法
+     */
+    private boolean isInvalidInput(
+            AnShengCrawlerCalculatePremiumApplyResponse response,
+            AnShengCrawlerCalculatePremiumApplyMessage request) {
+        return response == null
+                || response.getData() == null
+                || CollectionUtils.isEmpty(response.getData().getContracts())
+                || request == null
+                || CollectionUtils.isEmpty(request.getContracts());
+    }
+
+    /**
+     * 根据 planCode 映射对应的 RiskInfoVo
+     */
+    private RiskInfoVo resolveRiskInfoVo(String planCode, QuoteVo quoteVo) {
+        if (DepartmentPlanCode.PLAN_105.getCode().equals(planCode)) {
+            return quoteVo.getCiRiskInfoVo();
+        }
+        if (DepartmentPlanCode.PLAN_109.getCode().equals(planCode)) {
+            return quoteVo.getBiRiskInfoVo();
+        }
+        return null;
+    }
+
     public boolean wantRebuild(QuoteVo quoteVo,AnShengCrawlerAutoResetTimeResponse anShengCrawlerAutoResetTimeResponse){
         boolean wantRebuild = false;
         String insuranceBeginTimeJQ = anShengCrawlerAutoResetTimeResponse.getData().getInsuranceBeginTimeJQ();