Browse Source

核保规则实体

cuixinpeng 2 years ago
parent
commit
52bd3c5f29

+ 18 - 0
src/main/java/com/ydtech/modules/protocol/dao/PtlAgreementUndwrtRulesMapper.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.protocol.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules;
+
+
+/**
+ * @author CXP
+ * @description 针对表【ptl_agreement_undwrt_rules(协议产品费用)】的数据库操作Mapper
+ * @createDate 2023年12月20日22:28:24
+ * @Entity com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules
+ */
+public interface PtlAgreementUndwrtRulesMapper extends BaseMapper<PtlAgreementUndwrtRules> {
+}
+
+
+
+

+ 41 - 0
src/main/java/com/ydtech/modules/protocol/entity/dto/PltAgreementRuleSaveDto.java

@@ -0,0 +1,41 @@
+package com.ydtech.modules.protocol.entity.dto;
+
+
+import com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+@ApiModel("核保规则")
+public class PltAgreementRuleSaveDto implements Serializable {
+
+
+    private static final long serialVersionUID = 5893668326174168602L;
+
+    @ApiModelProperty("产品id")
+    private String productId;
+
+    @ApiModelProperty("产品名称")
+    private String name;
+
+    @ApiModelProperty("规则信息")
+    private List<PtlAgreementUndwrtRulesSaveDto> productCosts;
+
+
+    public PltAgreementRuleSaveDto(List<PtlAgreementUndwrtRules> undwrtRulesList) {
+        PtlAgreementUndwrtRules ptlAgreementUndwrtRules = undwrtRulesList.get(0);
+        this.productId = ptlAgreementUndwrtRules.getProductId();
+        this.name = ptlAgreementUndwrtRules.getProductName();
+        this.productCosts = PtlAgreementUndwrtRulesSaveDto.toPltAgreementRuleSaveDto(undwrtRulesList);
+    }
+
+}

+ 183 - 0
src/main/java/com/ydtech/modules/protocol/entity/dto/PtlAgreementUndwrtRulesSaveDto.java

