فهرست منبع

fix 大地保险重复投保日期不对问题,大地和中煤 新系统 需要做日期不满一年的就算过户费用的功能

liub 3 هفته پیش
والد
کامیت
24b3bfc54c

+ 13 - 2
commons/src/main/java/com/jzg/commons/entity/vo/RuleAttrMappingVo.java

@@ -2,6 +2,7 @@ package com.jzg.commons.entity.vo;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.jzg.commons.constants.quote.enums.base.InsuranceEnum;
 import com.jzg.commons.constants.quote.enums.quote.CarKindCode;
 import com.jzg.commons.constants.quote.enums.quote.KindCode;
 import com.jzg.commons.constants.quote.enums.quote.VehicleUseCode;
@@ -37,7 +38,7 @@ public class RuleAttrMappingVo {
     public static List<RuleAttrMappingVo> getRuleAttrMappingVoList(InsOrdersOther insOrdersOther,
                                                                    InsOrdersCarInfo insOrdersCarInfo, List<InsOrdersRisk> riskList,
                                                                    List<InsOrdersCarUserInfo> insOrdersCarUserInfos, List<InsOrdersKind> kindList,
-                                                                   InsOrdersCosts insOrdersCosts, InsOrdersAccidentalDriving insOrdersAccidentalDriving,Boolean isNewCar) {
+                                                                   InsOrdersCosts insOrdersCosts, InsOrdersAccidentalDriving insOrdersAccidentalDriving, Boolean isNewCar, String companyId) {
         List<RuleAttrMappingVo> ruleAttrMappingVoList = new ArrayList<>();
         //车牌号
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("LicenseNo", insOrdersCarInfo.getLicenseNo()));
@@ -67,7 +68,17 @@ public class RuleAttrMappingVo {
         //注册日期
 //        ruleAttrMappingVoList.add(new RuleAttrMappingVo("RegistrationDate", insOrdersCarInfo.getRegisterDate()));
         //是否过户
-        ruleAttrMappingVoList.add(new RuleAttrMappingVo("Transfer", String.valueOf(insOrdersCarInfo.getTransfer())));
+        int transfer = insOrdersCarInfo.getTransfer();
+        //大地、中煤保司:发证日期距当前日期未满一年的标记为过户车
+        if (transfer != 1 && StringUtils.isNotBlank(companyId)
+                && (companyId.contains(InsuranceEnum.CCIC.getCode()) || companyId.contains(InsuranceEnum.ZMBX.getCode()))
+                && insOrdersCarInfo.getIssueDate() != null) {
+            LocalDate issueDate = insOrdersCarInfo.getIssueDate().toLocalDate();
+            if (issueDate.plusYears(1).isAfter(LocalDate.now())) {
+                transfer = 1;
+            }
+        }
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("Transfer", String.valueOf(transfer)));
         //交强起保日期
         riskList.stream().filter(risk -> risk.getRiskCode().equals("0507"))
                 .findFirst().ifPresent(risk -> ruleAttrMappingVoList.add(new RuleAttrMappingVo("JqStartTime", risk.getStartDate().toString())));

+ 8 - 5
tenant/insurance/quotation-dadi/src/main/java/com/jzg/quotation/dadi/crawler/component/DaDiCrawlerRequestComponent.java

@@ -223,7 +223,7 @@ public class DaDiCrawlerRequestComponent {
                 vehicleModelVO = daDiVehicleChannelInfo.getCarModels().get(0);
             } else {
                 for (DaDiVehicleChannelInfoResponse.CarModel item : daDiVehicleChannelInfo.getCarModels()) {
-                    if (item.getSeatCount() >= Integer.parseInt(carInfo.getSeatCount()) || item.getPurchasePrice() == Double.parseDouble(carInfo.getPurchasePrice()) || TextUtils.isEmpty(carInfo.getCarYear()) ? true : item.getMarketYear() == carInfo.getCarYear()) {
+                    if (item.getSeatCount() >= Integer.parseInt(carInfo.getSeatCount()) || item.getPurchasePrice() == Double.parseDouble(carInfo.getPurchasePrice()) || TextUtils.isEmpty(carInfo.getCarYear()) || item.getMarketYear() == carInfo.getCarYear()) {
                         vehicleModelVO = item;
                         break;
                     }
@@ -231,7 +231,7 @@ public class DaDiCrawlerRequestComponent {
                         vehicleModelVO = item;
                         break;
                     }
-                    if (item.getSeatCount() >= Integer.parseInt(carInfo.getSeatCount()) || TextUtils.isEmpty(carInfo.getCarYear()) ? true : item.getMarketYear() == carInfo.getCarYear()) {
+                    if (item.getSeatCount() >= Integer.parseInt(carInfo.getSeatCount()) || TextUtils.isEmpty(carInfo.getCarYear()) || item.getMarketYear() == carInfo.getCarYear()) {
                         vehicleModelVO = item;
                         break;
                     }
@@ -494,8 +494,11 @@ public class DaDiCrawlerRequestComponent {
         if (TextUtils.isEmpty(startTime) && !TextUtils.isEmpty(trafficErrorMessage)) {
             Matcher jqMatcher = JQ_PATTERN.matcher(trafficErrorMessage);
             if (jqMatcher.find()) {
-                startTime = jqMatcher.group(1);
-                endTime = jqMatcher.group(2);
+                // 起保时间取终保日期(老保单终保时间),endTime 为终保时间一年后
+                String endDateStr = jqMatcher.group(2);
+                startTime = endDateStr;
+                String beginDateStr = DateUtil.strAllToDateToStr(endDateStr + ":00", "yyyy-MM-dd HH:mm:ss", "yyyyMMddHHmmss");
+                endTime = DateUtil.getNextYearDateStrTranfer(beginDateStr);
             } else {
                 throw new ValidateException(trafficErrorMessage);
             }
@@ -784,7 +787,7 @@ public class DaDiCrawlerRequestComponent {
                 // 获取文件名
                 String fileName = uploadFile.getFileName();
                 // 获取文件流
-                String imgUrl = minioUtils.getPresignedObjectUrl(uploadFile.getBucketName(), fileName);
+                String imgUrl = MinioUtils.getPresignedObjectUrl(uploadFile.getBucketName(), fileName);
                 log.info("大地影像上传,获取文件预签名URL,imgUrl:{}", imgUrl);
                 InputStream inputStream = minioUtils.getObject(uploadFile.getBucketName(), fileName);
                 log.info("大地影像上传,获取获取文件流,inputStream:{}", inputStream);

+ 19 - 5
tenant/insurance/quotation-dadi/src/main/java/com/jzg/quotation/dadi/crawler/entity/request/DaDiInsurancePlanRequest.java

@@ -14,7 +14,10 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.jetbrains.annotations.NotNull;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @author Liub
@@ -389,8 +392,8 @@ public class DaDiInsurancePlanRequest extends DaDiBaseRequest {
         RiskInfoVo biRisk = quoteVo.getBiRiskInfoVo();
         if (biRisk != null) {
             this.businessChecked = "1";
-            this.businessEffectiveStartDate = biRisk.getStartDate();
-            this.businessEffectiveEndDate = biRisk.getEndDate();
+            this.businessEffectiveStartDate = normalizeEffectiveDate(biRisk.getStartDate());
+            this.businessEffectiveEndDate = normalizeEffectiveDate(biRisk.getEndDate());
             this.businessIsEffective = biRisk.isInstantFlag() ? "1" : "0";
         } else {
             this.businessChecked = "0";
@@ -424,8 +427,8 @@ public class DaDiInsurancePlanRequest extends DaDiBaseRequest {
         RiskInfoVo ciRisk = quoteVo.getCiRiskInfoVo();
         if (ciRisk != null) {
             this.trafficChecked = "1";
-            this.trafficEffectiveStartDate = ciRisk.getStartDate();
-            this.trafficEffectiveEndDate = ciRisk.getEndDate();
+            this.trafficEffectiveStartDate = normalizeEffectiveDate(ciRisk.getStartDate());
+            this.trafficEffectiveEndDate = normalizeEffectiveDate(ciRisk.getEndDate());
             this.trafficIsEffective = ciRisk.isInstantFlag() ? "1" : "0";
             this.trafficSumInsured = 200000;
             if (ciRisk.getRiskCode().contains("B") || ciRisk.getRiskCode().contains("D3")) {
@@ -631,6 +634,17 @@ public class DaDiInsurancePlanRequest extends DaDiBaseRequest {
         }
     }
 
+    static String normalizeEffectiveDate(String dateTime) {
+        if (dateTime == null) {
+            return null;
+        }
+        String normalized = dateTime.trim();
+        if (normalized.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}")) {
+            return normalized + ":00";
+        }
+        return normalized;
+    }
+
     @NotNull
     private static Tax getTax(QuoteVo quoteVo, DaDiTaxConfigResponse taxConfig) {
         Tax tax = new Tax();

+ 21 - 0
tenant/insurance/quotation-dadi/src/main/java/com/jzg/quotation/dadi/crawler/entity/request/DadiInsuredInfoRequest.java

@@ -1,12 +1,14 @@
 package com.jzg.quotation.dadi.crawler.entity.request;
 
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.quotation.dadi.crawler.entity.response.DaDiCurTaskResponse;
 import com.jzg.quotation.dadi.crawler.entity.response.DaDiQuoteResponse;
 import com.jzg.quotation.dadi.utils.DaDiVehicleUtils;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.springframework.util.StringUtils;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -103,6 +105,25 @@ public class DadiInsuredInfoRequest {
                                   String comCode, String userCode) {
         DaDiApplicantInfoRequest applicant = new DaDiApplicantInfoRequest(quoteVo.getPolicyHolderInfo());
         DaDiApplicantInfoRequest insured = new DaDiApplicantInfoRequest(quoteVo.getInsuredPersonInfo());
+        // 投保人/被保人与车辆关系(relationFlag 与 vehicleRelation 同步设置):
+        // 1-所有 2-使用 3-管理;被保人与车主不为同一人时,关系不能为"所有",
+        // 按车主证件号判断:同一人则"所有",不同一人则"使用"
+        CustomerInfoVo owner = quoteVo.getOwnersInfo();
+        CustomerInfoVo insuredPerson = quoteVo.getInsuredPersonInfo();
+        CustomerInfoVo policyHolder = quoteVo.getPolicyHolderInfo();
+        if (owner != null && StringUtils.hasText(owner.getIdentifyNumber())) {
+            String ownerIdentifyNumber = owner.getIdentifyNumber();
+            if (insuredPerson != null && StringUtils.hasText(insuredPerson.getIdentifyNumber())) {
+                String insuredRelation = ownerIdentifyNumber.equals(insuredPerson.getIdentifyNumber()) ? "1" : "2";
+                insured.setRelationFlag(insuredRelation);
+                insured.setVehicleRelation(insuredRelation);
+            }
+            if (policyHolder != null && StringUtils.hasText(policyHolder.getIdentifyNumber())) {
+                String applicantRelation = ownerIdentifyNumber.equals(policyHolder.getIdentifyNumber()) ? "1" : "2";
+                applicant.setRelationFlag(applicantRelation);
+                applicant.setVehicleRelation(applicantRelation);
+            }
+        }
         DadiInvoiceRequest invoice = new DadiInvoiceRequest(quoteVo);
         this.orderId = orderId;
         this.applicant = applicant;

+ 5 - 8
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/AuditVerificationAspect.java

@@ -6,8 +6,6 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
-import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchRulesAttrLink;
-import com.jzg.commons.entity.agreement.dispatch.vo.ValidateDispatchRuleVo;
 import com.jzg.commons.entity.orders.po.*;
 import com.jzg.commons.entity.po.*;
 import com.jzg.commons.entity.quote.vo.aggregated.UnderwritingVo;
@@ -27,7 +25,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.time.format.DateTimeFormatter;
@@ -142,7 +139,7 @@ public class AuditVerificationAspect {
                     "协议已失效,请重新报价"
                 );
                 AssertionUtils.isFail(
-                    agreementVo.getIsEnable() != null && "1".equals(agreementVo.getIsEnable().toString()),
+                    agreementVo.getIsEnable() != null && "1".equals(agreementVo.getIsEnable()),
                     "协议已停用,请重新报价"
                 );
 
@@ -193,7 +190,7 @@ public class AuditVerificationAspect {
                         e);
                 throw new SystemException("承保规则校验服务暂时不可用,请稍后重试");
             } catch (Exception e) {
-                log.error("承保规则校验异常, {}", logs.toString(), e);
+                log.error("承保规则校验异常, {}", logs, e);
                 throw new SystemException("承保规则校验异常,"+e.getMessage());
             }
         }
@@ -210,12 +207,12 @@ public class AuditVerificationAspect {
         boolean isNewCar = false;
         if(comparenew.getCode()== 200) {
             // 新旧车判断
-            isNewCar = comparenew.getData().equals("true") ? true : false;
+            isNewCar = comparenew.getData().equals("true");
         }
         List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = orgClient.list().getData();
         //获取所有费用属性关联
         List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insOrdersOther,insOrdersCarInfo,
-                riskList, insOrdersCarUserInfos, kindList, insOrdersCosts, insOrdersAccidentalDriving, isNewCar);
+                riskList, insOrdersCarUserInfos, kindList, insOrdersCosts, insOrdersAccidentalDriving, isNewCar, insOrders.getCompanyId());
 
         List<PtlAgreementUndwrtRulesDictLabal> undwrtRulesDictList = ptlNewAgreementClient.getUndwrtRulesDictList();
 
@@ -250,7 +247,7 @@ public class AuditVerificationAspect {
             // 有一个匹配上  或者都没匹配上 都返回true
             boolean ruleMatched = FactorMatch.judgementsUnderwrite(ptlAgreementUndwrtRulesNews, ruleAttrMappingVoList, undwrtRulesAttrList, ruleLogs, undwrtRulesDictList);
 
-            log.info("规则组[{}]匹配结果: ruleMatched={}, 错误日志=[{}]", groupIndex, ruleMatched, ruleLogs.toString());
+            log.info("规则组[{}]匹配结果: ruleMatched={}, 错误日志=[{}]", groupIndex, ruleMatched, ruleLogs);
 
             if (ruleMatched && StringUtils.isNotBlank(ruleLogs)) {//ruleLogs 不为空 表示有一个匹配上
                 anyRuleMatched = true;

+ 1 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java

@@ -257,7 +257,7 @@ public class QuoteVerificationAspect {
 //        }
         //获取所有费用属性关联
         List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insOrdersOther,insOrdersCarInfo,
-                riskList, insOrdersCarUserInfos, kindList, insOrdersCosts, insOrdersAccidentalDriving, isNewCar);
+                riskList, insOrdersCarUserInfos, kindList, insOrdersCosts, insOrdersAccidentalDriving, isNewCar, insOrders.getCompanyId());
 
         // 字典数据在一次报价内是只读不变的,提到循环外避免N+1远程调用
         // 修复批量报价时该方法被 organization 服务打爆的问题