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

新的承保规则 费用因子

785834757 2 лет назад
Родитель
Сommit
2fd512fbeb
50 измененных файлов с 3905 добавлено и 1 удалено
  1. 6 0
      src/main/java/com/ydtech/config/SwaggerConfig.java
  2. 0 1
      src/main/java/com/ydtech/modules/esm/service/EsmRetailService.java
  3. 341 0
      src/main/java/com/ydtech/modules/fee/dto/vo/RuleAttrMappingVo.java
  4. 66 0
      src/main/java/com/ydtech/modules/fee/service/FeeRuleSchemeNewService.java
  5. 698 0
      src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceNewImpl.java
  6. 10 0
      src/main/java/com/ydtech/modules/order/aop/AuditVerification.java
  7. 65 0
      src/main/java/com/ydtech/modules/order/aop/aspect/AuditVerificationAspect.java
  8. 2 0
      src/main/java/com/ydtech/modules/order/service/impl/DaJiaOrderServiceImpl.java
  9. 125 0
      src/main/java/com/ydtech/modules/protocols/controller/PtlNewAgreementController.java
  10. 19 0
      src/main/java/com/ydtech/modules/protocols/dao/InsFeeOrderNewMapper.java
  11. 19 0
      src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementProductCostsAttrLinkMapper.java
  12. 19 0
      src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementProductCostsExportMapper.java
  13. 19 0
      src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementProductCostsNewMapper.java
  14. 19 0
      src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementUndwrtRulesAttrLinkMapper.java
  15. 18 0
      src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementUndwrtRulesAttrMapper.java
  16. 22 0
      src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementUndwrtRulesDictLabalMapper.java
  17. 17 0
      src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementUndwrtRulesDictMapper.java
  18. 19 0
      src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementUndwrtRulesNewMapper.java
  19. 310 0
      src/main/java/com/ydtech/modules/protocols/entity/po/InsFeeOrderNew.java
  20. 161 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsExport.java
  21. 174 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNew.java
  22. 66 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesAttr.java
  23. 58 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesAttrLink.java
  24. 41 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesDict.java
  25. 50 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesDictLabal.java
  26. 50 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesNew.java
  27. 140 0
      src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductCosts.java
  28. 167 0
      src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductCostsSave.java
  29. 9 0
      src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductQueryVo.java
  30. 40 0
      src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementUndwrtRules.java
  31. 9 0
      src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementUndwrtRulesQueryVo.java
  32. 41 0
      src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementUndwrtRulesSave.java
  33. 14 0
      src/main/java/com/ydtech/modules/protocols/service/InsFeeOrderNewService.java
  34. 15 0
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsAttrLinkService.java
  35. 20 0
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsExportService.java
  36. 60 0
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsNewService.java
  37. 14 0
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesAttrLinkService.java
  38. 40 0
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesAttrService.java
  39. 15 0
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesDictLabalService.java
  40. 22 0
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesDictService.java
  41. 45 0
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesNewService.java
  42. 22 0
      src/main/java/com/ydtech/modules/protocols/service/impl/InsFeeOrderNewServiceImpl.java
  43. 28 0
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsAttrLinkServiceImpl.java
  44. 36 0
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsExportServiceImpl.java
  45. 384 0
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java
  46. 21 0
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesAttrLinkServiceImpl.java
  47. 69 0
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesAttrServiceImpl.java
  48. 24 0
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesDictLabalServiceImpl.java
  49. 54 0
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesDictServiceImpl.java
  50. 222 0
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesNewServiceImpl.java

+ 6 - 0
src/main/java/com/ydtech/config/SwaggerConfig.java

@@ -80,6 +80,12 @@ public class SwaggerConfig {
         return buildDocket("protocol");
     }
 
