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

承保规则校验添加
评分调整
财务任务中心修改

785834757 8 месяцев назад
Родитель
Сommit
739cbdadee
27 измененных файлов с 832 добавлено и 644 удалено
  1. 3 2
      commons/src/main/java/com/jzg/commons/entity/account/dto/AccountCardAddParam.java
  2. 1 1
      commons/src/main/java/com/jzg/commons/entity/dto/FeeAuditParam.java
  3. 13 3
      commons/src/main/java/com/jzg/commons/entity/orders/po/InsOrdersOther.java
  4. 5 4
      commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/QuoteEchoVo.java
  5. 16 25
      commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/QuoteResultsVo.java
  6. 7 3
      commons/src/main/java/com/jzg/commons/entity/vo/InsOrdersOtherInfoVo.java
  7. 3 0
      commons/src/main/java/com/jzg/commons/entity/vo/PtlAgreementCostVo.java
  8. 51 36
      commons/src/main/java/com/jzg/commons/entity/vo/RuleAttrMappingVo.java
  9. 0 2
      tenant/insurance/quotation-renbao/src/main/java/com/jzg/quotation/renbao/crawler/entity/request/RenBaoCrawlerCustomPersonUpdateRequest.java
  10. 10 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/AuditVerification.java
  11. 373 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/FactorMatch.java
  12. 146 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/AuditVerificationAspect.java
  13. 75 530
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java
  14. 13 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsFeeAuditController.java
  15. 2 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  16. 1 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsFeeAuditService.java
  17. 4 3
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeAuditServiceImpl.java
  18. 1 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeOrdersServiceImpl.java
  19. 30 11
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  20. 7 4
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeAuditMapper.xml
  21. 36 5
      tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/build/YangGuangApiQuoteResultsVoBuild.java
  22. 13 6
      tenant/insurance/quotation-yongcheng/src/main/java/com/jzg/quotation/yongcheng/api/service/impl/YongChengApiRequestImpl.java
  23. 6 4
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/api/build/ZmApiQuoteResultsVoBuild.java
  24. 3 2
      tenant/organization/src/main/java/com/jzg/organization/controller/AccountCardController.java
  25. 10 0
      tenant/organization/src/main/java/com/jzg/organization/controller/AgreementRulesController.java
  26. 2 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementUndwrtRulesAttrServiceImpl.java
  27. 1 0
      tenant/organization/src/main/resources/mapper/PtlAgreementCostMapper.xml

+ 3 - 2
commons/src/main/java/com/jzg/commons/entity/account/dto/AccountCardAddParam.java

@@ -6,6 +6,7 @@ import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.Size;
 import lombok.Data;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 
 @Schema(description = "账户表新增dto")
@@ -69,7 +70,7 @@ public class AccountCardAddParam {
     @Schema(description = "证书有效期开始")
 //    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @NotNull(message = "证书有效期开始时间不能为空")
-    private LocalDateTime startCertExpirationDate;
+    private LocalDate startCertExpirationDate;
 
     /**
      * 证书有效期结束
@@ -77,7 +78,7 @@ public class AccountCardAddParam {
     @Schema(description = "证书有效期结束")
 //    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @NotNull(message = "证书有效期结束时间不能为空")
-    private LocalDateTime endCertExpirationDate;
+    private LocalDate endCertExpirationDate;
 
     /**
      * 余额

+ 1 - 1
commons/src/main/java/com/jzg/commons/entity/dto/FeeAuditParam.java

@@ -101,7 +101,7 @@ public class FeeAuditParam extends PageRequest {
     private Integer auditType;
 
     @Schema(description = "费用审核状态0未审核 1审核通过 2.审核不通过")
-    private Integer auditStatus;
+    private String auditStatus;
 
     @Schema(description = "是否是疑问订单 0.否 1.是")
     private Integer isProblem;

+ 13 - 3
commons/src/main/java/com/jzg/commons/entity/orders/po/InsOrdersOther.java

@@ -1,7 +1,12 @@
 package com.jzg.commons.entity.orders.po;
 
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -9,6 +14,7 @@ import java.math.BigDecimal;
 
 @Data
 @Schema(description = "保险订单其他信息")
+@TableName(value = "ins_orders_other", autoResultMap = true)
 public class InsOrdersOther {
 
     @TableId
@@ -34,10 +40,10 @@ public class InsOrdersOther {
     private BigDecimal syLossRation;
 
     @Schema(description = "交强续保")
-    private byte jqRenewal;
+    private Integer jqRenewal;
 
     @Schema(description = "商业续保")
-    private byte syRenewal;
+    private Integer syRenewal;
 
     @Schema(description = "交强出险次数")
     private Integer jqClaims;
@@ -46,7 +52,7 @@ public class InsOrdersOther {
     private Integer syClaims;
 
     @Schema(description = "是否是真假单交")
-    private byte isDjq;
+    private Integer isDjq;
 
     @Schema(description = "总折扣率")
     private BigDecimal totalAdjustRate;
@@ -57,6 +63,10 @@ public class InsOrdersOther {
     @Schema(description = "商业折扣")
     private BigDecimal syAdjustRate;
 
+    @Schema(description = "评分json")
+    @TableField(value = "score_json", typeHandler = FastjsonTypeHandler.class)
+    private JSONArray scoreJson;
+
     @Schema(description = "太平绿黄红区间评分")
     private String tpColorScore;
 

+ 5 - 4
commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/QuoteEchoVo.java

@@ -369,13 +369,14 @@ public class QuoteEchoVo extends QuoteVo {
 
         //评分信息
         this.scoreVo = new QuoteResultsVo.ScoreVo();
-        this.scoreVo.setScore(insOrdersVo.getInsOrdersOtherInfo().getScore());
-        this.scoreVo.setJqScore(insOrdersVo.getInsOrdersOtherInfo().getJqScore());
-        this.scoreVo.setSyScore(insOrdersVo.getInsOrdersOtherInfo().getSyScore());
+//        this.scoreVo.setScore(insOrdersVo.getInsOrdersOtherInfo().getScore());
+//        this.scoreVo.setJqScore(insOrdersVo.getInsOrdersOtherInfo().getJqScore());
+//        this.scoreVo.setSyScore(insOrdersVo.getInsOrdersOtherInfo().getSyScore());
+//        this.scoreVo.setTpColorScore(Objects.isNull(insOrdersVo.getInsOrdersOtherInfo().getTpColorScore()) ? null : insOrdersVo.getInsOrdersOtherInfo().getTpColorScore().toString());
         this.scoreVo.setLossRation(Objects.isNull(insOrdersVo.getInsOrdersOtherInfo().getLossRation()) ? null : insOrdersVo.getInsOrdersOtherInfo().getLossRation().toString());
         this.scoreVo.setJqLossRation(Objects.isNull(insOrdersVo.getInsOrdersOtherInfo().getJqLossRation()) ? null : insOrdersVo.getInsOrdersOtherInfo().getJqLossRation().toString());
         this.scoreVo.setSyLossRation(Objects.isNull(insOrdersVo.getInsOrdersOtherInfo().getSyLossRation()) ? null : insOrdersVo.getInsOrdersOtherInfo().getSyLossRation().toString());
-        this.scoreVo.setTpColorScore(Objects.isNull(insOrdersVo.getInsOrdersOtherInfo().getTpColorScore()) ? null : insOrdersVo.getInsOrdersOtherInfo().getTpColorScore().toString());
+        this.scoreVo.setScoreJson(insOrdersVo.getInsOrdersOtherInfo().getScoreJson());
 
         //驾意险存储
         List<AccidentalDrivingVo> accidentalDrivings = insOrdersVo.getAccidentalDrivings();

+ 16 - 25
commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/QuoteResultsVo.java

@@ -1,6 +1,8 @@
 package com.jzg.commons.entity.quote.vo.aggregated;
 
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.po.InsFeeOrders;
 import com.jzg.commons.entity.quote.vo.ExpenseFactor;
@@ -132,20 +134,6 @@ public class QuoteResultsVo implements Serializable {
     @AllArgsConstructor
     @NoArgsConstructor
     public static class ScoreVo {
-        /**
-         * 总评分
-         */
-        private String score;
-
-        /**
-         * 交强评分
-         */
-        private String jqScore;
-
-        /**
-         * 商业评分
-         */
-        private String syScore;
         /**
          * 总赔付率
          */
@@ -161,11 +149,6 @@ public class QuoteResultsVo implements Serializable {
          */
         private String syLossRation;
 
-        /**
-         * 太平绿黄红区间评分
-         */
-        private String tpColorScore;
-
         /**
          * 交强出险次数
          */
@@ -184,17 +167,25 @@ public class QuoteResultsVo implements Serializable {
          */
         private String syRenewal;
         /**
-         * 阳光 交商合并经营成本率
+         * 真假单交
+         */
+        private String isDjq;
+        /**
+         * 折扣率
+         */
+        private String totalAdjustRate;
+        /**
+         * 交强折扣率
          */
-        private String mergeCostRate;
+        private String jqAdjustRate;
         /**
-         * 阳光 向阳花评分
+         * 商业折扣率
          */
-        private String xyhGrade;
+        private String syAdjustRate;
         /**
-         * 阳光 红黄蓝车系
+         * 其他评分 全部放到这个对象里进行统一存储
          */
-        private String seriesTypeActualName;
+        private JSONArray scoreJson;
 
     }
 

+ 7 - 3
commons/src/main/java/com/jzg/commons/entity/vo/InsOrdersOtherInfoVo.java

@@ -1,5 +1,6 @@
 package com.jzg.commons.entity.vo;
 
+import com.alibaba.fastjson.JSONArray;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -97,9 +98,12 @@ public class InsOrdersOtherInfoVo {
     @Schema(description = "商业折扣")
     private BigDecimal syAdjustRate;
 
-    @Schema(description = "太平绿黄红区间评分")
-    private String tpColorScore;
-
+//    @Schema(description = "太平绿黄红区间评分")
+//    private String tpColorScore;
+//
     @Schema(description = "自主定价系数")
     private String coefficient;
+
+    @Schema(description = "评分json")
+    private JSONArray scoreJson;
 }

+ 3 - 0
commons/src/main/java/com/jzg/commons/entity/vo/PtlAgreementCostVo.java

@@ -24,6 +24,9 @@ public class PtlAgreementCostVo {
     @Schema(description = "险种ID")
     private String productId;
 
+    @Schema(description = "承保规则Id")
+    private String coverRuleId;
+
     @Schema(description = "协议CODE")
     @LogDescriptionField("协议号")
     private String ptlAgreementCode;

+ 51 - 36
commons/src/main/java/com/jzg/commons/entity/vo/RuleAttrMappingVo.java

@@ -1,5 +1,7 @@
 package com.jzg.commons.entity.vo;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 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;
@@ -252,39 +254,54 @@ public class RuleAttrMappingVo {
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceDiscount", String.valueOf(insOrdersOther.getJqAdjustRate())));
         //商业折扣
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialDiscount", String.valueOf(insOrdersOther.getSyAdjustRate())));
-        //数值型总评分
-        Pattern pattern = Pattern.compile("[0-9]*");
-        if (insOrdersOther.getScore() != null) {
-            if (pattern.matcher(insOrdersOther.getScore()).matches()) {
-                //数值型评分
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("NumericalOverallRating", String.valueOf(insOrdersOther.getScore())));
-            } else {
-                //字母型评分
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("CharacterBasedRating", String.valueOf(insOrdersOther.getScore())));
-            }
-        }
-        //交强评分
-        if (insOrdersOther.getJqScore() != null) {
-            if (pattern.matcher(insOrdersOther.getJqScore()).matches()) {
-                //数值型评分
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceRating", String.valueOf(insOrdersOther.getJqScore())));
-            } else {
-                //字母型评分
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("JqCharacterBasedRating",
-                        String.valueOf(insOrdersOther.getJqScore())));
-            }
-        }
-        //商业评分
-        if (insOrdersOther.getSyScore() != null) {
-            if (pattern.matcher(insOrdersOther.getSyScore()).matches()) {
-                //数值型评分
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialRating", String.valueOf(insOrdersOther.getSyScore())));
-            } else {
-                //字母型评分
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("SyCharacterBasedRating",
-                        String.valueOf(insOrdersOther.getSyScore())));
-            }
+
+        // 处理保司的评分数据
+        JSONArray scoreJson = insOrdersOther.getScoreJson();
+        for(int i=0;i<scoreJson.size();i++){
+            JSONObject scoreObject = scoreJson.getJSONObject(i);
+            ruleAttrMappingVoList.add(new RuleAttrMappingVo(scoreObject.getString("scoreKey"), String.valueOf(scoreObject.getString("score"))));
         }
+//
+//        //数值型总评分
+//        Pattern pattern = Pattern.compile("[0-9]*");
+//        if (insOrdersOther.getScore() != null) {
+//            if (pattern.matcher(insOrdersOther.getScore()).matches()) {
+//                //数值型评分
+//                ruleAttrMappingVoList.add(new RuleAttrMappingVo("NumericalOverallRating", String.valueOf(insOrdersOther.getScore())));
+//            } else {
+//                //字母型评分
+//                ruleAttrMappingVoList.add(new RuleAttrMappingVo("CharacterBasedRating", String.valueOf(insOrdersOther.getScore())));
+//            }
+//        }
+//        //交强评分
+//        if (insOrdersOther.getJqScore() != null) {
+//            if (pattern.matcher(insOrdersOther.getJqScore()).matches()) {
+//                //数值型评分
+//                ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceRating", String.valueOf(insOrdersOther.getJqScore())));
+//            } else {
+//                //字母型评分
+//                ruleAttrMappingVoList.add(new RuleAttrMappingVo("JqCharacterBasedRating",
+//                        String.valueOf(insOrdersOther.getJqScore())));
+//            }
+//        }
+//        //商业评分
+//        if (insOrdersOther.getSyScore() != null) {
+//            if (pattern.matcher(insOrdersOther.getSyScore()).matches()) {
+//                //数值型评分
+//                ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialRating", String.valueOf(insOrdersOther.getSyScore())));
+//            } else {
+//                //字母型评分
+//                ruleAttrMappingVoList.add(new RuleAttrMappingVo("SyCharacterBasedRating",
+//                        String.valueOf(insOrdersOther.getSyScore())));
+//            }
+//        }
+//        //紫金鼎然评分
+//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("UbiPredictedInfoScore", insOrdersOther.getUbiPredictedInfoScore()));
+
+//        //太平绿黄红区
+//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("GreenYellowAndRedAreas", insOrdersOther.getTpColorScore()));
+
+
         //交强赔付率
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsurancePayoutRate", String.valueOf(insOrdersOther.getJqLossRation())));
         //商业赔付率
@@ -293,8 +310,7 @@ public class RuleAttrMappingVo {
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("TotalPayoutRate", String.valueOf(insOrdersOther.getLossRation())));
         //真假单交
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("IsDJQ", String.valueOf(insOrdersOther.getIsDjq())));
-        //紫金鼎然评分
-        ruleAttrMappingVoList.add(new RuleAttrMappingVo("UbiPredictedInfoScore", insOrdersOther.getUbiPredictedInfoScore()));
+
         // 交强出险次数
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("JqNumberOfClaims", insOrdersOther.getJqClaims() == null ? "0" : insOrdersOther.getJqClaims().toString()));
         // 商业出险次数
