Ver Fonte

Merge remote-tracking branch 'origin/master'

jiakai há 1 mês atrás
pai
commit
1a823964c4

+ 17 - 4
commons/src/main/java/com/jzg/commons/entity/dto/PtlAgreementCostBatchAdjustParam.java

@@ -30,9 +30,22 @@ public class PtlAgreementCostBatchAdjustParam {
     @Schema(description = "操作类型:ADD-加,SUBTRACT-减", requiredMode = Schema.RequiredMode.REQUIRED, example = "ADD")
     private String operationType;
 
-    @Schema(description = "入口比例调整值(百分比)")
-    private BigDecimal inletRatio;
+    @Schema(description = "交强险入口比例调整值(百分比)")
+    private BigDecimal jqInletRatio;
+
+    @Schema(description = "交强险出口比例调整值(百分比)")
+    private BigDecimal jqExportRatio;
+
+    @Schema(description = "商业险入口比例调整值(百分比)")
+    private BigDecimal syInletRatio;
+
+    @Schema(description = "商业险出口比例调整值(百分比)")
+    private BigDecimal syExportRatio;
+
+    @Schema(description = "驾意险入口比例调整值(百分比)")
+    private BigDecimal jyInletRatio;
+
+    @Schema(description = "驾意险出口比例调整值(百分比)")
+    private BigDecimal jyExportRatio;
 
-    @Schema(description = "入口留点比例调整值(百分比)")
-    private BigDecimal inletKeepPointRatio;
 }

+ 18 - 12
tenant/insurance/quotation-dadi/src/main/java/com/jzg/quotation/dadi/crawler/build/DaDiCrawlerQuoteResultVoBuild.java

@@ -6,6 +6,7 @@ import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.quotation.commons.utils.DateTimeUtil;
 import com.jzg.quotation.dadi.crawler.entity.response.DaDiQuoteResponse;
+import com.jzg.quotation.dadi.crawler.entity.response.DaDiVehiclePricResponse;
 import com.jzg.quotation.dadi.utils.DaDiVehicleUtils;
 import org.apache.http.util.TextUtils;
 