+    @Bean(value = "protocolsApi")
+    @Order(value = 8)
+    public Docket protocolsApi() {
+        return buildDocket("protocols");
+    }
+
     @Bean(value = "demoApi")
     @Order(value = 9)
     public Docket baseDemoApi() {

+ 0 - 1
src/main/java/com/ydtech/modules/esm/service/EsmRetailService.java

@@ -4,7 +4,6 @@ package com.ydtech.modules.esm.service;
 import com.ydtech.modules.esm.dao.EsmRetailDao;
 
 public interface EsmRetailService extends EsmRetailDao {
-
 }
 
 

+ 341 - 0
src/main/java/com/ydtech/modules/fee/dto/vo/RuleAttrMappingVo.java

@@ -0,0 +1,341 @@
+package com.ydtech.modules.fee.dto.vo;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ydtech.constants.enums.InsurKind;
+import com.ydtech.modules.ins.model.vo.*;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+*@author: tz
+*@description: 规则属性映射费用因子Vo
+*@create: 2024-2-28 08:35:57
+*/
+@Data
+public class RuleAttrMappingVo {
+    @ApiModelProperty(value = "因子属性Code")
+    private String attrCode;
+
+    @ApiModelProperty(value = "值")
+    private String value;
+
+    public RuleAttrMappingVo(String attrCode, String value) {
+        this.attrCode = attrCode;
+        this.value = value;
+    }
+
+    public static List<RuleAttrMappingVo> getRuleAttrMappingVoList(BaseQuoteInfoVo baseQuoteInfoVo, QuoteRespVo quoteRespVo) {
+        List<RuleAttrMappingVo> ruleAttrMappingVoList = new ArrayList<>();
+        CarInfoVo carInfo = baseQuoteInfoVo.getCarInfo();
+        //车牌号
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("LicenseNo", carInfo.getLicenseNo()));
+        //品牌型号
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("BrandandModel", carInfo.getCarBrand()));
+        //座位数
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("NumberofSeats", carInfo.getSeatCount()));
+        //新车购置价
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("NumberofSeats", carInfo.getPurchasePrice()));
+        //车辆用途
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleUsage", carInfo.getVehicleclass()));
+        //车辆种类
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleType", carInfo.getCimodelclass()));
+        //核定载质量
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("AuthorizedLoadWeight", carInfo.getLimitLoad()));
+        //整备质量
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CurbWeight", carInfo.getVehicleweight()));
+        //能源类型
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("EnergyType", carInfo.getEnergyType()));
+        //注册日期
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("RegistrationDate", carInfo.getRegisterDate()));
+        //是否过户
+//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("WhetherTransferred", carInfo.getTransferFlag()));
+        //是否新车
+//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("WhetherNewCar", carInfo.getNoLicenseFlag()));
+        //发证日期
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("DateofIssuance", carInfo.getIssueDate()));
+        //车长
+//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleLength", carInfo.getCarLength()));
+        //转续保
+//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("RenewalofInsurance", carInfo.getRenewalFlag()));
+
+        CustomerInfoVo ownerInfo = baseQuoteInfoVo.getOwnerInfo();
+        //车主 证件号码(前6位)
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersIDNumber", ownerInfo.getIdentifyNumber().substring(0, 6)));
+        //车主 年龄
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersAge", ownerInfo.getAge()));
+        //车主 性别
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersSex", ownerInfo.getGender()));
+        //车主 姓名
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnerName", ownerInfo.getName()));
+
+        CustomerInfoVo policyHolderInfo = baseQuoteInfoVo.getPolicyHolderInfo();
+        //投保人 证件号码(前6位)
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("PolicyholdersIDNumber", policyHolderInfo.getIdentifyNumber().substring(0, 6)));
+        //投保人 年龄
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("PolicyholdersAge", policyHolderInfo.getAge()));
+        //投保人 性别
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("PolicyholdersSex", policyHolderInfo.getGender()));
+
+        CustomerInfoVo insuredPersonInfo = baseQuoteInfoVo.getInsuredPersonInfo();
+        //被保人 证件号码(前6位)
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredIDNumber", insuredPersonInfo.getIdentifyNumber().substring(0, 6)));
+        //被保人 年龄
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredAge", insuredPersonInfo.getAge()));
+        //被保人 性别
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredSex", insuredPersonInfo.getGender()));
+
+        //险别信息
+        List<KindInfoVo> kindInfoVos = baseQuoteInfoVo.getKindList();
+        kindInfoVos.forEach(kindInfoVo -> {
+            //机动车损失险
+            if(InsurKind.A.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("MotorVehicleDamageInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //第三者责任险
+            if(InsurKind.B.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("ThirdPartyLiabilityInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //司机责任险
+            if(InsurKind.D3.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("DriverLiabilityInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //乘客责任险
+            if(InsurKind.D4.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerLiabilityInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //车身划痕险
+            if(InsurKind.L.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarScratchInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //绝对免赔率特约险(车损)
+            if(InsurKind.MJ1.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleDamageAbsoluteDeductibleSpecialInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //绝对免赔率特约险(三者)
+            if(InsurKind.MJ2.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("ThirdAbsoluteDeductibleSpecialInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //绝对免赔率特约险(司机)
+            if(InsurKind.MJ3.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("DriverAbsoluteDeductibleSpecialInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //绝对免赔率特约险(乘客)
+            if(InsurKind.MJ4.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerAbsoluteDeductibleSpecialInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //附加医保-三者
+            if(InsurKind.SY_FJ_YBW1.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("ThirdPartyAdditionalMedicalInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //附加医保-座位险(乘客)
+            if(InsurKind.SY_FJ_YBW2.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerAdditionalMedicalInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //附加医保-座位险(司机)
+            if(InsurKind.SY_FJ_YBW3.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("DriverAdditionalMedicalInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //法定节假日限额翻倍险
+            if(InsurKind.BD.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("LegalHolidayLimitDoublingInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //道路救援服务特约条款
+            if(InsurKind.TY1.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("RoadsideAssistanceServiceSpecialClause", String.valueOf(kindInfoVo.getServiceTimes())));
+            //车辆安全检测特约条款
+            if(InsurKind.TY2.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleSafetyInspectionSpecialClause", String.valueOf(kindInfoVo.getServiceTimes())));
+            //代为驾驶服务特约条款
+            if(InsurKind.TY3.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("SubstituteDrivingServiceSpecialClause", String.valueOf(kindInfoVo.getServiceTimes())));
+            //代为送检服务特约条款
+            if(InsurKind.TY4.equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("SubstituteInspectionServiceSpecialClause", String.valueOf(kindInfoVo.getServiceTimes())));
+        });
+        //交强保费
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryTrafficAccidentLiabilityInsurancePremium", String.valueOf(quoteRespVo.getJqPremium())));
+        //车船税
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleandVesselTax", String.valueOf(quoteRespVo.getTaxAmount())));
+        //非车险
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("NonMotorInsurance", String.valueOf(quoteRespVo.getJyPremium())));
+        //总折扣率
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("TotalDiscountRate", String.valueOf(quoteRespVo.getTotalAdjustRate())));
+        //交强折扣
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceDiscount", String.valueOf(quoteRespVo.getJqAdjustRate())));
+        //商业折扣
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialDiscount", String.valueOf(quoteRespVo.getSyAdjustRate())));
+        //数值型总评分
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("NumericalOverallRating", String.valueOf(quoteRespVo.getILogPreUdwMess())));
+        //交强评分
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceRating", String.valueOf(quoteRespVo.getJqScore())));
+        //商业评分
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialRating", String.valueOf(quoteRespVo.getSyScore())));
+        //交强赔付率
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsurancePayoutRate", String.valueOf(quoteRespVo.getJqLossRation())));
+        //商业赔付率
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialPayoutRate", String.valueOf(quoteRespVo.getSyLossRation())));
+        //总赔付率
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("TotalPayoutRate", String.valueOf(quoteRespVo.getLossRation())));
+        //真假单交
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("AuthenticAndFakeOrdersExchange", quoteRespVo.getIszdj()));
+        //出险次数
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("NumberOfClaims", quoteRespVo.getAccidentInfoStr()));
+        //太平的分区
+//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("PeacefulDistrict", quoteRespVo.getExtendInfo()));
+        return ruleAttrMappingVoList;
+    }
+
+
+    public static List<RuleAttrMappingVo> getRuleAttrMappingVoList(InsAreaCompany insAreaCompany,InsOrders insOrders) {
+        List<RuleAttrMappingVo> ruleAttrMappingVoList = new ArrayList<>();
+        CarInfoVo carInfo = insOrders.getCarinfo().toJavaObject(CarInfoVo.class);
+        //车牌号
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("LicenseNo", carInfo.getLicenseNo()));
+        //品牌型号
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("BrandandModel", carInfo.getCarBrand()));
+        //座位数
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerCarSeatingCapacity", carInfo.getSeatCount()));
+        //新车购置价
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("PurchasePriceofNewVehicle", carInfo.getPurchasePrice()));
+        //车辆用途
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleUsage", carInfo.getVehicleclass()));
+        //车辆种类
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleType", carInfo.getCimodelclass()));
+        //核定载质量
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("AuthorizedLoadWeight", carInfo.getLimitLoad()));
+        //整备质量
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CurbWeight", carInfo.getVehicleweight()));
+        //能源类型
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("NewEnergy", carInfo.getEnergyType()));
+        //注册日期
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("RegistrationDate", carInfo.getRegisterDate()));
+        //是否过户
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("TransferVehicle", carInfo.isTransferFlag() ? "1" : "0"));
+        //是否新车
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("NewAndOldCars", carInfo.isNoLicenseFlag() ? "1" : "0"));
+        //发证日期
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("DateofIssuance", carInfo.getIssueDate()));
+        //车长
+//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleLength", carInfo.getCarLength()));
+        //转续保
+//       ruleAttrMappingVoList.add(new RuleAttrMappingVo("RenewalofInsurance", carInfo.isTransferFlagBi() ? "1"));
+
+
+        CustomerInfoVo ownerInfo = insOrders.getOwnerinfo().toJavaObject(CustomerInfoVo.class);
+        //车主 证件号码(前6位)
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersIDNumber", ownerInfo.getIdentifyNumber().substring(0, 6)));
+        //车主 年龄
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersAge", ownerInfo.getAge()));
+        //车主 性别
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersSex", ownerInfo.getGender()));
+        //车主 姓名
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnerName", ownerInfo.getName()));
+
+        CustomerInfoVo policyHolderInfo = insOrders.getApplyinfo().toJavaObject(CustomerInfoVo.class);
+        //投保人 证件号码(前6位)
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("PolicyholdersIDNumber", policyHolderInfo.getIdentifyNumber().substring(0, 6)));
+        //投保人 年龄
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("PolicyholdersAge", policyHolderInfo.getAge()));
+        //投保人 性别
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("PolicyholdersSex", policyHolderInfo.getGender()));
+
+        CustomerInfoVo insuredPersonInfo = insOrders.getInsureinfo().toJavaObject(CustomerInfoVo.class);
+        //被保人 证件号码(前6位)
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredIDNumber", insuredPersonInfo.getIdentifyNumber().substring(0, 6)));
+        //被保人 年龄
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredAge", insuredPersonInfo.getAge()));
+        //被保人 性别
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredSex", insuredPersonInfo.getGender()));
+
+        List<KindInfoVo> kindInfoVos = insOrders.getKing().toJavaList(KindInfoVo.class);
+        //险别信息
+        kindInfoVos.forEach(kindInfoVo -> {
+            //机动车损失险
+            if(InsurKind.A.getCode().equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("MotorVehicleDamageInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //第三者责任险
+            if(InsurKind.B.getCode().equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("ThirdPartyLiabilityInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //司机责任险
+            if(InsurKind.D3.getCode().equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("DriverLiabilityInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //乘客责任险
+            if(InsurKind.D4.getCode().equals(kindInfoVo.getKindCode()))
+                ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerLiabilityInsurance", String.valueOf(kindInfoVo.getAmount())));
+            //车身划痕险
+            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.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.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_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.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.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.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("VehicleandVesselTax", String.valueOf(insAreaCompany.getTaxamount())));
+        //非车险
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("NonMotorInsurance", String.valueOf(insAreaCompany.getJypremium())));
+        //总折扣率
+//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("TotalDiscountRate", String.valueOf(insAreaCompany.())));
+        //交强折扣
+//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceDiscount", String.valueOf(quoteRespVo.getJqAdjustRate())));
+        //商业折扣
+//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialDiscount", String.valueOf(quoteRespVo.getSyAdjustRate())));
+        //数值型总评分
+        Pattern pattern = Pattern.compile("[0-9]*");
+        if(pattern.matcher(insAreaCompany.getScore()).matches())
+        {
+            //数值型评分
+            ruleAttrMappingVoList.add(new RuleAttrMappingVo("NumericalOverallRating", String.valueOf(insAreaCompany.getScore())));
+        }else{
+            //字母型评分
+            ruleAttrMappingVoList.add(new RuleAttrMappingVo("CharacterBasedRating", String.valueOf(insAreaCompany.getScore())));
+        }
+        //交强评分
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceRating", String.valueOf(insAreaCompany.getJqScore())));
+        //商业评分
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialRating", String.valueOf(insAreaCompany.getSyScore())));
+        //交强赔付率
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsurancePayoutRate", String.valueOf(insAreaCompany.getJqLossRation())));
+        //商业赔付率
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialPayoutRate", String.valueOf(insAreaCompany.getSyLossRation())));
+        //总赔付率
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("TotalPayoutRate", String.valueOf(insAreaCompany.getLossRation())));
+        //真假单交
+//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("AuthenticAndFakeOrdersExchange", insAreaCompany.getIszdj()));
+        //出险次数
+//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("NumberOfClaims", insAreaCompany.getAccidentInfoStr()));
+        //太平的分区
+//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("PeacefulDistrict", quoteRespVo.getExtendInfo()));
+        return ruleAttrMappingVoList;
+    }
+}

+ 66 - 0
src/main/java/com/ydtech/modules/fee/service/FeeRuleSchemeNewService.java

@@ -0,0 +1,66 @@
+package com.ydtech.modules.fee.service;
+
+
+import com.ydtech.modules.ins.model.vo.QuoteRespVo;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
+import com.ydtech.modules.order.entity.vo.QueryOrderFeeResultVo;
+import com.ydtech.modules.order.entity.vo.QueryOrderFeeVo;
+
+import java.util.List;
+
+/**
+ * 该类中只要包含费用的一些相关接口
+ * 跟单费用的获取、跟单费用的拆分等
+ */
+public interface FeeRuleSchemeNewService {
+
+    /**
+     * 总处理费用匹配方法
+     * @param quoteInfoVo
+     * @param quoteRespVo
+     * @param agreementId
+     * @param businessNo
+     */
+//    public void dealFeeOrderInfo(BaseQuoteInfoVo quoteInfoVo, QuoteRespVo quoteRespVo, String agreementId,String businessNo);
+
+    /**
+     * 查询费用明细
+     * @param companyId
+     * @return
+     */
+    public QueryOrderFeeVo queryFeeOrderInfo(String companyId);
+
+    public List<QueryOrderFeeResultVo> convertOrderFeeVoData(QueryOrderFeeVo orderFeeVo);
+
+    /**
+     * 比较和更新总费用比例
+     * @param insOrderNo
+     * @param jqCostsProportionStr
+     * @param syCostsProportionStr
+     */
+    void compareAndUpdateFeeOrderInfo(String insOrderNo ,String jqCostsProportionStr,String syCostsProportionStr,String dealUser);
+
+
+    /**
+     * 查找匹配的费用因子
+     * @param insAreaCompany
+     * @param insOrders
+     */
+    void verificationCostFactor(InsAreaCompany insAreaCompany, InsOrders insOrders);
+
+    /**
+     * 查找匹配承保规则的因子
+     * @param insAreaCompany
+     * @param insOrders
+     */
+    void verificationRuleFactor(InsAreaCompany insAreaCompany, InsOrders insOrders);
+
+
+    /**
+     * 计算费用因子
+     * @param costsId
+     */
+    void calcCosts(String costsId,InsAreaCompany insAreaCOmpany);
+}

+ 698 - 0
src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceNewImpl.java

@@ -0,0 +1,698 @@
+package com.ydtech.modules.fee.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ydtech.constants.enums.dict.insurance.EnergyType;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.service.SysDeptService;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.esm.model.EsmRetail;
+import com.ydtech.modules.esm.service.EsmRetailService;
+import com.ydtech.modules.fee.dto.vo.RuleAttrMappingVo;
+import com.ydtech.modules.fee.service.FeeRuleSchemeNewService;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.vo.*;
+import com.ydtech.modules.order.service.InsOrdersService;
+import com.ydtech.modules.protocol.service.*;
+import com.ydtech.modules.protocols.entity.po.*;
+import com.ydtech.modules.protocols.entity.vo.AgreementProductCosts;
+import com.ydtech.modules.protocols.service.*;
+import com.ydtech.utils.idgen.IdGenerate;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+*@author: tz
+*@description: 费用接口中相关功能的实现类
+*@create: 2024-3-1 11:45:33
+*/
+@Service
+public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
+    @Resource
+    private InsOrdersService insOrdersService;
+
+    @Resource
+    private PtlAgreementProductCostsNewService ptlAgreementProductCostsNewService;
+
+    @Resource
+    private PtlAgreementUndwrtRulesAttrService ptlAgreementUndwrtRulesAttrService;
+
+    @Resource
+    private PtlAgreementProductCostsExportService ptlAgreementProductCostsExportService;
+
+    @Resource
+    private PtlAgreementProductCostsAttrLinkService ptlAgreementProductCostsAttrLinkService;
+
+    @Resource
+    private PtlAgreementUndwrtRulesNewService ptlAgreementUndwrtRulesNewService;
+    @Resource
+    private SysUserService sysUserService;
+
+    @Resource
+    private EsmRetailService esmRetailService;
+
+    @Resource
+    private InsFeeOrderNewService insFeeOrderNewService;
+
+
+    @Override
+    public QueryOrderFeeVo queryFeeOrderInfo(String companyId) {
+        return null;
+    }
+
+    @Override
+    public List<QueryOrderFeeResultVo> convertOrderFeeVoData(QueryOrderFeeVo orderFeeVo) {
+        return null;
+    }
+
+    @Override
+    public void compareAndUpdateFeeOrderInfo(String insOrderNo, String jqCostsProportionStr, String syCostsProportionStr, String dealUser) {
+
+    }
+
+    /**
+     * 校验费用因子
+     */
+    @Override
+    public void verificationCostFactor(InsAreaCompany insAreaCompany,InsOrders insOrders){
+
+        List<AgreementProductCosts> agreementProductCosts = ptlAgreementProductCostsNewService.costsGetList(insAreaCompany.getAgreementId(),insOrders.getProductid());
+        if(agreementProductCosts == null || agreementProductCosts.size() == 0){
+            throw new SystemException("协议费用因子为空");
+        }
+        //按优先级进行排序
+        Collections.sort(agreementProductCosts, Comparator.comparingInt(AgreementProductCosts::getPriorityLevel).reversed());
+        //遍历费用因子
+        String costsId = verificationCosts(agreementProductCosts, insAreaCompany,insOrders);
+        calcCosts(costsId,insAreaCompany);
+    }
+
+    /**
+     * 校验承保规则
+     * @param insAreaCompany
+     * @param insOrders
+     */
+    @Override
+    public void verificationRuleFactor(InsAreaCompany insAreaCompany, InsOrders insOrders) {
+
+
+        List<PtlAgreementUndwrtRulesNew> ptlAgreementUndwrtRules = ptlAgreementUndwrtRulesNewService.rulesList(insAreaCompany.getAgreementId());
+        verificationRules(ptlAgreementUndwrtRules, insAreaCompany,insOrders);
+    }
+
+    /**
+     * 计算费用
+     * @param costsId
+     * @param insAreaCompany
+     */
+    @Override
+    public void calcCosts(String costsId,InsAreaCompany insAreaCompany) {
+        //税比例 固定1.06
+        BigDecimal taxRadio = new BigDecimal("1.06");
+        //查找入口与出口费用比例
+        //入口配置
+        PtlAgreementProductCostsNew ptlAgreementProductCostsNew = ptlAgreementProductCostsNewService.getById(costsId);
+        //出口配置
+        PtlAgreementProductCostsExport ptlAgreementProductCostsExport = ptlAgreementProductCostsExportService.getOne(new LambdaQueryWrapper<PtlAgreementProductCostsExport>().eq(PtlAgreementProductCostsExport::getCostsId, costsId));
+        InsFeeOrderNew insFeeOrderNew = new InsFeeOrderNew();
+        insFeeOrderNew.setId(IdGenerate.nextId());
+        insFeeOrderNew.setAgreementId(ptlAgreementProductCostsNew.getAgreementId());
+        insFeeOrderNew.setInsOrderNo(insAreaCompany.getId());
+        insFeeOrderNew.setJqPremium(insAreaCompany.getJqpremium());
+        insFeeOrderNew.setSyPremium(insAreaCompany.getSypremium());
+        insFeeOrderNew.setNoPremium(insAreaCompany.getJypremium());
+        //不含税
+        insFeeOrderNew.setJqNoTaxPremium(insAreaCompany.getJqpremium().divide(taxRadio,2));
+        insFeeOrderNew.setSyNoTaxPremium(insAreaCompany.getSypremium().divide(taxRadio,2));
+        insFeeOrderNew.setNoNoTaxPremium(insAreaCompany.getJypremium().divide(taxRadio,2));
+        //计算入口费用
+
+        //交强险总费用比例 + 加投比例
+        insFeeOrderNew.setJqCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getJqCostsProportion()));
+        BigDecimal jqCostsProportion = new BigDecimal(ptlAgreementProductCostsNew.getJqCostsProportion());
+        jqCostsProportion = isContainNonCar(insAreaCompany) ?
+                jqCostsProportion.add(new BigDecimal(ptlAgreementProductCostsNew.getJqCostsProportionAddInvsestment())).divide(new BigDecimal("100")) :
+                jqCostsProportion.divide(new BigDecimal("100"));
+        insFeeOrderNew.setJqCostsPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(jqCostsProportion));
+
+        //商业险总费用比例 + 加投比例
+        insFeeOrderNew.setSyCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getSyCostsProportion()));
+        BigDecimal syCostsProportion = new BigDecimal(ptlAgreementProductCostsNew.getSyCostsProportion());
+        syCostsProportion = isContainNonCar(insAreaCompany) ?
+                syCostsProportion.add(new BigDecimal(ptlAgreementProductCostsNew.getSyCostsProportionAddInvsestment())).divide(new BigDecimal("100")) :
+                syCostsProportion.divide(new BigDecimal("100"));
+        insFeeOrderNew.setSyCostsPremiums(insFeeOrderNew.getSyNoTaxPremium().multiply(syCostsProportion));
+
+        //非车险总费用比例
+        insFeeOrderNew.setNoCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getNoCostsProportion()));
+        insFeeOrderNew.setNoCostsPremiums(insFeeOrderNew.getNoNoTaxPremium().multiply
+                (new BigDecimal(ptlAgreementProductCostsNew.getNoCostsProportion()).divide(new BigDecimal("100"))));
+
+
+
+        //交强监管费比例
+        insFeeOrderNew.setJqSuperviseCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getJqCarCostsProportion()));
+        insFeeOrderNew.setJqSuperviseCostsPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(
+                new BigDecimal(ptlAgreementProductCostsNew.getJqCarCostsProportion()).divide(new BigDecimal("100"))
+        ));
+
+        //商业监管费比例
+        insFeeOrderNew.setSySuperviseCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getSyCarCostsProportion()));
+        insFeeOrderNew.setSySuperviseCostsPremiums(insFeeOrderNew.getSyNoTaxPremium().multiply(
+                new BigDecimal(ptlAgreementProductCostsNew.getSyCarCostsProportion()).divide(new BigDecimal("100"))
+        ));
+
+        //非车监管费比例
+        insFeeOrderNew.setNoSuperviseCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getNoCarCostsProportion()));
+        insFeeOrderNew.setNoSuperviseCostsPremiums(insFeeOrderNew.getNoNoTaxPremium().multiply(
+                new BigDecimal(ptlAgreementProductCostsNew.getNoCarCostsProportion()).divide(new BigDecimal("100"))
+        ));
+
+
+        //交强其他费用比例
+        insFeeOrderNew.setJqOtherCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getJqCarOtherCostsProportion()));
+        insFeeOrderNew.setJqOtherCostsPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(
+                new BigDecimal(ptlAgreementProductCostsNew.getJqCarOtherCostsProportion()).divide(new BigDecimal("100"))
+        ));
+
+        //商业其他费用比例
+        insFeeOrderNew.setSyOtherCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getSyCarOtherCostsProportion()));
+        insFeeOrderNew.setSyOtherCostsPremiums(insFeeOrderNew.getSyNoTaxPremium().multiply(
+                new BigDecimal(ptlAgreementProductCostsNew.getSyCarOtherCostsProportion()).divide(new BigDecimal("100"))
+        ));
+
+        //非车其他费用比例
+        insFeeOrderNew.setNoOtherCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getNoCarOtherCostsProportion()));
+        insFeeOrderNew.setNoOtherCostsPremiums(insFeeOrderNew.getNoNoTaxPremium().multiply(
+                new BigDecimal(ptlAgreementProductCostsNew.getNoCarOtherCostsProportion()).divide(new BigDecimal("100"))
+        ));
+
+
+        //交强加投比例
+        insFeeOrderNew.setJqInvestmentCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getJqCostsProportionAddInvsestment()));
+        insFeeOrderNew.setJqInvestmentCostsPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(
+                new BigDecimal(ptlAgreementProductCostsNew.getJqCostsProportionAddInvsestment()).divide(new BigDecimal("100"))
+        ));
+
+        //商业加投比例
+        insFeeOrderNew.setSyInvestmentCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getSyCostsProportionAddInvsestment()));
+        insFeeOrderNew.setSyInvestmentCostsPremiums(insFeeOrderNew.getSyNoTaxPremium().multiply(
+                new BigDecimal(ptlAgreementProductCostsNew.getSyCostsProportionAddInvsestment()).divide(new BigDecimal("100"))
+        ));
+
+
+        //设置出口费用
+        //交强出口比例
+        insFeeOrderNew.setJqDeptProportionLevel1(new BigDecimal(ptlAgreementProductCostsExport.getJqExportRadioLevel1()));
+        insFeeOrderNew.setJqDeptPremiumsLevel1(
+                insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel1()).divide(new BigDecimal("100"))
+        );
+
+        insFeeOrderNew.setJqDeptProportionLevel2(new BigDecimal(ptlAgreementProductCostsExport.getJqExportRadioLevel2()));
+        insFeeOrderNew.setJqDeptPremiumsLevel2(
+                insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel2()).divide(new BigDecimal("100"))
+        );
+
+        insFeeOrderNew.setJqDeptProportionLevel3(new BigDecimal(ptlAgreementProductCostsExport.getJqExportRadioLevel3()));
+        insFeeOrderNew.setJqDeptPremiumsLevel3(
+                insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel3()).divide(new BigDecimal("100"))
+        );
+
+        insFeeOrderNew.setJqDeptProportionLevel4(new BigDecimal(ptlAgreementProductCostsExport.getJqExportRadioLevel4()));
+        insFeeOrderNew.setJqDeptPremiumsLevel4(
+                insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel4()).divide(new BigDecimal("100"))
+        );
+
+        insFeeOrderNew.setJqDeptProportionLevel5(new BigDecimal(ptlAgreementProductCostsExport.getJqExportRadioLevel5()));
+        insFeeOrderNew.setJqDeptPremiumsLevel5(
+                insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel5()).divide(new BigDecimal("100"))
+        );
+
+        insFeeOrderNew.setJqExportInvestmentProportion(new BigDecimal(ptlAgreementProductCostsExport.getJqExportInvestmentRadio()));
+        insFeeOrderNew.setJqExportInvestmentPremiums(
+                insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqExportInvestmentProportion()).divide(new BigDecimal("100"))
+        );
+
+        //商业出口比例
+        insFeeOrderNew.setSyDeptProportionLevel1(new BigDecimal(ptlAgreementProductCostsExport.getSyExportRadioLevel1()));
+        insFeeOrderNew.setSyDeptPremiumsLevel1(
+                insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel1()).divide(new BigDecimal("100"))
+        );
+
+        insFeeOrderNew.setSyDeptProportionLevel2(new BigDecimal(ptlAgreementProductCostsExport.getSyExportRadioLevel2()));
+        insFeeOrderNew.setSyDeptPremiumsLevel2(
+                insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel2()).divide(new BigDecimal("100"))
+        );
+
+        insFeeOrderNew.setSyDeptProportionLevel3(new BigDecimal(ptlAgreementProductCostsExport.getSyExportRadioLevel3()));
+        insFeeOrderNew.setSyDeptPremiumsLevel3(
+                insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel3()).divide(new BigDecimal("100"))
+        );
+
+
+        insFeeOrderNew.setSyDeptProportionLevel4(new BigDecimal(ptlAgreementProductCostsExport.getSyExportRadioLevel4()));
+        insFeeOrderNew.setSyDeptPremiumsLevel4(
+                insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel4()).divide(new BigDecimal("100"))
+        );
+
+        insFeeOrderNew.setSyDeptProportionLevel5(new BigDecimal(ptlAgreementProductCostsExport.getSyExportRadioLevel5()));
+        insFeeOrderNew.setSyDeptPremiumsLevel5(
+                insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel5()).divide(new BigDecimal("100"))
+        );
+
+        insFeeOrderNew.setSyExportInvestmentProportion(new BigDecimal(ptlAgreementProductCostsExport.getSyExportInvestmentRadio()));
+        insFeeOrderNew.setSyExportInvestmentPremiums(
+                insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyExportInvestmentProportion()).divide(new BigDecimal("100"))
+        );
+
+
+        //非车出口比例
+        insFeeOrderNew.setNoDeptProportionLevel1(new BigDecimal(ptlAgreementProductCostsExport.getNoCarExportRadioLevel1()));
+        insFeeOrderNew.setNoDeptPremiumsLevel1(
+                insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel1()).divide(new BigDecimal("100"))
+        );
+
+        insFeeOrderNew.setNoDeptProportionLevel2(new BigDecimal(ptlAgreementProductCostsExport.getNoCarExportRadioLevel2()));
+        insFeeOrderNew.setNoDeptPremiumsLevel2(
+                insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel2()).divide(new BigDecimal("100"))
+        );
+
+        insFeeOrderNew.setNoDeptProportionLevel3(new BigDecimal(ptlAgreementProductCostsExport.getNoCarExportRadioLevel3()));
+        insFeeOrderNew.setNoDeptPremiumsLevel3(
+                insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel3()).divide(new BigDecimal("100"))
+        );
+
+
+        insFeeOrderNew.setNoDeptProportionLevel4(new BigDecimal(ptlAgreementProductCostsExport.getNoCarExportRadioLevel4()));
+        insFeeOrderNew.setNoDeptPremiumsLevel4(
+                insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel4()).divide(new BigDecimal("100"))
+        );
+
+        insFeeOrderNew.setNoDeptProportionLevel5(new BigDecimal(ptlAgreementProductCostsExport.getNoCarExportRadioLevel5()));
+        insFeeOrderNew.setNoDeptPremiumsLevel5(
+                insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel5()).divide(new BigDecimal("100"))
+        );
+
+
+        //计算分销费用
+        InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
+        SysUser sysUser = sysUserService.findByUserId(insOrders.getUserid());
+        List<EsmRetail> esmRetailList = esmRetailService.selectList(" where t.deptid=? and t.status = '1' ",
+                new Object[]{sysUser.getDeptId()});
+
+        if (esmRetailList != null && !esmRetailList.isEmpty()) {
+            EsmRetail esmRetail = esmRetailList.get(0);
+            if (esmRetail != null) {
+                if(Integer.parseInt(esmRetail.getRetailtype()) >= 3){
+                    insFeeOrderNew.setFirstDetailProportion(new BigDecimal(esmRetail.getDisrate1()));
+                    insFeeOrderNew.setFirstDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate1())).divide(new BigDecimal("100")));
+                }
+                if(Integer.parseInt(esmRetail.getRetailtype()) >= 2){
+                    insFeeOrderNew.setSecondDetailProportion(new BigDecimal(esmRetail.getDisrate2()));
+                    insFeeOrderNew.setSecondDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate2())).divide(new BigDecimal("100")));
+                }
+                if(Integer.parseInt(esmRetail.getRetailtype()) >= 1){
+                    insFeeOrderNew.setThirdDetailProportion(new BigDecimal(esmRetail.getDisrate3()));
+                    insFeeOrderNew.setThirdDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate3())).divide(new BigDecimal("100")));
+                }
+            }
+        }
+
+        insFeeOrderNewService.saveOrUpdate(insFeeOrderNew);
+
+    }
+
+
+    /**
+     * 判断是否包含非车险
+     * @param insAreaCompany
+     * @return
+     */
+    private boolean isContainNonCar(InsAreaCompany insAreaCompany){
+        if(insAreaCompany.getCrossInsurance() != null && insAreaCompany.getJypremium().equals(BigDecimal.ZERO)){
+            return false;
+        }
+        return true;
+    }
+
+
+    /**
+     * 匹配费用因子
+     * @param agreementProductCosts
+     * @param insAreaCompany
+     * @param insOrders
+     * @return
+     */
+    private String verificationCosts(List<AgreementProductCosts> agreementProductCosts,InsAreaCompany insAreaCompany,InsOrders insOrders){
+        //匹配费用因子
+        //获取所有费用属性
+        List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        //获取所有费用属性关联
+        List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insAreaCompany, insOrders);
+
+        List<AgreementProductCosts> filterAgreementProductCosts = new ArrayList<>();
+
+        boolean isNoCar = false;
+        //查找是否有强制非车因子
+        for(int i=0;i<agreementProductCosts.size();i++) {
+            PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink =
+                    agreementProductCosts.get(i).getCostsAttrLinks().stream().filter(x -> x.getAttrCode().equals("IsNonMotorInsurance")).findFirst().orElse(null);
+
+            if(!Objects.isNull(ptlAgreementProductCostsAttrLink)){
+                if(ptlAgreementProductCostsAttrLink.getMin().equals("1")){
+                    //只走强制非车的费用因子
+                    AgreementProductCosts productCosts = agreementProductCosts.get(i);
+                    filterAgreementProductCosts.add(productCosts);
+                    isNoCar = true;
+                }
+
+            }
+        }
+        if(filterAgreementProductCosts.isEmpty()){
+            filterAgreementProductCosts = agreementProductCosts;
+        }
+        //是否强制走非车
+        if(isNoCar) {
+            if(judgementsIsNoCar(filterAgreementProductCosts.get(0).getCostsAttrLinks(),undwrtRulesAttrList,ruleAttrMappingVoList)){
+                return filterAgreementProductCosts.get(0).getId();
+            }
+        }else{
+            for (int i = 0; i < filterAgreementProductCosts.size(); i++) {
+                //判断是否匹配
+                if (judgements(filterAgreementProductCosts.get(i).getCostsAttrLinks(), undwrtRulesAttrList, ruleAttrMappingVoList)) {
+                    //返回 费用id   如果需要匹配非车的情况  将返回值返回list 后赛选
+                    return filterAgreementProductCosts.get(i).getId();
+                }
+            }
+        }
+        throw new SystemException("费用因子匹配失败");
+    }
+
+
+    private boolean verificationRules(List<PtlAgreementUndwrtRulesNew> ptlAgreementUndwrtRulesNews,InsAreaCompany insAreaCompany,InsOrders insOrders){
+        //匹配费用因子
+        //获取所有费用属性
+        List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        //获取所有费用属性关联
+        List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insAreaCompany, insOrders);
+
+
+        for (int i = 0; i < ptlAgreementUndwrtRulesNews.size(); i++) {
+            //判断是否匹配
+            if (judgementsRules(ptlAgreementUndwrtRulesNews.get(i).getRulesAttrList(), undwrtRulesAttrList, ruleAttrMappingVoList)) {
+                //返回 费用id   如果需要匹配非车的情况  将返回值返回list 后赛选
+                return true;
+            }
+        }
+        throw new SystemException("承保规则校验失败");
+    }
+
+    /**
+     * 费用因子的对比
+     * @param ptlAgreementProductCostsAttrLinks    费用因子范围规则
+     * @param rulesAttrs            费用因子属性
+     * @param ruleAttrMappingVoList 表单提交的值
+     * @return
+     */
+    private boolean judgements(List<PtlAgreementProductCostsAttrLink> ptlAgreementProductCostsAttrLinks,
+                               List<PtlAgreementUndwrtRulesAttr> rulesAttrs, List<RuleAttrMappingVo> ruleAttrMappingVoList){
+        boolean useFlag = true;
+
+        for(int i=0;i<ptlAgreementProductCostsAttrLinks.size();i++){
+            int finalI = i;
+
+            //查找规则中的 传值属性
+            RuleAttrMappingVo ruleAttrMappingVo = ruleAttrMappingVoList.stream().filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode())).findFirst().orElse(null);
+            //如果查找不到 传值属性 直接费用对比失败
+            if(ruleAttrMappingVo == null)
+                return false;
+            //查找 费用因子规则
+            PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = rulesAttrs.stream().filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode())).findFirst().get();
+            useFlag = attrEqual(ptlAgreementProductCostsAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue());
+            if(!useFlag)
+                return false;
+        }
+        return useFlag;
+    }
+
+
+    /**
+     * 承保规则因子的对比
+     * @param ptlAgreementUndwrtRulesAttrLinks
+     * @param rulesAttrs
+     * @param ruleAttrMappingVoList
+     * @return
+     */
+    private boolean judgementsRules(List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesAttrLinks,
+                               List<PtlAgreementUndwrtRulesAttr> rulesAttrs, List<RuleAttrMappingVo> ruleAttrMappingVoList){
+        boolean useFlag = true;
+
+        for(int i=0;i<ptlAgreementUndwrtRulesAttrLinks.size();i++){
+            int finalI = i;
+
+            //查找规则中的 传值属性
+            RuleAttrMappingVo ruleAttrMappingVo = ruleAttrMappingVoList.stream().filter(x -> x.getAttrCode().equals(ptlAgreementUndwrtRulesAttrLinks.get(finalI).getAttrCode())).findFirst().orElse(null);
+            //如果查找不到 传值属性 直接费用对比失败
+            if(ruleAttrMappingVo == null)
+                continue;
+            //查找 费用因子规则
+            PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = rulesAttrs.stream().filter(x -> x.getAttrCode().equals(ptlAgreementUndwrtRulesAttrLinks.get(finalI).getAttrCode())).findFirst().get();
+            useFlag = attrEqual(ptlAgreementUndwrtRulesAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue());
+            if(!useFlag)
+                return false;
+        }
+        return useFlag;
+    }
+
+    /**
+     * 费用因子的对比 强制非车险
+     * @param ptlAgreementProductCostsAttrLinks    费用因子范围规则
+     * @param rulesAttrs            费用因子属性
+     * @param ruleAttrMappingVoList 表单提交的值
+     * @return
+     */
+    private boolean judgementsIsNoCar(List<PtlAgreementProductCostsAttrLink> ptlAgreementProductCostsAttrLinks,
+                               List<PtlAgreementUndwrtRulesAttr> rulesAttrs, List<RuleAttrMappingVo> ruleAttrMappingVoList){
+        boolean useFlag = true;
+
+        for(int i=0;i<ptlAgreementProductCostsAttrLinks.size();i++){
+            int finalI = i;
+            //查找规则中的 传值属性
+            RuleAttrMappingVo ruleAttrMappingVo = ruleAttrMappingVoList.stream().filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode())).findFirst().orElse(null);
+            //如果是强制非车险
+            if(ptlAgreementProductCostsAttrLinks.get(i).getAttrCode().equals("IsNonMotorInsurance"))
+                continue;
+            //如果查找不到 传值属性 直接费用对比失败
+            if(ruleAttrMappingVo == null)
+                return false;
+            //查找 费用因子规则
+            PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = rulesAttrs.stream().filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode())).findFirst().get();
+            useFlag = attrEqual(ptlAgreementProductCostsAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue());
+            if(!useFlag)
+                return false;
+        }
+        return useFlag;
+    }
+
+
+    /**
+     * 属性比较 返回 是否匹配
+     * @param ptlAgreementProductCostsAttrLink
+     * @param ptlAgreementUndwrtRulesAttr
+     * @param value
+     * @return
+     */
+    private boolean attrEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink,PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, String value){
+        if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")){
+            return checkBoxEqual(ptlAgreementProductCostsAttrLink,value);
+        }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("inputNumber")){
+            return inputNumberEqual(ptlAgreementProductCostsAttrLink,value);
+        }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("input")){
+            return inputTextEqual(ptlAgreementProductCostsAttrLink,value);
+        }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("select")){
+            return selectEqual(ptlAgreementProductCostsAttrLink,value);
+        }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio")){
+            return radioEqual(ptlAgreementProductCostsAttrLink,value);
+        }
+        return false;
+    }
+
+    private boolean attrEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink,PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, String value){
+        if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")){
+            return checkBoxEqual(ptlAgreementUndwrtRulesAttrLink,value);
+        }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("inputNumber")){
+            return inputNumberEqual(ptlAgreementUndwrtRulesAttrLink,value);
+        }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("input")){
+            return inputTextEqual(ptlAgreementUndwrtRulesAttrLink,value);
+        }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("select")){
+            return selectEqual(ptlAgreementUndwrtRulesAttrLink,value);
+        }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio")){
+            return radioEqual(ptlAgreementUndwrtRulesAttrLink,value);
+        }
+        return false;
+    }
+
+    /**
+     * 属性为多选判断
+     * @param ptlAgreementProductCostsAttrLink
+     * @param value
+     * @return
+     */
+    private boolean checkBoxEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){
+        if(ptlAgreementProductCostsAttrLink.getMin().contains(value)){
+            return true;
+        }
+        return false;
+    }
+
+    private boolean checkBoxEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){
+        if(ptlAgreementUndwrtRulesAttrLink.getMin().contains(value)){
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 属性为数值型判断
+     * @param ptlAgreementProductCostsAttrLink
+     * @param value
+     * @return
+     */
+    private boolean inputNumberEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){
+        double v = Double.parseDouble(value);
+        //统一处理数值
+        if("1".equals(ptlAgreementProductCostsAttrLink.getOperator())){
+            if(Integer.parseInt(ptlAgreementProductCostsAttrLink.getMin()) <= v &&
+                    Double.parseDouble(ptlAgreementProductCostsAttrLink.getMax()) >= v){
+                return true;
+            }
+        }else if("2".equals(ptlAgreementProductCostsAttrLink.getOperator())){
+            if(Double.parseDouble(ptlAgreementProductCostsAttrLink.getMin()) > v){
+                return true;
+            }
+        }else if("3".equals(ptlAgreementProductCostsAttrLink.getOperator())){
+            if(Double.parseDouble(ptlAgreementProductCostsAttrLink.getMin()) >= v){
+                return true;
+            }
+        }else if("4".equals(ptlAgreementProductCostsAttrLink.getOperator())){
+            if(Double.parseDouble(ptlAgreementProductCostsAttrLink.getMax()) < v){
+                return true;
+            }
+        }else if("5".equals(ptlAgreementProductCostsAttrLink.getOperator())){
+            if(Double.parseDouble(ptlAgreementProductCostsAttrLink.getMax()) <= v){
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean inputNumberEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){
+        double v = Double.parseDouble(value);
+        //统一处理数值
+        if("1".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())){
+            if(Integer.parseInt(ptlAgreementUndwrtRulesAttrLink.getMin()) <= v &&
+                    Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMax()) >= v){
+                return false;
+            }
+        }else if("2".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())){
+            if(Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMin()) > v){
+                return false;
+            }
+        }else if("3".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())){
+            if(Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMin()) >= v){
+                return false;
+            }
+        }else if("4".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())){
+            if(Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMax()) < v){
+                return false;
+            }
+        }else if("5".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())){
+            if(Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMax()) <= v){
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 属性为输入框判断
+     * @param ptlAgreementProductCostsAttrLink
+     * @param value
+     * @return
+     */
+    private boolean inputTextEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){
+        //将值进行分割
+        String[] split = ptlAgreementProductCostsAttrLink.getMin().split(",");
+        AtomicBoolean returnBool = new AtomicBoolean(false);
+        Arrays.stream(split).forEach(x -> {
+            if(x.contains(value)){
+                returnBool.set(true);
+            }
+        });
+        return returnBool.get();
+    }
+
+    private boolean inputTextEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){
+        //将值进行分割
+        String[] split = ptlAgreementUndwrtRulesAttrLink.getMin().split(",");
+        AtomicBoolean returnBool = new AtomicBoolean(true);
+        Arrays.stream(split).forEach(x -> {
+            if(x.contains(value)){
+                returnBool.set(false);
+            }
+        });
+        return returnBool.get();
+    }
+
+    /**
+     * 属性为下拉框判断
+     * @param ptlAgreementProductCostsAttrLink
+     * @param value
+     * @return
+     */
+    private boolean selectEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){
+        if(ptlAgreementProductCostsAttrLink.getMin().contains(value)){
+            return true;
+        }
+        return false;
+    }
+
+    private boolean selectEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){
+        if(ptlAgreementUndwrtRulesAttrLink.getMin().contains(value)){
+            return false;
+        }
+        return true;
+    }
+
+    private boolean radioEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){
+        //新能源判断
+        if("NewEnergy".equals(ptlAgreementProductCostsAttrLink.getAttrCode())){
+            if(EnergyType.isNewEnergy(ptlAgreementProductCostsAttrLink.getMin())){
+                return true;
+            }
+        }else
+        if(ptlAgreementProductCostsAttrLink.getMin().contains(value)){
+            return true;
+        }
+        return false;
+    }
+
+    private boolean radioEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){
+        //新能源判断
+        if("NewEnergy".equals(ptlAgreementUndwrtRulesAttrLink.getAttrCode())){
+            if(EnergyType.isNewEnergy(ptlAgreementUndwrtRulesAttrLink.getMin())){
+                return false;
+            }
+        }else
+        if(ptlAgreementUndwrtRulesAttrLink.getMin().contains(value)){
+            return false;
+        }
+        return true;
+    }
+}