@@ -0,0 +1,183 @@
+package com.ydtech.modules.protocol.entity.dto;
+
+import com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Data
+@ApiModel("承保规则")
+public class PtlAgreementUndwrtRulesSaveDto {
+
+
+    @ApiModelProperty("产品id")
+    private String productId;
+
+    @ApiModelProperty("产品名称")
+    private String productName;
+
+    @ApiModelProperty("规则描述")
+    private String ruleDescription;
+
+    @ApiModelProperty("规则类型(0满足拒保 1满足承包)")
+    private Integer rulesType;
+
+    @ApiModelProperty("是否有效(0 否 1 是 )")
+    private Integer validInd;
+
+    @ApiModelProperty("过户车(0 否 1 是 )")
+    private Integer transfer;
+
+    @ApiModelProperty("新旧车(0 否 1 是 )")
+    private Integer oldAndNew;
+
+    @ApiModelProperty("新能源(0 否 1 是 )")
+    private Integer newEnergy;
+
+    @ApiModelProperty("续保车(0 否 1 是 )")
+    private Integer renewal;
+
+    @ApiModelProperty("车辆大类")
+    private String vehicleCategory;
+
+    @ApiModelProperty("使用性质")
+    private String natureOfUse;
+
+    @ApiModelProperty("客车座位数(最小)")
+    private Integer minSeats;
+
+    @ApiModelProperty("客车座位数(最大)")
+    private Integer maxSeats;
+
+    @ApiModelProperty("货车吨位数(最小)")
+    private Double minTruckTonnage;
+
+    @ApiModelProperty("货车吨位数(最大)")
+    private Double maxTruckTonnage;
+
+    @ApiModelProperty("新车购置价(最小)")
+    private Integer minPurchasePrice;
+
+    @ApiModelProperty("新车购置价(最大)")
+    private Integer maxPurchasePrice;
+
+    @ApiModelProperty("核定载质量(最小)")
+    private Double minApprovedLoadCapacity;
+
+    @ApiModelProperty("核定载质量(最大)")
+    private Double maxApprovedLoadCapacity;
+
+    @ApiModelProperty("交强险保费(最小)")
+    private Integer minCompulsoryInsurancePremium;
+
+    @ApiModelProperty("交强险保费(最大)")
+    private Integer maxCompulsoryInsurancePremium;
+
+    @ApiModelProperty("车船税金额(最小)")
+    private Integer minTaxAmount;
+
+    @ApiModelProperty("车船税金额(最大)")
+    private Integer maxTaxAmount;
+
+    @ApiModelProperty("三者险保额(最小)")
+    private Integer minTheThreePremium;
+
+    @ApiModelProperty("三者险保额(最大)")
+    private Integer maxTheThreePremium;
+
+    @ApiModelProperty("随车产品保费(最小)")
+    private Integer minOnboardProductsPremium;
+
+    @ApiModelProperty("随车产品保费(最大)")
+    private Integer maxOnboardProductsPremium;
+
+    @ApiModelProperty("商业险折扣(最小)")
+    private Double minCommercialInsuranceDiscount;
+
+    @ApiModelProperty("商业险折扣(最大)")
+    private Double maxCommercialInsuranceDiscount;
+
+    @ApiModelProperty("交强险折扣(最小)")
+    private Double minCompulsoryInsuranceDiscount;
+
+    @ApiModelProperty("交强险折扣(最大)")
+    private Double maxCompulsoryInsuranceDiscount;
+
+    @ApiModelProperty("保司评分(最小)")
+    private Double minScore;
+
+    @ApiModelProperty("保司评分(最大)")
+    private Double maxScore;
+
+    @ApiModelProperty("预期赔付率(最小)")
+    private Double minLossRation;
+
+    @ApiModelProperty("预期赔付率(最大)")
+    private Double maxLossRation;
+
+    @ApiModelProperty("车牌号")
+    private String licenseNumber;
+
+    @ApiModelProperty("是否含暂未上牌")
+    private String containNoLicense;
+
+    @ApiModelProperty("司机险保额(最小)")
+    private Integer minDriverAmount;
+
+    @ApiModelProperty("司机险保额(最大)")
+    private Integer maxDriverAmount;
+
+    @ApiModelProperty("乘客险保额(最小)")
+    private Integer minPassengerAmount;
+
+    @ApiModelProperty("乘客险保额(最大)")
+    private Integer maxPassengerAmount;
+
+    @ApiModelProperty("司机乘客关联关系")
+    private String driverPassengerRelation;
+
+    @ApiModelProperty("方案匹配优先级")
+    private Integer priorityLevel;
+
+    @ApiModelProperty("被保人年龄(最小)")
+    private Integer minInsureAge;
+
+    @ApiModelProperty("被保人年龄(最大)")
+    private Integer maxInsureAge;
+
+    @ApiModelProperty("车主年龄(最小)")
+    private Integer minCarOwnerAge;
+
+    @ApiModelProperty("车主年龄(最大)")
+    private Integer maxCarOwnerAge;
+
+    @ApiModelProperty("医保外用任意险别")
+    private Integer anyMedicalAmount;
+
+    @ApiModelProperty("医保外用三者")
+    private Integer thirdMedicalAmount;
+
+    @ApiModelProperty("医保外用司机")
+    private Integer driverMedicalAmount;
+
+    @ApiModelProperty("医保外用乘客")
+    private Integer passengerMedicalAmount;
+
+
+    public static List<PtlAgreementUndwrtRules> toPtlAgreementUndwrtRules(String agreementId, List<PltAgreementRuleSaveDto> scheme) {
+        return scheme.stream().map(x -> PtlAgreementUndwrtRules.toPtlAgreementUndwrtRulesSaveDtoList(agreementId, x.getProductId(), x.getName(), x.getProductCosts())).flatMap(Collection::stream).collect(Collectors.toList());
+    }
+
+    public static List<PtlAgreementUndwrtRulesSaveDto> toPltAgreementRuleSaveDto(List<PtlAgreementUndwrtRules> productCosts) {
+        return productCosts.stream().map(PtlAgreementUndwrtRulesSaveDto::new).collect(Collectors.toList());
+    }
+
+    public PtlAgreementUndwrtRulesSaveDto(PtlAgreementUndwrtRules ptlAgreementUndwrtRules) {
+        BeanUtils.copyProperties(ptlAgreementUndwrtRules, this);
+    }
+}

