|
|
@@ -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();
|