+ 10 - 0
src/main/java/com/ydtech/modules/order/aop/AuditVerification.java

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

+ 65 - 0
src/main/java/com/ydtech/modules/order/aop/aspect/AuditVerificationAspect.java

@@ -0,0 +1,65 @@
+package com.ydtech.modules.order.aop.aspect;
+
+
+import com.ydtech.constants.sys.SystemConstant;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.SysUserRole;
+import com.ydtech.modules.admin.service.SysUserRoleService;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.fee.service.FeeRuleSchemeNewService;
+import com.ydtech.modules.order.components.InsOrdersComponents;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
+import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
+import com.ydtech.modules.order.service.InsAreaCompanyService;
+import com.ydtech.modules.order.service.InsOrdersService;
+import com.ydtech.modules.protocol.service.PtlAgreementDeptService;
+import com.ydtech.modules.protocol.service.impl.TaxSourceServiceImpl;
+import com.ydtech.utils.StringUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+
+@Slf4j
+@Aspect
+@Component
+@RequiredArgsConstructor
+public class AuditVerificationAspect {
+
+    private final PtlAgreementDeptService ptlAgreementDeptService;
+
+    private final SysUserRoleService sysUserRoleService;
+
+    private final InsOrdersComponents insOrdersComponents;
+
+    private final TaxSourceServiceImpl taxSourceService;
+
+    private final FeeRuleSchemeNewService feeRuleSchemeNewService;
+
+    private final InsAreaCompanyService insAreaCompanyService;
+
+    private final InsOrdersService insOrdersService;
+
+    @Before("@annotation(com.ydtech.modules.order.aop.AuditVerification)")
+    public void doBefore(JoinPoint point) {
+        Object[] args = point.getArgs();
+        for (Object arg : args) {
+            //接收保险公司id参数
+            String companyId = arg.toString();
+            InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
+            InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
+            //先进行承保规则判断
+            feeRuleSchemeNewService.verificationRuleFactor(insAreaCompany,insOrders);
+            //再进行费用因子判断
+            feeRuleSchemeNewService.verificationCostFactor(insAreaCompany,insOrders);
+        }
+        throw new SystemException("没有找到费用,核保失败!");
+    }
+
+}

+ 2 - 0
src/main/java/com/ydtech/modules/order/service/impl/DaJiaOrderServiceImpl.java

