Explorar o código

Merge remote-tracking branch 'origin/test' into test

Qchen %!s(int64=2) %!d(string=hai) anos
pai
achega
7f1592e7de
Modificáronse 32 ficheiros con 1476 adicións e 147 borrados
  1. 57 42
      src/main/java/com/ydtech/modules/fee/dto/vo/RuleAttrMappingVo.java
  2. 7 0
      src/main/java/com/ydtech/modules/order/components/FileComponents.java
  3. 10 0
      src/main/java/com/ydtech/modules/order/controller/BoHaiOrderApiController.java
  4. 0 3
      src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java
  5. 18 0
      src/main/java/com/ydtech/modules/order/entity/api/bohai/constants/InsuranceType.java
  6. 0 4
      src/main/java/com/ydtech/modules/order/entity/api/bohai/constants/RequestType.java
  7. 6 1
      src/main/java/com/ydtech/modules/order/entity/api/bohai/request/PaymentRequest.java
  8. 36 0
      src/main/java/com/ydtech/modules/order/entity/api/bohai/request/PolicyResultCallbackRequest.java
  9. 3 0
      src/main/java/com/ydtech/modules/order/entity/api/bohai/response/ElectronicPolicyResponse.java
  10. 2 2
      src/main/java/com/ydtech/modules/order/entity/crawler/vo/CrawlerPolicyPrintVo.java
  11. 13 2
      src/main/java/com/ydtech/modules/order/service/BoHaiOrderApiService.java
  12. 50 17
      src/main/java/com/ydtech/modules/order/service/impl/BoHaiOrderApiServiceImpl.java
  13. 81 0
      src/main/java/com/ydtech/modules/protocols/controller/PtlNewAgreementHistoryController.java
  14. 19 0
      src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementProductCostsAttrLinkHistoryMapper.java
  15. 23 0
      src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementProductCostsNewHistoryMapper.java
  16. 19 0
      src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementUndwrtRulesAttrLinkHistoryMapper.java
  17. 24 0
      src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementUndwrtRulesNewHistoryMapper.java
  18. 77 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsAttrLinkHistory.java
  19. 203 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNewHistory.java
  20. 76 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesAttrLinkHistory.java
  21. 4 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesNew.java
  22. 72 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesNewHistory.java
  23. 14 0
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsAttrLinkHistoryService.java
  24. 24 0
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsNewHistoryService.java
  25. 14 0
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesAttrLinkHistoryService.java
  26. 24 0
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesNewHistoryService.java
  27. 21 0
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsAttrLinkHistoryServiceImpl.java
  28. 119 0
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewHistoryServiceImpl.java
  29. 131 44
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java
  30. 21 0
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesAttrLinkHistoryServiceImpl.java
  31. 131 0
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesNewHistoryServiceImpl.java
  32. 177 32
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesNewServiceImpl.java

+ 57 - 42
src/main/java/com/ydtech/modules/fee/dto/vo/RuleAttrMappingVo.java

@@ -18,10 +18,10 @@ import java.util.Objects;
 import java.util.regex.Pattern;
 
 /**
-*@author: tz
-*@description: 规则属性映射费用因子Vo
-*@create: 2024-2-28 08:35:57
-*/
+ * @author: tz
+ * @description: 规则属性映射费用因子Vo
+ * @create: 2024-2-28 08:35:57
+ */
 @Data
 public class RuleAttrMappingVo {
     @ApiModelProperty(value = "因子属性Code")
@@ -35,7 +35,7 @@ public class RuleAttrMappingVo {
         this.value = value;
     }
 
-    public static List<RuleAttrMappingVo> getRuleAttrMappingVoList(InsAreaCompany insAreaCompany,InsOrders insOrders) {
+    public static List<RuleAttrMappingVo> getRuleAttrMappingVoList(InsAreaCompany insAreaCompany, InsOrders insOrders) {
         List<RuleAttrMappingVo> ruleAttrMappingVoList = new ArrayList<>();
         CarInfoVo carInfo = insOrders.getCarinfo().toJavaObject(CarInfoVo.class);
         //车牌号
@@ -100,60 +100,73 @@ public class RuleAttrMappingVo {
         //险别信息
         kindInfoVos.forEach(kindInfoVo -> {
             //机动车损失险
-            if(InsurKind.A.getCode().equals(kindInfoVo.getKindCode()))
+            if (InsurKind.A.getCode().equals(kindInfoVo.getKindCode()))
                 ruleAttrMappingVoList.add(new RuleAttrMappingVo("MotorVehicleDamageInsurance", String.valueOf(kindInfoVo.getAmount())));
             //第三者责任险
-            if(InsurKind.B.getCode().equals(kindInfoVo.getKindCode()))
+            if (InsurKind.B.getCode().equals(kindInfoVo.getKindCode()))
                 ruleAttrMappingVoList.add(new RuleAttrMappingVo("ThirdPartyLiabilityInsurance", String.valueOf(kindInfoVo.getAmount())));
             //司机责任险
-            if(InsurKind.D3.getCode().equals(kindInfoVo.getKindCode()))
+            if (InsurKind.D3.getCode().equals(kindInfoVo.getKindCode()))
                 ruleAttrMappingVoList.add(new RuleAttrMappingVo("DriverLiabilityInsurance", String.valueOf(kindInfoVo.getAmount())));
             //乘客责任险
-            if(InsurKind.D4.getCode().equals(kindInfoVo.getKindCode()))
+            if (InsurKind.D4.getCode().equals(kindInfoVo.getKindCode()))
                 ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerLiabilityInsurance", String.valueOf(kindInfoVo.getUnitAmount())));
             //车身划痕险
-            if(InsurKind.L.getCode().equals(kindInfoVo.getKindCode()))
+            if (InsurKind.L.getCode().equals(kindInfoVo.getKindCode()))
                 ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarScratchInsurance", String.valueOf(kindInfoVo.getAmount())));
             //绝对免赔率特约险(车损)
-            if(InsurKind.MJ1.getCode().equals(kindInfoVo.getKindCode()))
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleDamageAbsoluteDeductibleSpecialInsurance", String.valueOf(kindInfoVo.getAmount())));
+            if (InsurKind.MJ1.getCode().equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleDamageAbsoluteDeductibleSpecialInsurance",
+                        String.valueOf(kindInfoVo.getAmount())));
             //绝对免赔率特约险(三者)
-            if(InsurKind.MJ2.getCode().equals(kindInfoVo.getKindCode()))
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("ThirdAbsoluteDeductibleSpecialInsurance", String.valueOf(kindInfoVo.getAmount())));
+            if (InsurKind.MJ2.getCode().equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("ThirdAbsoluteDeductibleSpecialInsurance",
+                        String.valueOf(kindInfoVo.getAmount())));
             //绝对免赔率特约险(司机)
-            if(InsurKind.MJ3.getCode().equals(kindInfoVo.getKindCode()))
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("DriverAbsoluteDeductibleSpecialInsurance", String.valueOf(kindInfoVo.getAmount())));
+            if (InsurKind.MJ3.getCode().equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("DriverAbsoluteDeductibleSpecialInsurance",
+                        String.valueOf(kindInfoVo.getAmount())));
             //绝对免赔率特约险(乘客)
-            if(InsurKind.MJ4.getCode().equals(kindInfoVo.getKindCode()))
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerAbsoluteDeductibleSpecialInsurance", String.valueOf(kindInfoVo.getAmount())));
+            if (InsurKind.MJ4.getCode().equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerAbsoluteDeductibleSpecialInsurance",
+                        String.valueOf(kindInfoVo.getAmount())));
             //附加医保-三者
-            if(InsurKind.SY_FJ_YBW1.getCode().equals(kindInfoVo.getKindCode()))
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("ThirdPartyAdditionalMedicalInsurance", String.valueOf(kindInfoVo.getAmount())));
+            if (InsurKind.SY_FJ_YBW1.getCode().equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("ThirdPartyAdditionalMedicalInsurance",
+                        String.valueOf(kindInfoVo.getAmount())));
             //附加医保-座位险(乘客)
-            if(InsurKind.SY_FJ_YBW2.getCode().equals(kindInfoVo.getKindCode()))
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerAdditionalMedicalInsurance", String.valueOf(kindInfoVo.getAmount())));
+            if (InsurKind.SY_FJ_YBW2.getCode().equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerAdditionalMedicalInsurance",
+                        String.valueOf(kindInfoVo.getAmount())));
             //附加医保-座位险(司机)
-            if(InsurKind.SY_FJ_YBW3.getCode().equals(kindInfoVo.getKindCode()))
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("DriverAdditionalMedicalInsurance", String.valueOf(kindInfoVo.getAmount())));
+            if (InsurKind.SY_FJ_YBW3.getCode().equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("DriverAdditionalMedicalInsurance",
+                        String.valueOf(kindInfoVo.getAmount())));
             //法定节假日限额翻倍险
-            if(InsurKind.BD.getCode().equals(kindInfoVo.getKindCode()))
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("LegalHolidayLimitDoublingInsurance", String.valueOf(kindInfoVo.getAmount())));
+            if (InsurKind.BD.getCode().equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("LegalHolidayLimitDoublingInsurance",
+                        String.valueOf(kindInfoVo.getAmount())));
             //道路救援服务特约条款
-            if(InsurKind.TY1.getCode().equals(kindInfoVo.getKindCode()))
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("RoadsideAssistanceServiceSpecialClause", String.valueOf(kindInfoVo.getServiceTimes())));
+            if (InsurKind.TY1.getCode().equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("RoadsideAssistanceServiceSpecialClause",
+                        String.valueOf(kindInfoVo.getServiceTimes())));
             //车辆安全检测特约条款
-            if(InsurKind.TY2.getCode().equals(kindInfoVo.getKindCode()))
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleSafetyInspectionSpecialClause", String.valueOf(kindInfoVo.getServiceTimes())));
+            if (InsurKind.TY2.getCode().equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleSafetyInspectionSpecialClause",
+                        String.valueOf(kindInfoVo.getServiceTimes())));
             //代为驾驶服务特约条款
-            if(InsurKind.TY3.getCode().equals(kindInfoVo.getKindCode()))
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("SubstituteDrivingServiceSpecialClause", String.valueOf(kindInfoVo.getServiceTimes())));
+            if (InsurKind.TY3.getCode().equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("SubstituteDrivingServiceSpecialClause",
+                        String.valueOf(kindInfoVo.getServiceTimes())));
             //代为送检服务特约条款
-            if(InsurKind.TY4.getCode().equals(kindInfoVo.getKindCode()))
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("SubstituteInspectionServiceSpecialClause", String.valueOf(kindInfoVo.getServiceTimes())));
+            if (InsurKind.TY4.getCode().equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("SubstituteInspectionServiceSpecialClause",
+                        String.valueOf(kindInfoVo.getServiceTimes())));
         });
 
         //交强保费
-        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryTrafficAccidentLiabilityInsurancePremium", String.valueOf(insAreaCompany.getJqpremium())));
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryTrafficAccidentLiabilityInsurancePremium",
+                String.valueOf(insAreaCompany.getJqpremium())));
         //车船税
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleandVesselTax", String.valueOf(insAreaCompany.getTaxamount())));
         //非车险