@@ -20,7 +21,7 @@ import java.util.List;
  */
 public class DaDiCrawlerQuoteResultVoBuild {
 
-    public static QuoteResultsVo build(QuoteVo quoteVo, DaDiQuoteResponse daDiQuoteResponse) {
+    public static QuoteResultsVo build(QuoteVo quoteVo, DaDiQuoteResponse daDiQuoteResponse, DaDiVehiclePricResponse vehiclePricResponse) {
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
         quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.WAIT_AUDIT);
         DaDiQuoteResponse.UwResultDTO uwResult = daDiQuoteResponse.getUwResult();
@@ -32,7 +33,6 @@ public class DaDiCrawlerQuoteResultVoBuild {
 
         for (DaDiQuoteResponse.UwResultDTO.UnderwriteRuleInfosDTO underwriteRuleInfo : underwriteRuleInfos) {
             if (!"3".equals(underwriteRuleInfo.getUwType())) {
-                quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.PAY_PENDING);
                 eMsg += underwriteRuleInfo.getRuleDescription() + ";";
             }
         }
@@ -58,8 +58,8 @@ public class DaDiCrawlerQuoteResultVoBuild {
             quoteResultsVo.setBiRiskInfoVo(biRiskInfoVo);
         }
 
-        //设置保费,车船税,投保单号
-        buildParams(daDiQuoteResponse, quoteResultsVo);
+        //设置保费,车船税,投保单号,折旧价
+        buildParams(daDiQuoteResponse, quoteResultsVo, vehiclePricResponse);
         return quoteResultsVo;
     }
 
@@ -94,7 +94,7 @@ public class DaDiCrawlerQuoteResultVoBuild {
         return riskInfoVo;
     }
 
-    public static void buildParams(DaDiQuoteResponse daDiQuoteResponse, QuoteResultsVo quoteResultsVo) {
+    public static void buildParams(DaDiQuoteResponse daDiQuoteResponse, QuoteResultsVo quoteResultsVo, DaDiVehiclePricResponse vehiclePricResponse) {
         //交强险保费
         int trafficDuePremium = daDiQuoteResponse.getInsurancePlan().getTrafficDuePremium();
         quoteResultsVo.getCosts().setCiPremium(String.valueOf(trafficDuePremium));
@@ -104,20 +104,26 @@ public class DaDiCrawlerQuoteResultVoBuild {
         //车船税
         int sumPayment = daDiQuoteResponse.getInsurancePlan().getTax().getSumPayment();
         quoteResultsVo.getCosts().setVvTax(String.valueOf(sumPayment));
+        int niPremium = 0;
         //设置非车保费
-        if (!daDiQuoteResponse.getInsurancePlan().getAccidentInsure().isEmpty()) {
-            int niPremium = daDiQuoteResponse.getInsurancePlan().getAccidentInsure().get(0).getWealthAccPremium();
+        if (daDiQuoteResponse.getInsurancePlan().getAccidentInsure() != null && daDiQuoteResponse.getInsurancePlan().getAccidentInsure().size() > 0) {
+            niPremium = daDiQuoteResponse.getInsurancePlan().getAccidentInsure().get(0).getWealthAccPremium();
             quoteResultsVo.getCosts().setNiPremium(String.valueOf(niPremium));
-        }else if (!daDiQuoteResponse.getInsurancePlan().getHealthInsurance().isEmpty()) {
-            int niPremium = daDiQuoteResponse.getInsurancePlan().getHealthInsurance().get(0).getWealthAccPremium();
+        } else if (daDiQuoteResponse.getInsurancePlan().getHealthInsurance() != null && daDiQuoteResponse.getInsurancePlan().getHealthInsurance().size() > 0) {
+            niPremium = daDiQuoteResponse.getInsurancePlan().getHealthInsurance().get(0).getWealthAccPremium();
             quoteResultsVo.getCosts().setNiPremium(String.valueOf(niPremium));
-        }else  if (!daDiQuoteResponse.getInsurancePlan().getPropertyInsurance().isEmpty()) {
-            int niPremium = daDiQuoteResponse.getInsurancePlan().getHealthInsurance().get(0).getWealthAccPremium();
+        } else if (daDiQuoteResponse.getInsurancePlan().getPropertyInsurance() != null && daDiQuoteResponse.getInsurancePlan().getPropertyInsurance().size() > 0) {
+            niPremium = daDiQuoteResponse.getInsurancePlan().getPropertyInsurance().get(0).getWealthAccPremium();
             quoteResultsVo.getCosts().setNiPremium(String.valueOf(niPremium));
         }
 
         //总保费
-        int sumPremium = trafficDuePremium + businessDuePremium + sumPayment;
+        int sumPremium = trafficDuePremium + businessDuePremium + sumPayment + niPremium;
+        //车辆折旧价(从车价查询接口获取实际价值)
+        String actualValue = vehiclePricResponse.getActualValue();
+        if (!TextUtils.isEmpty(actualValue)) {
+            quoteResultsVo.setCarActualValue(new java.math.BigDecimal(actualValue));
+        }
         quoteResultsVo.getCosts().setSumPremium(String.valueOf(sumPremium));
     }
 

+ 83 - 2
tenant/insurance/quotation-dadi/src/main/java/com/jzg/quotation/dadi/crawler/entity/response/DaDiQuoteResponse.java

@@ -96,6 +96,8 @@ public class DaDiQuoteResponse extends DaDiBaseResponse {
         private String businessEffectiveStartDate;
         @SerializedName("businessEffectiveEndDate")
         private String businessEffectiveEndDate;
+        @SerializedName("businessQuotationNo")
+        private String businessQuotationNo;
         @SerializedName("trafficIsEffective")
         private String trafficIsEffective;
         @SerializedName("trafficSumInsured")
@@ -104,6 +106,10 @@ public class DaDiQuoteResponse extends DaDiBaseResponse {
         private String businessIsEffective;
         @SerializedName("wealthAccChecked")
         private String wealthAccChecked;
+        @SerializedName("minSharedPremium")
+        private double minSharedPremium;
+        @SerializedName("maxSharedPremium")
+        private double maxSharedPremium;
         @SerializedName("quoteFlag")
         private String quoteFlag;
         @SerializedName("cDiscountRate")
@@ -118,20 +124,40 @@ public class DaDiQuoteResponse extends DaDiBaseResponse {
         private int trafficDuePremium;
         @SerializedName("businessDuePremium")
         private int businessDuePremium;
+        @SerializedName("trafficStdPremium")
+        private int trafficStdPremium;
+        @SerializedName("businessStdPremium")
+        private int businessStdPremium;
+        @SerializedName("businessBeforeVatPremium")
+        private double businessBeforeVatPremium;
+        @SerializedName("businessSumInsured")
+        private int businessSumInsured;
+        @SerializedName("trafficTotalFloat")
+        private double trafficTotalFloat;
+        @SerializedName("businessTotalFloat")
+        private double businessTotalFloat;
         @SerializedName("trafficNcdRate")
         private double trafficNcdRate;
+        @SerializedName("businessNcdRate")
+        private double businessNcdRate;
         @SerializedName("trafficQueryPastDate")
         private String trafficQueryPastDate;
         @SerializedName("trafficQuerySequenceNo")
         private String trafficQuerySequenceNo;
+        @SerializedName("businessQuerySequenceNo")
+        private String businessQuerySequenceNo;
         @SerializedName("trafficQuotationNo")
         private String trafficQuotationNo;
         @SerializedName("trafficRenewalFlag")
         private String trafficRenewalFlag;
         @SerializedName("trafficRenewalType")
         private String trafficRenewalType;
-        @SerializedName("trafficStdPremium")
-        private int trafficStdPremium;
+        @SerializedName("businessQueryPastDate")
+        private String businessQueryPastDate;
+        @SerializedName("businessRenewalFlag")
+        private String businessRenewalFlag;
+        @SerializedName("businessRenewalType")
+        private String businessRenewalType;
         @SerializedName("violationLevel")
         private String violationLevel;
         @SerializedName("businessProductCode")
@@ -146,6 +172,12 @@ public class DaDiQuoteResponse extends DaDiBaseResponse {
         private List<AccidentInsureDTO> healthInsurance;
         @SerializedName("propertyInsurance")
         private List<AccidentInsureDTO> propertyInsurance;
+        @SerializedName("lastPolicy")
+        private LastPolicyDTO lastPolicy;
+        @SerializedName("queryCoverageResVO")
+        private QueryCoverageResVODTO queryCoverageResVO;
+        @SerializedName("businessRisks")
+        private List<BusinessRiskDTO> businessRisks;
 
 
         @NoArgsConstructor
@@ -245,6 +277,55 @@ public class DaDiQuoteResponse extends DaDiBaseResponse {
                 private String subsidyDay;
             }
         }
+
+        @NoArgsConstructor
+        @Data
+        public static class BusinessRiskDTO {
+            @SerializedName("kindCode")
+            private String kindCode;
+            @SerializedName("kindName")
+            private String kindName;
+            @SerializedName("kindFlag")
+            private String kindFlag;
+            @SerializedName("brokenCode")
+            private String brokenCode;
+            @SerializedName("premium")
+            private double premium;
+            @SerializedName("amount")
+            private int amount;
+            @SerializedName("rate")
+            private double rate;
+            @SerializedName("discount")
+            private int discount;
+            @SerializedName("standardPremium")
+            private double standardPremium;
+            @SerializedName("quantity")
+            private int quantity;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class LastPolicyDTO {
+            @SerializedName("lastEffectiveDate")
+            private String lastEffectiveDate;
+            @SerializedName("lastExpireDate")
+            private String lastExpireDate;
+            @SerializedName("lastProducerCode")
+            private String lastProducerCode;
+            @SerializedName("lastModelCode")
+            private String lastModelCode;
+            @SerializedName("lastModel")
+            private String lastModel;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class QueryCoverageResVODTO {
+            @SerializedName("lastStartDate")
+            private String lastStartDate;
+            @SerializedName("lastEndDate")
+            private String lastEndDate;
+        }
     }
 
     @NoArgsConstructor

+ 1 - 1
tenant/insurance/quotation-dadi/src/main/java/com/jzg/quotation/dadi/crawler/service/impl/DaDiCrawlerRequestImpl.java

@@ -105,7 +105,7 @@ public class DaDiCrawlerRequestImpl implements DaDiCrawlerRequest {
             daDiCrawlerOrderService.save(daDiCrawlerOrder);
         }
 
-        return DaDiCrawlerQuoteResultVoBuild.build(quoteVo, daDiQuoteResponse);
+        return DaDiCrawlerQuoteResultVoBuild.build(quoteVo, daDiQuoteResponse, vehiclePricVo);
     }
 
     /**

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

@@ -188,8 +188,9 @@ public class QuoteVerificationAspect {
                     String[] split = ptlAgreementCostRule.getMin().split(",");
                     boolean isPipei = false;
                     for(int i = 0;i < split.length; i++){
-                        if(split[i].equals(insOrdersCarInfo.getCarNatureCode())) {
+                        if (split[i].equals(insOrdersCarInfo.getCarNatureCode())) {
                             isPipei = true;
+                            break;
                         }
                     }
                     if(!isPipei){
@@ -201,8 +202,9 @@ public class QuoteVerificationAspect {
                     String[] split = ptlAgreementCostRule.getMin().split(",");
                     boolean isPipei = false;
                     for(int i = 0;i < split.length; i++){
-                        if(split[i].equals(insOrdersCarInfo.getCarKindCode())) {
+                        if (split[i].equals(insOrdersCarInfo.getCarKindCode())) {
                             isPipei = true;
+                            break;
                         }
                     }
                     if(!isPipei){
@@ -771,8 +773,9 @@ public class QuoteVerificationAspect {
                             Map<String,Object> level2 = calculateLevel2Distribution(insFeeOrders, totalPremium, level1.get("id").toString(), sysDistributionSetting);
                             if (level2 != null) {
                                 diffAmount = calculateLevel3Distribution(insFeeOrders, totalPremium, level2.get("id").toString(), sysDistributionSetting);
+                                diffAmount = diffAmount.add(new BigDecimal(level2.get("diffAmount").toString()));
                             }
-                            diffAmount = diffAmount.add(new BigDecimal(level2.get("diffAmount").toString())).add(new BigDecimal(level1.get("diffAmount").toString()));
+                            diffAmount = diffAmount.add(new BigDecimal(level1.get("diffAmount").toString()));
                         }
                         break;
                 }
@@ -869,9 +872,8 @@ public class QuoteVerificationAspect {
     public void doBefore(JoinPoint point) {
         Object[] args = point.getArgs();
         for (Object arg : args) {
-            if (arg instanceof QuoteVo) {
+            if (arg instanceof QuoteVo quoteVo) {
                 // 1.根据参数判断是否存在调度信息
-                QuoteVo quoteVo = (QuoteVo)arg;
                 // 过滤险种 前端如果选择不投保的时候 直接过滤掉别让他进报价的逻辑里。
                 if (!quoteVo.getKindInfoVo().isEmpty()) {
                     quoteVo.setKindInfoVo(quoteVo.getKindInfoVo().stream().filter(kindInfoVo ->

+ 33 - 11
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementCostServiceImpl.java

@@ -521,37 +521,59 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
 
         boolean isAdd = "ADD".equalsIgnoreCase(param.getOperationType());
 
+        // 校验:至少传递一种险种的比例
+        boolean hasJqRatio = param.getJqInletRatio() != null || param.getJqExportRatio() != null;
+        boolean hasSyRatio = param.getSyInletRatio() != null || param.getSyExportRatio() != null;
+        boolean hasJyRatio = param.getJyInletRatio() != null || param.getJyExportRatio() != null;
+
+        if (!hasJqRatio && !hasSyRatio && !hasJyRatio) {
+            return HttpResult.error("至少需要传递一种险种的比例(交强险/商业险/驾意险)");
+        }
+
+        int adjustedCount = 0;
         for (PtlAgreementCostType costType : costTypeList) {
             String costTypeStr = costType.getCostType();
+            boolean wasAdjusted = false;
 
             // 根据费用类型进行调整
-            if ("交强险".equals(costTypeStr)) {
-                adjustCostType(costType, param.getInletRatio(), param.getInletKeepPointRatio(), isAdd);
-            } else if ("商业险".equals(costTypeStr)) {
-                adjustCostType(costType, param.getInletRatio(), param.getInletKeepPointRatio(), isAdd);
-            } else if ("驾意险".equals(costTypeStr)) {
-                adjustCostType(costType, param.getInletRatio(), param.getInletKeepPointRatio(), isAdd);
+            if ("交强险".equals(costTypeStr) && hasJqRatio) {
+                adjustCostType(costType, param.getJqInletRatio(), param.getJqExportRatio(), isAdd);
+                wasAdjusted = true;
+            } else if ("商业险".equals(costTypeStr) && hasSyRatio) {
+                adjustCostType(costType, param.getSyInletRatio(), param.getSyExportRatio(), isAdd);
+                wasAdjusted = true;
+            } else if ("驾意险".equals(costTypeStr) && hasJyRatio) {
+                adjustCostType(costType, param.getJyInletRatio(), param.getJyExportRatio(), isAdd);
+                wasAdjusted = true;
             }
+
+            if (wasAdjusted) {
+                adjustedCount++;
+            }
+        }
+
+        if (adjustedCount == 0) {
+            return HttpResult.error("未找到匹配的费用类型记录进行调整");
         }
 
         // 批量更新
         ptlAgreementCostTypeService.updateBatchById(costTypeList);
 
-        return HttpResult.ok("批量调整成功");
+        return HttpResult.ok("批量调整成功,共调整 " + adjustedCount + " 条记录");
     }
 
     /**
      * 调整费用类型的各项比例
      */
     private void adjustCostType(PtlAgreementCostType costType, BigDecimal inlet,
-                                BigDecimal keepPointRatio, boolean isAdd) {
+                                BigDecimal export, boolean isAdd) {
         // 入口比例
         if (inlet != null) {
             costType.setInlet(calculateNewValue(costType.getInlet(), inlet, isAdd));
         }
-        // 入口留点比例
-        if (keepPointRatio != null) {
-            costType.setKeepPointRatio(calculateNewValue(costType.getKeepPointRatio(), keepPointRatio, isAdd));
+        // 出口比例
+        if (export != null) {
+            costType.setExport(calculateNewValue(costType.getExport(), export, isAdd));
         }
     }