@@ -293,6 +293,8 @@ public class DaJiaOrderServiceImpl implements DaJiaOrderService {
         LocalDateTime end = start.plusYears(1L);
         if (start.getHour() > 0) {
             newStartDate = DateTimeUtil.format(start, DateTimeUtil.DATETIME_PATTERN);
+            //减去一天
+            end = end.minusDays(1L);
             newEndDate = DateTimeUtil.format(end, DateTimeUtil.DATETIME_PATTERN);
         } else {
             newStartDate = DateTimeUtil.getStartTimeOfDayStr(start, DateTimeUtil.DATETIME_PATTERN);

+ 125 - 0
src/main/java/com/ydtech/modules/protocols/controller/PtlNewAgreementController.java

@@ -0,0 +1,125 @@
+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.PageRequest;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.fee.service.FeeRuleSchemeNewService;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
+import com.ydtech.modules.protocol.entity.vo.PtlAgreementPageVo;
+import com.ydtech.modules.protocol.entity.vo.PtlAgreementProductQueryVo;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesDict;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesDictLabal;
+import com.ydtech.modules.protocols.entity.vo.*;
+import com.ydtech.modules.protocols.service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+*@author: tz
+*@description: 协议controller
+*@create: 2024-2-22 15:44:29
+*/
+@Api(tags = "新版协议")
+@RequestMapping("/plt/new/agreement")
+@RestController
+public class PtlNewAgreementController extends BaseController {
+
+    @Autowired
+    private PtlAgreementUndwrtRulesAttrService ptlAgreementUndwrtRulesAttrService;
+
+    @Autowired
+    private PtlAgreementProductCostsNewService ptlAgreementProductCostsNewService;
+
+    @Autowired
+    private PtlAgreementUndwrtRulesNewService ptlAgreementUndwrtRulesNewService;
+
+    @ApiOperation(value = "协议承保规则属性列表")
+    @GetMapping("/attr/list")
+    public HttpResult<List<PtlAgreementUndwrtRulesAttr>> list() {
+        List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        return HttpResult.ok(undwrtRulesAttrList);
+    }
+
+    @PostMapping("/getProduct")
+    @ApiOperation("查询协议产品费用列表")
+    public PageResult getProduct(@RequestBody AgreementProductQueryVo agreementProductQueryVo) {
+        Page<T> page = buildPageRequest(agreementProductQueryVo.getPageDto());
+        Page<PtlAgreementProductCostsNew> schemeQueryDto = ptlAgreementProductCostsNewService.getByAgreementId(page,agreementProductQueryVo.getAgreementId());
+        return buildPageResponse(schemeQueryDto);
+    }
+
+    @ApiOperation(value = "获取协议费用")
+    @GetMapping("/costs/get")
+    public HttpResult costsGet(String costsId) {
+        List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        AgreementProductCostsSave agreementProductCosts = ptlAgreementProductCostsNewService.costsGet(costsId,undwrtRulesAttrList);
+        return HttpResult.ok(agreementProductCosts);
+    }
+
+    @ApiOperation(value = "添加协议费用")
+    @PostMapping("/costs/add")
+    public HttpResult costsAdd(@RequestBody AgreementProductCosts agreementProductCosts) {
+        return ptlAgreementProductCostsNewService.costsAdd(agreementProductCosts) ? HttpResult.ok("添加协议费用成功") : HttpResult.error("添加协议费用失败");
+    }
+
+    @ApiOperation(value = "更新协议费用")
+    @PostMapping("/costs/update")
+    public HttpResult costsUpdate(@RequestBody AgreementProductCosts agreementProductCosts){
+        return ptlAgreementProductCostsNewService.costsUpdate(agreementProductCosts) ? HttpResult.ok("更新协议费用成功") : HttpResult.error("更新协议费用失败");
+    }
+
+    @ApiOperation(value = "删除协议费用")
+    @PostMapping("/costs/delete")
+    public HttpResult costsDelete(String costsId){
+        return ptlAgreementProductCostsNewService.costsDelete(costsId) ? HttpResult.ok("删除协议费用成功") : HttpResult.error("删除协议费用失败");
+    }
+
+    @ApiOperation(value = "获取承保规则列表")
+    @PostMapping("/undwrt/rules/list")
+    public PageResult getRulesList(@RequestBody AgreementUndwrtRulesQueryVo agreementUndwrtRulesQueryVo){
+
+        Page<T> page = buildPageRequest(agreementUndwrtRulesQueryVo.getPageDto());
+        Page rulesPage = ptlAgreementUndwrtRulesNewService.rulesPage(page,agreementUndwrtRulesQueryVo.getAgreementId());
+        return buildPageResponse(rulesPage);
+    }
+
+    @ApiOperation(value = "获取承保规则")
+    @GetMapping("/undwrt/rules/get")
+    public HttpResult get(String ruleId) {
+        List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        AgreementUndwrtRulesSave agreementUndwrtRulesSave = ptlAgreementUndwrtRulesNewService.rulesGet(ruleId, undwrtRulesAttrList);
+        return HttpResult.ok(agreementUndwrtRulesSave);
+
+    }
+
+    @ApiOperation(value = "添加承保规则")
+    @PostMapping("/undwrt/rules/add")
+    public HttpResult rulesAdd(@RequestBody AgreementUndwrtRules agreementUndwrtRules) {
+        return ptlAgreementUndwrtRulesNewService.rulesAdd(agreementUndwrtRules) ? HttpResult.ok("添加承保规则成功") : HttpResult.error("添加承保规则失败");
+    }
+
+    @ApiOperation(value = "更新承保规则")
+    @PostMapping("/undwrt/rules/update")
+    public HttpResult rulesUpdate(@RequestBody AgreementUndwrtRules agreementUndwrtRules){
+        return ptlAgreementUndwrtRulesNewService.rulesUpdate(agreementUndwrtRules) ? HttpResult.ok("更新承保规则成功") : HttpResult.error("更新承保规则失败");
+    }
+
+    @ApiOperation(value = "删除承保规则")
+    @PostMapping("/undwrt/rules/delete")
+    public HttpResult rulesDelete(String ruleId){
+        return ptlAgreementUndwrtRulesNewService.rulesDelete(ruleId) ? HttpResult.ok("删除承保规则成功") : HttpResult.error("删除承保规则失败");
+    }
+
+}

+ 19 - 0
src/main/java/com/ydtech/modules/protocols/dao/InsFeeOrderNewMapper.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.InsFeeOrderNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
+
+
+/**
+ * @author tz
+ * @description 费用结算的数据库操作Mapper
+ * @createDate 2024-2-22 15:44:29
+ */
+public interface InsFeeOrderNewMapper extends BaseMapper<InsFeeOrderNew> {
+
+}
+
+
+
+

+ 19 - 0
src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementProductCostsAttrLinkMapper.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.PtlAgreementProductCostsNew;
+
+
+/**
+ * @author tz
+ * @description 协议费用的数据库操作Mapper
+ * @createDate 2024-2-22 15:44:29
+ */
+public interface PtlAgreementProductCostsAttrLinkMapper extends BaseMapper<PtlAgreementProductCostsAttrLink> {
+
+}
+
+
+
+

+ 19 - 0
src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementProductCostsExportMapper.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.PtlAgreementProductCostsExport;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+
+
+/**
+ * @author tz
+ * @description 协议费用出口比例Mapper
+ * @createDate 2024-2-22 15:44:29
+ */
+public interface PtlAgreementProductCostsExportMapper extends BaseMapper<PtlAgreementProductCostsExport> {
+
+}
+
+
+
+

+ 19 - 0
src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementProductCostsNewMapper.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.PtlAgreementProductCostsNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
+
+
+/**
+ * @author tz
+ * @description 协议费用的数据库操作Mapper
+ * @createDate 2024-2-22 15:44:29
+ */
+public interface PtlAgreementProductCostsNewMapper extends BaseMapper<PtlAgreementProductCostsNew> {
+
+}
+
+
+
+

+ 19 - 0
src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementUndwrtRulesAttrLinkMapper.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.PtlAgreementUndwrtRulesAttrLink;
+
+
+/**
+ * @author tz
+ * @description 协议承保规则属性关联的数据库操作Mapper
+ * @createDate 2024-2-22 15:44:29
+ */
+public interface PtlAgreementUndwrtRulesAttrLinkMapper extends BaseMapper<PtlAgreementUndwrtRulesAttrLink> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementUndwrtRulesAttrMapper.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.protocols.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
+
+
+/**
+ * @author tz
+ * @description 协议匹配规则属性的数据库操作Mapper
+ * @createDate 2024-2-22 15:44:29
+ */
+public interface PtlAgreementUndwrtRulesAttrMapper extends BaseMapper<PtlAgreementUndwrtRulesAttr> {
+
+}
+
+
+
+

+ 22 - 0
src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementUndwrtRulesDictLabalMapper.java

@@ -0,0 +1,22 @@
+package com.ydtech.modules.protocols.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesDict;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesDictLabal;
+
+import java.util.List;
+
+
+/**
+ * @author tz
+ * @description 协议承保规则字典的数据库操作Mapper
+ * @createDate 2024-2-22 15:44:29
+ */
+public interface PtlAgreementUndwrtRulesDictLabalMapper extends BaseMapper<PtlAgreementUndwrtRulesDictLabal> {
+
+
+}
+
+
+
+

+ 17 - 0
src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementUndwrtRulesDictMapper.java

@@ -0,0 +1,17 @@
+package com.ydtech.modules.protocols.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesDict;
+
+/**
+ * @author tz
+ * @description 协议承保规则字典的数据库操作Mapper
+ * @createDate 2024-2-22 15:44:29
+ */
+public interface PtlAgreementUndwrtRulesDictMapper extends BaseMapper<PtlAgreementUndwrtRulesDict> {
+
+}
+
+
+
+

+ 19 - 0
src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementUndwrtRulesNewMapper.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.PtlAgreementUndwrtRulesNew;
+
+
+/**
+ * @author tz
+ * @description 协议费用的数据库操作Mapper
+ * @createDate 2024-2-22 15:44:29
+ */
+public interface PtlAgreementUndwrtRulesNewMapper extends BaseMapper<PtlAgreementUndwrtRulesNew> {
+
+}
+
+
+
+

+ 310 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/InsFeeOrderNew.java

@@ -0,0 +1,310 @@
+package com.ydtech.modules.protocols.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+*@author: tz
+*@description: 新的费用订单表
+*@create: 2024-2-29 08:36:53
+*/
+
+@TableName(value = "ins_fee_order_new", autoResultMap = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class InsFeeOrderNew {
+    @TableId(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "子订单id")
+    @TableField(value = "ins_order_no")
+    private String insOrderNo;
+
+    @ApiModelProperty(value = "协议id")
+    @TableField(value = "agreement_id")
+    private String agreementId;
+
+    @ApiModelProperty(value = "交强险保费")
+    @TableField(value = "jq_premium")
+    private BigDecimal jqPremium;
+
+    @ApiModelProperty(value = "商业险保费")
+    @TableField(value = "sy_premium")
+    private BigDecimal syPremium;
+
+    @ApiModelProperty(value = "非车险保费")
+    @TableField(value = "no_premium")
+    private BigDecimal noPremium;
+
+    @ApiModelProperty(value = "交强险保费不含税")
+    @TableField(value = "jq_no_tax_premium")
+    private BigDecimal jqNoTaxPremium;
+
+    @ApiModelProperty(value = "商业险保费不含税")
+    @TableField(value = "sy_no_tax_premium")
+    private BigDecimal syNoTaxPremium;
+
+    @ApiModelProperty(value = "非车险保费不含税")
+    @TableField(value = "no_no_tax_premium")
+    private BigDecimal noNoTaxPremium;
+
+    @ApiModelProperty(value = "交强险费用比例")
+    @TableField(value = "jq_costs_proportion")
+    private BigDecimal jqCostsProportion;
+
+    @ApiModelProperty(value = "商业险费用比例")
+    @TableField(value = "sy_costs_proportion")
+    private BigDecimal syCostsProportion;
+
+    @ApiModelProperty(value = "非车险费用比例")
+    @TableField(value = "no_costs_proportion")
+    private BigDecimal noCostsProportion;
+
+    @ApiModelProperty(value = "交强险总费用")
+    @TableField(value = "jq_costs_premiums")
+    private BigDecimal jqCostsPremiums;
+
+    @ApiModelProperty(value = "商业险总费用")
+    @TableField(value = "sy_costs_premiums")
+    private BigDecimal syCostsPremiums;
+
+    @ApiModelProperty(value = "非车险总费用")
+    @TableField(value = "no_costs_premiums")
+    private BigDecimal noCostsPremiums;
+
+    @ApiModelProperty(value = "交强监管费比例")
+    @TableField(value = "jq_supervise_costs_proportion")
+    private BigDecimal jqSuperviseCostsProportion;
+
+    @ApiModelProperty(value = "交强监管费")
+    @TableField(value = "jq_supervise_costs_premiums")
+    private BigDecimal jqSuperviseCostsPremiums;
+
+    @ApiModelProperty(value = "商业监管费比例")
+    @TableField(value = "sy_supervise_costs_proportion")
+    private BigDecimal sySuperviseCostsProportion;
+
+    @ApiModelProperty(value = "商业监管费")
+    @TableField(value = "sy_supervise_costs_premiums")
+    private BigDecimal sySuperviseCostsPremiums;
+
+    @ApiModelProperty(value = "非车监管费比例")
+    @TableField(value = "no_supervise_costs_proportion")
+    private BigDecimal noSuperviseCostsProportion;
+
+    @ApiModelProperty(value = "非车监管费")
+    @TableField(value = "no_supervise_costs_premiums")
+    private BigDecimal noSuperviseCostsPremiums;
+
+    @ApiModelProperty(value = "交强其他费用比例")
+    @TableField(value = "jq_other_costs_proportion")
+    private BigDecimal jqOtherCostsProportion;
+
+    @ApiModelProperty(value = "交强其他费用")
+    @TableField(value = "jq_other_costs_premiums")
+    private BigDecimal jqOtherCostsPremiums;
+
+    @ApiModelProperty(value = "商业其他费用比例")
+    @TableField(value = "sy_other_costs_proportion")
+    private BigDecimal syOtherCostsProportion;
+
+    @ApiModelProperty(value = "商业其他费用")
+    @TableField(value = "sy_other_costs_premiums")
+    private BigDecimal syOtherCostsPremiums;
+
+    @ApiModelProperty(value = "非车其他费用比例")
+    @TableField(value = "no_other_costs_proportion")
+    private BigDecimal noOtherCostsProportion;
+
+    @ApiModelProperty(value = "非车其他费用")
+    @TableField(value = "no_other_costs_premiums")
+    private BigDecimal noOtherCostsPremiums;
+
+    @ApiModelProperty(value = "交强加投费用比例")
+    @TableField(value = "jq_investment_costs_proportion")
+    private BigDecimal jqInvestmentCostsProportion;
+
+    @ApiModelProperty(value = "交强加投费用")
+    @TableField(value = "jq_investment_costs_premiums")
+    private BigDecimal jqInvestmentCostsPremiums;
+
+    @ApiModelProperty(value = "商业加投费用比例")
+    @TableField(value = "sy_investment_costs_proportion")
+    private BigDecimal syInvestmentCostsProportion;
+
+    @ApiModelProperty(value = "商业加投费用")
+    @TableField(value = "sy_investment_costs_premiums")
+    private BigDecimal syInvestmentCostsPremiums;
+
+
+    @ApiModelProperty(value = "交强一级机构管理费比例")
+    @TableField(value = "jq_dept_proportion_level_1")
+    private BigDecimal jqDeptProportionLevel1;
+
+    @ApiModelProperty(value = "交强一级机构管理费")
+    @TableField(value = "jq_dept_premiums_level_1")
+    private BigDecimal jqDeptPremiumsLevel1;
+
+    @ApiModelProperty(value = "交强二级机构管理费比例")
+    @TableField(value = "jq_dept_proportion_level_2")
+    private BigDecimal jqDeptProportionLevel2;
+
+    @ApiModelProperty(value = "交强二级机构管理费")
+    @TableField(value = "jq_dept_premiums_level_2")
+    private BigDecimal jqDeptPremiumsLevel2;
+
+    @ApiModelProperty(value = "交强三级机构管理费比例")
+    @TableField(value = "jq_dept_proportion_level_3")
+    private BigDecimal jqDeptProportionLevel3;
+
+    @ApiModelProperty(value = "交强三级机构管理费")
+    @TableField(value = "jq_dept_premiums_level_3")
+    private BigDecimal jqDeptPremiumsLevel3;
+
+    @ApiModelProperty(value = "交强四级机构管理费比例")
+    @TableField(value = "jq_dept_proportion_level_4")
+    private BigDecimal jqDeptProportionLevel4;
+
+    @ApiModelProperty(value = "交强四级机构管理费")
+    @TableField(value = "jq_dept_premiums_level_4")
+    private BigDecimal jqDeptPremiumsLevel4;
+
+    @ApiModelProperty(value = "交强五级机构管理费比例")
+    @TableField(value = "jq_dept_proportion_level_5")
+    private BigDecimal jqDeptProportionLevel5;
+
+    @ApiModelProperty(value = "交强五级机构管理费")
+    @TableField(value = "jq_dept_premiums_level_5")
+    private BigDecimal jqDeptPremiumsLevel5;
+
+    @ApiModelProperty(value = "交强出口加投比例")
+    @TableField(value = "jq_export_investment_proportion")
+    private BigDecimal jqExportInvestmentProportion;
+
+    @ApiModelProperty(value = "交强出口加投费用")
+    @TableField(value = "jq_export_investment_premiums")
+    private BigDecimal jqExportInvestmentPremiums;
+
+    @ApiModelProperty(value = "商业一级机构管理费比例")
+    @TableField(value = "sy_dept_proportion_level_1")
+    private BigDecimal syDeptProportionLevel1;
+
+    @ApiModelProperty(value = "商业一级机构管理费")
+    @TableField(value = "sy_dept_premiums_level_1")
+    private BigDecimal syDeptPremiumsLevel1;
+
+    @ApiModelProperty(value = "商业二级机构管理费比例")
+    @TableField(value = "sy_dept_proportion_level_2")
+    private BigDecimal syDeptProportionLevel2;
+
+    @ApiModelProperty(value = "商业二级机构管理费")
+    @TableField(value = "sy_dept_premiums_level_2")
+    private BigDecimal syDeptPremiumsLevel2;
+
+    @ApiModelProperty(value = "商业三级机构管理费比例")
+    @TableField(value = "sy_dept_proportion_level_3")
+    private BigDecimal syDeptProportionLevel3;
+
+    @ApiModelProperty(value = "商业三级机构管理费")
+    @TableField(value = "sy_dept_premiums_level_3")
+    private BigDecimal syDeptPremiumsLevel3;
+
+    @ApiModelProperty(value = "商业四级机构管理费比例")
+    @TableField(value = "sy_dept_proportion_level_4")
+    private BigDecimal syDeptProportionLevel4;
+
+    @ApiModelProperty(value = "商业四级机构管理费")
+    @TableField(value = "sy_dept_premiums_level_4")
+    private BigDecimal syDeptPremiumsLevel4;
+
+    @ApiModelProperty(value = "商业五级机构管理费比例")
+    @TableField(value = "sy_dept_proportion_level_5")
+    private BigDecimal syDeptProportionLevel5;
+
+    @ApiModelProperty(value = "商业五级机构管理费")
+    @TableField(value = "sy_dept_premiums_level_5")
+    private BigDecimal syDeptPremiumsLevel5;
+
+    @ApiModelProperty(value = "商业出口加投比例")
+    @TableField(value = "sy_export_investment_proportion")
+    private BigDecimal syExportInvestmentProportion;
+
+    @ApiModelProperty(value = "商业出口加投费用")
+    @TableField(value = "sy_export_investment_premiums")
+    private BigDecimal syExportInvestmentPremiums;
+
+    @ApiModelProperty(value = "非车一级机构管理费比例")
+    @TableField(value = "no_dept_proportion_level_1")
+    private BigDecimal noDeptProportionLevel1;
+
+    @ApiModelProperty(value = "非车一级机构管理费")
+    @TableField(value = "no_dept_premiums_level_1")
+    private BigDecimal noDeptPremiumsLevel1;
+
+    @ApiModelProperty(value = "非车二级机构管理费比例")
+    @TableField(value = "no_dept_proportion_level_2")
+    private BigDecimal noDeptProportionLevel2;
+
+    @ApiModelProperty(value = "非车二级机构管理费")
+    @TableField(value = "no_dept_premiums_level_2")
+    private BigDecimal noDeptPremiumsLevel2;
+
+    @ApiModelProperty(value = "非车三级机构管理费比例")
+    @TableField(value = "no_dept_proportion_level_3")
+    private BigDecimal noDeptProportionLevel3;
+
+    @ApiModelProperty(value = "非车三级机构管理费")
+    @TableField(value = "no_dept_premiums_level_3")
+    private BigDecimal noDeptPremiumsLevel3;
+
+    @ApiModelProperty(value = "非车四级机构管理费比例")
+    @TableField(value = "no_dept_proportion_level_4")
+    private BigDecimal noDeptProportionLevel4;
+
+    @ApiModelProperty(value = "非车四级机构管理费")
+    @TableField(value = "no_dept_premiums_level_4")
+    private BigDecimal noDeptPremiumsLevel4;
+
+    @ApiModelProperty(value = "非车五级机构管理费比例")
+    @TableField(value = "no_dept_proportion_level_5")
+    private BigDecimal noDeptProportionLevel5;
+
+    @ApiModelProperty(value = "非车五级机构管理费")
+    @TableField(value = "no_dept_premiums_level_5")
+    private BigDecimal noDeptPremiumsLevel5;
+
+    @ApiModelProperty(value = "一级分销比例")
+    @TableField(value = "first_detail_proportion")
+    private BigDecimal firstDetailProportion;
+
+    @ApiModelProperty(value = "一级分销费用")
+    @TableField(value = "first_detail_premiums")
+    private BigDecimal firstDetailPremiums;
+
+    @ApiModelProperty(value = "二级分销比例")
+    @TableField(value = "second_detail_proportion")
+    private BigDecimal secondDetailProportion;
+
+    @ApiModelProperty(value = "二级分销费用")
+    @TableField(value = "second_detail_premiums")
+    private BigDecimal secondDetailPremiums;
+
+    @ApiModelProperty(value = "三级分销比例")
+    @TableField(value = "third_detail_proportion")
+    private BigDecimal thirdDetailProportion;
+
+    @ApiModelProperty(value = "三级分销费用")
+    @TableField(value = "third_detail_premiums")
+    private BigDecimal thirdDetailPremiums;
+
+
+}

+ 161 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsExport.java

@@ -0,0 +1,161 @@
+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 javax.persistence.Table;
+import java.util.List;
+
+/**
+ * 协议费用出口比例表
+ */
+@TableName(value = "ptl_agreement_product_costs_export", autoResultMap = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtlAgreementProductCostsExport {
+
+    @TableId(value = "id",type= IdType.AUTO)
+    private String id;
+
+    @ApiModelProperty(value = "费用ID")
+    @TableField(value = "costs_id")
+    private String costsId;
+
+    @ApiModelProperty(value = "交强出口比例一级")
+    @TableField(value = "jq_export_radio_level_1")
+    private String jqExportRadioLevel1;
+
+    @ApiModelProperty(value = "交强出口比例二级")
+    @TableField(value = "jq_export_radio_level_2")
+    private String jqExportRadioLevel2;
+
+    @ApiModelProperty(value = "交强出口比例三级")
+    @TableField(value = "jq_export_radio_level_3")
+    private String jqExportRadioLevel3;
+
+    @ApiModelProperty(value = "交强出口比例四级")
+    @TableField(value = "jq_export_radio_level_4")
+    private String jqExportRadioLevel4;
+
+    @ApiModelProperty(value = "交强出口比例五级")
+    @TableField(value = "jq_export_radio_level_5")
+    private String jqExportRadioLevel5;
+
+    @ApiModelProperty(value = "交强出口加投比例")
+    @TableField(value = "jq_export_investment_radio")
+    private String jqExportInvestmentRadio;
+
+
+    @ApiModelProperty(value = "商业出口比例一级")
+    @TableField(value = "sy_export_radio_level_1")
+    private String syExportRadioLevel1;
+
+    @ApiModelProperty(value = "商业出口比例二级")
+    @TableField(value = "sy_export_radio_level_2")
+    private String syExportRadioLevel2;
+
+    @ApiModelProperty(value = "商业出口比例三级")
+    @TableField(value = "sy_export_radio_level_3")
+    private String syExportRadioLevel3;
+
+    @ApiModelProperty(value = "商业出口比例四级")
+    @TableField(value = "sy_export_radio_level_4")
+    private String syExportRadioLevel4;
+
+    @ApiModelProperty(value = "商业出口比例五级")
+    @TableField(value = "sy_export_radio_level_5")
+    private String syExportRadioLevel5;
+
+    @ApiModelProperty(value = "商业出口加投比例")
+    @TableField(value = "sy_export_investment_radio")
+    private String syExportInvestmentRadio;
+
+    @ApiModelProperty(value = "非车出口比例一级")
+    @TableField(value = "no_car_export_radio_level_1")
+    private String noCarExportRadioLevel1;
+
+    @ApiModelProperty(value = "非车出口比例二级")
+    @TableField(value = "no_car_export_radio_level_2")
+    private String noCarExportRadioLevel2;
+
+    @ApiModelProperty(value = "非车出口比例三级")
+    @TableField(value = "no_car_export_radio_level_3")
+    private String noCarExportRadioLevel3;
+
+    @ApiModelProperty(value = "非车出口比例四级")
+    @TableField(value = "no_car_export_radio_level_4")
+    private String noCarExportRadioLevel4;
+
+    @ApiModelProperty(value = "非车出口比例五级")
+    @TableField(value = "no_car_export_radio_level_5")
+    private String noCarExportRadioLevel5;
+
+    @ApiModelProperty(value = "非车出口加投比例")
+    @TableField(value = "no_car_export_investment_radio")
+    private String noCarExportInvestmentRadio;
+
+
+    public void blank(){
+        if(this.jqExportRadioLevel1 == null || this.jqExportRadioLevel1.equals("")){
+            this.jqExportRadioLevel1 = "0";
+        }
+        if(this.jqExportRadioLevel2 == null || this.jqExportRadioLevel2.equals("")){
+            this.jqExportRadioLevel2 = "0";
+        }
+        if(this.jqExportRadioLevel3 == null || this.jqExportRadioLevel3.equals("")){
+            this.jqExportRadioLevel3 = "0";
+        }
+        if(this.jqExportRadioLevel4 == null || this.jqExportRadioLevel4.equals("")){
+            this.jqExportRadioLevel4 = "0";
+        }
+        if(this.jqExportRadioLevel5 == null || this.jqExportRadioLevel5.equals("")){
+            this.jqExportRadioLevel5 = "0";
+        }
+        if(this.jqExportInvestmentRadio == null || this.jqExportInvestmentRadio.equals("")){
+            this.jqExportInvestmentRadio = "0";
+        }
+        if(this.syExportRadioLevel1 == null || this.syExportRadioLevel1.equals("")){
+            this.syExportRadioLevel1 = "0";
+        }
+        if(this.syExportRadioLevel2 == null || this.syExportRadioLevel2.equals("")){
+            this.syExportRadioLevel2 = "0";
+        }
+        if(this.syExportRadioLevel3 == null || this.syExportRadioLevel3.equals("")){
+            this.syExportRadioLevel3 = "0";
+        }
+        if(this.syExportRadioLevel4 == null || this.syExportRadioLevel4.equals("")){
+            this.syExportRadioLevel4 = "0";
+        }
+        if(this.syExportRadioLevel5 == null || this.syExportRadioLevel5.equals("")){
+            this.syExportRadioLevel5 = "0";
+        }
+        if(this.syExportInvestmentRadio == null || this.syExportInvestmentRadio.equals("")){
+            this.syExportInvestmentRadio = "0";
+        }
+        if(this.noCarExportRadioLevel1 == null || this.noCarExportRadioLevel1.equals("")){
+            this.noCarExportRadioLevel1 = "0";
+        }
+        if(this.noCarExportRadioLevel2 == null || this.noCarExportRadioLevel2.equals("")){
+            this.noCarExportRadioLevel2 = "0";
+        }
+        if(this.noCarExportRadioLevel3 == null || this.noCarExportRadioLevel3.equals("")){
+            this.noCarExportRadioLevel3 = "0";
+        }
+        if(this.noCarExportRadioLevel4 == null || this.noCarExportRadioLevel4.equals("")){
+            this.noCarExportRadioLevel4 = "0";
+        }
+        if(this.noCarExportRadioLevel5 == null || this.noCarExportRadioLevel5.equals("")){
+            this.noCarExportRadioLevel5 = "0";
+        }
+        if(this.noCarExportInvestmentRadio == null || this.noCarExportInvestmentRadio.equals("")){
+            this.noCarExportInvestmentRadio = "0";
+        }
+    }
+}

+ 174 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNew.java

@@ -0,0 +1,174 @@
+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.util.List;
+
+/**
+ * 协议费用表
+ */
+@TableName(value = "ptl_agreement_product_costs_new", autoResultMap = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtlAgreementProductCostsNew {
+
+    @TableId(value = "id",type= IdType.AUTO)
+    private String id;
+
+    @ApiModelProperty(value = "协议id")
+    @TableField(value = "agreement_id")
+    private String agreementId;
+
+    @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(exist = false)
+    private String desc;
+
+    @ApiModelProperty(value = "交强比例一级")
+    @TableField(exist = false)
+    private String jqExportRadioLevel1;
+
+    @ApiModelProperty(value = "交强比例二级")
+    @TableField(exist = false)
+    private String jqExportRadioLevel2;
+
+    @ApiModelProperty(value = "交强比例三级")
+    @TableField(exist = false)
+    private String jqExportRadioLevel3;
+
+    @ApiModelProperty(value = "交强比例四级")
+    @TableField(exist = false)
+    private String jqExportRadioLevel4;
+
+    @ApiModelProperty(value = "交强比例五级")
+    @TableField(exist = false)
+    private String jqExportRadioLevel5;
+
+    @ApiModelProperty(value = "交强加投比例")
+    @TableField(exist = false)
+    private String jqExportInvestmentRadio;
+
+    @ApiModelProperty(value = "商业比例一级")
+    @TableField(exist = false)
+    private String syExportRadioLevel1;
+
+    @ApiModelProperty(value = "商业比例二级")
+    @TableField(exist = false)
+    private String syExportRadioLevel2;
+
+    @ApiModelProperty(value = "商业比例三级")
+    @TableField(exist = false)
+    private String syExportRadioLevel3;
+
+    @ApiModelProperty(value = "商业比例四级")
+    @TableField(exist = false)
+    private String syExportRadioLevel4;
+
+    @ApiModelProperty(value = "商业比例五级")
+    @TableField(exist = false)
+    private String syExportRadioLevel5;
+
+    @ApiModelProperty(value = "商业加投比例")
+    @TableField(exist = false)
+    private String syExportInvestmentRadio;
+
+    @ApiModelProperty(value = "非车比例一级")
+    @TableField(exist = false)
+    private String noCarExportRadioLevel1;
+
+    @ApiModelProperty(value = "非车比例二级")
+    @TableField(exist = false)
+    private String noCarExportRadioLevel2;
+
+    @ApiModelProperty(value = "非车比例三级")
+    @TableField(exist = false)
+    private String noCarExportRadioLevel3;
+
+    @ApiModelProperty(value = "非车比例四级")
+    @TableField(exist = false)
+    private String noCarExportRadioLevel4;
+
+    @ApiModelProperty(value = "非车比例五级")
+    @TableField(exist = false)
+    private String noCarExportRadioLevel5;
+
+    @TableField(exist = false)
+    private List<PtlAgreementProductCostsAttrLink> costsAttrLinks;
+
+}

+ 66 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesAttr.java

@@ -0,0 +1,66 @@
+package com.ydtech.modules.protocols.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Table;
+import java.util.List;
+
+/**
+ * 协议承保规则属性
+ */
+@TableName(value = "ptl_agreement_undwrt_rules_attr", autoResultMap = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtlAgreementUndwrtRulesAttr {
+
+    @TableId(value = "id", type = com.baomidou.mybatisplus.annotation.IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "属性名称")
+    @TableField(value = "attr_name")
+    private String attrName;
+
+    @ApiModelProperty(value = "属性编码")
+    @TableField(value = "attr_code")
+    private String attrCode;
+
+    @ApiModelProperty(value = "表单类型")
+    @TableField(value = "attr_type")
+    private String attrType;
+
+    @ApiModelProperty(value = "字典Id")
+    @TableField(value = "dict_id")
+    private Integer dictId;
+
+    @ApiModelProperty(value = "分组")
+    @TableField(value = "attr_group")
+    private String attrGroup;
+
+    @ApiModelProperty(value = "排序")
+    @TableField(value = "sort")
+    private Integer sort;
+
+    @TableField(exist = false)
+    private String min;
+
+    @TableField(exist = false)
+    private String[] minArray;
+
+    @TableField(exist = false)
+    private String operator;
+
+    @TableField(exist = false)
+    private String max;
+
+    @TableField(exist = false)
+    private List<PtlAgreementUndwrtRulesDictLabal> dictLabal;
+}

+ 58 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesAttrLink.java

@@ -0,0 +1,58 @@
+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;
+
+/**
+ * 协议承保规则与规则属性关联表
+ */
+@TableName(value = "ptl_agreement_undwrt_rules_attr_link", autoResultMap = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtlAgreementUndwrtRulesAttrLink {
+
+    @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;
+
+    @TableField(exist = false)
+    private JSONArray dictLabal;
+
+    @ApiModelProperty(value = "关联属性使用")
+    @TableField(exist = false)
+    private PtlAgreementUndwrtRulesAttrLink children;
+}

+ 41 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesDict.java

@@ -0,0 +1,41 @@
+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.util.List;
+
+/**
+ * 协议承保规则属性字典表
+ */
+@TableName(value = "ptl_agreement_undwrt_rules_dict", autoResultMap = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtlAgreementUndwrtRulesDict {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "字典名称")
+    @TableField(value = "name")
+    private String name;
+
+    @ApiModelProperty(value = "字典编码")
+    @TableField(value = "code")
+    private String code;
+
+    @ApiModelProperty(value = "字典备注")
+    @TableField(value = "remark")
+    private String remark;
+
+    @TableField(exist = false)
+    private List<PtlAgreementUndwrtRulesDictLabal> labalList;
+
+}

+ 50 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesDictLabal.java

@@ -0,0 +1,50 @@
+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.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * 协议承保规则属性字典表
+ */
+@TableName(value = "ptl_agreement_undwrt_rules_dict_labal", autoResultMap = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtlAgreementUndwrtRulesDictLabal {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "父级id")
+    @TableField(value = "parent_id")
+    private Integer parentId;
+
+    @ApiModelProperty(value = "字典id")
+    @TableField(value = "dict_id")
+    private Integer dictId;
+
+    @ApiModelProperty(value = "标签名称")
+    @TableField(value = "name")
+    private String name;
+
+    @ApiModelProperty(value = "标签编码")
+    @TableField(value = "code")
+    private String code;
+
+    @ApiModelProperty(value = "排序")
+    @TableField(value = "sort")
+    private String sort;
+
+    @TableField(exist = false)
+    private List<PtlAgreementUndwrtRulesDictLabal> children;
+
+}

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

@@ -0,0 +1,50 @@
+package com.ydtech.modules.protocols.entity.po;
+
+import com.alibaba.fastjson.JSONArray;
+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.util.List;
+
+/**
+ * 协议费用与规则属性关联表
+ */
+@TableName(value = "ptl_agreement_undwrt_rules_new", autoResultMap = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtlAgreementUndwrtRulesNew {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private String id;
+
+    @ApiModelProperty(value = "协议id")
+    @TableField(value = "agreement_id")
+    private String agreementId;
+
+    @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 List<PtlAgreementUndwrtRulesAttrLink> rulesAttrList;
+}

+ 140 - 0
src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductCosts.java

@@ -0,0 +1,140 @@
+package com.ydtech.modules.protocols.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AgreementProductCosts {
+
+    @ApiModelProperty(value = "费用id")
+    private String id;
+
+    @ApiModelProperty(value = "协议id")
+    private String agreementId;
+
+    @ApiModelProperty(value = "产品id")
+    private String productId;
+
+    @ApiModelProperty(value = "产品名称")
+    private String productName;
+
+    @ApiModelProperty(value = "费用比例(交强)")
+    private String jqCarCostsProportion;
+
+    @ApiModelProperty(value = "总费用比例(交强)")
+    private String jqCostsProportion;
+
+    @ApiModelProperty(value = "其他费用比例(交强)")
+    private String jqCarOtherCostsProportion;
+
+    @ApiModelProperty(value = "费用比例(商业)")
+    private String syCarCostsProportion;
+
+    @ApiModelProperty(value = "总费用比例(商业)")
+    private String syCostsProportion;
+
+    @ApiModelProperty(value = "其他费用比例(商业)")
+    private String syCarOtherCostsProportion;
+
+    @ApiModelProperty(value = "费用比例(非车)")
+    private String noCarCostsProportion;
+
+    @ApiModelProperty(value = "总费用比例(非车)")
+    private String noCostsProportion;
+
+    @ApiModelProperty(value = "其他费用比例(非车)")
+    private String noCarOtherCostsProportion;
+
+    @ApiModelProperty(value = "费用描述")
+    private String costsDescription;
+
+    @ApiModelProperty(value = "费用起期")
+    private String costsStartDate;
+
+    @ApiModelProperty(value = "费用止期")
+    private String costsEndDate;
+
+    @ApiModelProperty(value = "优先级")
+    private Integer priorityLevel;
+
+    // ---------------
+    // ---------------
+    // ---------------
+    // ---------------
+    // 出口比例
+    // ---------------
+    // ---------------
+    // ---------------
+    // ---------------
+    @ApiModelProperty(value = "交强出口比例一级")
+    private String jqExportRadioLevel1;
+
+    @ApiModelProperty(value = "交强出口比例二级")
+    private String jqExportRadioLevel2;
+
+    @ApiModelProperty(value = "交强出口比例三级")
+    private String jqExportRadioLevel3;
+
+    @ApiModelProperty(value = "交强出口比例四级")
+    private String jqExportRadioLevel4;
+
+    @ApiModelProperty(value = "交强出口比例五级")
+    private String jqExportRadioLevel5;
+
+    @ApiModelProperty(value = "交强出口加投比例")
+    private String jqExportInvestmentRadio;
+
+    @ApiModelProperty(value = "商业出口比例一级")
+    private String syExportRadioLevel1;
+
+    @ApiModelProperty(value = "商业出口比例二级")
+    private String syExportRadioLevel2;
+
+    @ApiModelProperty(value = "商业出口比例三级")
+    private String syExportRadioLevel3;
+
+    @ApiModelProperty(value = "商业出口比例四级")
+    private String syExportRadioLevel4;
+
+    @ApiModelProperty(value = "商业出口比例五级")
+    private String syExportRadioLevel5;
+
+    @ApiModelProperty(value = "商业出口加投比例")
+    private String syExportInvestmentRadio;
+
+    @ApiModelProperty(value = "非车出口比例一级")
+    private String noCarExportRadioLevel1;
+
+    @ApiModelProperty(value = "非车出口比例二级")
+    private String noCarExportRadioLevel2;
+
+    @ApiModelProperty(value = "非车出口比例三级")
+    private String noCarExportRadioLevel3;
+
+    @ApiModelProperty(value = "非车出口比例四级")
+    private String noCarExportRadioLevel4;
+
+    @ApiModelProperty(value = "非车出口比例五级")
+    private String noCarExportRadioLevel5;
+
+    @ApiModelProperty(value = "非车出口加投比例")
+    private String noCarExportInvestmentRadio;
+
+
+    @ApiModelProperty(value = "费用属性")
+    private List<PtlAgreementProductCostsAttrLink> costsAttrLinks;
+
+    /**
+     * 根据code获取费用属性
+     * @param code
+     * @return
+     */
+    public PtlAgreementProductCostsAttrLink getAttrLinkByCode(String code) {
+        return this.getCostsAttrLinks().stream().filter(attrLink -> code.equals(attrLink.getAttrCode())).findFirst().orElse(null);
+    }
+}

+ 167 - 0
src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductCostsSave.java

@@ -0,0 +1,167 @@
+package com.ydtech.modules.protocols.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsExport;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AgreementProductCostsSave {
+
+    private String id;
+
+    @ApiModelProperty(value = "协议id")
+    private String agreementId;
+
+    @ApiModelProperty(value = "产品id")
+    private String productId;
+
+    @ApiModelProperty(value = "产品名称")
+    private String productName;
+
+    @ApiModelProperty(value = "费用比例(交强)")
+    private String jqCarCostsProportion;
+
+    @ApiModelProperty(value = "总费用比例(交强)")
+    private String jqCostsProportion;
+
+    @ApiModelProperty(value = "其他费用比例(交强)")
+    private String jqCarOtherCostsProportion;
+
+    @ApiModelProperty(value = "加投比例(交强)")
+    private String jqCostsProportionAddInvsestment;
+
+    @ApiModelProperty(value = "费用比例(商业)")
+    private String syCarCostsProportion;
+
+    @ApiModelProperty(value = "总费用比例(商业)")
+    private String syCostsProportion;
+
+    @ApiModelProperty(value = "其他费用比例(商业)")
+    private String syCarOtherCostsProportion;
+
+    @ApiModelProperty(value = "加投比例(商业)")
+    private String syCostsProportionAddInvsestment;
+
+    @ApiModelProperty(value = "费用比例(非车)")
+    private String noCarCostsProportion;
+
+    @ApiModelProperty(value = "总费用比例(非车)")
+    private String noCostsProportion;
+
+    @ApiModelProperty(value = "其他费用比例(非车)")
+    private String noCarOtherCostsProportion;
+
+    @ApiModelProperty(value = "费用描述")
+    private String costsDescription;
+
+    @ApiModelProperty(value = "费用起期")
+    private String costsStartDate;
+
+    @ApiModelProperty(value = "费用止期")
+    private String costsEndDate;
+
+    @ApiModelProperty(value = "优先级")
+    private String priorityLevel;
+
+
+    // ---------------
+    // ---------------
+    // ---------------
+    // ---------------
+    // 出口比例
+    // ---------------
+    // ---------------
+    // ---------------
+    // ---------------
+    @ApiModelProperty(value = "交强出口比例一级")
+    private String jqExportRadioLevel1;
+
+    @ApiModelProperty(value = "交强出口比例二级")
+    private String jqExportRadioLevel2;
+
+    @ApiModelProperty(value = "交强出口比例三级")
+    private String jqExportRadioLevel3;
+
+    @ApiModelProperty(value = "交强出口比例四级")
+    private String jqExportRadioLevel4;
+
+    @ApiModelProperty(value = "交强出口比例五级")
+    private String jqExportRadioLevel5;
+
+    @ApiModelProperty(value = "交强出口加投比例")
+    private String jqExportInvestmentRadio;
+
+    @ApiModelProperty(value = "商业出口比例一级")
+    private String syExportRadioLevel1;
+
+    @ApiModelProperty(value = "商业出口比例二级")
+    private String syExportRadioLevel2;
+
+    @ApiModelProperty(value = "商业出口比例三级")
+    private String syExportRadioLevel3;
+
+    @ApiModelProperty(value = "商业出口比例四级")
+    private String syExportRadioLevel4;
+
+    @ApiModelProperty(value = "商业出口比例五级")
+    private String syExportRadioLevel5;
+
+    @ApiModelProperty(value = "商业出口加投比例")
+    private String syExportInvestmentRadio;
+
+    @ApiModelProperty(value = "非车出口比例一级")
+    private String noCarExportRadioLevel1;
+
+    @ApiModelProperty(value = "非车出口比例二级")
+    private String noCarExportRadioLevel2;
+
+    @ApiModelProperty(value = "非车出口比例三级")
+    private String noCarExportRadioLevel3;
+
+    @ApiModelProperty(value = "非车出口比例四级")
+    private String noCarExportRadioLevel4;
+
+    @ApiModelProperty(value = "非车出口比例五级")
+    private String noCarExportRadioLevel5;
+
+    @ApiModelProperty(value = "非车出口加投比例")
+    private String noCarExportInvestmentRadio;
+
+
+
+
+
+    @ApiModelProperty(value = "费用属性")
+    private List<PtlAgreementUndwrtRulesAttr> costsAttrLinks;
+
+
+    /**
+     * 设置出口比例
+     * @return
+     */
+    public void setExportRadio(PtlAgreementProductCostsExport ptlAgreementProductCostsExport) {
+        this.setJqExportRadioLevel1(ptlAgreementProductCostsExport.getJqExportRadioLevel1());
+        this.setJqExportRadioLevel2(ptlAgreementProductCostsExport.getJqExportRadioLevel2());
+        this.setJqExportRadioLevel3(ptlAgreementProductCostsExport.getJqExportRadioLevel3());
+        this.setJqExportRadioLevel4(ptlAgreementProductCostsExport.getJqExportRadioLevel4());
+        this.setJqExportRadioLevel5(ptlAgreementProductCostsExport.getJqExportRadioLevel5());
+        this.setJqExportInvestmentRadio(ptlAgreementProductCostsExport.getJqExportInvestmentRadio());
+        this.setSyExportRadioLevel1(ptlAgreementProductCostsExport.getSyExportRadioLevel1());
+        this.setSyExportRadioLevel2(ptlAgreementProductCostsExport.getSyExportRadioLevel2());
+        this.setSyExportRadioLevel3(ptlAgreementProductCostsExport.getSyExportRadioLevel3());
+        this.setSyExportRadioLevel4(ptlAgreementProductCostsExport.getSyExportRadioLevel4());
+        this.setSyExportRadioLevel5(ptlAgreementProductCostsExport.getSyExportRadioLevel5());
+        this.setSyExportInvestmentRadio(ptlAgreementProductCostsExport.getSyExportInvestmentRadio());
+        this.setNoCarExportRadioLevel1(ptlAgreementProductCostsExport.getNoCarExportRadioLevel1());
+        this.setNoCarExportRadioLevel2(ptlAgreementProductCostsExport.getNoCarExportRadioLevel2());
+        this.setNoCarExportRadioLevel3(ptlAgreementProductCostsExport.getNoCarExportRadioLevel3());
+        this.setNoCarExportRadioLevel4(ptlAgreementProductCostsExport.getNoCarExportRadioLevel4());
+        this.setNoCarExportRadioLevel5(ptlAgreementProductCostsExport.getNoCarExportRadioLevel5());
+        this.setNoCarExportInvestmentRadio(ptlAgreementProductCostsExport.getNoCarExportInvestmentRadio());
+    }
+}

+ 9 - 0
src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductQueryVo.java

@@ -0,0 +1,9 @@
+package com.ydtech.modules.protocols.entity.vo;
+
+import com.ydtech.core.page.PageRequest;
+import lombok.Data;
+
+@Data
+public class AgreementProductQueryVo extends PageRequest {
+    private String agreementId;
+}

+ 40 - 0
src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementUndwrtRules.java

@@ -0,0 +1,40 @@
+package com.ydtech.modules.protocols.entity.vo;
+
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttrLink;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+*@author: tz
+*@description: 协议承保规则保存实体类
+*@create: 2024-3-4 10:56:16
+*/
+@Data
+public class AgreementUndwrtRules {
+
+    private String id;
+
+
+    @ApiModelProperty(value = "协议id")
+    private String agreementId;
+
+    @ApiModelProperty(value = "规则类型")
+    private String rulesType;
+
+    @ApiModelProperty(value = "业务类型")
+    private String productType;
+
+    @ApiModelProperty(value = "规则描述")
+    private String ruleDescription;
+
+    @ApiModelProperty(value = "是否生效")
+    private String validInd;
+
+    @ApiModelProperty(value = "规则属性")
+    private List<PtlAgreementUndwrtRulesAttrLink> rulesAttrList;
+
+
+}

+ 9 - 0
src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementUndwrtRulesQueryVo.java

@@ -0,0 +1,9 @@
+package com.ydtech.modules.protocols.entity.vo;
+
+import com.ydtech.core.page.PageRequest;
+import lombok.Data;
+
+@Data
+public class AgreementUndwrtRulesQueryVo extends PageRequest {
+    private String agreementId;
+}

+ 41 - 0
src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementUndwrtRulesSave.java

@@ -0,0 +1,41 @@
+package com.ydtech.modules.protocols.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsExport;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+*@author: tz
+*@description: 协议承保规则保存实体类
+*@create: 2024-3-4 10:56:16
+*/
+@Data
+public class AgreementUndwrtRulesSave {
+
+    private String id;
+
+
+    @ApiModelProperty(value = "协议id")
+    private String agreementId;
+
+    @ApiModelProperty(value = "规则类型")
+    private String rulesType;
+
+    @ApiModelProperty(value = "业务类型")
+    private String productType;
+
+    @ApiModelProperty(value = "规则描述")
+    private String ruleDescription;
+
+    @ApiModelProperty(value = "是否生效")
+    private String validInd;
+
+    @ApiModelProperty(value = "费用属性")
+    private List<PtlAgreementUndwrtRulesAttr> costsAttrLinks;
+
+
+}

+ 14 - 0
src/main/java/com/ydtech/modules/protocols/service/InsFeeOrderNewService.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.InsFeeOrderNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
+
+/**
+*@author: tz
+*@description: 费用计算表 service
+*@create: 2024-2-22 15:44:29
+*/
+public interface InsFeeOrderNewService extends IService<InsFeeOrderNew> {
+
+}

+ 15 - 0
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsAttrLinkService.java

@@ -0,0 +1,15 @@
+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.PtlAgreementProductCostsNew;
+import com.ydtech.modules.protocols.entity.vo.AgreementProductCosts;
+
+/**
+*@author: tz
+*@description: 协议承保规则属性 service
+*@create: 2024-2-22 15:44:29
+*/
+public interface PtlAgreementProductCostsAttrLinkService extends IService<PtlAgreementProductCostsAttrLink> {
+
+}

+ 20 - 0
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsExportService.java

@@ -0,0 +1,20 @@
+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.protocols.entity.po.PtlAgreementProductCostsExport;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+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: tz
+*@description: 费用出口比例 service
+*@create: 2024-2-22 15:44:29
+*/
+public interface PtlAgreementProductCostsExportService extends IService<PtlAgreementProductCostsExport> {
+
+}

+ 60 - 0
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsNewService.java

@@ -0,0 +1,60 @@
+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.protocols.entity.po.PtlAgreementProductCostsNew;
+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;
+import java.util.Map;
+
+/**
+*@author: tz
+*@description: 协议承保规则属性 service
+*@create: 2024-2-22 15:44:29
+*/
+public interface PtlAgreementProductCostsNewService extends IService<PtlAgreementProductCostsNew> {
+
+    /**
+     * 获取协议费用列表
+     * @param page
+     * @param agreementId
+     * @return
+     */
+    Page<PtlAgreementProductCostsNew> getByAgreementId(Page page, String agreementId);
+
+    /**
+     * 获取协议费用
+     * @param costsId
+     * @return
+     */
+    AgreementProductCostsSave costsGet(String costsId, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList);
+
+    List<AgreementProductCosts> costsGetList(String agreementId);
+
+
+    List<AgreementProductCosts> costsGetList(String agreementId,String productId);
+
+    /**
+     * 添加协议费用
+     * @param agreementProductCosts
+     * @return
+     */
+    boolean costsAdd(AgreementProductCosts agreementProductCosts);
+
+    /**
+     * 更新协议费用
+     * @param agreementProductCosts
+     * @return
+     */
+    boolean costsUpdate(AgreementProductCosts agreementProductCosts);
+
+    /**
+     * 删除协议费用
+     * @param costsId
+     * @return
+     */
+    boolean costsDelete(String costsId);
+}

+ 14 - 0
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesAttrLinkService.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.PtlAgreementUndwrtRulesAttrLink;
+
+/**
+*@author: tz
+*@description: 协议承保规则属性 service
+*@create: 2024-2-22 15:44:29
+*/
+public interface PtlAgreementUndwrtRulesAttrLinkService extends IService<PtlAgreementUndwrtRulesAttrLink> {
+
+}

+ 40 - 0
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesAttrService.java

@@ -0,0 +1,40 @@
+package com.ydtech.modules.protocols.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.esm.model.EsmInsCompany;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementAttributionDto;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementSaveDto;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules;
+import com.ydtech.modules.protocol.entity.vo.*;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
+import com.ydtech.modules.protocols.entity.vo.AgreementProductCosts;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+*@author: tz
+*@description: 协议承保规则属性 service
+*@create: 2024-2-22 15:44:29
+*/
+public interface PtlAgreementUndwrtRulesAttrService extends IService<PtlAgreementUndwrtRulesAttr> {
+
+    /**
+     * 协议承保规则属性列表
+     * @return
+     */
+    List<PtlAgreementUndwrtRulesAttr> getUndwrtRulesAttrList();
+
+    /**
+     * 协议承保规则属性列表进行分类
+     * @return
+     */
+    Map<String,List<PtlAgreementUndwrtRulesAttr>> getUndwrtRulesAttrListType(List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList);
+
+
+}

+ 15 - 0
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesDictLabalService.java

@@ -0,0 +1,15 @@
+package com.ydtech.modules.protocols.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesDict;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesDictLabal;
+
+/**
+*@author: tz
+*@description: 协议承保规则字典 service
+*@create: 2024-2-22 15:44:29
+*/
+public interface PtlAgreementUndwrtRulesDictLabalService extends IService<PtlAgreementUndwrtRulesDictLabal> {
+
+
+}

+ 22 - 0
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesDictService.java

@@ -0,0 +1,22 @@
+package com.ydtech.modules.protocols.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesDict;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesDictLabal;
+
+import java.util.List;
+
+/**
+*@author: tz
+*@description: 协议承保规则字典 service
+*@create: 2024-2-22 15:44:29
+*/
+public interface PtlAgreementUndwrtRulesDictService extends IService<PtlAgreementUndwrtRulesDict> {
+
+    /**
+     *
+     * @return
+     */
+    List<PtlAgreementUndwrtRulesDictLabal> getUndwrtRulesDictList();
+
+}

+ 45 - 0
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesNewService.java

@@ -0,0 +1,45 @@
+package com.ydtech.modules.protocols.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.core.page.PageRequest;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesNew;
+import com.ydtech.modules.protocols.entity.vo.AgreementProductCosts;
+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 java.util.List;
+
+/**
+*@author: tz
+*@description: 协议承保规则属性 service
+*@create: 2024-2-22 15:44:29
+*/
+public interface PtlAgreementUndwrtRulesNewService extends IService<PtlAgreementUndwrtRulesNew> {
+    AgreementUndwrtRulesSave rulesGet(String costsId, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList);
+
+    List<PtlAgreementUndwrtRulesNew> rulesList(String agreementId);
+
+    Page rulesPage(Page page,String agreementId);
+
+    /**
+     * 添加协议承保规则
+     * @param agreementUndwrtRules
+     * @return
+     */
+    boolean rulesAdd(AgreementUndwrtRules agreementUndwrtRules);
+
+    /**
+     * 更新协议承保规则
+     * @param agreementUndwrtRules
+     * @return
+     */
+    boolean rulesUpdate(AgreementUndwrtRules agreementUndwrtRules);
+
+
+    boolean rulesDelete(String rulesId);
+}

+ 22 - 0
src/main/java/com/ydtech/modules/protocols/service/impl/InsFeeOrderNewServiceImpl.java

@@ -0,0 +1,22 @@
+package com.ydtech.modules.protocols.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.order.entity.InsFeeOrder;
+import com.ydtech.modules.protocols.dao.InsFeeOrderNewMapper;
+import com.ydtech.modules.protocols.dao.PtlAgreementProductCostsAttrLinkMapper;
+import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
+import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsAttrLinkService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @description 费用结算表 service实现类
+ * @createDate 2024-2-22 15:44:29
+ * @Entity com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRulesAttrMapper
+ */
+@Service
+public class InsFeeOrderNewServiceImpl extends ServiceImpl<InsFeeOrderNewMapper, InsFeeOrderNew>
+        implements InsFeeOrderNewService {
+
+}

+ 28 - 0
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsAttrLinkServiceImpl.java

@@ -0,0 +1,28 @@
+package com.ydtech.modules.protocols.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.protocols.dao.PtlAgreementProductCostsAttrLinkMapper;
+import com.ydtech.modules.protocols.dao.PtlAgreementProductCostsNewMapper;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+import com.ydtech.modules.protocols.entity.vo.AgreementProductCosts;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsAttrLinkService;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsNewService;
+import com.ydtech.utils.idgen.IdGenerate;
+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.List;
+
+/**
+ * @description 协议承保规则属性 service实现类
+ * @createDate 2024-2-22 15:44:29
+ * @Entity com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRulesAttrMapper
+ */
+@Service
+public class PtlAgreementProductCostsAttrLinkServiceImpl extends ServiceImpl<PtlAgreementProductCostsAttrLinkMapper, PtlAgreementProductCostsAttrLink>
+        implements PtlAgreementProductCostsAttrLinkService {
+
+}

+ 36 - 0
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsExportServiceImpl.java

@@ -0,0 +1,36 @@
+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.PtlAreaLicense;
+import com.ydtech.modules.protocol.service.PtlAreaLicenseService;
+import com.ydtech.modules.protocols.dao.PtlAgreementProductCostsExportMapper;
+import com.ydtech.modules.protocols.dao.PtlAgreementProductCostsNewMapper;
+import com.ydtech.modules.protocols.entity.po.*;
+import com.ydtech.modules.protocols.entity.vo.AgreementProductCosts;
+import com.ydtech.modules.protocols.entity.vo.AgreementProductCostsSave;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsAttrLinkService;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsExportService;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsNewService;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesAttrService;
+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.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @description 费用出口比例 service实现类
+ * @createDate 2024-2-22 15:44:29
+ * @Entity com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRulesAttrMapper
+ */
+@Service
+public class PtlAgreementProductCostsExportServiceImpl extends ServiceImpl<PtlAgreementProductCostsExportMapper, PtlAgreementProductCostsExport>
+        implements PtlAgreementProductCostsExportService {
+
+}

+ 384 - 0
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java

@@ -0,0 +1,384 @@
+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.protocol.entity.po.PtlAreaLicense;
+import com.ydtech.modules.protocol.service.PtlAreaLicenseService;
+import com.ydtech.modules.protocols.dao.PtlAgreementProductCostsNewMapper;
+import com.ydtech.modules.protocols.entity.po.*;
+import com.ydtech.modules.protocols.entity.vo.AgreementProductCosts;
+import com.ydtech.modules.protocols.entity.vo.AgreementProductCostsSave;
+import com.ydtech.modules.protocols.service.*;
+import com.ydtech.utils.idgen.IdGenerate;
+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.*;
+import java.util.stream.Collectors;
+
+/**
+ * @description 协议承保规则属性 service实现类
+ * @createDate 2024-2-22 15:44:29
+ * @Entity com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRulesAttrMapper
+ */
+@Service
+public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgreementProductCostsNewMapper, PtlAgreementProductCostsNew>
+        implements PtlAgreementProductCostsNewService {
+
+    @Autowired
+    PtlAgreementProductCostsAttrLinkService ptlAgreementProductCostsAttrLinkService;
+
+    @Autowired
+    PtlAreaLicenseService ptlAreaLicenseService;
+
+    @Autowired
+    PtlAgreementUndwrtRulesAttrService ptlAgreementUndwrtRulesAttrService;
+
+    @Autowired
+    PtlAgreementProductCostsExportService ptlAgreementProductCostsExportService;
+
+    @Override
+    public Page<PtlAgreementProductCostsNew> getByAgreementId(Page page, String agreementId) {
+        Page<PtlAgreementProductCostsNew> pages = baseMapper.selectPage(page, new LambdaQueryWrapper<PtlAgreementProductCostsNew>()
+                .eq(PtlAgreementProductCostsNew::getAgreementId, agreementId));
+        //遍历费用列表
+        List<String> ids = new ArrayList<>();
+        pages.getRecords().forEach(x -> {
+            ids.add(x.getId());
+        });
+        //获取出口比例
+        List<PtlAgreementProductCostsExport> ptlAgreementProductCostsExports = ptlAgreementProductCostsExportService.list(new LambdaQueryWrapper<PtlAgreementProductCostsExport>()
+                .in(PtlAgreementProductCostsExport::getCostsId, ids));
+        //获取费用属性
+        List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        List<PtlAgreementProductCostsAttrLink> list = ptlAgreementProductCostsAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementProductCostsAttrLink>()
+                .in(PtlAgreementProductCostsAttrLink::getCostsId, ids));
+        Map<String, List<PtlAgreementProductCostsAttrLink>> groupedByCostsId = list.stream()
+                .collect(Collectors.groupingBy(PtlAgreementProductCostsAttrLink::getCostsId));
+        groupedByCostsId.forEach((k, v) -> {
+            pages.getRecords().stream().filter(x -> x.getId().equals(k)).findFirst().ifPresent(x -> x.setDesc(buildDesc(v,undwrtRulesAttrList)));
+        });
+        //赋值出口比例
+        List<PtlAgreementProductCostsNew> records = pages.getRecords();
+        for(int i=0;i<records.size();i++)
+        {
+            int finalI = i;
+            PtlAgreementProductCostsExport ptlAgreementProductCostsExport = ptlAgreementProductCostsExports.stream().filter(y -> y.getCostsId().equals(records.get(finalI).getId())).findFirst().orElse(null);
+            if(!Objects.isNull(ptlAgreementProductCostsExport)) {
+                records.get(i).setJqExportRadioLevel1(ptlAgreementProductCostsExport.getJqExportRadioLevel1());
+                records.get(i).setJqExportRadioLevel2(ptlAgreementProductCostsExport.getJqExportRadioLevel2());
+                records.get(i).setJqExportRadioLevel3(ptlAgreementProductCostsExport.getJqExportRadioLevel3());
+                records.get(i).setJqExportRadioLevel4(ptlAgreementProductCostsExport.getJqExportRadioLevel4());
+                records.get(i).setJqExportRadioLevel5(ptlAgreementProductCostsExport.getJqExportRadioLevel5());
+                records.get(i).setJqExportInvestmentRadio(ptlAgreementProductCostsExport.getJqExportInvestmentRadio());
+                records.get(i).setSyExportRadioLevel1(ptlAgreementProductCostsExport.getSyExportRadioLevel1());
+                records.get(i).setSyExportRadioLevel2(ptlAgreementProductCostsExport.getSyExportRadioLevel2());
+                records.get(i).setSyExportRadioLevel3(ptlAgreementProductCostsExport.getSyExportRadioLevel3());
+                records.get(i).setSyExportRadioLevel4(ptlAgreementProductCostsExport.getSyExportRadioLevel4());
+                records.get(i).setSyExportRadioLevel5(ptlAgreementProductCostsExport.getSyExportRadioLevel5());
+                records.get(i).setSyExportInvestmentRadio(ptlAgreementProductCostsExport.getSyExportInvestmentRadio());
+                records.get(i).setNoCarExportRadioLevel1(ptlAgreementProductCostsExport.getNoCarExportRadioLevel1());
+                records.get(i).setNoCarExportRadioLevel2(ptlAgreementProductCostsExport.getNoCarExportRadioLevel2());
+                records.get(i).setNoCarExportRadioLevel3(ptlAgreementProductCostsExport.getNoCarExportRadioLevel3());
+                records.get(i).setNoCarExportRadioLevel4(ptlAgreementProductCostsExport.getNoCarExportRadioLevel4());
+                records.get(i).setNoCarExportRadioLevel5(ptlAgreementProductCostsExport.getNoCarExportRadioLevel5());
+            }
+        }
+        pages.getRecords().stream().forEach(x -> {
+
+        });
+        return pages;
+    }
+
+    /**
+     * 遍历费用属性描述文字
+     * @param v
+     * @param undwrtRulesAttrList
+     * @return
+     */
+    private String buildDesc(List<PtlAgreementProductCostsAttrLink> 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,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())){
+            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 "";
+    }
+
+    @Override
+    public AgreementProductCostsSave costsGet(String costsId,List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
+        //设置费用入口信息
+        PtlAgreementProductCostsNew ptlAgreementProductCostsNew = baseMapper.selectOne(new LambdaQueryWrapper<PtlAgreementProductCostsNew>().eq(PtlAgreementProductCostsNew::getId, costsId));
+        if (ptlAgreementProductCostsNew == null) {
+            throw new RuntimeException("费用不存在");
+        }
+        AgreementProductCostsSave agreementProductCosts = new AgreementProductCostsSave();
+        BeanUtils.copyProperties(ptlAgreementProductCostsNew, agreementProductCosts);
+
+        //设置费用出口信息
+        PtlAgreementProductCostsExport ptlAgreementProductCostsExport = ptlAgreementProductCostsExportService.getOne(new LambdaQueryWrapper<PtlAgreementProductCostsExport>()
+                .eq(PtlAgreementProductCostsExport::getCostsId, costsId));
+        if(!Objects.isNull(ptlAgreementProductCostsExport)) {
+            agreementProductCosts.setExportRadio(ptlAgreementProductCostsExport);
+        }
+
+
+        //设置费用因子属性
+        List<PtlAgreementUndwrtRulesAttr> ptlAgreementUndwrtRulesAttrs = new ArrayList<>();
+        List<PtlAgreementProductCostsAttrLink> list = ptlAgreementProductCostsAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementProductCostsAttrLink>()
+                .eq(PtlAgreementProductCostsAttrLink::getCostsId, costsId));
+
+        undwrtRulesAttrList.stream().forEach(x -> {
+            //处理多选和下拉
+            if("checkbox".equals(x.getAttrType()) || "select".equals(x.getAttrType()))
+            {
+                //处理车牌
+                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) {
+                        //根据operator 获取车牌的地区id
+                        List<PtlAreaLicense> byParentNumber = ptlAreaLicenseService.getByParentNumber(licenseNo.getOperator());
+                        List<PtlAgreementUndwrtRulesDictLabal> dictLabal = byParentNumber.stream().map(y -> {
+                            PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = new PtlAgreementUndwrtRulesDictLabal();
+                            ptlAgreementUndwrtRulesDictLabal.setDictId(y.getId());
+                            ptlAgreementUndwrtRulesDictLabal.setCode(y.getAreaNumber());
+                            ptlAgreementUndwrtRulesDictLabal.setName(y.getLicense());
+                            return ptlAgreementUndwrtRulesDictLabal;
+                        }).collect(Collectors.toList());
+                        x.setDictLabal(dictLabal);
+                    }
+                }
+                x.setMinArray(new String[]{});
+                list.stream().filter(y -> y.getAttrCode().equals(x.getAttrCode())).findFirst().ifPresent(z -> {
+                    if(null != z.getMin()) {
+                        x.setId(z.getId());
+                        x.setMinArray(z.getMin().split(","));
+                        x.setMax(z.getMax());
+                        x.setOperator(z.getOperator());
+                    }
+                });
+            }else{
+                list.stream().filter(y -> y.getAttrCode().equals(x.getAttrCode())).findFirst().ifPresent(z -> {
+                    x.setId(z.getId());
+                    x.setMin(z.getMin());
+                    x.setMax(z.getMax());
+                    x.setOperator(z.getOperator());
+                });
+            }
+
+            ptlAgreementUndwrtRulesAttrs.add(x);
+        });
+
+        agreementProductCosts.setCostsAttrLinks(ptlAgreementUndwrtRulesAttrs);
+
+        return agreementProductCosts;
+    }
+
+    @Override
+    public List<AgreementProductCosts> costsGetList(String agreementId) {
+        List<PtlAgreementProductCostsNew> ptlAgreementProductCostsNews = baseMapper.selectList(new LambdaQueryWrapper<PtlAgreementProductCostsNew>()
+                .eq(PtlAgreementProductCostsNew::getAgreementId, agreementId)
+                .orderBy(true, true, PtlAgreementProductCostsNew::getPriorityLevel));
+
+        List<AgreementProductCosts> agreementProductCosts = new ArrayList<>();
+
+        ptlAgreementProductCostsNews.forEach(news -> {
+            AgreementProductCosts productCosts = new AgreementProductCosts();
+            BeanUtils.copyProperties(news, productCosts);
+            agreementProductCosts.add(productCosts);
+        });
+        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{
+            agreementProductCosts.forEach(x -> {
+                x.setCostsAttrLinks(new ArrayList<>());
+            });
+        }
+        return agreementProductCosts;
+    }
+
+    @Override
+    public List<AgreementProductCosts> costsGetList(String agreementId, String productId) {
+
+        List<PtlAgreementProductCostsNew> ptlAgreementProductCostsNews = baseMapper.selectList(new LambdaQueryWrapper<PtlAgreementProductCostsNew>()
+                .eq(PtlAgreementProductCostsNew::getAgreementId, agreementId)
+                .eq(PtlAgreementProductCostsNew::getProductId, productId)
+                .orderBy(true, true, PtlAgreementProductCostsNew::getPriorityLevel));
+
+        List<AgreementProductCosts> agreementProductCosts = new ArrayList<>();
+
+        ptlAgreementProductCostsNews.forEach(news -> {
+            AgreementProductCosts productCosts = new AgreementProductCosts();
+            BeanUtils.copyProperties(news, productCosts);
+            agreementProductCosts.add(productCosts);
+        });
+        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{
+            agreementProductCosts.forEach(x -> {
+                x.setCostsAttrLinks(new ArrayList<>());
+            });
+        }
+        return agreementProductCosts;
+    }
+
+    @Transactional
+    @Override
+    public boolean costsAdd(AgreementProductCosts agreementProductCosts) {
+        //添加费用主表信息
+        PtlAgreementProductCostsNew ptlAgreementProductCostsNew = new PtlAgreementProductCostsNew();
+        BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsNew);
+        int insert = baseMapper.insert(ptlAgreementProductCostsNew);
+
+        //添加费用出口信息
+        PtlAgreementProductCostsExport ptlAgreementProductCostsExport = new PtlAgreementProductCostsExport();
+        BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsExport);
+        ptlAgreementProductCostsExport.setCostsId(ptlAgreementProductCostsNew.getId());
+        ptlAgreementProductCostsExport.blank();
+        ptlAgreementProductCostsExportService.save(ptlAgreementProductCostsExport);
+
+        //遍历费用属性
+        List<PtlAgreementProductCostsAttrLink> costsAttrLinks = agreementProductCosts.getCostsAttrLinks();
+        List<PtlAgreementProductCostsAttrLink> costsAttrLink = new ArrayList<>();
+        costsAttrLinks.forEach(x -> {
+            //单独处理车牌号
+            if("LicenseNo".equals(x.getAttrCode())){
+                x.setOperator(x.getDictLabal().getJSONObject(0).getString("parentNumber"));
+                x.setCostsId(ptlAgreementProductCostsNew.getId());
+                x.setId(0);
+                costsAttrLink.add(x);
+            }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);
+                }
+            }
+        });
+        ptlAgreementProductCostsAttrLinkService.saveBatch(costsAttrLink);
+        return true;
+    }
+
+    @Transactional
+    @Override
+    public boolean costsUpdate(AgreementProductCosts agreementProductCosts) {
+        //更新费用主表信息
+        PtlAgreementProductCostsNew ptlAgreementProductCostsNew = new PtlAgreementProductCostsNew();
+        BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsNew);
+        int update = baseMapper.updateById(ptlAgreementProductCostsNew);
+
+        //更新费用出口表信息
+        PtlAgreementProductCostsExport ptlAgreementProductCostsExport = ptlAgreementProductCostsExportService.getOne(
+                new LambdaQueryWrapper<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{
+            //保存原始id
+            String id = ptlAgreementProductCostsExport.getId();
+            BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsExport);
+            //替换id
+            ptlAgreementProductCostsExport.setId(id);
+        }
+        ptlAgreementProductCostsExportService.saveOrUpdate(ptlAgreementProductCostsExport);
+
+        //设置费用因子属性
+        //先删除属性值
+        ptlAgreementProductCostsAttrLinkService.remove(new LambdaQueryWrapper<PtlAgreementProductCostsAttrLink>()
+                .eq(PtlAgreementProductCostsAttrLink::getCostsId, ptlAgreementProductCostsNew.getId()));
+        List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        //再添加属性值
+        List<PtlAgreementProductCostsAttrLink> costsAttrLinks = agreementProductCosts.getCostsAttrLinks();
+        List<PtlAgreementProductCostsAttrLink> costsAttrLink = new ArrayList<>();
+        costsAttrLinks.forEach(x -> {
+            //单独处理车牌号
+            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 {
+                PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream().filter(y -> y.getAttrCode().equals(x.getAttrCode())).findFirst().orElse(null);
+                //单独判断radio  radio中存在0的属性值
+                if("radio".equals(ptlAgreementUndwrtRulesAttr.getAttrType())){
+                    if (null != x.getMin()) {
+
+                        x.setCostsId(ptlAgreementProductCostsNew.getId());
+                        x.setId(0);
+                        costsAttrLink.add(x);
+                    }
+                }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);
+                    }
+                }
+            }
+        });
+        ptlAgreementProductCostsAttrLinkService.saveBatch(costsAttrLink);
+        return true;
+    }
+
+    @Transactional
+    @Override
+    public boolean costsDelete(String costsId) {
+        baseMapper.deleteById(costsId);
+        ptlAgreementProductCostsAttrLinkService.remove(new LambdaQueryWrapper<PtlAgreementProductCostsAttrLink>().eq(PtlAgreementProductCostsAttrLink::getCostsId, costsId));
+        return true;
+    }
+}