@@ -305,8 +321,7 @@ public class RuleAttrMappingVo {
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("Coefficient", getCoefficient(insOrdersCarInfo, insOrdersCosts).toString()));
         // 商业是否有费用
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("CiMessage", (insOrdersOther.getCiMessage() == null || "".equals(insOrdersOther.getCiMessage())) ? "0" : "1"));
-        //太平绿黄红区
-        ruleAttrMappingVoList.add(new RuleAttrMappingVo("GreenYellowAndRedAreas", insOrdersOther.getTpColorScore()));
+
         if (insOrdersAccidentalDriving != null) {
             //非车名称
             ruleAttrMappingVoList.add(new RuleAttrMappingVo("NonCarName", insOrdersAccidentalDriving.getRiskName()));

+ 0 - 2
tenant/insurance/quotation-renbao/src/main/java/com/jzg/quotation/renbao/crawler/entity/request/RenBaoCrawlerCustomPersonUpdateRequest.java

@@ -85,7 +85,6 @@ public class RenBaoCrawlerCustomPersonUpdateRequest {
         this.isGroupFlag = "0";
     }
 
-    @NoArgsConstructor
     @Data
     public static class OldEmailDTO {
 
@@ -295,7 +294,6 @@ public class RenBaoCrawlerCustomPersonUpdateRequest {
         }
     }
 
-    @NoArgsConstructor
     @Data
     public static class OldAddressDTO {
         @JsonProperty("addressType")

+ 10 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/AuditVerification.java

@@ -0,0 +1,10 @@
+package com.jzg.quotation.summary.aop;
+
+public @interface AuditVerification {
+
+    String value() default "核保注解拦截";
+
+}
+
+
+

+ 373 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/FactorMatch.java

@@ -0,0 +1,373 @@
+package com.jzg.quotation.summary.aop;
+
+import com.jzg.commons.constants.quote.enums.quote.EnergyTypeCode;
+import com.jzg.commons.entity.po.PtlAgreementCostRule;
+import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesAttr;
+import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesAttrLink;
+import com.jzg.commons.entity.vo.RuleAttrMappingVo;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * 因子匹配类
+ */
+public class FactorMatch {
+
+    /**
+     * 因子比对
+     * @param ptlAgreementCostRuleList
+     * @param ruleAttrMappingVoList
+     * @param undwrtRulesAttrList
+     * @param logs
+     * @return
+     */
+    public static boolean judgements(List<PtlAgreementCostRule> ptlAgreementCostRuleList, List<RuleAttrMappingVo> ruleAttrMappingVoList,
+                                     List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList, StringBuilder logs) {
+        boolean useFlag = true;
+        for (PtlAgreementCostRule ptlAgreementProductCostsAttrLink : ptlAgreementCostRuleList) {
+            //查找规则中的 传值属性
+            RuleAttrMappingVo ruleAttrMappingVo = ruleAttrMappingVoList.stream()
+                    .filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
+                    .findFirst()
+                    .orElse(null);
+            //如果查找不到 传值属性 直接费用对比失败
+            if (ruleAttrMappingVo == null) {
+//                log.debug("传入的值找不到该属性:" + ptlAgreementProductCostsAttrLink.getAttrCode());
+//                log.debug("规则匹配失败:" + ptlAgreementProductCostsAttrLink.getAttrCode());
+
+                List<PtlAgreementUndwrtRulesAttr> collect = undwrtRulesAttrList.stream()
+                        .filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
+                        .toList();
+                if (!collect.isEmpty()) {
+                    logs.append("规则匹配失败:" + collect.get(0).getAttrName() + "\n");
+                }
+                return false;
+            }
+
+            //查找 费用因子规则
+            PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream()
+                    .filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
+                    .findFirst()
+                    .get();
+
+            if(!Objects.isNull(ruleAttrMappingVo.getValue())) {
+                useFlag = attrEqual(ptlAgreementProductCostsAttrLink, ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue(),false);
+            }else{
+                useFlag = false;
+            }
+
+            if (!useFlag) {
+//                log.debug("检验的值:" + ptlAgreementProductCostsAttrLink.getMin());
+//                log.debug("传入的值:" + ruleAttrMappingVo.getValue());
+//                log.debug("规则匹配失败:" + ptlAgreementProductCostsAttrLink.getAttrCode());
+
+
+                List<PtlAgreementUndwrtRulesAttr> collect = undwrtRulesAttrList.stream()
+                        .filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
+                        .toList();
+
+                if (ptlAgreementProductCostsAttrLink.getMin() != null) {
+                    logs.append("检验的值:" + ptlAgreementProductCostsAttrLink.getMin() + "\n");
+                } else {
+                    logs.append("检验的值:" + ptlAgreementProductCostsAttrLink.getMax() + "\n");
+                }
+
+                logs.append("传入的值:" + ruleAttrMappingVo.getValue() + "\n");
+
+                if (!collect.isEmpty()) {
+                    logs.append("<span style=\"color:red;\">规则匹配失败:" + collect.get(0).getAttrName() + "</span>\n");
+                }
+
+                return false;
+            }
+        }
+        return useFlag;
+    }
+
+
+    public static boolean judgementsUnderwrite(List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementCostRuleList, List<RuleAttrMappingVo> ruleAttrMappingVoList,
+                                     List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList, StringBuilder logs) {
+        boolean useFlag = true;
+        for (PtlAgreementUndwrtRulesAttrLink ptlAgreementProductCostsAttrLink : ptlAgreementCostRuleList) {
+            //查找规则中的 传值属性
+            RuleAttrMappingVo ruleAttrMappingVo = ruleAttrMappingVoList.stream()
+                    .filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
+                    .findFirst()
+                    .orElse(null);
+            //如果查找不到 传值属性 直接费用对比失败
+            if (ruleAttrMappingVo == null) {
+//                log.debug("传入的值找不到该属性:" + ptlAgreementProductCostsAttrLink.getAttrCode());
+//                log.debug("规则匹配失败:" + ptlAgreementProductCostsAttrLink.getAttrCode());
+
+                List<PtlAgreementUndwrtRulesAttr> collect = undwrtRulesAttrList.stream()
+                        .filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
+                        .toList();
+                if (!collect.isEmpty()) {
+                    logs.append("规则匹配失败:" + collect.get(0).getAttrName() + "\n");
+                }
+                return false;
+            }
+
+            //查找 费用因子规则
+            PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream()
+                    .filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
+                    .findFirst()
+                    .get();
+
+            if(!Objects.isNull(ruleAttrMappingVo.getValue())) {
+                PtlAgreementCostRule ptlAgreementCostRule = new PtlAgreementCostRule();
+                ptlAgreementCostRule.setMin(ptlAgreementProductCostsAttrLink.getMin());
+                ptlAgreementCostRule.setMax(ptlAgreementProductCostsAttrLink.getMax());
+                ptlAgreementCostRule.setOperator(ptlAgreementProductCostsAttrLink.getOperator());
+                ptlAgreementCostRule.setAttrCode(ptlAgreementProductCostsAttrLink.getAttrCode());
+                useFlag = attrEqual(ptlAgreementCostRule, ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue(), true);
+            }else{
+                useFlag = false;
+            }
+
+            if (!useFlag) {
+//                log.debug("检验的值:" + ptlAgreementProductCostsAttrLink.getMin());
+//                log.debug("传入的值:" + ruleAttrMappingVo.getValue());
+//                log.debug("规则匹配失败:" + ptlAgreementProductCostsAttrLink.getAttrCode());
+
+
+                List<PtlAgreementUndwrtRulesAttr> collect = undwrtRulesAttrList.stream()
+                        .filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
+                        .toList();
+
+                if (ptlAgreementProductCostsAttrLink.getMin() != null) {
+                    logs.append("检验的值:" + ptlAgreementProductCostsAttrLink.getMin() + "\n");
+                } else {
+                    logs.append("检验的值:" + ptlAgreementProductCostsAttrLink.getMax() + "\n");
+                }
+
+                logs.append("传入的值:" + ruleAttrMappingVo.getValue() + "\n");
+
+                if (!collect.isEmpty()) {
+                    logs.append("<span style=\"color:red;\">规则匹配失败:" + collect.get(0).getAttrName() + "</span>\n");
+                }
+
+                return false;
+            }
+        }
+        return useFlag;
+    }
+
+
+    private static boolean attrEqual(PtlAgreementCostRule ptlAgreementCostRule,
+                              PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, String value,boolean isUnderwrite) {
+        boolean result = false;
+        if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")) {
+            result = checkBoxEqual(ptlAgreementCostRule, value);
+        } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("inputNumber")) {
+            result = inputNumberEqual(ptlAgreementCostRule, value);
+        } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("input")) {
+            //截取身份证号码
+            if (ptlAgreementCostRule.getAttrCode().equals("CarOwnersIDNumber") || ptlAgreementCostRule.getAttrCode().equals("ApplicantIDNumber") ||
+                    ptlAgreementCostRule.getAttrCode().equals("InsuredIDNumber")) {
+                value = value.substring(0, ptlAgreementCostRule.getMin().length());
+            }
+            result = inputTextEqual(ptlAgreementCostRule, value);
+        } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("select")) {
+            //截取车牌
+            if (ptlAgreementUndwrtRulesAttr.getAttrCode().equals("LicenseNo")) {
+                value = value.substring(0, 2);
+            }
+            result = selectEqual(ptlAgreementCostRule, value);
+        } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio")) {
+            result = radioEqual(ptlAgreementCostRule, value);
+        } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("datetime")){ // 时间
+            result = dateTimeEqual(ptlAgreementCostRule, value);
+        } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("date")){
+            result = dateEqual(ptlAgreementCostRule, value);
+        }
+        // 判断是否是承保规则
+        if(isUnderwrite){
+            return !result;
+        }else {
+            return result;
+        }
+    }
+
+
+    private static boolean checkBoxEqual(PtlAgreementCostRule ptlAgreementCostRule, String value) {
+        String[] split = ptlAgreementCostRule.getMin().split(",");
+        for (String sp : split) {
+            if (sp.equals(value)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private static boolean inputNumberEqual(PtlAgreementCostRule ptlAgreementCostRule, String value) {
+        double v = Double.parseDouble(value);
+        //统一处理数值
+        if ("1".equals(ptlAgreementCostRule.getOperator())) {
+            if (Double.parseDouble(ptlAgreementCostRule.getMin()) <= v &&
+                    Double.parseDouble(ptlAgreementCostRule.getMax()) >= v) {
+                return true;
+            }
+        } else if ("2".equals(ptlAgreementCostRule.getOperator())) {
+            if (Double.parseDouble(ptlAgreementCostRule.getMin()) > v) {
+                return true;
+            }
+        } else if ("3".equals(ptlAgreementCostRule.getOperator())) {
+            if (Double.parseDouble(ptlAgreementCostRule.getMin()) >= v) {
+                return true;
+            }
+        } else if ("4".equals(ptlAgreementCostRule.getOperator())) {
+            if (Double.parseDouble(ptlAgreementCostRule.getMax()) < v) {
+                return true;
+            }
+        } else if ("5".equals(ptlAgreementCostRule.getOperator())) {
+            if (Double.parseDouble(ptlAgreementCostRule.getMax()) <= v) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private static boolean inputTextEqual(PtlAgreementCostRule ptlAgreementCostRule, String value) {
+        //将值进行分割
+        String[] split = ptlAgreementCostRule.getMin().split(",");
+        AtomicBoolean returnBool = new AtomicBoolean(false);
+
+        List<String> equalsMap = new ArrayList<>();
+        //字符型评分
+        equalsMap.add("CharacterBasedRating");
+        //交强字符型评分
+        equalsMap.add("JqCharacterBasedRating");
+        //商业字符型评分
+        equalsMap.add("SyCharacterBasedRating");
+
+
+
+        //equest 等于判断
+        if(equalsMap.contains(ptlAgreementCostRule.getAttrCode())){
+            boolean b = Arrays.stream(split).anyMatch(value::equals);
+            returnBool.set(b);
+        }else if((ptlAgreementCostRule.getAttrCode().equals("BrandandModel") || ptlAgreementCostRule.getAttrCode().equals("CarOwnerName")
+                || ptlAgreementCostRule.getAttrCode().equals("CarOwnersAddress") || ptlAgreementCostRule.getAttrCode().equals("ApplicantAddress")
+                || ptlAgreementCostRule.getAttrCode().equals("InsuredAddress"))
+                && ptlAgreementCostRule.getOperator().equals("2")){
+            //处理品牌型号  不包含的情况
+            boolean anyMatch = Arrays.stream(split)
+                    .anyMatch(value::contains);
+            returnBool.set(!anyMatch);
+        }else {
+            boolean anyMatch = Arrays.stream(split)
+                    .anyMatch(value::contains);
+            returnBool.set(anyMatch);
+        }
+        return returnBool.get();
+    }
+
+    private static boolean selectEqual(PtlAgreementCostRule ptlAgreementCostRule, String value) {
+        if (ptlAgreementCostRule.getMin() != null && ptlAgreementCostRule.getMin().contains(value)) {
+            return true;
+        }
+        return false;
+    }
+
+    private static boolean radioEqual(PtlAgreementCostRule ptlAgreementCostRule, String value) {
+        //新能源判断
+        if ("NewEnergy".equals(ptlAgreementCostRule.getAttrCode())) {
+            // 是否是新能源车
+            boolean newEnergy = EnergyTypeCode.isNewEnergy(value);
+            if (newEnergy && ptlAgreementCostRule.getMin().equals("1")) {
+                return true;
+            } else if (!newEnergy && ptlAgreementCostRule.getMin().equals("0")) {
+                return true;
+            }
+        } else if (ptlAgreementCostRule.getMin().contains(value)) {
+            return true;
+        }
+        return false;
+    }
+
+    public static boolean dateTimeEqual(PtlAgreementCostRule ptlAgreementCostRule, String value){
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        if(Objects.isNull(value) || value.equals("")){
+            return false;
+        }
+        LocalDateTime v = LocalDateTime.parse(value,formatter);
+        LocalDateTime min = null,max = null;
+        if(!Objects.isNull(ptlAgreementCostRule.getMin())){
+            min = LocalDateTime.parse(ptlAgreementCostRule.getMin(),formatter);
+        }
+        if(!Objects.isNull(ptlAgreementCostRule.getMax())){
+            max = LocalDateTime.parse(ptlAgreementCostRule.getMax(),formatter);
+        }
+
+        //统一处理数值
+        if ("1".equals(ptlAgreementCostRule.getOperator())) {
+            if (v.isAfter(min) && v.isBefore(max)) {
+                return true;
+            }
+        } else if ("2".equals(ptlAgreementCostRule.getOperator())) {
+            if (v.isBefore(min)) {
+                return true;
+            }
+        } else if ("3".equals(ptlAgreementCostRule.getOperator())) {
+            if (v.isBefore(min) || v.isEqual(min)) {
+                return true;
+            }
+        } else if ("4".equals(ptlAgreementCostRule.getOperator())) {
+            if (v.isAfter(max)) {
+                return true;
+            }
+        } else if ("5".equals(ptlAgreementCostRule.getOperator())) {
+            if (v.isAfter(max) || v.isEqual(max)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static boolean dateEqual(PtlAgreementCostRule ptlAgreementCostRule, String value){
+//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        if(Objects.isNull(value) || value.equals("")){
+            return false;
+        }
+        LocalDateTime v = LocalDate.parse(value).atStartOfDay();
+        LocalDateTime min = null,max = null;
+        if(!Objects.isNull(ptlAgreementCostRule.getMin())){
+            min = LocalDate.parse(ptlAgreementCostRule.getMin()).atStartOfDay();
+        }
+        if(!Objects.isNull(ptlAgreementCostRule.getMax())){
+            max = LocalDate.parse(ptlAgreementCostRule.getMax()).atStartOfDay();
+        }
+
+        //统一处理数值
+        if ("1".equals(ptlAgreementCostRule.getOperator())) {
+            if (v.isAfter(min) && v.isBefore(max)) {
+                return true;
+            }
+        } else if ("2".equals(ptlAgreementCostRule.getOperator())) {
+            if (v.isBefore(min)) {
+                return true;
+            }
+        } else if ("3".equals(ptlAgreementCostRule.getOperator())) {
+            if (v.isBefore(min) || v.isEqual(min)) {
+                return true;
+            }
+        } else if ("4".equals(ptlAgreementCostRule.getOperator())) {
+            if (v.isAfter(max)) {
+                return true;
+            }
+        } else if ("5".equals(ptlAgreementCostRule.getOperator())) {
+            if (v.isAfter(max) || v.isEqual(max)) {
+                return true;
+            }
+        }
+        return false;
+    }
+}

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

@@ -0,0 +1,146 @@
+package com.jzg.quotation.summary.aop.aspect;
+
+
+import com.alibaba.fastjson.JSONArray;
+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.orders.po.*;
+import com.jzg.commons.entity.po.InsFeeOrders;
+import com.jzg.commons.entity.po.PtlAgreementCost;
+import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesAttr;
+import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesAttrLink;
+import com.jzg.commons.entity.quote.vo.aggregated.UnderwritingVo;
+import com.jzg.commons.entity.vo.CostsListVo;
+import com.jzg.commons.entity.vo.RuleAttrMappingVo;
+import com.jzg.commons.exception.SystemException;
+import com.jzg.commons.util.AssertionUtils;
+import com.jzg.quotation.commons.client.OrgClient;
+import com.jzg.quotation.summary.aop.FactorMatch;
+import com.jzg.quotation.summary.service.*;
+import lombok.RequiredArgsConstructor;
+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.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.Objects;
+
+@Slf4j
+@Aspect
+@Component
+@RequiredArgsConstructor
+public class AuditVerificationAspect {
+
+    private final InsOrdersService insOrdersService;
+
+    private final InsFeeOrdersService insFeeOrdersService;
+
+    private final InsOrdersRiskService insOrdersRiskService;
+
+    private final InsOrdersCostsService insOrdersCostsService;
+
+    private final InsOrdersCarInfoService insOrdersCarInfoService;
+
+    private final InsOrdersCarUserInfoService insOrdersCarUserInfoService;
+
+    private final InsOrdersKindService insOrdersKindService;
+
+    private final InsOrdersAccidentalDrivingService insOrdersAccidentalDrivingService;
+
+    private final InsOrdersOtherService insOrdersOtherService;
+
+    private final OrgClient orgClient;
+
+    private final BaseController baseController;
+
+
+
+    @Before("@annotation(com.jzg.quotation.summary.aop.AuditVerification)")
+    public void doBefore(JoinPoint point) {
+        Object[] args = point.getArgs();
+        for (Object arg : args) {
+            String orderNo = "";
+            if (arg instanceof UnderwritingVo){
+                UnderwritingVo underwritingVo = JSONObject.parseObject(JSONObject.toJSONString(arg), UnderwritingVo.class);
+                orderNo = underwritingVo.getOrder().getOrdersNo();
+            }
+
+            InsOrders insOrders = insOrdersService.getById(orderNo);
+            AssertionUtils.isFail(Objects.isNull(insOrders),"订单不存在");
+            //查找费用 找不到则抛出异常
+            InsFeeOrders insFeeOrders = insFeeOrdersService.getById(orderNo);
+            AssertionUtils.isFail(Objects.isNull(insFeeOrders),"费用信息不匹配");
+
+
+            // 获取订单车辆信息
+            InsOrdersCarInfo insOrdersCarInfo = insOrdersCarInfoService.getById(insOrders.getId());
+            // 获取订单险种信息
+            List<InsOrdersRisk> insOrdersRisks = insOrdersRiskService.list(new LambdaQueryWrapper<InsOrdersRisk>().eq(InsOrdersRisk::getOrderNo, insOrders.getId()));
+            // 获取订单车主、投被保人信息
+            List<InsOrdersCarUserInfo> insOrdersCarUserInfos = insOrdersCarUserInfoService.list(new LambdaQueryWrapper<InsOrdersCarUserInfo>().eq(InsOrdersCarUserInfo::getOrderNo, insOrders.getId()));
+            // 获取订单费用信息
+            InsOrdersCosts insOrdersCosts = insOrdersCostsService.getById(insOrders.getId());
+            // 获取订单险种信息
+            List<InsOrdersKind> kindList = insOrdersKindService.list(new LambdaQueryWrapper<InsOrdersKind>().eq(InsOrdersKind::getOrderNo, insOrders.getId()));
+            // 获取订单驾意险信息
+            InsOrdersAccidentalDriving insOrdersAccidentalDriving = insOrdersAccidentalDrivingService.getById(insOrders.getId());
+            // 获取订单其他信息
+            InsOrdersOther insOrdersOther = insOrdersOtherService.getById(insOrders.getId());
+
+            // 通过费用id 查找规则id
+            String costId = insFeeOrders.getCostId();
+            HttpResult httpResult = orgClient.queryCostById(costId,baseController.getToken());
+            AssertionUtils.isFail(httpResult.getCode() == 500,"费用查找失败");
+            PtlAgreementCost ptlAgreementCost = JSONObject.parseObject(JSONObject.toJSONString(httpResult.getData()),PtlAgreementCost.class);
+            AssertionUtils.isFail(Objects.isNull(ptlAgreementCost),"费用查找失败");
+            String coverRuleId = ptlAgreementCost.getCoverRuleId();
+            httpResult = orgClient.getRuleInfo(coverRuleId,baseController.getToken());
+            AssertionUtils.isFail(httpResult.getCode() == 500,"承保规则查找失败");
+            List<PtlAgreementUndwrtRulesAttrLink> attrLinks = JSONArray.parseArray(JSONObject.toJSONString(httpResult.getData()),PtlAgreementUndwrtRulesAttrLink.class);
+
+            StringBuilder logs = new StringBuilder();
+
+            //先进行承保规则判断
+            verificationRules(attrLinks,logs, insOrdersOther, insOrdersCarInfo, insOrdersRisks,
+                    insOrdersCarUserInfos, kindList, insOrdersCosts, insOrdersAccidentalDriving, insOrders);
+        }
+    }
+
+
+    private void verificationRules(List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesNews, StringBuilder logs,
+                                     InsOrdersOther insOrdersOther, InsOrdersCarInfo insOrdersCarInfo,
+                                     List<InsOrdersRisk> riskList, List<InsOrdersCarUserInfo> insOrdersCarUserInfos,
+                                     List<InsOrdersKind> kindList, InsOrdersCosts insOrdersCosts,
+                                     InsOrdersAccidentalDriving insOrdersAccidentalDriving, InsOrders insOrders) {
+
+        HttpResult comparenew = orgClient.compareNewCar(insOrdersCarInfo.getRegisterDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")), insOrders.getCompanyId(), insOrdersCarInfo.getVehicleUseCode());
+        boolean isNewCar = false;
+        if(comparenew.getCode()== 200) {
+            // 新旧车判断
+            isNewCar = comparenew.getData().equals("true") ? true : false;
+        }
+        List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = orgClient.list().getData();
+        //获取所有费用属性关联
+        List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insOrdersOther,insOrdersCarInfo,
+                riskList, insOrdersCarUserInfos, kindList, insOrdersCosts, insOrdersAccidentalDriving, isNewCar);
+
+
+        for (int i = 0; i < ruleAttrMappingVoList.size(); i++) {
+//            logs.append("触发承保规则:" + ruleAttrMappingVoList.get(i).getAttrCode() + "\n");
+            //判断是否匹配
+            if (!FactorMatch.judgementsUnderwrite(ptlAgreementUndwrtRulesNews, ruleAttrMappingVoList, undwrtRulesAttrList, logs)) {
+                throw new SystemException(logs.toString());
+            }else{
+                //如果没有出现异常则清空匹配消息
+                logs.delete(0,logs.length());
+            }
+        }
+    }
+
+}

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

@@ -18,6 +18,7 @@ import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.commons.entity.vo.*;
 import com.jzg.quotation.commons.client.OrgClient;
+import com.jzg.quotation.summary.aop.FactorMatch;
 import com.jzg.quotation.summary.service.*;
 import lombok.RequiredArgsConstructor;
 import org.aspectj.lang.JoinPoint;
@@ -104,59 +105,13 @@ public class QuoteVerificationAspect {
             costAgreementParam.setPtlAgreementId(insOrders.getAgreementId());
             costAgreementParam.setProductId(insOrders.getProductId());
             List<CostsListVo> costsList = orgClient.queryByAgreementIdAndProductId(costAgreementParam, baseController.getToken());
-            List<CostsListVo> agreementProductCosts = new ArrayList<>();
-            // 通过费用规则遍历 按优先级匹配 校验通过的费用
-            costsList.forEach(costsListVo -> {
-                AtomicBoolean matching = new AtomicBoolean(true);
-                costsListVo.getPtlAgreementCostRuleList().forEach(ptlAgreementCostRule -> {
-                    //判断能源类型是 燃油/新能源
-                    if (ptlAgreementCostRule.getAttrCode().equals("NewEnergyMark")) {
-                        String energyType =  EnergyTypeCode.isNewEnergy(insOrdersCarInfo.getEnergyTypeCode()) ? "1" : "0";
-                        if(!ptlAgreementCostRule.getMin().equals(energyType)) {
-                            matching.set(false);
-                        }
-                    }
-                    //判断使用性质是 营业/非营业
-                    if (ptlAgreementCostRule.getAttrCode().equals("CarNatureCode")) {
-                        String[] split = ptlAgreementCostRule.getMin().split(",");
-                        boolean isPipei = false;
-                        for(int i = 0;i < split.length; i++){
-                            if(split[i].equals(insOrdersCarInfo.getCarNatureCode())) {
-                                isPipei = true;
-                            }
-                        }
-                        if(!isPipei){
-                            matching.set(false);
-                        }
-                    }
-                    //车辆种类是  客车/货车
-                    if(ptlAgreementCostRule.getAttrCode().equals("CarKindCode")) {
-                        String[] split = ptlAgreementCostRule.getMin().split(",");
-                        boolean isPipei = false;
-                        for(int i = 0;i < split.length; i++){
-                            if(split[i].equals(insOrdersCarInfo.getCarKindCode())) {
-                                isPipei = true;
-                            }
-                        }
-                        if(!isPipei){
-                            matching.set(false);
-                        }
-                    }
-                });
-                if(matching.get()){
-                    agreementProductCosts.add(costsListVo);
-                }
-            });
-            // 若优先级为空 添加优先级
-            for (int i = 0; i < agreementProductCosts.size(); i++) {
-                if (agreementProductCosts.get(i).getPriorityLevel() == null) {
-                    agreementProductCosts.get(i).setPriorityLevel(10);
-                }
-            }
+            //先过滤 能源 车辆类型
+            List<CostsListVo> agreementProductCosts = this.beforeFilter(costsList,insOrdersCarInfo);
+            // 设置默认的优先级
+            agreementProductCosts = this.setPriorities(agreementProductCosts);
+
             if (!agreementProductCosts.isEmpty()) {
-                //按优先级进行排序
-                agreementProductCosts.sort(Comparator.comparingInt(CostsListVo::getPriorityLevel));
-                //遍历费用因子l
+                //遍历费用因子
                 String costId = verificationCosts(agreementProductCosts, logs, insOrdersOther, insOrdersCarInfo, insOrdersRisks,
                         insOrdersCarUserInfos, kindList, insOrdersCosts, insOrdersAccidentalDriving, insOrders);
                 if (costId != null) {
@@ -172,6 +127,73 @@ public class QuoteVerificationAspect {
         }
     }
 
+
+    /**
+     * 最开始的过滤 过滤 能源 车辆类型
+     * @return
+     */
+    private List<CostsListVo> beforeFilter(List<CostsListVo> costsList, InsOrdersCarInfo insOrdersCarInfo){
+        List<CostsListVo> agreementProductCosts = new ArrayList<>();
+        costsList.forEach(costsListVo -> {
+            AtomicBoolean matching = new AtomicBoolean(true);
+            costsListVo.getPtlAgreementCostRuleList().forEach(ptlAgreementCostRule -> {
+                //判断能源类型是 燃油/新能源
+                if (ptlAgreementCostRule.getAttrCode().equals("NewEnergyMark")) {
+                    String energyType =  EnergyTypeCode.isNewEnergy(insOrdersCarInfo.getEnergyTypeCode()) ? "1" : "0";
+                    if(!ptlAgreementCostRule.getMin().equals(energyType)) {
+                        matching.set(false);
+                    }
+                }
+                //判断使用性质是 营业/非营业
+                if (ptlAgreementCostRule.getAttrCode().equals("CarNatureCode")) {
+                    String[] split = ptlAgreementCostRule.getMin().split(",");
+                    boolean isPipei = false;
+                    for(int i = 0;i < split.length; i++){
+                        if(split[i].equals(insOrdersCarInfo.getCarNatureCode())) {
+                            isPipei = true;
+                        }
+                    }
+                    if(!isPipei){
+                        matching.set(false);
+                    }
+                }
+                //车辆种类是  客车/货车
+                if(ptlAgreementCostRule.getAttrCode().equals("CarKindCode")) {
+                    String[] split = ptlAgreementCostRule.getMin().split(",");
+                    boolean isPipei = false;
+                    for(int i = 0;i < split.length; i++){
+                        if(split[i].equals(insOrdersCarInfo.getCarKindCode())) {
+                            isPipei = true;
+                        }
+                    }
+                    if(!isPipei){
+                        matching.set(false);
+                    }
+                }
+            });
+            if(matching.get()){
+                agreementProductCosts.add(costsListVo);
+            }
+        });
+        return agreementProductCosts;
+    }
+
+    /**
+     * 设置默认优先级
+     * @param agreementProductCosts
+     * @return
+     */
+    private List<CostsListVo> setPriorities(List<CostsListVo> agreementProductCosts){
+        for (int i = 0; i < agreementProductCosts.size(); i++) {
+            if (agreementProductCosts.get(i).getPriorityLevel() == null) {
+                agreementProductCosts.get(i).setPriorityLevel(10);
+            }
+        }
+        // 排序
+        agreementProductCosts.sort(Comparator.comparingInt(CostsListVo::getPriorityLevel));
+        return agreementProductCosts;
+    }
+
     private String verificationCosts(List<CostsListVo> agreementProductCosts,StringBuilder logs,
                                      InsOrdersOther insOrdersOther, InsOrdersCarInfo insOrdersCarInfo,
                                      List<InsOrdersRisk> riskList, List<InsOrdersCarUserInfo> insOrdersCarUserInfos,
@@ -197,7 +219,7 @@ public class QuoteVerificationAspect {
 //            log.debug("费用因子备注:" + agreementProductCosts.get(i).getCostsDescription());
 //            logs.append("费用id:" + agreementProductCosts.get(i).getId() + "\n");
 //            logs.append("费用因子描述:" + agreementProductCosts.get(i).getCostsDescription() + "\n");
-            if (judgements(agreementProductCosts.get(i).getPtlAgreementCostRuleList(),ruleAttrMappingVoList,undwrtRulesAttrList,logs)) {
+            if (FactorMatch.judgements(agreementProductCosts.get(i).getPtlAgreementCostRuleList(),ruleAttrMappingVoList,undwrtRulesAttrList,logs)) {
                 return agreementProductCosts.get(i).getId();
             }
             log.debug("当前费用因子匹配结束\n");
@@ -205,483 +227,6 @@ public class QuoteVerificationAspect {
         return null;
     }
 
-    /**
-     * 费用因子的对比
-     */
-    private boolean judgements(List<PtlAgreementCostRule> ptlAgreementCostRuleList,List<RuleAttrMappingVo> ruleAttrMappingVoList, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList,StringBuilder logs) {
-        boolean useFlag = true;
-        for (PtlAgreementCostRule ptlAgreementProductCostsAttrLink : ptlAgreementCostRuleList) {
-            //查找规则中的 传值属性
-            RuleAttrMappingVo ruleAttrMappingVo = ruleAttrMappingVoList.stream()
-                    .filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
-                    .findFirst()
-                    .orElse(null);
-            //如果查找不到 传值属性 直接费用对比失败
-            if (ruleAttrMappingVo == null) {
-                log.debug("传入的值找不到该属性:" + ptlAgreementProductCostsAttrLink.getAttrCode());
-                log.debug("规则匹配失败:" + ptlAgreementProductCostsAttrLink.getAttrCode());
-
-                List<PtlAgreementUndwrtRulesAttr> collect = undwrtRulesAttrList.stream()
-                        .filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
-                        .toList();
-                if (!collect.isEmpty()) {
-                    logs.append("规则匹配失败:" + collect.get(0).getAttrName() + "\n");
-                }
-                return false;
-            }
-
-            //查找 费用因子规则
-            PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream()
-                    .filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
-                    .findFirst()
-                    .get();
-
-            if(!Objects.isNull(ruleAttrMappingVo.getValue())) {
-                useFlag = attrEqual(ptlAgreementProductCostsAttrLink, ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue());
-            }else{
-                useFlag = false;
-            }
-
-            if (!useFlag) {
-                log.debug("检验的值:" + ptlAgreementProductCostsAttrLink.getMin());
-                log.debug("传入的值:" + ruleAttrMappingVo.getValue());
-                log.debug("规则匹配失败:" + ptlAgreementProductCostsAttrLink.getAttrCode());
-
-
-                List<PtlAgreementUndwrtRulesAttr> collect = undwrtRulesAttrList.stream()
-                        .filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
-                        .toList();
-
-                if (ptlAgreementProductCostsAttrLink.getMin() != null) {
-                    logs.append("检验的值:" + ptlAgreementProductCostsAttrLink.getMin() + "\n");
-                } else {
-                    logs.append("检验的值:" + ptlAgreementProductCostsAttrLink.getMax() + "\n");
-                }
-
-                logs.append("传入的值:" + ruleAttrMappingVo.getValue() + "\n");
-
-                if (!collect.isEmpty()) {
-                    logs.append("<span style=\"color:red;\">规则匹配失败:" + collect.get(0).getAttrName() + "</span>\n");
-                }
-
-                return false;
-            }
-        }
-        return useFlag;
-    }
-    private boolean attrEqual(PtlAgreementCostRule ptlAgreementCostRule,
-                              PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, String value) {
-        if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")) {
-            return checkBoxEqual(ptlAgreementCostRule, value);
-        } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("inputNumber")) {
-            return inputNumberEqual(ptlAgreementCostRule, value);
-        } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("input")) {
-            //截取身份证号码
-            if (ptlAgreementCostRule.getAttrCode().equals("CarOwnersIDNumber") || ptlAgreementCostRule.getAttrCode().equals("ApplicantIDNumber") ||
-                    ptlAgreementCostRule.getAttrCode().equals("InsuredIDNumber")) {
-                value = value.substring(0, ptlAgreementCostRule.getMin().length());
-            }
-            return inputTextEqual(ptlAgreementCostRule, value);
-        } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("select")) {
-            //截取车牌
-            if (ptlAgreementUndwrtRulesAttr.getAttrCode().equals("LicenseNo")) {
-                value = value.substring(0, 2);
-            }
-            return selectEqual(ptlAgreementCostRule, value);
-        } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio")) {
-            return radioEqual(ptlAgreementCostRule, value);
-        } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("datetime")){ // 时间
-            return dateTimeEqual(ptlAgreementCostRule, value);
-        } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("date")){
-            return dateEqual(ptlAgreementCostRule, value);
-        }
-
-        return false;
-    }
-
-    /**
-     * 属性为多选判断
-     */
-    private boolean checkBoxEqual(PtlAgreementCostRule ptlAgreementCostRule, String value) {
-        String[] split = ptlAgreementCostRule.getMin().split(",");
-        for (String sp : split) {
-            if (sp.equals(value)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean checkBoxEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value) {
-        if (!ptlAgreementUndwrtRulesAttrLink.getMin().equals(value)) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * 属性为数值型判断
-     */
-    private boolean inputNumberEqual(PtlAgreementCostRule ptlAgreementCostRule, String value) {
-        double v = Double.parseDouble(value);
-        //统一处理数值
-        if ("1".equals(ptlAgreementCostRule.getOperator())) {
-            if (Double.parseDouble(ptlAgreementCostRule.getMin()) <= v &&
-                    Double.parseDouble(ptlAgreementCostRule.getMax()) >= v) {
-                return true;
-            }
-        } else if ("2".equals(ptlAgreementCostRule.getOperator())) {
-            if (Double.parseDouble(ptlAgreementCostRule.getMin()) > v) {
-                return true;
-            }
-        } else if ("3".equals(ptlAgreementCostRule.getOperator())) {
-            if (Double.parseDouble(ptlAgreementCostRule.getMin()) >= v) {
-                return true;
-            }
-        } else if ("4".equals(ptlAgreementCostRule.getOperator())) {
-            if (Double.parseDouble(ptlAgreementCostRule.getMax()) < v) {
-                return true;
-            }
-        } else if ("5".equals(ptlAgreementCostRule.getOperator())) {
-            if (Double.parseDouble(ptlAgreementCostRule.getMax()) <= v) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean inputNumberEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value) {
-        double v = Double.parseDouble(value);
-        //统一处理数值
-        if ("1".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-            if (Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMin()) <= v &&
-                    Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMax()) >= v) {
-                return false;
-            }
-        } else if ("2".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-            if (Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMin()) > v) {
-                return false;
-            }
-        } else if ("3".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-            if (Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMin()) >= v) {
-                return false;
-            }
-        } else if ("4".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-            if (Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMax()) < v) {
-                return false;
-            }
-        } else if ("5".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-            if (Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMax()) <= v) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * 属性为输入框判断
-     */
-    private boolean inputTextEqual(PtlAgreementCostRule ptlAgreementCostRule, String value) {
-        //将值进行分割
-        String[] split = ptlAgreementCostRule.getMin().split(",");
-        AtomicBoolean returnBool = new AtomicBoolean(false);
-
-        List<String> equalsMap = new ArrayList<>();
-        //字符型评分
-        equalsMap.add("CharacterBasedRating");
-        //交强字符型评分
-        equalsMap.add("JqCharacterBasedRating");
-        //商业字符型评分
-        equalsMap.add("SyCharacterBasedRating");
-
-
-
-        //equest 等于判断
-        if(equalsMap.contains(ptlAgreementCostRule.getAttrCode())){
-            boolean b = Arrays.stream(split).anyMatch(value::equals);
-            returnBool.set(b);
-        }else if((ptlAgreementCostRule.getAttrCode().equals("BrandandModel") || ptlAgreementCostRule.getAttrCode().equals("CarOwnerName")
-                || ptlAgreementCostRule.getAttrCode().equals("CarOwnersAddress") || ptlAgreementCostRule.getAttrCode().equals("ApplicantAddress")
-                || ptlAgreementCostRule.getAttrCode().equals("InsuredAddress"))
-                && ptlAgreementCostRule.getOperator().equals("2")){
-            //处理品牌型号  不包含的情况
-            boolean anyMatch = Arrays.stream(split)
-                    .anyMatch(value::contains);
-            returnBool.set(!anyMatch);
-        }else {
-            boolean anyMatch = Arrays.stream(split)
-                    .anyMatch(value::contains);
-            returnBool.set(anyMatch);
-        }
-        return returnBool.get();
-    }
-
-    private boolean inputTextEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value) {
-        //将值进行分割
-        String[] split = ptlAgreementUndwrtRulesAttrLink.getMin().split(",");
-        AtomicBoolean returnBool = new AtomicBoolean(false);
-
-        List<String> equalsMap = new ArrayList<>();
-        //字符型评分
-        equalsMap.add("CharacterBasedRating");
-        //交强字符型评分
-        equalsMap.add("JqCharacterBasedRating");
-        //商业字符型评分
-        equalsMap.add("SyCharacterBasedRating");
-
-
-
-        //equest 等于判断
-        if(equalsMap.contains(ptlAgreementUndwrtRulesAttrLink.getAttrCode())){
-            boolean b = Arrays.stream(split).anyMatch(value::equals);
-            returnBool.set(b);
-        }else if((ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("BrandandModel") || ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("CarOwnerName")
-                || ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("CarOwnersAddress") || ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("ApplicantAddress")
-                || ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("InsuredAddress"))
-                && ptlAgreementUndwrtRulesAttrLink.getOperator().equals("2")){
-            //处理品牌型号  不包含的情况
-            boolean anyMatch = Arrays.stream(split)
-                    .anyMatch(value::contains);
-            returnBool.set(!anyMatch);
-        }else {
-            boolean anyMatch = Arrays.stream(split)
-                    .anyMatch(value::contains);
-            returnBool.set(anyMatch);
-        }
-        return !returnBool.get();
-    }
-
-    /**
-     * 属性为下拉框判断
-     */
-    private boolean selectEqual(PtlAgreementCostRule ptlAgreementCostRule, String value) {
-        if (ptlAgreementCostRule.getMin() != null && ptlAgreementCostRule.getMin().contains(value)) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * 属性为选择框判断
-     *
-     * @param ptlAgreementUndwrtRulesAttrLink
-     * @param value
-     * @return
-     */
-    private boolean selectEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value) {
-        if (ptlAgreementUndwrtRulesAttrLink.getMin() == null) {
-            return false;
-        }
-        if (!ptlAgreementUndwrtRulesAttrLink.getMin().contains(value)) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * 属性为单选框判断
-     */
-    private boolean radioEqual(PtlAgreementCostRule ptlAgreementCostRule, String value) {
-        //新能源判断
-        if ("NewEnergy".equals(ptlAgreementCostRule.getAttrCode())) {
-            // 是否是新能源车
-            boolean newEnergy = EnergyTypeCode.isNewEnergy(value);
-            if (newEnergy && ptlAgreementCostRule.getMin().equals("1")) {
-                return true;
-            } else if (!newEnergy && ptlAgreementCostRule.getMin().equals("0")) {
-                return true;
-            }
-        } else if (ptlAgreementCostRule.getMin().contains(value)) {
-            return true;
-        }
-        return false;
-    }
-
-    private boolean radioEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value) {
-        //新能源判断
-        if ("NewEnergy".equals(ptlAgreementUndwrtRulesAttrLink.getAttrCode())) {
-            // 是否是新能源车
-            boolean newEnergy = EnergyTypeCode.isNewEnergy(value);
-            if (newEnergy && ptlAgreementUndwrtRulesAttrLink.getMin().equals("1")) {
-                return false;
-            } else if (!newEnergy && ptlAgreementUndwrtRulesAttrLink.getMin().equals("0")) {
-                return false;
-            }
-        } else if (ptlAgreementUndwrtRulesAttrLink.getMin().contains(value)) {
-            return false;
-        }
-        return true;
-    }
-
-    public boolean dateTimeEqual(PtlAgreementCostRule ptlAgreementCostRule, String value){
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        if(Objects.isNull(value) || value.equals("")){
-            return false;
-        }
-        LocalDateTime v = LocalDateTime.parse(value,formatter);
-        LocalDateTime min = null,max = null;
-        if(!Objects.isNull(ptlAgreementCostRule.getMin())){
-            min = LocalDateTime.parse(ptlAgreementCostRule.getMin(),formatter);
-        }
-        if(!Objects.isNull(ptlAgreementCostRule.getMax())){
-            max = LocalDateTime.parse(ptlAgreementCostRule.getMax(),formatter);
-        }
-
-        //统一处理数值
-        if ("1".equals(ptlAgreementCostRule.getOperator())) {
-            if (v.isAfter(min) && v.isBefore(max)) {
-                return true;
-            }
-        } else if ("2".equals(ptlAgreementCostRule.getOperator())) {
-            if (v.isBefore(min)) {
-                return true;
-            }
-        } else if ("3".equals(ptlAgreementCostRule.getOperator())) {
-            if (v.isBefore(min) || v.isEqual(min)) {
-                return true;
-            }
-        } else if ("4".equals(ptlAgreementCostRule.getOperator())) {
-            if (v.isAfter(max)) {
-                return true;
-            }
-        } else if ("5".equals(ptlAgreementCostRule.getOperator())) {
-            if (v.isAfter(max) || v.isEqual(max)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-
-    public boolean dateEqual(PtlAgreementCostRule ptlAgreementCostRule, String value){
-//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-        if(Objects.isNull(value) || value.equals("")){
-            return false;
-        }
-        LocalDateTime v = LocalDate.parse(value).atStartOfDay();
-        LocalDateTime min = null,max = null;
-        if(!Objects.isNull(ptlAgreementCostRule.getMin())){
-            min = LocalDate.parse(ptlAgreementCostRule.getMin()).atStartOfDay();
-        }
-        if(!Objects.isNull(ptlAgreementCostRule.getMax())){
-            max = LocalDate.parse(ptlAgreementCostRule.getMax()).atStartOfDay();
-        }
-
-        //统一处理数值
-        if ("1".equals(ptlAgreementCostRule.getOperator())) {
-            if (v.isAfter(min) && v.isBefore(max)) {
-                return true;
-            }
-        } else if ("2".equals(ptlAgreementCostRule.getOperator())) {
-            if (v.isBefore(min)) {
-                return true;
-            }
-        } else if ("3".equals(ptlAgreementCostRule.getOperator())) {
-            if (v.isBefore(min) || v.isEqual(min)) {
-                return true;
-            }
-        } else if ("4".equals(ptlAgreementCostRule.getOperator())) {
-            if (v.isAfter(max)) {
-                return true;
-            }
-        } else if ("5".equals(ptlAgreementCostRule.getOperator())) {
-            if (v.isAfter(max) || v.isEqual(max)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-
-    public boolean dateTimeEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value, InsOrders insOrders){
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        //判断险种 的起保时间
-        if(ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("SyStartTime") || ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("JqStartTime"))
-        {
-            if(insOrders.getProductId().equals(ProductsType.PT_0330.getCode()) && ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("SyStartTime")){
-                return true;
-            }
-            if(insOrders.getProductId().equals(ProductsType.PT_034001.getCode()) && ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("JqStartTime")){
-                return true;
-            }
-        }
-        if(!Objects.isNull(value) && !value.isEmpty()) {
-            LocalDateTime v = LocalDateTime.parse(value, formatter);
-            LocalDateTime min = null, max = null;
-            if (!Objects.isNull(ptlAgreementUndwrtRulesAttrLink.getMin())) {
-                min = LocalDateTime.parse(ptlAgreementUndwrtRulesAttrLink.getMin(), formatter);
-            }
-            if (!Objects.isNull(ptlAgreementUndwrtRulesAttrLink.getMax())) {
-                max = LocalDateTime.parse(ptlAgreementUndwrtRulesAttrLink.getMax(), formatter);
-            }
-
-            //统一处理数值
-            if ("1".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-                if (!v.isAfter(min) && v.isBefore(max)) {
-                    return true;
-                }
-            } else if ("2".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-                if (!v.isBefore(min)) {
-                    return true;
-                }
-            } else if ("3".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-                if (!v.isBefore(min)) {
-                    return true;
-                }
-            } else if ("4".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-                if (!v.isAfter(max)) {
-                    return true;
-                }
-            } else if ("5".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-                if (!v.isAfter(max)) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-
-    public boolean dateEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-
-        if(!Objects.isNull(value) && !value.isEmpty()) {
-            LocalDateTime v = LocalDate.parse(value).atStartOfDay();
-            LocalDateTime min = null, max = null;
-            if (!Objects.isNull(ptlAgreementUndwrtRulesAttrLink.getMin())) {
-                min = LocalDate.parse(ptlAgreementUndwrtRulesAttrLink.getMin()).atStartOfDay();
-            }
-            if (!Objects.isNull(ptlAgreementUndwrtRulesAttrLink.getMax())) {
-                max = LocalDate.parse(ptlAgreementUndwrtRulesAttrLink.getMax()).atStartOfDay();
-            }
-
-            //统一处理数值
-            if ("1".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-                if (!v.isAfter(min) && v.isBefore(max)) {
-                    return true;
-                }
-            } else if ("2".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-                if (!v.isBefore(min)) {
-                    return true;
-                }
-            } else if ("3".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-                if (!v.isBefore(min)) {
-                    return true;
-                }
-            } else if ("4".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-                if (!v.isAfter(max)) {
-                    return true;
-                }
-            } else if ("5".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-                if (!v.isAfter(max)) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-
     public InsFeeOrders calcCosts(AgreementInfoVo agreementInfoVo, String costId, InsOrders insOrders, InsOrdersCosts insOrdersCosts) {
         InsFeeOrders insFeeOrders = new InsFeeOrders();
         insFeeOrders.setOrderNo(insOrders.getId());

+ 13 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsFeeAuditController.java

@@ -66,7 +66,7 @@ public class InsFeeAuditController {
     @Operation(summary = "领取审核订单")
     public HttpResult auditReceive(@RequestParam("orderNo") String orderNo){
         insFeeAuditService.auditReceive(orderNo);
-        return HttpResult.ok();
+        return HttpResult.ok("领取订单完成");
     }
 
     /**
@@ -109,10 +109,21 @@ public class InsFeeAuditController {
     @PostMapping("/updateToQuestionOrder")
     @Operation(summary = "设置为疑问订单")
     public HttpResult updateToQuestionOrder(@RequestParam("orderNo") String orderNo){
-        insFeeAuditService.updateToQuestionOrder(orderNo);
+        insFeeAuditService.updateToQuestionOrder(orderNo,"1");
         return HttpResult.ok("已设为疑问订单,可前往疑问订单列表查看");
     }
 
+    /**
+     * 取消疑问订单
+     * @return
+     */
+    @PostMapping("/updateToUnQuestionOrder")
+    @Operation(summary = "设置为疑问订单")
+    public HttpResult updateToUnQuestionOrder(@RequestParam("orderNo") String orderNo){
+        insFeeAuditService.updateToQuestionOrder(orderNo,"0");
+        return HttpResult.ok("已取消疑问订单,可前往待审核订单列表查看");
+    }
+
     /**
      * 订单审核费用详情
      * @return

+ 2 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java

@@ -33,6 +33,7 @@ import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.service.QuotationBaseService;
 import com.jzg.quotation.commons.utils.SnowFlakeUtil;
 import com.jzg.quotation.hengbang.crawler.service.HengBangCrawlerRequest;
+import com.jzg.quotation.summary.aop.AuditVerification;
 import com.jzg.quotation.summary.aop.OrderOperationLog;
 import com.jzg.quotation.summary.aop.QuoteVerification;
 import com.jzg.quotation.summary.classifier.QuoteInfoParameterFilling;
@@ -285,6 +286,7 @@ public class UnifyOrderManager {
     )
     @Operation(summary = "统一核保")
     @PostMapping("/underwriting")
+    @AuditVerification
     public HttpResult underwriting(@RequestBody UnderwritingVo underwritingVo) throws Exception {
         //获取保司实体
         InsOrders insOrders = insOrdersService.getById(underwritingVo.getOrder().getOrdersNo());

+ 1 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsFeeAuditService.java

@@ -77,7 +77,7 @@ public interface InsFeeAuditService extends IService<InsFeeAudit> {
      * 设置为疑问订单
      * @param orderNo
      */
-    void updateToQuestionOrder(String orderNo);
+    void updateToQuestionOrder(String orderNo,String status);
 
     /**
      * 订单审核费用详情

+ 4 - 3
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeAuditServiceImpl.java

@@ -120,7 +120,7 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
         AgreementInfoVo agreementInfoVo = result.getData();
         AgreementVo agreementVo = agreementInfoVo.getAgreement();
         insFeeAudit.setAuditType(Integer.parseInt(agreementVo.getAuditType()));
-        if(agreementVo.getAuditType().equals(1)){ // 人工审核
+        if(agreementVo.getAuditType().equals("1")){ // 人工审核
             insFeeAudit.setAuditStatus(0);
         }else{ // 自动审核
             insFeeAudit.setAuditStatus(1);
@@ -138,6 +138,7 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
 
     @Override
     public void auditReceive(String orderNo) {
+        AssertionUtils.isFail(this.isLock(orderNo),"订单已被领取");
         InsFeeAudit audit = this.getById(orderNo);
         if(audit.getAuditStatus() > 0){
             if(audit.getAuditStatus() == 1){
@@ -344,7 +345,7 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
     }
 
     @Override
-    public void updateToQuestionOrder(String orderNo) {
+    public void updateToQuestionOrder(String orderNo,String status) {
         InsFeeAudit audit = this.getById(orderNo);
         if(audit.getAuditStatus() > 0){
             AssertionUtils.isFail(true, "订单已审核刷新订单详情页!");
@@ -358,7 +359,7 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
             AssertionUtils.isFail(true, "订单已被"+audit.getReceiveUser()+"领取返回待审核订单列表!");
         }
 
-        audit.setIsProblem(1);
+        audit.setIsProblem(Integer.parseInt(status));
         this.updateById(audit);
     }
 

+ 1 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeOrdersServiceImpl.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.summary.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.entity.dto.InsFeeOrdersParam;

+ 30 - 11
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java

@@ -674,15 +674,25 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             if (Objects.nonNull(ordersOther)) {
                 ordersOther = new InsOrdersOther();
                 ordersOther.setOrderNo(ordersNo);
-                ordersOther.setScore(quoteResponse.getScoreVo().getScore());
-                ordersOther.setJqScore(quoteResponse.getScoreVo().getJqScore());
-                ordersOther.setSyScore(quoteResponse.getScoreVo().getSyScore());
+                // 赔付率
                 ordersOther.setLossRation(new BigDecimal(quoteResponse.getScoreVo().getLossRation() != null ? quoteResponse.getScoreVo().getLossRation() : "0"));
                 ordersOther.setJqLossRation(new BigDecimal(quoteResponse.getScoreVo().getJqLossRation() != null ? quoteResponse.getScoreVo().getJqLossRation() : "0"));
                 ordersOther.setSyLossRation(new BigDecimal(quoteResponse.getScoreVo().getSyLossRation() != null ? quoteResponse.getScoreVo().getSyLossRation() : "0"));
-                ordersOther.setTpColorScore(quoteResponse.getScoreVo().getTpColorScore() != null ? quoteResponse.getScoreVo().getTpColorScore() : "");
-                ordersOther.setXyhGrade(quoteResponse.getScoreVo().getXyhGrade() != null ? quoteResponse.getScoreVo().getXyhGrade() : "");
-                ordersOther.setSeriesTypeActualName(quoteResponse.getScoreVo().getSeriesTypeActualName() != null ? quoteResponse.getScoreVo().getSeriesTypeActualName() : "");
+                // 续保
+                ordersOther.setJqRenewal(quoteResponse.getScoreVo().getJqRenewal() != null ? Integer.parseInt(quoteResponse.getScoreVo().getJqRenewal()) : null);
+                ordersOther.setSyRenewal(quoteResponse.getScoreVo().getSyRenewal() != null ? Integer.parseInt(quoteResponse.getScoreVo().getSyRenewal()) : null);
+                // 出险次数
+                ordersOther.setJqClaims(quoteResponse.getScoreVo().getCiClaims() != null ? Integer.parseInt(quoteResponse.getScoreVo().getCiClaims()) : null);
+                ordersOther.setSyClaims(quoteResponse.getScoreVo().getBiClaims() != null ? Integer.parseInt(quoteResponse.getScoreVo().getBiClaims()) : null);
+                // 真假单交
+                ordersOther.setIsDjq(quoteResponse.getScoreVo().getIsDjq() != null ? Integer.parseInt(quoteResponse.getScoreVo().getIsDjq()) : null);
+                // 折扣
+                ordersOther.setTotalAdjustRate(quoteResponse.getScoreVo().getTotalAdjustRate() != null ? new BigDecimal(quoteResponse.getScoreVo().getTotalAdjustRate()) : null);
+                ordersOther.setJqAdjustRate(quoteResponse.getScoreVo().getJqAdjustRate() != null ? new BigDecimal(quoteResponse.getScoreVo().getJqAdjustRate()) : null);
+                ordersOther.setSyAdjustRate(quoteResponse.getScoreVo().getSyAdjustRate() != null ? new BigDecimal(quoteResponse.getScoreVo().getSyAdjustRate()) : null);
+
+                // 评分统一用json存储 方便维护每家保司都有自己的评分命名
+                ordersOther.setScoreJson(quoteResponse.getScoreVo().getScoreJson());
             }
             insOrdersOtherService.saveOrUpdate(ordersOther);
 
@@ -879,6 +889,12 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         insOrders.setCompanyName(companyName);
         insOrders.setProductId(quoteVo.getOrder().getProductId());
         insOrders.setProductName(ProductsType.getProductNameByCode(quoteVo.getOrder().getProductId()));
+        // 如果和报价人和登录人 不一致则判断为代课录单
+        if(!baseController.getUserName().equals(quoteVo.getOrder().getRealQuoteUserId())) {
+            insOrders.setEntryStatus(2);
+        }else{
+            insOrders.setEntryStatus(1);
+        }
         String productName = ProductsType.getProductNameByCode(quoteVo.getOrder().getProductId());
         insOrders.setProductName(productName);
         if(Objects.isNull(insOrders.getRealQuoteUserId())) {
@@ -1145,9 +1161,11 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         AssertionUtils.isFail(Objects.isNull(insOrders),"订单不存在");
         InsOrdersCarInfo insOrdersCarInfo = insOrdersCarInfoMapper.selectById(insOrders.getId());
         InsOrdersCosts costs = insOrdersCostsService.getById(insOrders.getId());
-        //设置订单状态
-        StateResult stateResult = orderStateListener.statusChange(orderStatusResultVo.getOrderStatus(), insOrders.getOrderStatus());
-        insOrders.setOrderStatus(String.valueOf(stateResult.getCurrentState()));
+        //设置订单状态   如果状态一致则不进行判断
+        if(!orderStatusResultVo.getOrderStatus().getCode().equals(insOrders.getOrderStatus())) {
+            StateResult stateResult = orderStateListener.statusChange(orderStatusResultVo.getOrderStatus(), insOrders.getOrderStatus());
+            insOrders.setOrderStatus(String.valueOf(stateResult.getCurrentState()));
+        }
 
         //更新保单号
         InsOrdersPolicy insOrdersPolicy = insOrdersPolicyService.getById(orderNo);
@@ -1164,14 +1182,15 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         insOrdersPolicyService.updateById(insOrdersPolicy);
 
         //更新支付连接
-        if(orderStatusResultVo.getOrderStatus().getStatus().equals(InsOrderStatusEnum.PAY_PENDING)) {
+        if(orderStatusResultVo.getOrderStatus().equals(InsOrderStatusEnum.PAY_PENDING)) {
             insOrders.setPayLink(orderStatusResultVo.getPaymentLink());
             insOrders.setPayTime(LocalDateTime.now());
             // 发送订单状态变更消息
             this.orderStatusMessage(insOrders,
                     insOrdersCarInfo,costs,
                     baseController.getToken(), MessageCodeEnum.TEMPLATE_5);
-        } else if(orderStatusResultVo.getOrderStatus().getStatus().equals(InsOrderStatusEnum.UNDERWRITED)){
+        }
+        if(orderStatusResultVo.getOrderStatus().equals(InsOrderStatusEnum.UNDERWRITED)){
             // 增加财务审核
             insFeeAuditService.feeAuditAdd(insOrders);
             // 发送订单状态变更消息

+ 7 - 4
tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeAuditMapper.xml

@@ -42,7 +42,7 @@
         LEFT JOIN ins_orders_car_user_info as iocui on io.id = iocui.order_no and iocui.policy_person_type = 3
         LEFT JOIN sys_user_jzg_info suji on suji.user_id = io.real_quote_user_id
         LEFT JOIN sys_user su on su.id = io.real_quote_user_id
-        LEFT JOIN sys_dept sd on suji.dept_id on sd.id
+        LEFT JOIN sys_dept sd on suji.dept_id = sd.id
         LEFT JOIN ptl_agreement pa on io.agreement_id = pa.id
         LEFT JOIN sys_user sua on sua.id = pa.custodian_id
         LEFT JOIN ins_orders_costs ioc on ioc.order_no = io.id
@@ -53,7 +53,7 @@
                     and ifa.receive_user = #{param.receiveUser}
                 </when>
                 <otherwise>
-                    and ifa.receive_user = null
+                    and ifa.receive_user is NULL
                 </otherwise>
             </choose>
             <if test="param.auditType != null">
@@ -77,7 +77,7 @@
             <if test="param.orderStatus != null ">
                 and io.order_status = #{param.orderStatus}
             </if>
-            <if test="param.orderType != null ">
+            <if test="param.orderType != null and param.orderType != ''">
                 and io.entry_status = #{param.orderType}
             </if>
             <if test="param.companyIdList != null and param.companyIdList.size() > 0" >
@@ -125,7 +125,10 @@
             <if test="param.auditUser != null and param.auditUser != ''">
                 and ifa.audit_user = #{param.auditUser}
             </if>
+            <if test="param.auditStatus != null and param.auditStatus != ''">
+                and ifa.audit_status = #{param.auditStatus}
+            </if>
         </where>
-        ORDER BY create_time desc
+        ORDER BY io.create_time desc
     </select>
 </mapper>

+ 36 - 5
tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/build/YangGuangApiQuoteResultsVoBuild.java

@@ -1,5 +1,7 @@
 package com.jzg.quotation.yangguang.api.build;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.RiskInfoVo;
@@ -144,14 +146,43 @@ public final class YangGuangApiQuoteResultsVoBuild {
     }
     private static QuoteResultsVo.ScoreVo buildScoreVo(YangGuangAccuracyCalculateResponse.discount discount,YangGuangAccuracyCalculateResponse yangGuangAccuracyCalculateResponse) {
         QuoteResultsVo.ScoreVo scoreVo = new QuoteResultsVo.ScoreVo();
-        scoreVo.setJqScore(discount.getMarkingnobcCI());
-        scoreVo.setSyScore(discount.getMarkingnobcBI());
+//        scoreVo.setJqScore(discount.getMarkingnobcCI());
+//        scoreVo.setSyScore(discount.getMarkingnobcBI());
+//        scoreVo.setMergeCostRate(yangGuangAccuracyCalculateResponse.getVascostmarginbc());
+//        scoreVo.setXyhGrade(yangGuangAccuracyCalculateResponse.getXYHGrade() != null ? "1" : "0");
+//        scoreVo.setSeriesTypeActualName(yangGuangAccuracyCalculateResponse.getSeriesTypeActualName() != null ? yangGuangAccuracyCalculateResponse.getSeriesTypeActualName() : "");
+//
         scoreVo.setLossRation(discount.getFinalmarkingnobc());
         scoreVo.setJqLossRation(discount.getFinalmarkingnoCi());
         scoreVo.setSyLossRation(discount.getFinalmarkingnoBi());
-        scoreVo.setMergeCostRate(yangGuangAccuracyCalculateResponse.getVascostmarginbc());
-        scoreVo.setXyhGrade(yangGuangAccuracyCalculateResponse.getXYHGrade() != null ? "1" : "0");
-        scoreVo.setSeriesTypeActualName(yangGuangAccuracyCalculateResponse.getSeriesTypeActualName() != null ? yangGuangAccuracyCalculateResponse.getSeriesTypeActualName() : "");
+        // 评分处理
+        JSONArray scoreArray = new JSONArray();
+        scoreArray.add(new JSONObject()
+                .fluentPut("storeName","交强合并分")
+                .fluentPut("storeKey","markingnobcCI")
+                .fluentPut("store",discount.getMarkingnobcCI()));
+
+        scoreArray.add(new JSONObject()
+                .fluentPut("storeName","商业合并分")
+                .fluentPut("storeKey","markingnobcBI")
+                .fluentPut("store",discount.getMarkingnobcBI()));
+
+        scoreArray.add(new JSONObject()
+                .fluentPut("storeName","向阳花标识")
+                .fluentPut("storeKey","XyhGrade")
+                .fluentPut("store",yangGuangAccuracyCalculateResponse.getXYHGrade() != null ? "1" : "0"));
+
+        scoreArray.add(new JSONObject()
+                .fluentPut("storeName","红黄蓝车系")
+                .fluentPut("storeKey","SeriesTypeActualName")
+                .fluentPut("store",yangGuangAccuracyCalculateResponse.getSeriesTypeActualName() != null ? yangGuangAccuracyCalculateResponse.getSeriesTypeActualName() : ""));
+
+        scoreArray.add(new JSONObject()
+                .fluentPut("storeName","合并经营成本率")
+                .fluentPut("storeKey","vascostmarginbc")
+                .fluentPut("store",yangGuangAccuracyCalculateResponse.getVascostmarginbc()));
+        scoreVo.setScoreJson(scoreArray);
+
         if (yangGuangAccuracyCalculateResponse.getNewAndRenewalFlagCI() != null) {
             switch (yangGuangAccuracyCalculateResponse.getNewAndRenewalFlagCI()) {
                 case "1":

+ 13 - 6
tenant/insurance/quotation-yongcheng/src/main/java/com/jzg/quotation/yongcheng/api/service/impl/YongChengApiRequestImpl.java

@@ -1,6 +1,8 @@
 package com.jzg.quotation.yongcheng.api.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.core.page.HttpResult;
@@ -465,8 +467,16 @@ public class YongChengApiRequestImpl implements YongChengApiRequest {
         //投保单号商业
         quoteRespVo.setBiPolicyNumber(rd.getVhl().getCQryCdeSY());
 
-        quoteRespVo.getScoreVo().setScore(rd.getBase().getCWeRisk());//评分
-        quoteRespVo.setOrdersNo(ordersNo); //订单号
+        // 保司评分
+        JSONArray scoreJson = new JSONArray();
+        //光博评分
+        scoreJson.add(new JSONObject()
+                .fluentPut("scoreName","光博分")
+                .fluentPut("scoreKey","score")
+                .fluentPut("score",rd.getBase().getCWeRisk()));
+        quoteRespVo.getScoreVo().setScoreJson(scoreJson);
+
+        quoteRespVo.setOrdersNo(ordersNo);
         quoteRespVo.getCosts().setCiPremium(String.valueOf(jqPremium));
         quoteRespVo.getCosts().setBiPremium(String.valueOf(syPremium));
         quoteRespVo.getCosts().setNiPremium(String.valueOf(jyPremium));
@@ -476,20 +486,17 @@ public class YongChengApiRequestImpl implements YongChengApiRequest {
         //起保日期
         quoteRespVo.setCiStartDate(rd.getBase().getTInsrncBgnTmJQ());
         quoteRespVo.setCiEndDate(rd.getBase().getTInsrncEndTmJQ());
-
         quoteRespVo.setBiStartDate(rd.getBase().getTInsrncBgnTmSY());
         quoteRespVo.setBiEndDate(rd.getBase().getTInsrncEndTmSY());
 
         // 交强出险次数
         String ciClaims = Optional.ofNullable(rd.getBase()).map(QuoteResponse.BaseResponse::getAccidentNum).orElse(null);
         quoteRespVo.getScoreVo().setCiClaims(ciClaims);
+
         // 商业出险次数
         String biClaims = Optional.ofNullable(rd.getPrmCoef()).map(QuoteResponse.PrmCoefResponse::getNClaimTimes).orElse(null);
         quoteRespVo.getScoreVo().setBiClaims(biClaims);
 
-        //光博分
-        quoteRespVo.getScoreVo().setScore(rd.getBase().getCWeRisk());
-
         //欠税信息
         if (null != rd.getTax()) {
             List<TaxInfoVo> taxArrearsList = new ArrayList<>();

+ 6 - 4
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/api/build/ZmApiQuoteResultsVoBuild.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.zhongmei.api.build;
 
+import com.alibaba.fastjson.JSONArray;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.RiskInfoVo;
@@ -167,13 +168,14 @@ public class ZmApiQuoteResultsVoBuild {
     private static QuoteResultsVo.ScoreVo buildScoreVo(QuotedPriceResponse quotedPriceResponse) {
         QuoteResultsVo.ScoreVo scoreVo = new QuoteResultsVo.ScoreVo();
         String zmScore = quotedPriceResponse.getPlatMain().getZmScore();
-        scoreVo.setScore(zmScore);
-        scoreVo.setJqScore("0");
-        scoreVo.setSyScore("0");
+//        scoreVo.setScore(zmScore);
+//        scoreVo.setJqScore("0");
+//        scoreVo.setSyScore("0");
+//        scoreVo.setTpColorScore("0");
         scoreVo.setLossRation("0");
         scoreVo.setJqLossRation("0");
         scoreVo.setSyLossRation("0");
-        scoreVo.setTpColorScore("0");
+        scoreVo.setScoreJson(new JSONArray());
         return scoreVo;
     }
 

+ 3 - 2
tenant/organization/src/main/java/com/jzg/organization/controller/AccountCardController.java

@@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 
 /**
@@ -63,8 +64,8 @@ public class AccountCardController extends BaseController {
 
         boolean numExists = accountCardService.isExistsCardNum(param.getBankCardNum(), null);
         AssertionUtils.isFail(numExists,"银行卡号重复!");
-        LocalDateTime startDate = param.getStartCertExpirationDate();
-        LocalDateTime endDate = param.getEndCertExpirationDate();
+        LocalDate startDate = param.getStartCertExpirationDate();
+        LocalDate endDate = param.getEndCertExpirationDate();
         if(endDate.isBefore(startDate) || startDate.isEqual(endDate)){
             AssertionUtils.isFail(false,"生效时间不能大于失效时间!");
         }

+ 10 - 0
tenant/organization/src/main/java/com/jzg/organization/controller/AgreementRulesController.java

@@ -5,6 +5,7 @@ import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.AgreementRulesAddParam;
 import com.jzg.commons.entity.dto.AgreementRulesEditParam;
 import com.jzg.commons.entity.vo.AgreementRulesVo;
+import com.jzg.organization.service.PtlAgreementUndwrtRulesAttrLinkService;
 import com.jzg.organization.service.PtlAgreementUndwrtRulesService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -22,6 +23,9 @@ public class AgreementRulesController extends BaseController {
     @Autowired
     private PtlAgreementUndwrtRulesService agreementRulesService;
 
+    @Autowired
+    private PtlAgreementUndwrtRulesAttrLinkService ptlAgreementUndwrtRulesAttrLinkService;
+
     @GetMapping("/rulesList")
     @Operation(summary = "协议承保规则列表")
     public HttpResult rulesList(String agreementId){
@@ -57,4 +61,10 @@ public class AgreementRulesController extends BaseController {
         return HttpResult.ok(agreementRulesService.deleteById(id)? "删除成功":"删除失败");
     }
 
+    @Operation(summary = "获取承保规则明细")
+    @GetMapping("getRuleInfo")
+    public HttpResult getRuleInfo(String ruleId){
+        return HttpResult.ok(ptlAgreementUndwrtRulesAttrLinkService.queryLinkList(ruleId));
+    }
+
 }

+ 2 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementUndwrtRulesAttrServiceImpl.java

@@ -158,6 +158,8 @@ public class PtlAgreementUndwrtRulesAttrServiceImpl extends ServiceImpl<PtlAgree
                 lambdaQueryWrapper.eq(PtlAgreementUndwrtRulesAttr::getCompanyIds, "all")
                         .or()
                         .eq(PtlAgreementUndwrtRulesAttr::getCompanyIds, param.getCompanyId());
+            }else{
+                lambdaQueryWrapper.eq(PtlAgreementUndwrtRulesAttr::getCompanyIds, "all");
             }
             lambdaQueryWrapper.like(StringUtils.isNotEmpty(param.getAttrName()), PtlAgreementUndwrtRulesAttr::getAttrName, param.getAttrName());
             lambdaQueryWrapper.orderByAsc(PtlAgreementUndwrtRulesAttr::getSort);

+ 1 - 0
tenant/organization/src/main/resources/mapper/PtlAgreementCostMapper.xml

@@ -193,6 +193,7 @@
         SELECT
             t.id,
             t.ptl_agreement_id,
+            t.cover_rule_id,
             t.product_name,
             t.product_id,
             t.effective_time,