+ 441 - 0
src/main/java/com/ydtech/modules/protocol/entity/po/PtlAgreementUndwrtRules.java

@@ -0,0 +1,441 @@
+package com.ydtech.modules.protocol.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 com.ydtech.modules.protocol.entity.dto.PtlAgreementUnderwritingRulesSaveDto;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementUndwrtRulesSaveDto;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 协议承保规则
+ *
+ * @TableName ptl_agreement_undwrt_rules
+ */
+@TableName(value = "ptl_agreement_undwrt_rules", autoResultMap = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtlAgreementUndwrtRules implements Serializable {
+
+
+    private static final long serialVersionUID = -2096076927159362790L;
+    /**
+     * 主键/自增
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private String id;
+
+    /**
+     * 协议id
+     */
+    @TableField(value = "agreement_id")
+    private String agreementId;
+
+    /**
+     * 规则类型(0满足拒保 1满足承包)
+     */
+    @TableField(value = "rules_type")
+    private Integer rulesType;
+
+    /**
+     * 产品id
+     */
+    @TableField(value = "product_id")
+    private String productId;
+
+    /**
+     * 产品名称
+     */
+    @TableField(value = "product_name")
+    private String productName;
+
+    /**
+     * 规则描述
+     */
+    @TableField(value = "rule_description")
+    private String ruleDescription;
+
+    /**
+     * 是否有效(0 否 1 是 )
+     */
+    @TableField(value = "valid_ind")
+    private Integer validInd;
+
+    /**
+     * 过户车(0 否 1 是 )
+     */
+    @TableField(value = "transfer")
+    private Integer transfer;
+
+    /**
+     * 新旧车(0 否 1 是 )
+     */
+    @TableField(value = "old_and_new")
+    private Integer oldAndNew;
+
+    /**
+     * 过户车(0 否 1 是 )
+     */
+    @TableField(value = "new_energy")
+    private Integer newEnergy;
+
+    /**
+     * 续保车(0 否 1 是 )
+     */
+    @TableField(value = "renewal")
+    private Integer renewal;
+
+    /**
+     * 车辆大类
+     */
+    @TableField(value = "vehicle_category")
+    private String vehicleCategory;
+
+    /**
+     * 使用性质
+     */
+    @TableField(value = "nature_of_use")
+    private String natureOfUse;
+
+    /**
+     * 客车座位数(最小)
+     */
+    @TableField(value = "min_seats")
+    private Integer minSeats;
+
+    /**
+     * 客车座位数(最大)
+     */
+    @TableField(value = "max_seats")
+    private Integer maxSeats;
+
+    /**
+     * 货车吨位数(最小)
+     */
+    @TableField(value = "min_truck_tonnage")
+    private Double minTruckTonnage;
+
+    /**
+     * 货车吨位数(最大)
+     */
+    @TableField(value = "max_truck_tonnage")
+    private Double maxTruckTonnage;
+
+    /**
+     * 新车购置价(最小)
+     */
+    @TableField(value = "min_purchase_price")
+    private Integer minPurchasePrice;
+
+    /**
+     * 新车购置价(最大)
+     */
+    @TableField(value = "max_purchase_price")
+    private Integer maxPurchasePrice;
+
+    /**
+     * 核定载质量(最小)
+     */
+    @TableField(value = "min_approved_load_capacity")
+    private Double minApprovedLoadCapacity;
+
+    /**
+     * 核定载质量(最大)
+     */
+    @TableField(value = "max_approved_load_capacity")
+    private Double maxApprovedLoadCapacity;
+
+    /**
+     * 交强险保费(最小)
+     */
+    @TableField(value = "min_compulsory_insurance_premium")
+    private Integer minCompulsoryInsurancePremium;
+
+    /**
+     * 交强险保费(最大)
+     */
+    @TableField(value = "max_compulsory_insurance_premium")
+    private Integer maxCompulsoryInsurancePremium;
+
+    /**
+     * 车船税金额(最小)
+     */
+    @TableField(value = "min_tax_amount")
+    private Integer minTaxAmount;
+
+    /**
+     * 车船税金额(最大)
+     */
+    @TableField(value = "max_tax_amount")
+    private Integer maxTaxAmount;
+
+    /**
+     * 三者险保额(最小)
+     */
+    @TableField(value = "min_the_three_premium")
+    private Integer minTheThreePremium;
+
+    /**
+     * 三者险保额(最大)
+     */
+    @TableField(value = "max_the_three_premium")
+    private Integer maxTheThreePremium;
+
+    /**
+     * 随车产品保费(最小)
+     */
+    @TableField(value = "min_onboard_products_premium")
+    private Integer minOnboardProductsPremium;
+
+    /**
+     * 随车产品保费(最大)
+     */
+    @TableField(value = "max_onboard_products_premium")
+    private Integer maxOnboardProductsPremium;
+
+    /**
+     * 商业险折扣(最小)
+     */
+    @TableField(value = "min_commercial_insurance_discount")
+    private Double minCommercialInsuranceDiscount;
+
+    /**
+     * 商业险折扣(最大)
+     */
+    @TableField(value = "max_commercial_insurance_discount")
+    private Double maxCommercialInsuranceDiscount;
+
+    /**
+     * 交强险折扣(最小)
+     */
+    @TableField(value = "min_compulsory_insurance_discount")
+    private Double minCompulsoryInsuranceDiscount;
+
+    /**
+     * 交强险折扣(最大)
+     */
+    @TableField(value = "max_compulsory_insurance_discount")
+    private Double maxCompulsoryInsuranceDiscount;
+
+    /**
+     * 保司评分(最小)
+     */
+    @TableField(value = "min_score")
+    private Double minScore;
+
+    /**
+     * 保司评分(最大)
+     */
+    @TableField(value = "max_score")
+    private Double maxScore;
+
+    /**
+     * 预期赔付率(最小)
+     */
+    @TableField(value = "min_loss_ration")
+    private Double minLossRation;
+
+    /**
+     * 预期赔付率(最大)
+     */
+    @TableField(value = "max_loss_ration")
+    private Double maxLossRation;
+
+    /**
+     * 车牌号
+     */
+    @TableField(value = "license_number")
+    private String licenseNumber;
+
+    /**
+     * 车牌因子是否含暂未上牌
+     */
+    @TableField(value = "contain_noLicense")
+    private String containNoLicense;
+
+
+    /**
+     * 司机险保额(最小)
+     */
+    @TableField(value = "min_driver_amount")
+    private Integer minDriverAmount;
+
+    /**
+     * 司机险保额(最大)
+     */
+    @TableField(value = "max_driver_amount")
+    private Integer maxDriverAmount;
+
+    /**
+     * 乘客险保额(最小)
+     */
+    @TableField(value = "min_passenger_amount")
+    private Integer minPassengerAmount;
+
+    /**
+     * 乘客险保额(最大)
+     */
+    @TableField(value = "max_passenger_amount")
+    private Integer maxPassengerAmount;
+
+    /**
+     * 司机乘客关联关系
+     */
+    @TableField(value = "driver_passenger_relation")
+    private String driverPassengerRelation;
+
+    /**
+     * 方案优先级别
+     */
+    @TableField(value = "priority_level")
+    private Integer priorityLevel;
+
+    /**
+     * 被保人年龄(最小)
+     */
+    @TableField(value = "min_insure_age")
+    private Integer minInsureAge;
+
+    /**
+     * 被保人年龄(最大)
+     */
+    @TableField(value = "max_insure_age")
+    private Integer maxInsureAge;
+
+    /**
+     * 车主年龄(最小)
+     */
+    @TableField(value = "min_car_owner_age")
+    private Integer minCarOwnerAge;
+
+    /**
+     * 车主年龄(最大)
+     */
+    @TableField(value = "max_car_owner_age")
+    private Integer maxCarOwnerAge;
+
+    /**
+     * 医保外用任意险别
+     */
+    @TableField(value = "any_medical_amount")
+    private Integer anyMedicalAmount;
+
+    /**
+     * 医保外用三者
+     */
+    @TableField(value = "third_medical_amount")
+    private Integer thirdMedicalAmount;
+
+    /**
+     * 医保外用司机
+     */
+    @TableField(value = "driver_medical_amount")
+    private Integer driverMedicalAmount;
+
+    /**
+     * 医保外用乘客
+     */
+    @TableField(value = "passenger_medical_amount")
+    private Integer passengerMedicalAmount;
+
+
+    /**
+     * @param agreementId                         协议id
+     * @param productId                           产品id
+     * @param productName                         产品名称
+     * @param ptlAgreementUndwrtRulesSaveDtoList 协议费用 Dto list
+     * @return List<PtlAgreementProductCosts>
+     */
+    public static List<PtlAgreementUndwrtRules> toPtlAgreementUndwrtRulesSaveDtoList(String agreementId, String productId, String productName, List<PtlAgreementUndwrtRulesSaveDto> ptlAgreementUndwrtRulesSaveDtoList) {
+        return ptlAgreementUndwrtRulesSaveDtoList.stream().map(ptlAgreementUndwrtRulesSaveDto -> new PtlAgreementUndwrtRules(agreementId, productId, productName, ptlAgreementUndwrtRulesSaveDto)).collect(Collectors.toList());
+    }
+
+    public PtlAgreementUndwrtRules(String agreementId, String productId, String productName, PtlAgreementUndwrtRulesSaveDto ptlAgreementUndwrtRulesSaveDto) {
+        this.agreementId = agreementId;
+        this.productId = productId;
+        this.productName = productName;
+        BeanUtils.copyProperties(ptlAgreementUndwrtRulesSaveDto, this);
+    }
+
+
+    public static int getObjectHashCode(Object o, int result) {
+        return 31 * result + (o != null ? o.hashCode() : 0);
+    }
+
+    public int getHashCode() {
+        int result = 0;
+        result = getObjectHashCode(this.agreementId, result);
+        result = getObjectHashCode(this.productId, result);
+        result = getObjectHashCode(this.productName, result);
+        result = getObjectHashCode(this.transfer, result);
+        result = getObjectHashCode(this.oldAndNew, result);
+        result = getObjectHashCode(this.newEnergy, result);
+        result = getObjectHashCode(this.renewal, result);
+        result = getObjectHashCode(this.vehicleCategory, result);
+        result = getObjectHashCode(this.natureOfUse, result);
+        result = getObjectHashCode(this.minSeats, result);
+        result = getObjectHashCode(this.maxSeats, result);
+        result = getObjectHashCode(this.minTruckTonnage, result);
+        result = getObjectHashCode(this.maxTruckTonnage, result);
+        result = getObjectHashCode(this.minPurchasePrice, result);
+        result = getObjectHashCode(this.maxPurchasePrice, result);
+        result = getObjectHashCode(this.minApprovedLoadCapacity, result);
+        result = getObjectHashCode(this.maxApprovedLoadCapacity, result);
+        result = getObjectHashCode(this.minCompulsoryInsurancePremium, result);
+        result = getObjectHashCode(this.maxCompulsoryInsurancePremium, result);
+        result = getObjectHashCode(this.minTaxAmount, result);
+        result = getObjectHashCode(this.maxTaxAmount, result);
+        result = getObjectHashCode(this.minTheThreePremium, result);
+        result = getObjectHashCode(this.maxTheThreePremium, result);
+        result = getObjectHashCode(this.minOnboardProductsPremium, result);
+        result = getObjectHashCode(this.maxOnboardProductsPremium, result);
+        result = getObjectHashCode(this.minCommercialInsuranceDiscount, result);
+        result = getObjectHashCode(this.maxCommercialInsuranceDiscount, result);
+        result = getObjectHashCode(this.minCompulsoryInsuranceDiscount, result);
+        result = getObjectHashCode(this.maxCompulsoryInsuranceDiscount, result);
+        result = getObjectHashCode(this.minScore, result);
+        result = getObjectHashCode(this.maxScore, result);
+        result = getObjectHashCode(this.minLossRation, result);
+        result = getObjectHashCode(this.maxLossRation, result);
+        result = getObjectHashCode(this.licenseNumber, result);
+        result = getObjectHashCode(this.ruleDescription, result);
+        result = getObjectHashCode(this.containNoLicense, result);
+        result = getObjectHashCode(this.minDriverAmount, result);
+        result = getObjectHashCode(this.maxDriverAmount, result);
+        result = getObjectHashCode(this.minPassengerAmount, result);
+        result = getObjectHashCode(this.maxPassengerAmount, result);
+        result = getObjectHashCode(this.driverPassengerRelation, result);
+        result = getObjectHashCode(this.priorityLevel,result);
+        result = getObjectHashCode(this.minInsureAge,result);
+        result = getObjectHashCode(this.maxInsureAge,result);
+        result = getObjectHashCode(this.minCarOwnerAge,result);
+        result = getObjectHashCode(this.maxCarOwnerAge,result);
+        result = getObjectHashCode(this.anyMedicalAmount,result);
+        result = getObjectHashCode(this.thirdMedicalAmount,result);
+        result = getObjectHashCode(this.driverMedicalAmount,result);
+        result = getObjectHashCode(this.passengerMedicalAmount,result);
+        return result;
+    }
+
+
+    public static Map<Integer, PtlAgreementUndwrtRules> getIntegerMap(List<PtlAgreementUndwrtRules> ptlAgreementUndwrtRulesList) {
+        Map<Integer, PtlAgreementUndwrtRules> map = new HashMap<>();
+        ptlAgreementUndwrtRulesList.forEach(x -> {
+            int hashCode = x.getHashCode();
+            map.put(hashCode, x);
+        });
+        return map;
+    }
+
+}

+ 68 - 0
src/main/java/com/ydtech/modules/protocol/service/PtlAgreementUndwrtRulesService.java

@@ -0,0 +1,68 @@
+package com.ydtech.modules.protocol.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.protocol.entity.dto.PltAgreementRuleSaveDto;
+import com.ydtech.modules.protocol.entity.dto.PltAgreementSchemeSaveDto;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules;
+
+import java.util.List;
+
+/**
+ * @author CXP
+ * @description 针对表【ptl_agreement_undwrt_rules(协议产品费用)】的数据库操作Service
+ * @createDate 2023年12月20日22:26:17
+ */
+public interface PtlAgreementUndwrtRulesService extends IService<PtlAgreementUndwrtRules> {
+
+    /**
+     * 根据 协议id 删除协议产品费用
+     *
+     * @param agreementId 协议id
+     */
+    void deleteByAgreementId(String agreementId);
+
+    /**
+     * 根据 协议id 查询协议产品费用
+     *
+     * @param agreementId 协议id
+     */
+    List<PltAgreementRuleSaveDto> getByAgreementId(String agreementId);
+
+    /**
+     * 批量提添加产品费用
+     *
+     * @param agreementId 协议id
+     * @param scheme      产品
+     */
+    void saveBatchProductCosts(String agreementId, List<PltAgreementRuleSaveDto> scheme);
+
+    /**
+     * 根据保险公司id 和 配置查询产品费用
+     *
+     * @param companyId 保险公司id
+     * @param filedList 配置list
+     */
+    List<PtlAgreementUndwrtRules> selectByCompanyId(String companyId, List<String> filedList);
+
+    /**
+     * 通过 协议id 构造查询条件
+     *
+     * @param agreementId 协议id
+     * @return LambdaQueryWrapper<PtlAgreementProductCosts>
+     */
+    default LambdaQueryWrapper<PtlAgreementUndwrtRules> getByAgreementIdWrapper(String agreementId) {
+        LambdaQueryWrapper<PtlAgreementUndwrtRules> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(PtlAgreementUndwrtRules::getAgreementId, agreementId);
+        return wrapper;
+    }
+
+    /**
+     * 通过协议ID、业务类型 获取需要进行匹配的费用因子
+     * @param busType
+     * @param agreementId
+     * @return
+     */
+    public List<PtlAgreementUndwrtRules> selectVliadFeeFactor(String busType, String agreementId);
+}

+ 102 - 0
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementUndwrtRulesServiceImpl.java

@@ -0,0 +1,102 @@
+package com.ydtech.modules.protocol.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.protocol.dao.PtlAgreementUndwrtRulesMapper;
+import com.ydtech.modules.protocol.entity.dto.PltAgreementRuleSaveDto;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementUndwrtRulesSaveDto;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules;
+import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
+import com.ydtech.modules.protocol.service.PtlAgreementUndwrtRulesService;
+import com.ydtech.modules.protocol.utils.AssertionUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author CXP
+ * @description 针对表【ptl_agreement_undwrt_rules(协议产品费用)】的数据库操作Service实现
+ * @createDate 2023年12月20日22:25:57
+ */
+@Service
+public class PtlAgreementUndwrtRulesServiceImpl extends ServiceImpl<PtlAgreementUndwrtRulesMapper, PtlAgreementUndwrtRules>
+        implements PtlAgreementUndwrtRulesService {
+
+    private final PtlAgreementAttributionService ptlAgreementAttributionService;
+
+    public PtlAgreementUndwrtRulesServiceImpl(PtlAgreementAttributionService ptlAgreementAttributionService) {
+        this.ptlAgreementAttributionService = ptlAgreementAttributionService;
+    }
+
+    @Override
+    public void deleteByAgreementId(String agreementId) {
+        baseMapper.delete(getByAgreementIdWrapper(agreementId));
+    }
+
+    @Override
+    public List<PltAgreementRuleSaveDto> getByAgreementId(String agreementId) {
+        List<PtlAgreementUndwrtRules> ptlAgreementUndwrtRulesList = baseMapper.selectList(getByAgreementIdWrapper(agreementId));
+        List<String> productIdList = ptlAgreementUndwrtRulesList.stream()
+                .map(PtlAgreementUndwrtRules::getProductId).distinct().collect(Collectors.toList());
+
+        List<PltAgreementRuleSaveDto> productCostsSave = new ArrayList<>();
+        productIdList.forEach(productId -> {
+                    List<PtlAgreementUndwrtRules> productCostsList = ptlAgreementUndwrtRulesList.stream().filter(x -> x.getProductId().equals(productId)).collect(Collectors.toList());
+            PltAgreementRuleSaveDto pltAgreementRuleSaveDto = new PltAgreementRuleSaveDto(productCostsList);
+                    productCostsSave.add(pltAgreementRuleSaveDto);
+                }
+        );
+        return productCostsSave;
+    }
+
+    @Override
+    @Transactional
+    public void saveBatchProductCosts(String agreementId, List<PltAgreementRuleSaveDto> scheme) {
+        if (scheme != null && !scheme.isEmpty()) {
+            List<PtlAgreementUndwrtRules> ptlAgreementUndwrtRulesList = PtlAgreementUndwrtRulesSaveDto.toPtlAgreementUndwrtRules(agreementId, scheme);
+            boolean b = saveBatch(ptlAgreementUndwrtRulesList);
+            AssertionUtils.isSucceed(b, "批量添加产品费用失败");
+        }
+    }
+
+
+    @Override
+    public List<PtlAgreementUndwrtRules> selectByCompanyId(String companyId, List<String> filedList) {
+        String agreementId = ptlAgreementAttributionService.selectByCompanyId(companyId, filedList);
+        List<PtlAgreementUndwrtRules> ptlAgreementProductCosts = baseMapper.selectList(getByAgreementIdWrapper(agreementId));
+        if (ptlAgreementProductCosts.isEmpty()) {
+            throw new SystemException("未查询到费用配置");
+        }
+        return ptlAgreementProductCosts;
+    }
+
+    /**
+     * 通过协议ID 获取需要进行匹配的费用因子
+     * @param busType
+     * @param agreementId
+     * @return
+     */
+    @Override
+    public List<PtlAgreementUndwrtRules> selectVliadFeeFactor(String busType,String agreementId){
+        //获取当前时间,用来卡费用方案中有效期区间
+        Date date=new Date();
+        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String nowDate=sdf.format(date);
+        //组织查询条件
+        List tempTypes=new ArrayList();
+        tempTypes.add(busType);//跟单类型
+        tempTypes.add("039999");//兜底类型
+        LambdaQueryWrapper<PtlAgreementUndwrtRules> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(PtlAgreementUndwrtRules::getAgreementId, agreementId);
+        wrapper.in(PtlAgreementUndwrtRules::getProductId,tempTypes);
+        List<PtlAgreementUndwrtRules> ptlAgreementProductCosts = baseMapper.selectList(wrapper);
+        return ptlAgreementProductCosts;
+    }
+
+}