+ 21 - 0
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesAttrLinkServiceImpl.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.PtlAgreementProductCostsAttrLinkMapper;
+import com.ydtech.modules.protocols.dao.PtlAgreementUndwrtRulesAttrLinkMapper;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttrLink;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsAttrLinkService;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesAttrLinkService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @description 协议承保规则属性 service实现类
+ * @createDate 2024-2-22 15:44:29
+ * @Entity com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRulesAttrMapper
+ */
+@Service
+public class PtlAgreementUndwrtRulesAttrLinkServiceImpl extends ServiceImpl<PtlAgreementUndwrtRulesAttrLinkMapper, PtlAgreementUndwrtRulesAttrLink>
+        implements PtlAgreementUndwrtRulesAttrLinkService {
+
+}

+ 69 - 0
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesAttrServiceImpl.java

@@ -0,0 +1,69 @@
+package com.ydtech.modules.protocols.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
+import com.ydtech.modules.protocols.dao.PtlAgreementUndwrtRulesAttrMapper;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesDict;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesDictLabal;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesAttrService;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesDictLabalService;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesDictService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @description 协议承保规则属性 service实现类
+ * @createDate 2024-2-22 15:44:29
+ * @Entity com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRulesAttrMapper
+ */
+@Service
+public class PtlAgreementUndwrtRulesAttrServiceImpl extends ServiceImpl<PtlAgreementUndwrtRulesAttrMapper, PtlAgreementUndwrtRulesAttr>
+        implements PtlAgreementUndwrtRulesAttrService {
+
+    @Autowired
+    PtlAgreementUndwrtRulesDictService ptlAgreementUndwrtRulesDictService;
+
+    @Autowired
+    PtlAgreementUndwrtRulesDictLabalService ptlAgreementUndwrtRulesDictLabalService;
+
+    /**
+     * 获取所有规则字典列表
+     *
+     * @return
+     */
+    @Override
+    public List<PtlAgreementUndwrtRulesAttr> getUndwrtRulesAttrList(){
+        List<PtlAgreementUndwrtRulesDictLabal> undwrtRulesDictList = ptlAgreementUndwrtRulesDictService.getUndwrtRulesDictList();
+        List<PtlAgreementUndwrtRulesAttr> list = this.list();
+        list.forEach(attr -> {
+            List<PtlAgreementUndwrtRulesDictLabal> listTmp = undwrtRulesDictList.stream().filter(dict -> attr.getDictId() == dict.getDictId()).collect(Collectors.toList());
+            if(attr.getMinArray() == null)
+                attr.setMinArray(new String[]{});
+            if (attr.getDictLabal() == null)
+                attr.setDictLabal(new ArrayList<>());
+            attr.setDictLabal(listTmp);
+        });
+        return list;
+    }
+
+    @Override
+    public Map<String, List<PtlAgreementUndwrtRulesAttr>> getUndwrtRulesAttrListType(List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
+        Map<String, List<PtlAgreementUndwrtRulesAttr>> collect = new HashMap<>();
+        for (PtlAgreementUndwrtRulesAttr attr : undwrtRulesAttrList) {
+            if (collect.containsKey(attr.getAttrGroup())) {
+                collect.get(attr.getAttrGroup()).add(attr);
+            } else {
+                List<PtlAgreementUndwrtRulesAttr> list = new ArrayList<>();
+                list.add(attr);
+                collect.put(attr.getAttrGroup(), list);
+            }
+        }
+        return collect;
+    }
+
+}

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