@@ -166,7 +179,7 @@ public class RuleAttrMappingVo {
 //        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialDiscount", String.valueOf(quoteRespVo.getSyAdjustRate())));
         //数值型总评分
         Pattern pattern = Pattern.compile("[0-9]*");
-        if(insAreaCompany.getScore() != null) {
+        if (insAreaCompany.getScore() != null) {
             if (pattern.matcher(insAreaCompany.getScore()).matches()) {
                 //数值型评分
                 ruleAttrMappingVoList.add(new RuleAttrMappingVo("NumericalOverallRating", String.valueOf(insAreaCompany.getScore())));
@@ -176,24 +189,26 @@ public class RuleAttrMappingVo {
             }
         }
         //交强评分
-        if(insAreaCompany.getJqScore() != null){
-            if(pattern.matcher(insAreaCompany.getJqScore()).matches()) {
+        if (insAreaCompany.getJqScore() != null) {
+            if (pattern.matcher(insAreaCompany.getJqScore()).matches()) {
                 //数值型评分
                 ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceRating", String.valueOf(insAreaCompany.getJqScore())));
             } else {
                 //字母型评分
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("CharacterBasedCompulsoryInsuranceRating", String.valueOf(insAreaCompany.getJqScore())));
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("CharacterBasedCompulsoryInsuranceRating",
+                        String.valueOf(insAreaCompany.getJqScore())));
             }
         }
 //        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceRating", String.valueOf(insAreaCompany.getJqScore())));
         //商业评分
-        if(insAreaCompany.getSyScore() != null){
-            if(pattern.matcher(insAreaCompany.getSyScore()).matches()) {
+        if (insAreaCompany.getSyScore() != null) {
+            if (pattern.matcher(insAreaCompany.getSyScore()).matches()) {
                 //数值型评分
                 ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialRating", String.valueOf(insAreaCompany.getSyScore())));
             } else {
                 //字母型评分
-                ruleAttrMappingVoList.add(new RuleAttrMappingVo("CharacterBasedCommercialRating", String.valueOf(insAreaCompany.getSyScore())));
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("CharacterBasedCommercialRating",
+                        String.valueOf(insAreaCompany.getSyScore())));
             }
         }
         //交强赔付率

+ 7 - 0
src/main/java/com/ydtech/modules/order/components/FileComponents.java

@@ -4,6 +4,13 @@ import com.ydtech.utils.baidu.FileUtil;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.net.URI;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
 
 @Component
 public class FileComponents {

+ 10 - 0
src/main/java/com/ydtech/modules/order/controller/BoHaiOrderApiController.java

@@ -10,6 +10,7 @@ import com.ydtech.modules.order.components.InsOrdersComponents;
 import com.ydtech.modules.order.entity.api.bohai.BoHaiEncrypted;
 import com.ydtech.modules.order.entity.api.bohai.request.ManualReviewRequest;
 import com.ydtech.modules.order.entity.api.bohai.request.PaymentCallbackRequest;
+import com.ydtech.modules.order.entity.api.bohai.request.PolicyResultCallbackRequest;
 import com.ydtech.modules.order.entity.api.bohai.response.NonAutomotiveProductsDetailsResponse;
 import com.ydtech.modules.order.entity.api.bohai.response.NonAutomotiveProductsResponse;
 import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
@@ -112,4 +113,13 @@ public class BoHaiOrderApiController {
     }
 
 
+    @PostMapping("/policyResultCallback")
+    @ApiOperation(value = "保单回调")
+    public String policyResultCallback(@RequestBody BoHaiEncrypted s) throws Exception {
+        PolicyResultCallbackRequest policyResultCallbackRequest = SignatureUtils.decryptMessage(s.getBizContent(), PolicyResultCallbackRequest.class, "保单结果回调",
+                properties.getSelfPrivateKey());
+        return this.boHaiOrderApiService.policyResultCallback(policyResultCallbackRequest);
+    }
+
+
 }

+ 0 - 3
src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java

@@ -367,9 +367,6 @@ public class InsAreaCompany implements Serializable {
         this.lossRation = quoteRespVo.getLossRation();
         this.jqLossRation = quoteRespVo.getJqLossRation();
         this.syLossRation = quoteRespVo.getSyLossRation();
-
-        this.jqapplyno = quoteRespVo.getJqApplyNo();
-        this.syapplyno = quoteRespVo.getSyApplyNo();
     }
 
     public void setPaymentLink(String paymentLink) {

+ 18 - 0
src/main/java/com/ydtech/modules/order/entity/api/bohai/constants/InsuranceType.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.order.entity.api.bohai.constants;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum InsuranceType {
+
+    IT_0("0", "商业"),
+    IT_1("1", "交强");
+
+    private final String code;
+
+    private final String desc;
+
+}

+ 0 - 4
src/main/java/com/ydtech/modules/order/entity/api/bohai/constants/RequestType.java

@@ -25,11 +25,7 @@ public enum RequestType {
     Z00009("Z00009", "撤销核保"),
     Z00010("Z00010", "获取短信验证码"),
     Z00011("Z00011", "回收短信验证码"),
-    Z00012("Z00012", "客户信息审核"),
-    Z00013("Z00013", "电子签名支付"),
     Z00014("Z00014", "公共影像上传"),
-    Z00015("Z00015", "人工审核"),
-    Z00016("Z00016", "投保单继续支付"),
     Z00017("Z00017", "续保查询"),
     Z00018("Z00018", "车+X产品查询"),
     Z00019("Z00019", "车+X产品详情查询"),

+ 6 - 1
src/main/java/com/ydtech/modules/order/entity/api/bohai/request/PaymentRequest.java

@@ -23,9 +23,14 @@ public class PaymentRequest extends BoHaiBaseRequest{
     @JsonProperty("busUniqueId")
     private String busUniqueId;
 
+    @JsonProperty("payWay")
+    private String payWay;
+
+
     public PaymentRequest(BoHaiConfigureParameters parameters, String orderNo, String insOrderNo) {
-        this.setBaseParam(parameters, RequestType.Z00013.getCode(), orderNo);
+        this.setBaseParam(parameters, RequestType.Z00008.getCode(), orderNo);
         this.busUniqueId = insOrderNo;
+        this.payWay = "82";
     }
 
 }

+ 36 - 0
src/main/java/com/ydtech/modules/order/entity/api/bohai/request/PolicyResultCallbackRequest.java

@@ -0,0 +1,36 @@
+package com.ydtech.modules.order.entity.api.bohai.request;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class PolicyResultCallbackRequest extends BoHaiBaseRequest {
+
+    private static final long serialVersionUID = -5610907874268772164L;
+
+    @JsonProperty("busUniqueId")
+    private String busUniqueId;
+
+    @JsonProperty("businessStatus")
+    private String businessStatus;
+
+    @JsonProperty("businessApplicationNo")
+    private String businessApplicationNo;
+
+    @JsonProperty("businessPolicyNo")
+    private String businessPolicyNo;
+
+    @JsonProperty("trafficStatus")
+    private String trafficStatus;
+
+    @JsonProperty("trafficApplicationNo")
+    private String trafficApplicationNo;
+
+    @JsonProperty("trafficPolicyNo")
+    private String trafficPolicyNo;
+}

+ 3 - 0
src/main/java/com/ydtech/modules/order/entity/api/bohai/response/ElectronicPolicyResponse.java

@@ -23,6 +23,9 @@ public class ElectronicPolicyResponse extends BoHaiBaseResponse {
         @JsonProperty("trafficEPolicyUrl")
         private String trafficEPolicyUrl;
 
+        @JsonProperty("trafficEFlagUrl")
+        private String trafficEFlagUrl;
+
         @JsonProperty("businessEPolicyUrl")
         private String businessEPolicyUrl;
 

+ 2 - 2
src/main/java/com/ydtech/modules/order/entity/crawler/vo/CrawlerPolicyPrintVo.java

@@ -23,10 +23,10 @@ public class CrawlerPolicyPrintVo implements Serializable {
     @ApiModelProperty("交强险保单地址")
     private String jqxPolicyUrl;
 
-    @ApiModelProperty("交强险标志地址")
+    @ApiModelProperty("商业险保单地址")
     private String syxPolicyUrl;
 
-    @ApiModelProperty("商业险保单地址")
+    @ApiModelProperty("交强险标志地址")
     private String jqxFlagUrl;
 
     @ApiModelProperty("驾意险列表")

+ 13 - 2
src/main/java/com/ydtech/modules/order/service/BoHaiOrderApiService.java

@@ -4,6 +4,7 @@ import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.ins.model.vo.QuoteRespVo;
 import com.ydtech.modules.order.entity.api.bohai.request.ManualReviewRequest;
 import com.ydtech.modules.order.entity.api.bohai.request.PaymentCallbackRequest;
+import com.ydtech.modules.order.entity.api.bohai.request.PolicyResultCallbackRequest;
 import com.ydtech.modules.order.entity.api.bohai.response.NonAutomotiveProductsDetailsResponse;
 import com.ydtech.modules.order.entity.api.bohai.response.NonAutomotiveProductsResponse;
 import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
@@ -80,14 +81,24 @@ public interface BoHaiOrderApiService {
     HttpResult<Object> auditStatusQuery(String subOrderNo) throws Exception;
 
     /**
-     * @param coverageRequest
+     * 支付回调
+     * @param coverageRequest 支付回调参数
      * @return
      */
     String underwritingCallback(PaymentCallbackRequest coverageRequest) throws Exception;
 
     /**
-     * @param approvedRequest
+     * 核保回调
+     * @param approvedRequest 支付回调参数
      * @return
      */
     String auditCallback(ManualReviewRequest approvedRequest) throws Exception;
+
+    /**
+     * 保单结果
+     * @param policyResultCallbackRequest 保单结果回调参数
+     * @return
+     */
+    String policyResultCallback(PolicyResultCallbackRequest policyResultCallbackRequest)  throws Exception;
+
 }

+ 50 - 17
src/main/java/com/ydtech/modules/order/service/impl/BoHaiOrderApiServiceImpl.java

@@ -175,6 +175,16 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
         UnderwritingRequest underwritingRequest = new UnderwritingRequest(parameters, insAreaCompany.getId());
         UnderwritingResponse underwritingResponse = boHaiRequestApiComponent.underwriting(underwritingRequest);
         int i = underwritingResponse.getData().verificationUnderwriting();
+        // 交强
+        UnderwritingResponse.DataDTO.TrafficPolicyDTO trafficPolicy = underwritingResponse.getData().getTrafficPolicy();
+        if (!ObjectUtils.isEmpty(trafficPolicy)) {
+            insAreaCompany.setJqapplyno(trafficPolicy.getApplicationNo());
+        }
+        // 商业
+        UnderwritingResponse.DataDTO.BusinessPolicyDTO businessPolicy = underwritingResponse.getData().getBusinessPolicy();
+        if (!ObjectUtils.isEmpty(businessPolicy)) {
+            insAreaCompany.setSyapplyno(businessPolicy.getApplicationNo());
+        }
 
         if (i == 1) {
             insAreaCompany.setOrderstatus(InsOrderStatusEnum.WAIT_PAY.getCode());
@@ -186,10 +196,12 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
             insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
             return HttpResult.ok("核保通过");
         } else if (i == 2) {
+
             insAreaCompany.setOrderstatus(InsOrderStatusEnum.WAIT_AUDIT.getCode());
         } else {
             insAreaCompany.setOrderstatus(InsOrderStatusEnum.TO_BACK.getCode());
         }
+
         String trafficResultMsg = underwritingResponse.getData().getTrafficResultMsg();
         String businessResultMsg = underwritingResponse.getData().getBusinessResultMsg();
         insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
@@ -216,13 +228,15 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
         String licenseno = insOrders.getLicenseno();
 
         if (StringUtils.isNotEmpty(data.getTrafficEPolicyUrl())) {
+            crawlerPolicyPrintVo.setJqxPolicyUrl(fileComponents.gainCarInsPolicy(data.getTrafficEPolicyUrl(),
+                    licenseno + insAreaCompany.getJqpolicyno() + "-交强险保单.pdf", licenseno));
             crawlerPolicyPrintVo.setJqxFlagUrl(fileComponents.gainCarInsPolicy(data.getTrafficEPolicyUrl(),
                     licenseno + insAreaCompany.getJqpolicyno() + "-交强险标志.pdf", licenseno));
         }
 
         if (StringUtils.isNotEmpty(data.getBusinessEPolicyUrl())) {
             crawlerPolicyPrintVo.setSyxPolicyUrl(fileComponents.gainCarInsPolicy(data.getBusinessEPolicyUrl(),
-                    licenseno + insAreaCompany.getSypolicyno() + "-交强险保单.pdf", licenseno));
+                    licenseno + insAreaCompany.getSypolicyno() + "-商业险保单.pdf", licenseno));
         }
 
         return HttpResult.ok(crawlerPolicyPrintVo);
@@ -234,7 +248,16 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
         List<StatusDocumentsResponse.DataDTO.DocumentListDTO> documentList = getDocumentListDTO(insAreaCompany);
         List<StatusDocumentsResponse.DataDTO.DocumentListDTO> documentListDTOS =
                 documentList.stream().filter(x -> ResultCode.RC_B5.getCode().equals(x.getStatus())).collect(Collectors.toList());
+
         if (documentListDTOS.size() == documentList.size()) {
+            for (StatusDocumentsResponse.DataDTO.DocumentListDTO documentListDTO : documentListDTOS) {
+                if (InsuranceType.IT_0.getCode().equals(documentListDTO.getInsuranceType())) {
+                    insAreaCompany.setSypolicyno(documentListDTO.getPolicyNo());
+                } else if (InsuranceType.IT_1.getCode().equals(documentListDTO.getInsuranceType())) {
+                    insAreaCompany.setJqpolicyno(documentListDTO.getPolicyNo());
+                }
+            }
+
             insAreaCompany.setOrderstatus(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode());
             insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
             return HttpResult.ok("承保成功");
@@ -303,6 +326,24 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
         return boHaiRequestApiComponent.encryptionCallbackResponse(responseCode, requestNo);
     }
 
+    @Override
+    public String policyResultCallback(PolicyResultCallbackRequest policyResultCallbackRequest) throws Exception {
+        String requestNo = policyResultCallbackRequest.getBaseParam().getRequestNo();
+        ResponseCode responseCode;
+        try {
+            String busUniqueId = policyResultCallbackRequest.getBusUniqueId();
+            InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(busUniqueId);
+            insAreaCompany.setJqapplyno(policyResultCallbackRequest.getTrafficApplicationNo());
+            insAreaCompany.setJqpolicyno(policyResultCallbackRequest.getTrafficPolicyNo());
+            insAreaCompany.setSyapplyno(policyResultCallbackRequest.getBusinessApplicationNo());
+            insAreaCompany.setSypolicyno(policyResultCallbackRequest.getBusinessPolicyNo());
+            responseCode = ResponseCode.R_Z00001;
+        } catch (Exception e) {
+            responseCode = ResponseCode.R_Z00002;
+        }
+        return boHaiRequestApiComponent.encryptionCallbackResponse(responseCode, requestNo);
+    }
+
     private String getQrCodeUrl(InsAreaCompany insAreaCompany) throws Exception {
         // 账号信息
         PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(insAreaCompany.getAgreementId());
@@ -322,33 +363,30 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
         BoHaiConfigureParameters parameters = configureParametersComponents.toEntity(BoHaiConfigureParameters.class,
                 ptlAgreementAttribution);
 
-        String applyno = !StringUtils.isEmpty(insAreaCompany.getJqapplyno()) ? insAreaCompany.getJqapplyno() : insAreaCompany.getSyapplyno();
+        String applyno = !StringUtils.isEmpty(insAreaCompany.getJqapplyno()) ? insAreaCompany.getJqapplyno() :
+                insAreaCompany.getSyapplyno();
         StatusDocumentsRequest statusDocumentsRequest = new StatusDocumentsRequest(parameters, insAreaCompany.getId(), applyno);
         StatusDocumentsResponse response = boHaiRequestApiComponent.statusDocuments(statusDocumentsRequest);
         return response.getData().getDocumentList();
     }
 
     public HttpResult<QuoteRespVo> getQuoteRespVo(QuotationResponse response,
-                                      BaseQuoteInfoVo yaQuoteInfoVo,
-                                      VehicleTypeQueryResponse.DataDTO.VehicleModelsDTO vehicleModelsDTO,
-                                      PtlAgreementAttribution ptlAgreementAttribution,
-                                      String orderNo
+                                                  BaseQuoteInfoVo yaQuoteInfoVo,
+                                                  VehicleTypeQueryResponse.DataDTO.VehicleModelsDTO vehicleModelsDTO,
+                                                  PtlAgreementAttribution ptlAgreementAttribution,
+                                                  String orderNo
     ) {
 
         double sumPayTax = 0;
         double jqPremium = 0;
         double syPremium = 0;
         double jyPremium = 0;
-        String jqPolicyNo = null;
-        String syPolicyNo = null;
-
         QuoteRespVo quoteRespVo = new QuoteRespVo();
         // 交强险
         QuotationResponse.DataDTO.TrafficPolicyDTO trafficPolicy = response.getData().getTrafficPolicy();
         if (!ObjectUtils.isEmpty(trafficPolicy)) {
             sumPayTax = Double.parseDouble(trafficPolicy.getVehicleTax().getTotalAmount());
             jqPremium = Double.parseDouble(trafficPolicy.getPremium());
-            jqPolicyNo = trafficPolicy.getPolicyNo();
             quoteRespVo.setJqApplyNo(trafficPolicy.getApplicationNo());
         }
         // 交强
@@ -361,7 +399,6 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
 
         if (!ObjectUtils.isEmpty(businessPolicy)) {
             syPremium = Double.parseDouble(businessPolicy.getPremium());
-            syPolicyNo = businessPolicy.getPolicyNo();
             quoteRespVo.setSyApplyNo(businessPolicy.getApplicationNo());
             // 商业
             quoteRespVo.setStartDateSy(businessPolicy.getStartDate());
@@ -413,19 +450,15 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
         quoteRespVo.setTotalAdjustRate(0);
         quoteRespVo.setOrderno(yaQuoteInfoVo.getOrderNo()); //订单号
         quoteRespVo.setCoreModels(vehicleModelsDTO.toCoreModelsVo());
-        return responseOrder(response, quoteRespVo, ptlAgreementAttribution, orderNo, jqPolicyNo, syPolicyNo);
+        return responseOrder(response, quoteRespVo, ptlAgreementAttribution, orderNo);
     }
 
     public HttpResult<QuoteRespVo> responseOrder(QuotationResponse response,
                                                  QuoteRespVo quoteRespVo,
                                                  PtlAgreementAttribution ptlAgreementAttribution,
-                                                 String orderId,
-                                                 String jqPolicyNo,
-                                                 String syPolicyNo) {
+                                                 String orderId) {
         // 保存订单信息
         InsAreaCompany insAreaCompany = new InsAreaCompany(quoteRespVo, ptlAgreementAttribution);
-        insAreaCompany.setJqpolicyno(jqPolicyNo);
-        insAreaCompany.setSypolicyno(syPolicyNo);
 
         // 渤海业务id
         String busUniqueId = response.getData().getBusUniqueId();

+ 81 - 0
src/main/java/com/ydtech/modules/protocols/controller/PtlNewAgreementHistoryController.java

@@ -0,0 +1,81 @@
+package com.ydtech.modules.protocols.controller;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.protocol.service.PtlAgreementProductCostsHistoryService;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNewHistory;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesNewHistory;
+import com.ydtech.modules.protocols.entity.vo.AgreementProductQueryVo;
+import com.ydtech.modules.protocols.entity.vo.AgreementUndwrtRulesQueryVo;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsNewHistoryService;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesAttrService;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesNewHistoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author
+ * @description
+ * @createDate
+ */
+@Api(tags = "协议历史查询")
+@RequestMapping("/plt/new/agreementhistory")
+@RestController
+public class PtlNewAgreementHistoryController extends BaseController {
+
+    @Value("${agreement.shutdown}")
+    private boolean shutdown;
+
+    @Autowired
+    private PtlAgreementProductCostsHistoryService ptlAgreementProductCostsHistoryService;
+
+    @Autowired
+    private PtlAgreementUndwrtRulesNewHistoryService ptlAgreementUndwrtRulesNewHistoryService;
+
+    @Autowired
+    private PtlAgreementProductCostsNewHistoryService ptlAgreementProductCostsNewHistoryService;
+    @Autowired
+    private PtlAgreementUndwrtRulesAttrService ptlAgreementUndwrtRulesAttrService;
+
+
+//
+//    @PostMapping("costsHistoryPage")
+//    @ApiOperation("分页查询协议历史记录")
+//    public HttpResult<PageResult> costsHistoryPage(@RequestBody PtlAgreementProductQueryVo ptlAgreementProductCostsHistory) {
+//        Page page = buildPageRequest(ptlAgreementProductCostsHistory.getPageDto());
+//        Page<PtlAgreementProductCostsHistory> ptlAgreementProductCostsHistoryPage = ptlAgreementProductCostsHistoryService.pageHistory(page,ptlAgreementProductCostsHistory);
+//        return HttpResult.ok(buildPageResponse(ptlAgreementProductCostsHistoryPage));
+//    }
+
+    @PostMapping("agreementHistoryPage")
+    @ApiOperation("分页查询产品费用历史记录")
+    public HttpResult<PageResult> agreementHistoryPage(@RequestBody AgreementProductQueryVo agreementProductQueryVo) {
+        Page page = buildPageRequest(agreementProductQueryVo.getPageDto());
+        List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        Page<PtlAgreementProductCostsNewHistory> ptlAgreementPage = ptlAgreementProductCostsNewHistoryService.pageHistory(page, agreementProductQueryVo.getAgreementId(),undwrtRulesAttrList);
+        return HttpResult.ok(buildPageResponse(ptlAgreementPage));
+    }
+
+    @PostMapping("rulesHistoryPage")
+    @ApiOperation("分页查询承保规则历史记录")
+    public HttpResult<PageResult> rulesHistoryPage(@RequestBody AgreementUndwrtRulesQueryVo agreementUndwrtRulesQueryVo) {
+        Page page = buildPageRequest(agreementUndwrtRulesQueryVo.getPageDto());
+        List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        Page<PtlAgreementUndwrtRulesNewHistory> ptlAgreementUndwrtRulesPage = ptlAgreementUndwrtRulesNewHistoryService.pageHistory(page, agreementUndwrtRulesQueryVo.getAgreementId(),undwrtRulesAttrList);
+        return HttpResult.ok(buildPageResponse(ptlAgreementUndwrtRulesPage));
+    }
+
+
+}

+ 19 - 0
src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementProductCostsAttrLinkHistoryMapper.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.protocols.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLinkHistory;
+
+
+/**
+ * @author
+ * @description
+ * @createDate
+ */
+public interface PtlAgreementProductCostsAttrLinkHistoryMapper extends BaseMapper<PtlAgreementProductCostsAttrLinkHistory> {
+
+}
+
+
+
+

+ 23 - 0
src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementProductCostsNewHistoryMapper.java

@@ -0,0 +1,23 @@
+package com.ydtech.modules.protocols.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNewHistory;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.HashMap;
+
+
+/**
+ * @author
+ * @description
+ * @createDate
+ */
+public interface PtlAgreementProductCostsNewHistoryMapper extends BaseMapper<PtlAgreementProductCostsNewHistory> {
+
+}
+
+
+
+

+ 19 - 0
src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementUndwrtRulesAttrLinkHistoryMapper.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.protocols.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttrLink;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttrLinkHistory;
+
+
+/**
+ * @author
+ * @description
+ * @createDate
+ */
+public interface PtlAgreementUndwrtRulesAttrLinkHistoryMapper extends BaseMapper<PtlAgreementUndwrtRulesAttrLinkHistory> {
+
+}
+
+
+
+

+ 24 - 0
src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementUndwrtRulesNewHistoryMapper.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.protocols.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesNewHistory;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.HashMap;
+
+
+/**
+ * @author
+ * @description
+ * @createDate
+ */
+public interface PtlAgreementUndwrtRulesNewHistoryMapper extends BaseMapper<PtlAgreementUndwrtRulesNewHistory> {
+    Page<HashMap> pageHistory(@Param("page") Page page, @Param("agreementId") String agreementId);
+
+}
+
+
+
+

+ 77 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsAttrLinkHistory.java

@@ -0,0 +1,77 @@
+package com.ydtech.modules.protocols.entity.po;
+
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ *
+ */
+@TableName(value = "ptl_agreement_product_costs_attr_link_history", autoResultMap = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtlAgreementProductCostsAttrLinkHistory {
+
+    @TableId(value = "id", type = com.baomidou.mybatisplus.annotation.IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "费用id")
+    @TableField(value = "costs_id")
+    private String costsId;
+
+    @ApiModelProperty(value = "属性id")
+    @TableField(value = "attr_id")
+    private String attrId;
+
+    @ApiModelProperty(value = "属性编码")
+    @TableField(value = "attr_code")
+    private String attrCode;
+
+    @ApiModelProperty(value = "左操作数")
+    @TableField(value = "min")
+    private String min;
+
+    @ApiModelProperty(value = "左操作数数组")
+    @TableField(exist = false)
+    private String[] minArray;
+
+    @ApiModelProperty(value = "操作符")
+    @TableField(value = "operator")
+    private String operator;
+
+    @ApiModelProperty(value = "右操作数")
+    @TableField(value = "max")
+    private String max;
+
+
+    @ApiModelProperty(value = "批次")
+    @TableField(value = "batch")
+    private String batch;
+
+    @ApiModelProperty(value = "操作类型")
+    @TableField(value = "operator_type")
+    private String operatorType;
+
+    @ApiModelProperty(value = "操作人")
+    @TableField(value = "modifier")
+    private String modifier;
+
+    @ApiModelProperty(value = "操作时间")
+    @TableField(value = "operator_time")
+    private LocalDateTime operatorTime;
+
+    @TableField(exist = false)
+    private JSONArray dictLabal;
+
+    @ApiModelProperty(value = "关联属性使用")
+    @TableField(exist = false)
+    private PtlAgreementProductCostsAttrLinkHistory children;
+}

+ 203 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNewHistory.java

@@ -0,0 +1,203 @@
+package com.ydtech.modules.protocols.entity.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ *
+ */
+@TableName(value = "ptl_agreement_product_costs_new_history", autoResultMap = true)     //todo 添加数据库表
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtlAgreementProductCostsNewHistory {
+
+    @TableId(value = "id",type= IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "协议id")
+    @TableField(value = "agreement_id")
+    private String agreementId;
+
+
+    @ApiModelProperty(value = "费用id")
+    @TableField(value = "costs_id")
+    private String costsId;
+
+
+    @ApiModelProperty(value = "产品id")
+    @TableField(value = "product_id")
+    private String productId;
+
+    @ApiModelProperty(value = "产品名称")
+    @TableField(value = "product_name")
+    private String productName;
+
+    @ApiModelProperty(value = "费用比例(交强)")
+    @TableField(value = "jq_car_costs_proportion")
+    private String jqCarCostsProportion;
+
+    @ApiModelProperty(value = "总费用比例(交强)")
+    @TableField(value = "jq_costs_proportion")
+    private String jqCostsProportion;
+
+    @ApiModelProperty(value = "加投比例(交强)")
+    @TableField(value = "jq_costs_proportion_add_invsestment")
+    private String jqCostsProportionAddInvsestment;
+
+    @ApiModelProperty(value = "其他费用比例(交强)")
+    @TableField(value = "jq_car_other_costs_proportion")
+    private String jqCarOtherCostsProportion;
+
+    @ApiModelProperty(value = "费用比例(商业)")
+    @TableField(value = "sy_car_costs_proportion")
+    private String syCarCostsProportion;
+
+    @ApiModelProperty(value = "总费用比例(商业)")
+    @TableField(value = "sy_costs_proportion")
+    private String syCostsProportion;
+
+    @ApiModelProperty(value = "加投比例(商业)")
+    @TableField(value = "sy_costs_proportion_add_invsestment")
+    private String syCostsProportionAddInvsestment;
+
+    @ApiModelProperty(value = "其他费用比例(商业)")
+    @TableField(value = "sy_car_other_costs_proportion")
+    private String syCarOtherCostsProportion;
+
+
+    @ApiModelProperty(value = "费用比例(非车)")
+    @TableField(value = "no_car_costs_proportion")
+    private String noCarCostsProportion;
+
+    @ApiModelProperty(value = "总费用比例(非车)")
+    @TableField(value = "no_costs_proportion")
+    private String noCostsProportion;
+
+    @ApiModelProperty(value = "其他费用比例(非车)")
+    @TableField(value = "no_car_other_costs_proportion")
+    private String noCarOtherCostsProportion;
+
+    @ApiModelProperty(value = "费用描述")
+    @TableField(value = "costs_description")
+    private String costsDescription;
+
+    @ApiModelProperty(value = "费用起期")
+    @TableField(value = "costs_start_date")
+    private String costsStartDate;
+
+    @ApiModelProperty(value = "费用止期")
+    @TableField(value = "costs_end_date")
+    private String costsEndDate;
+
+    @ApiModelProperty(value = "优先级")
+    @TableField(value = "priority_level")
+    private String priorityLevel;
+
+
+    @ApiModelProperty(value = "交强出口比例一级")
+    @TableField(value = "jq_export_radio_level_1")
+    private BigDecimal jqExportRadioLevel1;
+
+    @ApiModelProperty(value = "交强出口比例二级")
+    @TableField(value = "jq_export_radio_level_2")
+    private BigDecimal jqExportRadioLevel2;
+
+    @ApiModelProperty(value = "交强出口比例三级")
+    @TableField(value = "jq_export_radio_level_3")
+    private BigDecimal jqExportRadioLevel3;
+
+    @ApiModelProperty(value = "交强出口比例四级")
+    @TableField(value = "jq_export_radio_level_4")
+    private BigDecimal jqExportRadioLevel4;
+
+    @ApiModelProperty(value = "交强出口比例五级")
+    @TableField(value = "jq_export_radio_level_5")
+    private BigDecimal jqExportRadioLevel5;
+
+    @ApiModelProperty(value = "交强出口加投比例")
+    @TableField(value = "jq_export_investment_radio")
+    private BigDecimal jqExportInvestmentRadio;
+
+
+    @ApiModelProperty(value = "商业出口比例一级")
+    @TableField(value = "sy_export_radio_level_1")
+    private BigDecimal syExportRadioLevel1;
+
+    @ApiModelProperty(value = "商业出口比例二级")
+    @TableField(value = "sy_export_radio_level_2")
+    private BigDecimal syExportRadioLevel2;
+
+    @ApiModelProperty(value = "商业出口比例三级")
+    @TableField(value = "sy_export_radio_level_3")
+    private BigDecimal syExportRadioLevel3;
+
+    @ApiModelProperty(value = "商业出口比例四级")
+    @TableField(value = "sy_export_radio_level_4")
+    private BigDecimal syExportRadioLevel4;
+
+    @ApiModelProperty(value = "商业出口比例五级")
+    @TableField(value = "sy_export_radio_level_5")
+    private BigDecimal syExportRadioLevel5;
+
+    @ApiModelProperty(value = "商业出口加投比例")
+    @TableField(value = "sy_export_investment_radio")
+    private BigDecimal syExportInvestmentRadio;
+
+    @ApiModelProperty(value = "非车出口比例一级")
+    @TableField(value = "no_car_export_radio_level_1")
+    private BigDecimal noCarExportRadioLevel1;
+
+    @ApiModelProperty(value = "非车出口比例二级")
+    @TableField(value = "no_car_export_radio_level_2")
+    private BigDecimal noCarExportRadioLevel2;
+
+    @ApiModelProperty(value = "非车出口比例三级")
+    @TableField(value = "no_car_export_radio_level_3")
+    private BigDecimal noCarExportRadioLevel3;
+
+    @ApiModelProperty(value = "非车出口比例四级")
+    @TableField(value = "no_car_export_radio_level_4")
+    private BigDecimal noCarExportRadioLevel4;
+
+    @ApiModelProperty(value = "非车出口比例五级")
+    @TableField(value = "no_car_export_radio_level_5")
+    private BigDecimal noCarExportRadioLevel5;
+
+    @ApiModelProperty(value = "非车出口加投比例")
+    @TableField(value = "no_car_export_investment_radio")
+    private BigDecimal noCarExportInvestmentRadio;
+
+    @ApiModelProperty(value = "费用因子属性")
+    @TableField(exist = false)
+    private String costsAttrLinks;
+
+    @ApiModelProperty(value = "批次")
+    @TableField(value = "batch")
+    private String batch;
+
+    @ApiModelProperty(value = "操作类型")
+    @TableField(value = "operator_type")
+    private String operatorType;
+
+    @ApiModelProperty(value = "操作人")
+    @TableField(value = "modifier")
+    private String modifier;
+
+    @ApiModelProperty(value = "操作时间")
+    @TableField(value = "operator_time")
+    private LocalDateTime operatorTime;
+
+
+
+}

+ 76 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesAttrLinkHistory.java

@@ -0,0 +1,76 @@
+package com.ydtech.modules.protocols.entity.po;
+
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ *
+ */
+@TableName(value = "ptl_agreement_undwrt_rules_attr_link_history", autoResultMap = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtlAgreementUndwrtRulesAttrLinkHistory {
+
+    @TableId(value = "id", type = com.baomidou.mybatisplus.annotation.IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "承包规则id")
+    @TableField(value = "rules_id")
+    private String rulesId;
+
+    @ApiModelProperty(value = "属性id")
+    @TableField(value = "attr_id")
+    private String attrId;
+
+    @ApiModelProperty(value = "属性编码")
+    @TableField(value = "attr_code")
+    private String attrCode;
+
+    @ApiModelProperty(value = "左操作数")
+    @TableField(value = "min")
+    private String min;
+
+    @ApiModelProperty(value = "左操作数数组")
+    @TableField(exist = false)
+    private String[] minArray;
+
+    @ApiModelProperty(value = "操作符")
+    @TableField(value = "operator")
+    private String operator;
+
+    @ApiModelProperty(value = "右操作数")
+    @TableField(value = "max")
+    private String max;
+
+    @ApiModelProperty(value = "批次")
+    @TableField(value = "batch")
+    private String batch;
+
+    @ApiModelProperty(value = "操作类型")
+    @TableField(value = "operator_type")
+    private String operatorType;
+
+    @ApiModelProperty(value = "操作人")
+    @TableField(value = "modifier")
+    private String modifier;
+
+    @ApiModelProperty(value = "操作时间")
+    @TableField(value = "operator_time")
+    private LocalDateTime operatorTime;
+
+    @TableField(exist = false)
+    private JSONArray dictLabal;
+
+    @ApiModelProperty(value = "关联属性使用")
+    @TableField(exist = false)
+    private PtlAgreementUndwrtRulesAttrLinkHistory children;
+}

+ 4 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesNew.java

@@ -44,6 +44,10 @@ public class PtlAgreementUndwrtRulesNew {
     @TableField(value = "valid_ind")
     private String validInd;
 
+    @ApiModelProperty(value = "生成的描述")
+    @TableField(exist = false)
+    private String desc;
+
     @ApiModelProperty(value = "规则属性")
     @TableField(exist = false)
     private List<PtlAgreementUndwrtRulesAttrLink> rulesAttrList;

+ 72 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesNewHistory.java

@@ -0,0 +1,72 @@
+package com.ydtech.modules.protocols.entity.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ *
+ */
+@TableName(value = "ptl_agreement_undwrt_rules_new_history", autoResultMap = true) //todo 添加数据库表
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtlAgreementUndwrtRulesNewHistory {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "协议id")
+    @TableField(value = "agreement_id")
+    private String agreementId;
+
+    @ApiModelProperty(value = "承包规则id")
+    @TableField(value = "rules_id")
+    private String rulesId;
+
+    @ApiModelProperty(value = "规则类型")
+    @TableField(value = "rules_type")
+    private String rulesType;
+
+    @ApiModelProperty(value = "业务类型")
+    @TableField(value = "product_type")
+    private String productType;
+
+    @ApiModelProperty(value = "规则描述")
+    @TableField(value = "rule_description")
+    private String ruleDescription;
+
+    @ApiModelProperty(value = "是否生效")
+    @TableField(value = "valid_ind")
+    private String validInd;
+
+    @ApiModelProperty(value = "费用因子属性")
+    @TableField(exist = false)
+    private String costsAttrLinks;
+    @ApiModelProperty(value = "批次")
+    @TableField(value = "batch")
+    private String batch;
+
+    @ApiModelProperty(value = "操作类型")
+    @TableField(value = "operator_type")
+    private String operatorType;
+
+    @ApiModelProperty(value = "操作人")
+    @TableField(value = "modifier")
+    private String modifier;
+
+    @ApiModelProperty(value = "操作时间")
+    @TableField(value = "operator_time")
+    private LocalDateTime operatorTime;
+
+
+
+}

+ 14 - 0
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsAttrLinkHistoryService.java

@@ -0,0 +1,14 @@
+package com.ydtech.modules.protocols.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLinkHistory;
+
+/**
+*@author:
+*@description:
+*@create:
+*/
+public interface PtlAgreementProductCostsAttrLinkHistoryService extends IService<PtlAgreementProductCostsAttrLinkHistory> {
+
+}

+ 24 - 0
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsNewHistoryService.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.protocols.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.protocol.entity.vo.PtlAgreementHistoryConvertQueryVo;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNewHistory;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
+import com.ydtech.modules.protocols.entity.vo.AgreementProductCosts;
+import com.ydtech.modules.protocols.entity.vo.AgreementProductCostsSave;
+
+import java.util.List;
+
+/**
+ * @author:
+ * @description:
+ * @create:
+ */
+public interface PtlAgreementProductCostsNewHistoryService extends IService<PtlAgreementProductCostsNewHistory> {
+
+    Page<PtlAgreementProductCostsNewHistory> pageHistory(Page page, String agreementId, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList);
+
+
+}

+ 14 - 0
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesAttrLinkHistoryService.java

@@ -0,0 +1,14 @@
+package com.ydtech.modules.protocols.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttrLink;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttrLinkHistory;
+
+/**
+*@author:
+*@description:
+*@create:
+*/
+public interface PtlAgreementUndwrtRulesAttrLinkHistoryService extends IService<PtlAgreementUndwrtRulesAttrLinkHistory> {
+
+}

+ 24 - 0
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesNewHistoryService.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.protocols.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.protocol.entity.dto.history.PtlAgreementUndwrtRulesHistory;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesNewHistory;
+import com.ydtech.modules.protocols.entity.vo.AgreementUndwrtRules;
+import com.ydtech.modules.protocols.entity.vo.AgreementUndwrtRulesSave;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+*@author:
+*@description:
+*@create:
+*/
+public interface PtlAgreementUndwrtRulesNewHistoryService extends IService<PtlAgreementUndwrtRulesNewHistory> {
+
+
+    Page<PtlAgreementUndwrtRulesNewHistory> pageHistory(Page page, String agreementId,List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList);
+}

+ 21 - 0
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsAttrLinkHistoryServiceImpl.java

@@ -0,0 +1,21 @@
+package com.ydtech.modules.protocols.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.protocols.dao.PtlAgreementProductCostsAttrLinkHistoryMapper;
+import com.ydtech.modules.protocols.dao.PtlAgreementProductCostsAttrLinkMapper;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLinkHistory;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsAttrLinkHistoryService;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsAttrLinkService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @description
+ * @createDate
+ * @Entity
+ */
+@Service
+public class PtlAgreementProductCostsAttrLinkHistoryServiceImpl extends ServiceImpl<PtlAgreementProductCostsAttrLinkHistoryMapper, PtlAgreementProductCostsAttrLinkHistory>
+        implements PtlAgreementProductCostsAttrLinkHistoryService {
+
+}

+ 119 - 0
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewHistoryServiceImpl.java

@@ -0,0 +1,119 @@
+package com.ydtech.modules.protocols.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.protocol.entity.po.PtlAreaLicense;
+import com.ydtech.modules.protocol.service.PtlAreaLicenseService;
+import com.ydtech.modules.protocols.dao.PtlAgreementProductCostsNewHistoryMapper;
+import com.ydtech.modules.protocols.entity.po.*;
+import com.ydtech.modules.protocols.service.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @description
+ * @createDate
+ * @Entity
+ */
+@Service
+public class PtlAgreementProductCostsNewHistoryServiceImpl extends ServiceImpl<PtlAgreementProductCostsNewHistoryMapper, PtlAgreementProductCostsNewHistory>
+        implements PtlAgreementProductCostsNewHistoryService {
+
+
+    @Autowired
+    PtlAgreementProductCostsAttrLinkHistoryService costsAttrLinkHistoryService;
+    @Autowired
+    PtlAreaLicenseService ptlAreaLicenseService;
+    @Autowired
+    PtlAgreementUndwrtRulesAttrService ptlAgreementUndwrtRulesAttrService;
+
+    @Override
+    public Page<PtlAgreementProductCostsNewHistory> pageHistory(Page page, String agreementId, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
+        Page<PtlAgreementProductCostsNewHistory> historyVoPage = new Page<>();
+        //获取当前协议下的产品
+        LambdaQueryWrapper<PtlAgreementProductCostsNewHistory> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(PtlAgreementProductCostsNewHistory::getAgreementId, agreementId);
+        Page selectPage = baseMapper.selectPage(page, wrapper);
+        List<PtlAgreementProductCostsNewHistory> records = selectPage.getRecords();
+
+
+        //获取所有历史记录产品批次
+        List<String> batch = new ArrayList<>();
+        records.forEach(x -> {
+            batch.add(x.getBatch());
+        });
+
+        //获取当前协议所有产品下的所有费用因子的历史记录
+        List<PtlAgreementUndwrtRulesAttr> rulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        List<PtlAgreementProductCostsAttrLinkHistory> list = costsAttrLinkHistoryService.list(new LambdaQueryWrapper<PtlAgreementProductCostsAttrLinkHistory>()
+                .in(PtlAgreementProductCostsAttrLinkHistory::getBatch, batch));
+
+        Map<String, List<PtlAgreementProductCostsAttrLinkHistory>> groupedByCostsId = list.stream()
+                .collect(Collectors.groupingBy(PtlAgreementProductCostsAttrLinkHistory::getBatch));
+
+        groupedByCostsId.forEach((k, v) -> {
+            records.stream().filter(x -> x.getBatch().equals(k)).findFirst().ifPresent(x -> x.setCostsAttrLinks(buildDesc(v, undwrtRulesAttrList)));
+        });
+
+        //封装返回
+        historyVoPage.setCurrent(selectPage.getCurrent());
+        historyVoPage.setSize(selectPage.getSize());
+        historyVoPage.setPages(selectPage.getPages());
+        historyVoPage.setRecords(records);
+        historyVoPage.setTotal(selectPage.getTotal());
+        return historyVoPage;
+    }
+
+    /**
+     * 遍历费用属性描述文字
+     *
+     * @param v
+     * @param undwrtRulesAttrList
+     * @return
+     */
+    private String buildDesc(List<PtlAgreementProductCostsAttrLinkHistory> v, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
+        String desc = "";
+        for (int i = 0; i < v.size(); i++) {
+            int finalI = i;
+            PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream().filter(x -> x.getAttrCode().equals(v.get(finalI).getAttrCode())).findAny().get();
+            //数值范围判断
+            if ("inputNumber".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
+                desc += inputNumberIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i)) + "\n";
+            }
+            if ("radio".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
+                desc += radioIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i)) + "\n";
+            }
+            if ("checkbox".equals(ptlAgreementUndwrtRulesAttr.getAttrType()) || "select".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
+                desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "包含" + v.get(i).getMin() + "\n";
+            }
+        }
+        return desc;
+    }
+
+    private String radioIdentifying(PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, PtlAgreementProductCostsAttrLinkHistory ptlAgreementProductCostsAttrLinkHistory) {
+        PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x ->
+                x.getCode().equals(ptlAgreementProductCostsAttrLinkHistory.getMin())).findAny().get();
+        return ptlAgreementUndwrtRulesAttr.getAttrName() + "为" + ptlAgreementUndwrtRulesDictLabal.getName();
+    }
+
+    private String inputNumberIdentifying(PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, PtlAgreementProductCostsAttrLinkHistory ptlAgreementProductCostsAttrLink) {
+        if ("1".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+            return ptlAgreementUndwrtRulesAttr.getAttrName() + "范围值" + ptlAgreementProductCostsAttrLink.getMin() + "到" + ptlAgreementProductCostsAttrLink.getMax();
+        } else if ("2".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+            return ptlAgreementUndwrtRulesAttr.getAttrName() + "小于" + ptlAgreementProductCostsAttrLink.getMin();
+        } else if ("3".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+            return ptlAgreementUndwrtRulesAttr.getAttrName() + "小于等于" + ptlAgreementProductCostsAttrLink.getMin();
+        } else if ("4".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+            return ptlAgreementUndwrtRulesAttr.getAttrName() + "大于" + ptlAgreementProductCostsAttrLink.getMax();
+        } else if ("5".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+            return ptlAgreementUndwrtRulesAttr.getAttrName() + "大于等于" + ptlAgreementProductCostsAttrLink.getMax();
+        }
+        return "";
+    }
+
+}

+ 131 - 44
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java

@@ -3,7 +3,7 @@ package com.ydtech.modules.protocols.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
+import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.protocol.entity.po.PtlAreaLicense;
 import com.ydtech.modules.protocol.service.PtlAreaLicenseService;
 import com.ydtech.modules.protocols.dao.PtlAgreementProductCostsNewMapper;
@@ -17,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -41,6 +42,12 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
     @Autowired
     PtlAgreementProductCostsExportService ptlAgreementProductCostsExportService;
 
+    @Autowired
+    PtlAgreementProductCostsNewHistoryServiceImpl ptlAgreementProductCostsNewHistoryService;
+
+    @Autowired
+    PtlAgreementProductCostsAttrLinkHistoryService ptlAgreementProductCostsAttrLinkHistoryService;
+
     @Override
     public Page<PtlAgreementProductCostsNew> getByAgreementId(Page page, String agreementId) {
         Page<PtlAgreementProductCostsNew> pages = baseMapper.selectPage(page, new LambdaQueryWrapper<PtlAgreementProductCostsNew>()
@@ -100,51 +107,48 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
      * @param undwrtRulesAttrList
      * @return
      */
-    private String buildDesc(List<PtlAgreementProductCostsAttrLink> v, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList){
+    private String buildDesc(List<PtlAgreementProductCostsAttrLink> v, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
         String desc = "";
-        for(int i=0;i<v.size();i++){
+        for (int i = 0; i < v.size(); i++) {
             int finalI = i;
             PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream().filter(x -> x.getAttrCode().equals(v.get(finalI).getAttrCode())).findAny().get();
             //数值范围判断
-            if("inputNumber".equals(ptlAgreementUndwrtRulesAttr.getAttrType()))
-            {
-                desc += inputNumberIdentifying(ptlAgreementUndwrtRulesAttr,v.get(i)) + "\n";
+            if ("inputNumber".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
+                desc += inputNumberIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i)) + "\n";
             }
-            if("radio".equals(ptlAgreementUndwrtRulesAttr.getAttrType()))
-            {
-                desc += radioIdentifying(ptlAgreementUndwrtRulesAttr,v.get(i)) + "\n";
+            if ("radio".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
+                desc += radioIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i)) + "\n";
             }
-            if("checkbox".equals(ptlAgreementUndwrtRulesAttr.getAttrType()) || "select".equals(ptlAgreementUndwrtRulesAttr.getAttrType()))
-            {
+            if ("checkbox".equals(ptlAgreementUndwrtRulesAttr.getAttrType()) || "select".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
                 desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "包含" + v.get(i).getMin() + "\n";
             }
         }
         return desc;
     }
 
-    private String radioIdentifying(PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr,PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink){
+    private String radioIdentifying(PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink) {
         PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x ->
                 x.getCode().equals(ptlAgreementProductCostsAttrLink.getMin())).findAny().get();
         return ptlAgreementUndwrtRulesAttr.getAttrName() + "为" + ptlAgreementUndwrtRulesDictLabal.getName();
     }
 
-    private String inputNumberIdentifying(PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr,PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink){
-        if("1".equals(ptlAgreementProductCostsAttrLink.getOperator())){
+    private String inputNumberIdentifying(PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink) {
+        if ("1".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
             return ptlAgreementUndwrtRulesAttr.getAttrName() + "范围值" + ptlAgreementProductCostsAttrLink.getMin() + "到" + ptlAgreementProductCostsAttrLink.getMax();
-        }else if("2".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+        } else if ("2".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
             return ptlAgreementUndwrtRulesAttr.getAttrName() + "小于" + ptlAgreementProductCostsAttrLink.getMin();
-        }else if("3".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+        } else if ("3".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
             return ptlAgreementUndwrtRulesAttr.getAttrName() + "小于等于" + ptlAgreementProductCostsAttrLink.getMin();
-        }else if("4".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+        } else if ("4".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
             return ptlAgreementUndwrtRulesAttr.getAttrName() + "大于" + ptlAgreementProductCostsAttrLink.getMax();
-        }else if("5".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+        } else if ("5".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
             return ptlAgreementUndwrtRulesAttr.getAttrName() + "大于等于" + ptlAgreementProductCostsAttrLink.getMax();
         }
         return "";
     }
 
     @Override
-    public AgreementProductCostsSave costsGet(String costsId,List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
+    public AgreementProductCostsSave costsGet(String costsId, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
         //设置费用入口信息
         PtlAgreementProductCostsNew ptlAgreementProductCostsNew = baseMapper.selectOne(new LambdaQueryWrapper<PtlAgreementProductCostsNew>().eq(PtlAgreementProductCostsNew::getId, costsId));
         if (ptlAgreementProductCostsNew == null) {
@@ -156,7 +160,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         //设置费用出口信息
         PtlAgreementProductCostsExport ptlAgreementProductCostsExport = ptlAgreementProductCostsExportService.getOne(new LambdaQueryWrapper<PtlAgreementProductCostsExport>()
                 .eq(PtlAgreementProductCostsExport::getCostsId, costsId));
-        if(!Objects.isNull(ptlAgreementProductCostsExport)) {
+        if (!Objects.isNull(ptlAgreementProductCostsExport)) {
             agreementProductCosts.setExportRadio(ptlAgreementProductCostsExport);
         }
 
@@ -168,12 +172,11 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
 
         undwrtRulesAttrList.stream().forEach(x -> {
             //处理多选和下拉
-            if("checkbox".equals(x.getAttrType()) || "select".equals(x.getAttrType()))
-            {
+            if ("checkbox".equals(x.getAttrType()) || "select".equals(x.getAttrType())) {
                 //处理车牌
-                if("select".equals(x.getAttrType()) && "LicenseNo".equals(x.getAttrCode())){
+                if ("select".equals(x.getAttrType()) && "LicenseNo".equals(x.getAttrCode())) {
                     PtlAgreementProductCostsAttrLink licenseNo = list.stream().filter(l -> l.getAttrCode().equals("LicenseNo")).findFirst().orElse(null);
-                    if(licenseNo != null) {
+                    if (licenseNo != null) {
                         //根据operator 获取车牌的地区id
                         List<PtlAreaLicense> byParentNumber = ptlAreaLicenseService.getByParentNumber(licenseNo.getOperator());
                         List<PtlAgreementUndwrtRulesDictLabal> dictLabal = byParentNumber.stream().map(y -> {
@@ -188,14 +191,14 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
                 }
                 x.setMinArray(new String[]{});
                 list.stream().filter(y -> y.getAttrCode().equals(x.getAttrCode())).findFirst().ifPresent(z -> {
-                    if(null != z.getMin()) {
+                    if (null != z.getMin()) {
                         x.setId(z.getId());
                         x.setMinArray(z.getMin().split(","));
                         x.setMax(z.getMax());
                         x.setOperator(z.getOperator());
                     }
                 });
-            }else{
+            } else {
                 list.stream().filter(y -> y.getAttrCode().equals(x.getAttrCode())).findFirst().ifPresent(z -> {
                     x.setId(z.getId());
                     x.setMin(z.getMin());
@@ -212,6 +215,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         return agreementProductCosts;
     }
 
+
     @Override
     public List<AgreementProductCosts> costsGetList(String agreementId) {
         List<PtlAgreementProductCostsNew> ptlAgreementProductCostsNews = baseMapper.selectList(new LambdaQueryWrapper<PtlAgreementProductCostsNew>()
@@ -225,15 +229,14 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
             BeanUtils.copyProperties(news, productCosts);
             agreementProductCosts.add(productCosts);
         });
-        if(ptlAgreementProductCostsNews.size() > 0)
-        {
+        if (ptlAgreementProductCostsNews.size() > 0) {
             List<PtlAgreementProductCostsAttrLink> list = ptlAgreementProductCostsAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementProductCostsAttrLink>()
                     .in(PtlAgreementProductCostsAttrLink::getCostsId, ptlAgreementProductCostsNews.stream().map(PtlAgreementProductCostsNew::getId).collect(Collectors.toList())));
             agreementProductCosts.forEach(x -> {
                 List<PtlAgreementProductCostsAttrLink> collect = list.stream().filter(y -> y.getCostsId().equals(x.getId())).collect(Collectors.toList());
                 x.setCostsAttrLinks(collect);
             });
-        }else{
+        } else {
             agreementProductCosts.forEach(x -> {
                 x.setCostsAttrLinks(new ArrayList<>());
             });
@@ -256,15 +259,14 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
             BeanUtils.copyProperties(news, productCosts);
             agreementProductCosts.add(productCosts);
         });
-        if(ptlAgreementProductCostsNews.size() > 0)
-        {
+        if (ptlAgreementProductCostsNews.size() > 0) {
             List<PtlAgreementProductCostsAttrLink> list = ptlAgreementProductCostsAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementProductCostsAttrLink>()
                     .in(PtlAgreementProductCostsAttrLink::getCostsId, ptlAgreementProductCostsNews.stream().map(PtlAgreementProductCostsNew::getId).collect(Collectors.toList())));
             agreementProductCosts.forEach(x -> {
                 List<PtlAgreementProductCostsAttrLink> collect = list.stream().filter(y -> y.getCostsId().equals(x.getId())).collect(Collectors.toList());
                 x.setCostsAttrLinks(collect);
             });
-        }else{
+        } else {
             agreementProductCosts.forEach(x -> {
                 x.setCostsAttrLinks(new ArrayList<>());
             });
@@ -272,6 +274,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         return agreementProductCosts;
     }
 
+
     @Transactional
     @Override
     public boolean costsAdd(AgreementProductCosts agreementProductCosts) {
@@ -289,28 +292,61 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         ptlAgreementProductCostsExport.setId(null);
         ptlAgreementProductCostsExport.blank();
         ptlAgreementProductCostsExportService.save(ptlAgreementProductCostsExport);
-
+        //保存产品费用历史记录
+        PtlAgreementProductCostsNewHistory ptlAgreementProductCostsNewHistory = new PtlAgreementProductCostsNewHistory();
+        BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsNewHistory);
+        //添加费用ID
+        ptlAgreementProductCostsNewHistory.setCostsId(ptlAgreementProductCostsNew.getId());
+        //生成批次ID
+        String uuid = UUID.randomUUID().toString();
+        ptlAgreementProductCostsNewHistory.setBatch(uuid);
+        ptlAgreementProductCostsNewHistory.setOperatorType("add");
+        ptlAgreementProductCostsNewHistory.setModifier(BaseController.getUser().getId());
+        ptlAgreementProductCostsNewHistory.setOperatorTime(LocalDateTime.now());
+        ptlAgreementProductCostsNewHistoryService.save(ptlAgreementProductCostsNewHistory);
+        //创建产品费用因子历史记录容器
+        List<PtlAgreementProductCostsAttrLinkHistory> costsAttrLinkHistories = new ArrayList<>();
         //遍历费用属性
         List<PtlAgreementProductCostsAttrLink> costsAttrLinks = agreementProductCosts.getCostsAttrLinks();
         List<PtlAgreementProductCostsAttrLink> costsAttrLink = new ArrayList<>();
         costsAttrLinks.forEach(x -> {
+            PtlAgreementProductCostsAttrLinkHistory costsAttrLinkHistory = new PtlAgreementProductCostsAttrLinkHistory();
+
             //单独处理车牌号
-            if("LicenseNo".equals(x.getAttrCode()) && (x.getMin() != null && !x.getMin().equals(""))){
+            if ("LicenseNo".equals(x.getAttrCode()) && (x.getMin() != null && !x.getMin().equals(""))) {
                 x.setOperator(x.getDictLabal().getJSONObject(0).getString("parentNumber"));
                 x.setCostsId(ptlAgreementProductCostsNew.getId());
                 x.setId(0);
                 costsAttrLink.add(x);
-            }else {
+                BeanUtils.copyProperties(x, costsAttrLinkHistory);
+                //设置产品费用因子历史记录
+                costsAttrLinkHistory.setBatch(uuid);
+                costsAttrLinkHistory.setOperatorType("add");
+                costsAttrLinkHistory.setModifier(BaseController.getUser().getId());
+                costsAttrLinkHistory.setOperatorTime(LocalDateTime.now());
+                costsAttrLinkHistories.add(costsAttrLinkHistory);
+            } else {
                 if ((!"0".equals(x.getMin()) && null != x.getMin()) || (!"0".equals(x.getMax()) && null != x.getMax())) {
 
                     x.setCostsId(ptlAgreementProductCostsNew.getId());
                     x.setId(0);
                     costsAttrLink.add(x);
+                    BeanUtils.copyProperties(x, costsAttrLinkHistory);
+                    //设置产品费用因子历史记录
+                    costsAttrLinkHistory.setBatch(uuid);
+
+                    costsAttrLinkHistory.setOperatorType("add");
+                    costsAttrLinkHistory.setModifier(BaseController.getUser().getId());
+                    costsAttrLinkHistory.setOperatorTime(LocalDateTime.now());
+                    costsAttrLinkHistories.add(costsAttrLinkHistory);
                 }
             }
         });
+        //保存产品费用因子历史记录
+        ptlAgreementProductCostsAttrLinkHistoryService.saveBatch(costsAttrLinkHistories);
         ptlAgreementProductCostsAttrLinkService.saveBatch(costsAttrLink);
         return true;
+
     }
 
     @Transactional
@@ -324,13 +360,15 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         //更新费用出口表信息
         PtlAgreementProductCostsExport ptlAgreementProductCostsExport = ptlAgreementProductCostsExportService.getOne(
                 new LambdaQueryWrapper<PtlAgreementProductCostsExport>()
-                .eq(PtlAgreementProductCostsExport::getCostsId, ptlAgreementProductCostsNew.getId()));
-        if(Objects.isNull(ptlAgreementProductCostsExport)){
+                        .eq(PtlAgreementProductCostsExport::getCostsId, ptlAgreementProductCostsNew.getId()));
+
+
+        if (Objects.isNull(ptlAgreementProductCostsExport)) {
             ptlAgreementProductCostsExport = new PtlAgreementProductCostsExport();
             BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsExport);
             ptlAgreementProductCostsExport.setCostsId(ptlAgreementProductCostsNew.getId());
             ptlAgreementProductCostsExport.setId(null);
-        }else{
+        } else {
             //保存原始id
             String id = ptlAgreementProductCostsExport.getId();
             BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsExport);
@@ -339,41 +377,86 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         }
         ptlAgreementProductCostsExportService.saveOrUpdate(ptlAgreementProductCostsExport);
 
+        //保存产品费用历史记录
+        PtlAgreementProductCostsNewHistory ptlAgreementProductCostsNewHistory = new PtlAgreementProductCostsNewHistory();
+        BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsNewHistory);
+        //添加费用ID
+        ptlAgreementProductCostsNewHistory.setCostsId(ptlAgreementProductCostsNew.getId());
+        //生成批次ID
+        String uuid = UUID.randomUUID().toString();
+        ptlAgreementProductCostsNewHistory.setBatch(uuid);
+
+        ptlAgreementProductCostsNewHistory.setOperatorType("update");
+        ptlAgreementProductCostsNewHistory.setModifier(BaseController.getUser().getId());
+        ptlAgreementProductCostsNewHistory.setOperatorTime(LocalDateTime.now());
+        ptlAgreementProductCostsNewHistoryService.save(ptlAgreementProductCostsNewHistory);
+
+
         //设置费用因子属性
         //先删除属性值
         ptlAgreementProductCostsAttrLinkService.remove(new LambdaQueryWrapper<PtlAgreementProductCostsAttrLink>()
                 .eq(PtlAgreementProductCostsAttrLink::getCostsId, ptlAgreementProductCostsNew.getId()));
         List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        //创建产品费用因子历史记录容器
+        List<PtlAgreementProductCostsAttrLinkHistory> costsAttrLinkHistories = new ArrayList<>();
         //再添加属性值
         List<PtlAgreementProductCostsAttrLink> costsAttrLinks = agreementProductCosts.getCostsAttrLinks();
         List<PtlAgreementProductCostsAttrLink> costsAttrLink = new ArrayList<>();
         costsAttrLinks.forEach(x -> {
             //单独处理车牌号
-            if("LicenseNo".equals(x.getAttrCode()) && (x.getMin() != null && x.getMin() != "")){
+            if ("LicenseNo".equals(x.getAttrCode()) && (x.getMin() != null && x.getMin() != "")) {
                 x.setOperator(x.getDictLabal().getJSONObject(0).getString("parentNumber"));
                 x.setCostsId(ptlAgreementProductCostsNew.getId());
                 x.setId(0);
                 costsAttrLink.add(x);
-            }else {
+                //设置产品费用因子历史记录
+                PtlAgreementProductCostsAttrLinkHistory costsAttrLinkHistory = new PtlAgreementProductCostsAttrLinkHistory();
+                BeanUtils.copyProperties(x, costsAttrLinkHistory);
+                costsAttrLinkHistory.setBatch(uuid);
+
+                costsAttrLinkHistory.setOperatorType("update");
+                costsAttrLinkHistory.setModifier(BaseController.getUser().getId());
+                costsAttrLinkHistory.setOperatorTime(LocalDateTime.now());
+                costsAttrLinkHistories.add(costsAttrLinkHistory);
+            } else {
                 PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream().filter(y -> y.getAttrCode().equals(x.getAttrCode())).findFirst().orElse(null);
                 //单独判断radio  radio中存在0的属性值
-                if("radio".equals(ptlAgreementUndwrtRulesAttr.getAttrType())){
+                if ("radio".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
                     if (null != x.getMin()) {
-
                         x.setCostsId(ptlAgreementProductCostsNew.getId());
                         x.setId(0);
                         costsAttrLink.add(x);
+                        //设置产品费用因子历史记录
+                        PtlAgreementProductCostsAttrLinkHistory costsAttrLinkHistory = new PtlAgreementProductCostsAttrLinkHistory();
+                        BeanUtils.copyProperties(x, costsAttrLinkHistory);
+                        costsAttrLinkHistory.setBatch(uuid);
+
+                        costsAttrLinkHistory.setOperatorType("update");
+                        costsAttrLinkHistory.setModifier(BaseController.getUser().getId());
+                        costsAttrLinkHistory.setOperatorTime(LocalDateTime.now());
+                        costsAttrLinkHistories.add(costsAttrLinkHistory);
                     }
-                }else {
+                } else {
                     if ((!"0".equals(x.getMin()) && null != x.getMin()) || (!"0".equals(x.getMax()) && null != x.getMax())) {
 
                         x.setCostsId(ptlAgreementProductCostsNew.getId());
                         x.setId(0);
                         costsAttrLink.add(x);
+                        //设置产品费用因子历史记录
+                        PtlAgreementProductCostsAttrLinkHistory costsAttrLinkHistory = new PtlAgreementProductCostsAttrLinkHistory();
+                        BeanUtils.copyProperties(x, costsAttrLinkHistory);
+                        costsAttrLinkHistory.setBatch(uuid);
+
+                        costsAttrLinkHistory.setOperatorType("update");
+                        costsAttrLinkHistory.setModifier(BaseController.getUser().getId());
+                        costsAttrLinkHistory.setOperatorTime(LocalDateTime.now());
+                        costsAttrLinkHistories.add(costsAttrLinkHistory);
                     }
                 }
             }
         });
+        //保存产品费用因子历史记录
+        ptlAgreementProductCostsAttrLinkHistoryService.saveBatch(costsAttrLinkHistories);
         ptlAgreementProductCostsAttrLinkService.saveBatch(costsAttrLink);
         return true;
     }
@@ -383,6 +466,10 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
     public boolean costsDelete(String costsId) {
         baseMapper.deleteById(costsId);
         ptlAgreementProductCostsAttrLinkService.remove(new LambdaQueryWrapper<PtlAgreementProductCostsAttrLink>().eq(PtlAgreementProductCostsAttrLink::getCostsId, costsId));
-        return true;
+        //删除产品费用历史记录
+        ptlAgreementProductCostsNewHistoryService.remove(new LambdaQueryWrapper<PtlAgreementProductCostsNewHistory>().eq(PtlAgreementProductCostsNewHistory::getCostsId, costsId));
+        //删除产品费用因子历史记录
+        ptlAgreementProductCostsAttrLinkHistoryService.remove(new LambdaQueryWrapper<PtlAgreementProductCostsAttrLinkHistory>().eq(PtlAgreementProductCostsAttrLinkHistory::getCostsId, costsId));
+              return true;
     }
 }

+ 21 - 0
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesAttrLinkHistoryServiceImpl.java

@@ -0,0 +1,21 @@
+package com.ydtech.modules.protocols.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.protocols.dao.PtlAgreementUndwrtRulesAttrLinkHistoryMapper;
+import com.ydtech.modules.protocols.dao.PtlAgreementUndwrtRulesAttrLinkMapper;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttrLink;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttrLinkHistory;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesAttrLinkHistoryService;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesAttrLinkService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @description
+ * @createDate
+ * @Entity
+ */
+@Service
+public class PtlAgreementUndwrtRulesAttrLinkHistoryServiceImpl extends ServiceImpl<PtlAgreementUndwrtRulesAttrLinkHistoryMapper, PtlAgreementUndwrtRulesAttrLinkHistory>
+        implements PtlAgreementUndwrtRulesAttrLinkHistoryService {
+
+}

+ 131 - 0
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesNewHistoryServiceImpl.java

@@ -0,0 +1,131 @@
+package com.ydtech.modules.protocols.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.protocol.entity.po.PtlAreaLicense;
+import com.ydtech.modules.protocol.service.PtlAreaLicenseService;
+import com.ydtech.modules.protocols.dao.PtlAgreementUndwrtRulesNewHistoryMapper;
+import com.ydtech.modules.protocols.entity.po.*;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesAttrLinkHistoryService;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesAttrService;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesNewHistoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * @description
+ * @createDate
+ * @Entity
+ */
+@Service
+public class PtlAgreementUndwrtRulesNewHistoryServiceImpl extends ServiceImpl<PtlAgreementUndwrtRulesNewHistoryMapper, PtlAgreementUndwrtRulesNewHistory>
+        implements PtlAgreementUndwrtRulesNewHistoryService {
+
+
+    @Autowired
+    PtlAgreementUndwrtRulesAttrLinkHistoryService undwrtRulesAttrLinkHistoryService;
+
+    @Autowired
+    PtlAreaLicenseService ptlAreaLicenseService;
+
+    @Autowired
+    PtlAgreementUndwrtRulesAttrService ptlAgreementUndwrtRulesAttrService;
+
+    @Override
+    public Page<PtlAgreementUndwrtRulesNewHistory> pageHistory(Page page, String agreementId, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
+        Page<PtlAgreementUndwrtRulesNewHistory> historyVoPage = new Page<>();
+        //获取当前协议下的承包规则
+        LambdaQueryWrapper<PtlAgreementUndwrtRulesNewHistory> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(PtlAgreementUndwrtRulesNewHistory::getAgreementId, agreementId);
+        Page selectPage = baseMapper.selectPage(page, wrapper);
+        List<PtlAgreementUndwrtRulesNewHistory> records = selectPage.getRecords();
+
+        //获取所有历史记录承包规则批次
+        List<String> batch = new ArrayList<>();
+        records.forEach(x -> {
+            batch.add(x.getBatch());
+        });
+
+        //获取当前协议所有承包规则下的所有费用因子的历史记录
+        List<PtlAgreementUndwrtRulesAttr> rulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        List<PtlAgreementUndwrtRulesAttrLinkHistory> list = undwrtRulesAttrLinkHistoryService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLinkHistory>()
+                .in(PtlAgreementUndwrtRulesAttrLinkHistory::getBatch, batch));
+
+        Map<String, List<PtlAgreementUndwrtRulesAttrLinkHistory>> groupedByCostsId = list.stream()
+                .collect(Collectors.groupingBy(PtlAgreementUndwrtRulesAttrLinkHistory::getBatch));
+
+        groupedByCostsId.forEach((k, v) -> {
+            records.stream().filter(x -> x.getBatch().equals(k)).findFirst().ifPresent(x -> x.setCostsAttrLinks(buildDesc(v, undwrtRulesAttrList)));
+        });
+
+        //封装返回
+        historyVoPage.setCurrent(selectPage.getCurrent());
+        historyVoPage.setSize(selectPage.getSize());
+        historyVoPage.setPages(selectPage.getPages());
+        historyVoPage.setRecords(records);
+        historyVoPage.setTotal(selectPage.getTotal());
+        return historyVoPage;
+    }
+
+    /**
+     * 遍历费用属性描述文字
+     *
+     * @param v
+     * @param undwrtRulesAttrList
+     * @return
+     */
+    private String buildDesc(List<PtlAgreementUndwrtRulesAttrLinkHistory> v, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
+        String desc = "";
+        for (int i = 0; i < v.size(); i++) {
+            int finalI = i;
+            PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream().filter(x -> x.getAttrCode().equals(v.get(finalI).getAttrCode())).findAny().get();
+            //数值范围判断
+            if ("inputNumber".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
+                desc += inputNumberIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i)) + "\n";
+            }
+            if ("radio".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
+                desc += radioIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i)) + "\n";
+            }
+            if ("checkbox".equals(ptlAgreementUndwrtRulesAttr.getAttrType()) || "select".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
+                desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "包含" + v.get(i).getMin() + "\n";
+            }
+        }
+        return desc;
+    }
+
+    private String radioIdentifying(PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, PtlAgreementUndwrtRulesAttrLinkHistory ptlAgreementProductCostsAttrLinkHistory) {
+        PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x ->
+                x.getCode().equals(ptlAgreementProductCostsAttrLinkHistory.getMin())).findAny().get();
+        return ptlAgreementUndwrtRulesAttr.getAttrName() + "为" + ptlAgreementUndwrtRulesDictLabal.getName();
+    }
+
+    private String inputNumberIdentifying(PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, PtlAgreementUndwrtRulesAttrLinkHistory ptlAgreementProductCostsAttrLink) {
+        if ("1".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+            return ptlAgreementUndwrtRulesAttr.getAttrName() + "范围值" + ptlAgreementProductCostsAttrLink.getMin() + "到" + ptlAgreementProductCostsAttrLink.getMax();
+        } else if ("2".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+            return ptlAgreementUndwrtRulesAttr.getAttrName() + "小于" + ptlAgreementProductCostsAttrLink.getMin();
+        } else if ("3".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+            return ptlAgreementUndwrtRulesAttr.getAttrName() + "小于等于" + ptlAgreementProductCostsAttrLink.getMin();
+        } else if ("4".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+            return ptlAgreementUndwrtRulesAttr.getAttrName() + "大于" + ptlAgreementProductCostsAttrLink.getMax();
+        } else if ("5".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+            return ptlAgreementUndwrtRulesAttr.getAttrName() + "大于等于" + ptlAgreementProductCostsAttrLink.getMax();
+        }
+        return "";
+    }
+}
+
+
+
+

+ 177 - 32
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesNewServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.core.page.PageRequest;
 import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.protocol.entity.po.PtlAgreement;
 import com.ydtech.modules.protocol.entity.po.PtlAreaLicense;
 import com.ydtech.modules.protocol.service.PtlAreaLicenseService;
@@ -14,18 +15,14 @@ import com.ydtech.modules.protocols.entity.po.*;
 import com.ydtech.modules.protocols.entity.vo.AgreementProductCostsSave;
 import com.ydtech.modules.protocols.entity.vo.AgreementUndwrtRules;
 import com.ydtech.modules.protocols.entity.vo.AgreementUndwrtRulesSave;
-import com.ydtech.modules.protocols.service.PtlAgreementProductCostsAttrLinkService;
-import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesAttrLinkService;
-import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesAttrService;
-import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesNewService;
+import com.ydtech.modules.protocols.service.*;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.time.LocalDateTime;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -46,6 +43,12 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
     @Autowired
     private PtlAgreementUndwrtRulesAttrService ptlAgreementUndwrtRulesAttrService;
 
+    @Autowired
+    private PtlAgreementUndwrtRulesNewHistoryService ptlAgreementUndwrtRulesNewHistoryService;
+
+    @Autowired
+    private PtlAgreementUndwrtRulesAttrLinkHistoryService ptlAgreementUndwrtRulesAttrLinkHistoryService;
+
     @Override
     public AgreementUndwrtRulesSave rulesGet(String ruleId, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
         //设置费用入口信息
@@ -53,7 +56,6 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
         AgreementUndwrtRulesSave agreementUndwrtRulesSave = new AgreementUndwrtRulesSave();
         BeanUtils.copyProperties(ptlAgreementUndwrtRulesNew, agreementUndwrtRulesSave);
 
-
         //设置费用因子属性
         List<PtlAgreementUndwrtRulesAttr> ptlAgreementUndwrtRulesAttrs = new ArrayList<>();
         List<PtlAgreementUndwrtRulesAttrLink> list = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>()
@@ -61,12 +63,11 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
 
         undwrtRulesAttrList.stream().forEach(x -> {
             //处理多选和下拉
-            if("checkbox".equals(x.getAttrType()) || "select".equals(x.getAttrType()))
-            {
+            if ("checkbox".equals(x.getAttrType()) || "select".equals(x.getAttrType())) {
                 //处理车牌
-                if("select".equals(x.getAttrType()) && "LicenseNo".equals(x.getAttrCode())){
+                if ("select".equals(x.getAttrType()) && "LicenseNo".equals(x.getAttrCode())) {
                     PtlAgreementUndwrtRulesAttrLink licenseNo = list.stream().filter(l -> l.getAttrCode().equals("LicenseNo")).findFirst().orElse(null);
-                    if(licenseNo != null) {
+                    if (licenseNo != null) {
                         //根据operator 获取车牌的地区id
                         List<PtlAreaLicense> byParentNumber = ptlAreaLicenseService.getByParentNumber(licenseNo.getOperator());
                         List<PtlAgreementUndwrtRulesDictLabal> dictLabal = byParentNumber.stream().map(y -> {
@@ -81,14 +82,14 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
                 }
                 x.setMinArray(new String[]{});
                 list.stream().filter(y -> y.getAttrCode().equals(x.getAttrCode())).findFirst().ifPresent(z -> {
-                    if(null != z.getMin()) {
+                    if (null != z.getMin()) {
                         x.setId(z.getId());
                         x.setMinArray(z.getMin().split(","));
                         x.setMax(z.getMax());
                         x.setOperator(z.getOperator());
                     }
                 });
-            }else{
+            } else {
                 list.stream().filter(y -> y.getAttrCode().equals(x.getAttrCode())).findFirst().ifPresent(z -> {
                     x.setId(z.getId());
                     x.setMin(z.getMin());
@@ -110,7 +111,7 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
         List<PtlAgreementUndwrtRulesNew> rulesList = baseMapper.selectList(new LambdaQueryWrapper<PtlAgreementUndwrtRulesNew>()
                 .eq(PtlAgreementUndwrtRulesNew::getAgreementId, agreementId));
         List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesAttrLinkList = ptlAgreementUndwrtRulesAttrLinkService.list();
-        rulesList.forEach(item->{
+        rulesList.forEach(item -> {
             List<PtlAgreementUndwrtRulesAttrLink> collect = ptlAgreementUndwrtRulesAttrLinkList.stream().filter(x -> Objects.equals(x.getRulesId(), item.getId())).collect(Collectors.toList());
             item.setRulesAttrList(collect);
         });
@@ -118,20 +119,84 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
     }
 
     @Override
-    public Page rulesPage(Page page,String agreementId) {
+    public Page rulesPage(Page page, String agreementId) {
 
-        Page<PtlAgreementUndwrtRulesNew> rulesPage = baseMapper.selectPage(page,new LambdaQueryWrapper<PtlAgreementUndwrtRulesNew>()
+        Page<PtlAgreementUndwrtRulesNew> rulesPage = baseMapper.selectPage(page, new LambdaQueryWrapper<PtlAgreementUndwrtRulesNew>()
                 .eq(PtlAgreementUndwrtRulesNew::getAgreementId, agreementId));
-        List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesAttrLinkList = ptlAgreementUndwrtRulesAttrLinkService.list();
+
+//        List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesAttrLinkList = ptlAgreementUndwrtRulesAttrLinkService.list();
         List<PtlAgreementUndwrtRulesNew> records = rulesPage.getRecords();
-        records.forEach(item->{
-            List<PtlAgreementUndwrtRulesAttrLink> collect = ptlAgreementUndwrtRulesAttrLinkList.stream().filter(x -> Objects.equals(x.getRulesId(), item.getId())).collect(Collectors.toList());
-            item.setRulesAttrList(collect);
+        //遍历费用列表
+        List<String> ids = new ArrayList<>();
+        records.forEach(x -> {
+            ids.add(x.getId());
         });
+
+        //获取费用属性
+        List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        List<PtlAgreementUndwrtRulesAttrLink> list = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>()
+                .in(PtlAgreementUndwrtRulesAttrLink::getRulesId, ids));
+
+        Map<String, List<PtlAgreementUndwrtRulesAttrLink>> groupedByCostsId = list.stream()
+                .collect(Collectors.groupingBy(PtlAgreementUndwrtRulesAttrLink::getRulesId));
+        groupedByCostsId.forEach((k, v) -> {
+            records.stream().filter(x -> x.getId().equals(k)).findFirst().ifPresent(x -> x.setDesc(buildDesc(v,undwrtRulesAttrList)));
+        });
+
+//        records.forEach(item -> {
+//            List<PtlAgreementUndwrtRulesAttrLink> collect = ptlAgreementUndwrtRulesAttrLinkList.stream().filter(x -> Objects.equals(x.getRulesId(), item.getId())).collect(Collectors.toList());
+//            item.setRulesAttrList(collect);
+//        });
         rulesPage.setRecords(records);
         return rulesPage;
     }
 
+    /**
+     * 遍历费用属性描述文字
+     * @param v
+     * @param undwrtRulesAttrList
+     * @return
+     */
+    private String buildDesc(List<PtlAgreementUndwrtRulesAttrLink> v, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
+        String desc = "";
+        for (int i = 0; i < v.size(); i++) {
+            int finalI = i;
+            PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream().filter(x -> x.getAttrCode().equals(v.get(finalI).getAttrCode())).findAny().get();
+            //数值范围判断
+            if ("inputNumber".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
+                desc += inputNumberIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i)) + "\n";
+            }
+            if ("radio".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
+                desc += radioIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i)) + "\n";
+            }
+            if ("checkbox".equals(ptlAgreementUndwrtRulesAttr.getAttrType()) || "select".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
+                desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "包含" + v.get(i).getMin() + "\n";
+            }
+        }
+        return desc;
+    }
+
+    private String radioIdentifying(PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, PtlAgreementUndwrtRulesAttrLink ptlAgreementProductCostsAttrLink) {
+        PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x ->
+                x.getCode().equals(ptlAgreementProductCostsAttrLink.getMin())).findAny().get();
+        return ptlAgreementUndwrtRulesAttr.getAttrName() + "为" + ptlAgreementUndwrtRulesDictLabal.getName();
+    }
+
+    private String inputNumberIdentifying(PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, PtlAgreementUndwrtRulesAttrLink ptlAgreementProductCostsAttrLink) {
+        if ("1".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+            return ptlAgreementUndwrtRulesAttr.getAttrName() + "范围值" + ptlAgreementProductCostsAttrLink.getMin() + "到" + ptlAgreementProductCostsAttrLink.getMax();
+        } else if ("2".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+            return ptlAgreementUndwrtRulesAttr.getAttrName() + "小于" + ptlAgreementProductCostsAttrLink.getMin();
+        } else if ("3".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+            return ptlAgreementUndwrtRulesAttr.getAttrName() + "小于等于" + ptlAgreementProductCostsAttrLink.getMin();
+        } else if ("4".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+            return ptlAgreementUndwrtRulesAttr.getAttrName() + "大于" + ptlAgreementProductCostsAttrLink.getMax();
+        } else if ("5".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
+            return ptlAgreementUndwrtRulesAttr.getAttrName() + "大于等于" + ptlAgreementProductCostsAttrLink.getMax();
+        }
+        return "";
+    }
+
     @Transactional
     @Override
     public boolean rulesAdd(AgreementUndwrtRules agreementUndwrtRules) {
@@ -141,25 +206,61 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
         ptlAgreementUndwrtRulesNew.setId(null);
         int insert = baseMapper.insert(ptlAgreementUndwrtRulesNew);
 
+        //保存承包规则历史记录
+        PtlAgreementUndwrtRulesNewHistory ptlAgreementUndwrtRulesNewHistory = new PtlAgreementUndwrtRulesNewHistory();
+        BeanUtils.copyProperties(agreementUndwrtRules, ptlAgreementUndwrtRulesNewHistory);
+        //添加承包规则ID
+        ptlAgreementUndwrtRulesNewHistory.setRulesId(ptlAgreementUndwrtRulesNew.getId());
+        //生成批次ID
+        String uuid = UUID.randomUUID().toString();
+        ptlAgreementUndwrtRulesNewHistory.setBatch(uuid);
+
+        ptlAgreementUndwrtRulesNewHistory.setOperatorType("add");
+        ptlAgreementUndwrtRulesNewHistory.setModifier(BaseController.getUser().getId());
+        ptlAgreementUndwrtRulesNewHistory.setOperatorTime(LocalDateTime.now());
+        ptlAgreementUndwrtRulesNewHistoryService.save(ptlAgreementUndwrtRulesNewHistory);
+        //创建承包规则费用因子历史记录容器
+        List<PtlAgreementUndwrtRulesAttrLinkHistory> undwrtRulesAttrLinkHistories = new ArrayList<>();
+
+
         //遍历承保规则属性
         List<PtlAgreementUndwrtRulesAttrLink> rulesAttrList = agreementUndwrtRules.getRulesAttrList();
         List<PtlAgreementUndwrtRulesAttrLink> costsAttrLink = new ArrayList<>();
         rulesAttrList.forEach(x -> {
             //单独处理车牌号
-            if("LicenseNo".equals(x.getAttrCode())){
+            if ("LicenseNo".equals(x.getAttrCode())) {
                 x.setOperator(x.getDictLabal().getJSONObject(0).getString("parentNumber"));
                 x.setRulesId(ptlAgreementUndwrtRulesNew.getId());
                 x.setId(0);
                 costsAttrLink.add(x);
-            }else {
+                PtlAgreementUndwrtRulesAttrLinkHistory undwrtRulesAttrLinkHistory = new PtlAgreementUndwrtRulesAttrLinkHistory();
+                BeanUtils.copyProperties(x, undwrtRulesAttrLinkHistory);
+                //设置承包规则费用因子历史记录
+                undwrtRulesAttrLinkHistory.setBatch(uuid);
+
+                undwrtRulesAttrLinkHistory.setOperatorType("add");
+                undwrtRulesAttrLinkHistory.setModifier(BaseController.getUser().getId());
+                undwrtRulesAttrLinkHistory.setOperatorTime(LocalDateTime.now());
+                undwrtRulesAttrLinkHistories.add(undwrtRulesAttrLinkHistory);
+            } else {
                 if ((!"0".equals(x.getMin()) && null != x.getMin()) || (!"0".equals(x.getMax()) && null != x.getMax())) {
 
                     x.setRulesId(ptlAgreementUndwrtRulesNew.getId());
                     x.setId(0);
                     costsAttrLink.add(x);
+                    PtlAgreementUndwrtRulesAttrLinkHistory undwrtRulesAttrLinkHistory = new PtlAgreementUndwrtRulesAttrLinkHistory();
+                    BeanUtils.copyProperties(x, undwrtRulesAttrLinkHistory);
+                    //设置承包规则费用因子历史记录
+                    undwrtRulesAttrLinkHistory.setBatch(uuid);
+
+                    undwrtRulesAttrLinkHistory.setOperatorType("add");
+                    undwrtRulesAttrLinkHistory.setModifier(BaseController.getUser().getId());
+                    undwrtRulesAttrLinkHistory.setOperatorTime(LocalDateTime.now());
+                    undwrtRulesAttrLinkHistories.add(undwrtRulesAttrLinkHistory);
                 }
             }
         });
+        ptlAgreementUndwrtRulesAttrLinkHistoryService.saveBatch(undwrtRulesAttrLinkHistories);
         ptlAgreementUndwrtRulesAttrLinkService.saveBatch(costsAttrLink);
         return true;
     }
@@ -172,6 +273,22 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
         BeanUtils.copyProperties(agreementUndwrtRules, ptlAgreementUndwrtRulesNew);
         int update = baseMapper.updateById(ptlAgreementUndwrtRulesNew);
 
+        //保存承包规则历史记录
+        PtlAgreementUndwrtRulesNewHistory ptlAgreementUndwrtRulesNewHistory = new PtlAgreementUndwrtRulesNewHistory();
+        BeanUtils.copyProperties(agreementUndwrtRules, ptlAgreementUndwrtRulesNewHistory);
+        //添加承包规则ID
+        ptlAgreementUndwrtRulesNewHistory.setRulesId(ptlAgreementUndwrtRulesNew.getId());
+        //生成批次ID
+        String uuid = UUID.randomUUID().toString();
+        ptlAgreementUndwrtRulesNewHistory.setBatch(uuid);
+
+        ptlAgreementUndwrtRulesNewHistory.setOperatorType("update");
+        ptlAgreementUndwrtRulesNewHistory.setModifier(BaseController.getUser().getId());
+        ptlAgreementUndwrtRulesNewHistory.setOperatorTime(LocalDateTime.now());
+        ptlAgreementUndwrtRulesNewHistoryService.save(ptlAgreementUndwrtRulesNewHistory);
+        //创建承包规则费用因子历史记录容器
+        List<PtlAgreementUndwrtRulesAttrLinkHistory> undwrtRulesAttrLinkHistories = new ArrayList<>();
+
         //设置费用因子属性
         //先删除属性值
         ptlAgreementUndwrtRulesAttrLinkService.remove(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>()
@@ -182,31 +299,57 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
         List<PtlAgreementUndwrtRulesAttrLink> costsAttrLink = new ArrayList<>();
         costsAttrLinks.forEach(x -> {
             //单独处理车牌号
-            if("LicenseNo".equals(x.getAttrCode()) && (x.getMin() != null && x.getMin() != "")){
+            if ("LicenseNo".equals(x.getAttrCode()) && (x.getMin() != null && x.getMin() != "")) {
                 x.setOperator(x.getDictLabal().getJSONObject(0).getString("parentNumber"));
                 x.setRulesId(ptlAgreementUndwrtRulesNew.getId());
                 x.setId(0);
                 costsAttrLink.add(x);
-            }else {
+                PtlAgreementUndwrtRulesAttrLinkHistory undwrtRulesAttrLinkHistory = new PtlAgreementUndwrtRulesAttrLinkHistory();
+                BeanUtils.copyProperties(x, undwrtRulesAttrLinkHistory);
+                //设置承包规则费用因子历史记录
+                undwrtRulesAttrLinkHistory.setBatch(uuid);
+
+                undwrtRulesAttrLinkHistory.setOperatorType("update");
+                undwrtRulesAttrLinkHistory.setModifier(BaseController.getUser().getId());
+                undwrtRulesAttrLinkHistory.setOperatorTime(LocalDateTime.now());
+                undwrtRulesAttrLinkHistories.add(undwrtRulesAttrLinkHistory);
+            } else {
                 PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream().filter(y -> y.getAttrCode().equals(x.getAttrCode())).findFirst().orElse(null);
                 //单独判断radio  radio中存在0的属性值
-                if("radio".equals(ptlAgreementUndwrtRulesAttr.getAttrType())){
+                if ("radio".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
                     if (null != x.getMin()) {
-
                         x.setRulesId(ptlAgreementUndwrtRulesNew.getId());
                         x.setId(0);
                         costsAttrLink.add(x);
+                        PtlAgreementUndwrtRulesAttrLinkHistory undwrtRulesAttrLinkHistory = new PtlAgreementUndwrtRulesAttrLinkHistory();
+                        BeanUtils.copyProperties(x, undwrtRulesAttrLinkHistory);
+                        //设置承包规则费用因子历史记录
+                        undwrtRulesAttrLinkHistory.setBatch(uuid);
+
+                        undwrtRulesAttrLinkHistory.setOperatorType("update");
+                        undwrtRulesAttrLinkHistory.setModifier(BaseController.getUser().getId());
+                        undwrtRulesAttrLinkHistory.setOperatorTime(LocalDateTime.now());
+                        undwrtRulesAttrLinkHistories.add(undwrtRulesAttrLinkHistory);
                     }
-                }else {
+                } else {
                     if ((!"0".equals(x.getMin()) && null != x.getMin()) || (!"0".equals(x.getMax()) && null != x.getMax())) {
-
                         x.setRulesId(ptlAgreementUndwrtRulesNew.getId());
                         x.setId(0);
                         costsAttrLink.add(x);
+                        PtlAgreementUndwrtRulesAttrLinkHistory undwrtRulesAttrLinkHistory = new PtlAgreementUndwrtRulesAttrLinkHistory();
+                        BeanUtils.copyProperties(x, undwrtRulesAttrLinkHistory);
+                        //设置承包规则费用因子历史记录
+                        undwrtRulesAttrLinkHistory.setBatch(uuid);
+
+                        undwrtRulesAttrLinkHistory.setOperatorType("update");
+                        undwrtRulesAttrLinkHistory.setModifier(BaseController.getUser().getId());
+                        undwrtRulesAttrLinkHistory.setOperatorTime(LocalDateTime.now());
+                        undwrtRulesAttrLinkHistories.add(undwrtRulesAttrLinkHistory);
                     }
                 }
             }
         });
+        ptlAgreementUndwrtRulesAttrLinkHistoryService.saveBatch(undwrtRulesAttrLinkHistories);
         ptlAgreementUndwrtRulesAttrLinkService.saveBatch(costsAttrLink);
         return true;
     }
@@ -214,9 +357,11 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
     @Transactional
     @Override
     public boolean rulesDelete(String rulesId) {
-        ptlAgreementUndwrtRulesAttrLinkService.remove(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>()
-                .eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, rulesId));
-
+        ptlAgreementUndwrtRulesAttrLinkService.remove(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>().eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, rulesId));
+        //删除承包规则历史记录
+        ptlAgreementUndwrtRulesNewHistoryService.remove(new LambdaQueryWrapper<PtlAgreementUndwrtRulesNewHistory>().eq(PtlAgreementUndwrtRulesNewHistory::getRulesId, rulesId));
+        //删除承包规则费用因子历史记录
+        ptlAgreementUndwrtRulesAttrLinkHistoryService.remove(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLinkHistory>().eq(PtlAgreementUndwrtRulesAttrLinkHistory::getRulesId, rulesId));
         baseMapper.deleteById(rulesId);
         return true;
     }