@@ -0,0 +1,24 @@
+package com.ydtech.modules.protocols.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.protocols.dao.PtlAgreementUndwrtRulesDictLabalMapper;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesDictLabal;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesDictLabalService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author: tz
+ * @description 协议承保规则属性字典 service实现类
+ * @createDate 2024-2-22 15:44:29
+ * @Entity com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRulesdictMapper
+ */
+@Service
+public class PtlAgreementUndwrtRulesDictLabalServiceImpl extends ServiceImpl<PtlAgreementUndwrtRulesDictLabalMapper, PtlAgreementUndwrtRulesDictLabal>
+        implements PtlAgreementUndwrtRulesDictLabalService {
+
+
+}
+
+
+
+

+ 54 - 0
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesDictServiceImpl.java

@@ -0,0 +1,54 @@
+package com.ydtech.modules.protocols.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.protocols.dao.PtlAgreementUndwrtRulesDictMapper;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesDict;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesDictLabal;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesDictLabalService;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesDictService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Author: tz
+ * @description 协议承保规则属性字典 service实现类
+ * @createDate 2024-2-22 15:44:29
+ * @Entity com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRulesdictMapper
+ */
+@Service
+public class PtlAgreementUndwrtRulesDictServiceImpl extends ServiceImpl<PtlAgreementUndwrtRulesDictMapper, PtlAgreementUndwrtRulesDict>
+        implements PtlAgreementUndwrtRulesDictService {
+
+    @Autowired
+    PtlAgreementUndwrtRulesDictLabalService ptlAgreementUndwrtRulesDictLabalService;
+
+
+    /**
+     * 获取所有规则字典列表
+     * @return
+     */
+    @Override
+    public List<PtlAgreementUndwrtRulesDictLabal> getUndwrtRulesDictList() {
+        List<PtlAgreementUndwrtRulesDict> ptlAgreementUndwrtRulesDicts = baseMapper.selectList(new QueryWrapper<>(new PtlAgreementUndwrtRulesDict()));
+        List<PtlAgreementUndwrtRulesDictLabal> list = ptlAgreementUndwrtRulesDictLabalService.list();
+
+        Map<Integer,List<PtlAgreementUndwrtRulesDictLabal>> collect = list.stream().collect(Collectors.groupingBy(PtlAgreementUndwrtRulesDictLabal::getParentId));
+        list = collect.get(0);
+        for(Map.Entry<Integer, List<PtlAgreementUndwrtRulesDictLabal>> map : collect.entrySet()){
+            Integer key = map.getKey();
+            List<PtlAgreementUndwrtRulesDictLabal> value = map.getValue();
+            list.stream().filter(x -> x.getId() == key).forEach(x -> x.setChildren(value));
+        }
+        return list;
+    }
+}
+
+
+
+

+ 222 - 0
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesNewServiceImpl.java

@@ -0,0 +1,222 @@
+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.core.page.PageRequest;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+import com.ydtech.modules.protocol.entity.po.PtlAreaLicense;
+import com.ydtech.modules.protocol.service.PtlAreaLicenseService;
+import com.ydtech.modules.protocols.dao.PtlAgreementProductCostsAttrLinkMapper;
+import com.ydtech.modules.protocols.dao.PtlAgreementUndwrtRulesNewMapper;
+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 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.util.stream.Collectors;
+
+/**
+ * @description 协议承保规则属性 service实现类
+ * @createDate 2024-2-22 15:44:29
+ * @Entity com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRulesAttrMapper
+ */
+@Service
+public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreementUndwrtRulesNewMapper, PtlAgreementUndwrtRulesNew>
+        implements PtlAgreementUndwrtRulesNewService {
+
+    @Autowired
+    private PtlAgreementUndwrtRulesAttrLinkService ptlAgreementUndwrtRulesAttrLinkService;
+
+    @Autowired
+    private PtlAreaLicenseService ptlAreaLicenseService;
+
+    @Autowired
+    private PtlAgreementUndwrtRulesAttrService ptlAgreementUndwrtRulesAttrService;
+
+    @Override
+    public AgreementUndwrtRulesSave rulesGet(String ruleId, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
+        //设置费用入口信息
+        PtlAgreementUndwrtRulesNew ptlAgreementUndwrtRulesNew = baseMapper.selectOne(new LambdaQueryWrapper<PtlAgreementUndwrtRulesNew>().eq(PtlAgreementUndwrtRulesNew::getId, ruleId));
+        AgreementUndwrtRulesSave agreementUndwrtRulesSave = new AgreementUndwrtRulesSave();
+        BeanUtils.copyProperties(ptlAgreementUndwrtRulesNew, agreementUndwrtRulesSave);
+
+
+        //设置费用因子属性
+        List<PtlAgreementUndwrtRulesAttr> ptlAgreementUndwrtRulesAttrs = new ArrayList<>();
+        List<PtlAgreementUndwrtRulesAttrLink> list = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>()
+                .eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, ruleId));
+
+        undwrtRulesAttrList.stream().forEach(x -> {
+            //处理多选和下拉
+            if("checkbox".equals(x.getAttrType()) || "select".equals(x.getAttrType()))
+            {
+                //处理车牌
+                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) {
+                        //根据operator 获取车牌的地区id
+                        List<PtlAreaLicense> byParentNumber = ptlAreaLicenseService.getByParentNumber(licenseNo.getOperator());
+                        List<PtlAgreementUndwrtRulesDictLabal> dictLabal = byParentNumber.stream().map(y -> {
+                            PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = new PtlAgreementUndwrtRulesDictLabal();
+                            ptlAgreementUndwrtRulesDictLabal.setDictId(y.getId());
+                            ptlAgreementUndwrtRulesDictLabal.setCode(y.getAreaNumber());
+                            ptlAgreementUndwrtRulesDictLabal.setName(y.getLicense());
+                            return ptlAgreementUndwrtRulesDictLabal;
+                        }).collect(Collectors.toList());
+                        x.setDictLabal(dictLabal);
+                    }
+                }
+                x.setMinArray(new String[]{});
+                list.stream().filter(y -> y.getAttrCode().equals(x.getAttrCode())).findFirst().ifPresent(z -> {
+                    if(null != z.getMin()) {
+                        x.setId(z.getId());
+                        x.setMinArray(z.getMin().split(","));
+                        x.setMax(z.getMax());
+                        x.setOperator(z.getOperator());
+                    }
+                });
+            }else{
+                list.stream().filter(y -> y.getAttrCode().equals(x.getAttrCode())).findFirst().ifPresent(z -> {
+                    x.setId(z.getId());
+                    x.setMin(z.getMin());
+                    x.setMax(z.getMax());
+                    x.setOperator(z.getOperator());
+                });
+            }
+
+            ptlAgreementUndwrtRulesAttrs.add(x);
+        });
+
+        agreementUndwrtRulesSave.setCostsAttrLinks(ptlAgreementUndwrtRulesAttrs);
+
+        return agreementUndwrtRulesSave;
+    }
+
+    @Override
+    public List<PtlAgreementUndwrtRulesNew> rulesList(String agreementId) {
+        List<PtlAgreementUndwrtRulesNew> rulesList = baseMapper.selectList(null);
+        List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesAttrLinkList = ptlAgreementUndwrtRulesAttrLinkService.list();
+        rulesList.forEach(item->{
+            List<PtlAgreementUndwrtRulesAttrLink> collect = ptlAgreementUndwrtRulesAttrLinkList.stream().filter(x -> Objects.equals(x.getRulesId(), item.getId())).collect(Collectors.toList());
+            item.setRulesAttrList(collect);
+        });
+        return rulesList;
+    }
+
+    @Override
+    public Page rulesPage(Page page,String agreementId) {
+
+        Page<PtlAgreementUndwrtRulesNew> rulesPage = baseMapper.selectPage(page,new LambdaQueryWrapper<PtlAgreementUndwrtRulesNew>()
+                .eq(PtlAgreementUndwrtRulesNew::getAgreementId, agreementId));
+        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);
+        });
+        rulesPage.setRecords(records);
+        return rulesPage;
+    }
+
+    @Transactional
+    @Override
+    public boolean rulesAdd(AgreementUndwrtRules agreementUndwrtRules) {
+        //添加承保规则主表信息
+        PtlAgreementUndwrtRulesNew ptlAgreementUndwrtRulesNew = new PtlAgreementUndwrtRulesNew();
+        BeanUtils.copyProperties(agreementUndwrtRules, ptlAgreementUndwrtRulesNew);
+        ptlAgreementUndwrtRulesNew.setId(null);
+        int insert = baseMapper.insert(ptlAgreementUndwrtRulesNew);
+
+        //遍历承保规则属性
+        List<PtlAgreementUndwrtRulesAttrLink> rulesAttrList = agreementUndwrtRules.getRulesAttrList();
+        List<PtlAgreementUndwrtRulesAttrLink> costsAttrLink = new ArrayList<>();
+        rulesAttrList.forEach(x -> {
+            //单独处理车牌号
+            if("LicenseNo".equals(x.getAttrCode())){
+                x.setOperator(x.getDictLabal().getJSONObject(0).getString("parentNumber"));
+                x.setRulesId(ptlAgreementUndwrtRulesNew.getId());
+                x.setId(0);
+                costsAttrLink.add(x);
+            }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);
+                }
+            }
+        });
+        ptlAgreementUndwrtRulesAttrLinkService.saveBatch(costsAttrLink);
+        return true;
+    }
+
+    @Transactional
+    @Override
+    public boolean rulesUpdate(AgreementUndwrtRules agreementUndwrtRules) {
+        //更新费用主表信息
+        PtlAgreementUndwrtRulesNew ptlAgreementUndwrtRulesNew = new PtlAgreementUndwrtRulesNew();
+        BeanUtils.copyProperties(agreementUndwrtRules, ptlAgreementUndwrtRulesNew);
+        int update = baseMapper.updateById(ptlAgreementUndwrtRulesNew);
+
+        //设置费用因子属性
+        //先删除属性值
+        ptlAgreementUndwrtRulesAttrLinkService.remove(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>()
+                .eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, ptlAgreementUndwrtRulesNew.getId()));
+        List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        //再添加属性值
+        List<PtlAgreementUndwrtRulesAttrLink> costsAttrLinks = agreementUndwrtRules.getRulesAttrList();
+        List<PtlAgreementUndwrtRulesAttrLink> costsAttrLink = new ArrayList<>();
+        costsAttrLinks.forEach(x -> {
+            //单独处理车牌号
+            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 {
+                PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream().filter(y -> y.getAttrCode().equals(x.getAttrCode())).findFirst().orElse(null);
+                //单独判断radio  radio中存在0的属性值
+                if("radio".equals(ptlAgreementUndwrtRulesAttr.getAttrType())){
+                    if (null != x.getMin()) {
+
+                        x.setRulesId(ptlAgreementUndwrtRulesNew.getId());
+                        x.setId(0);
+                        costsAttrLink.add(x);
+                    }
+                }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);
+                    }
+                }
+            }
+        });
+        ptlAgreementUndwrtRulesAttrLinkService.saveBatch(costsAttrLink);
+        return true;
+    }
+
+    @Transactional
+    @Override
+    public boolean rulesDelete(String rulesId) {
+        ptlAgreementUndwrtRulesAttrLinkService.remove(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>()
+                .eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, rulesId));
+
+        baseMapper.deleteById(rulesId);
+        return true;
+    }
+}