龚焕茏
2024-04-24 cebbcb63dfd7c9599868959c7fc36f16ed3b1911
合同导入模板生成、导入合同及规则、合同规则展示
6个文件已修改
2个文件已添加
131 ■■■■■ 已修改文件
ycl-common/src/main/java/enumeration/converter/RuleDeductCategoryConverter.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/enumeration/general/RuleDeductCategoryEnum.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRule.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TContract.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/controller/TContractController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/ICalculateRuleService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/ITContractService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/enumeration/converter/RuleDeductCategoryConverter.java
New file
@@ -0,0 +1,47 @@
package enumeration.converter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import enumeration.general.RuleDeductCategoryEnum;
import lombok.extern.slf4j.Slf4j;
/**
 * 扣分类型枚举装换器
 *
 * @author gonghl
 */
@Slf4j
public class RuleDeductCategoryConverter implements Converter<RuleDeductCategoryEnum> {
    @Override
    public Class supportJavaTypeKey() {
        return null;
    }
    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return null;
    }
    @Override
    public RuleDeductCategoryEnum convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        if (cellData.getStringValue().equals(RuleDeductCategoryEnum.DEDUCT_POINTS.getDesc())) {
            return RuleDeductCategoryEnum.DEDUCT_POINTS;
        } else if (cellData.getStringValue().equals(RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY.getDesc())) {
            return RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY;
        } else if (cellData.getStringValue().equals(RuleDeductCategoryEnum.MULTIPLY_POINTS_AFTER_DIVIDING_QUANTITY.getDesc())) {
            return RuleDeductCategoryEnum.MULTIPLY_POINTS_AFTER_DIVIDING_QUANTITY;
        } else {
            return null;
        }
    }
    @Override
    public WriteCellData convertToExcelData(RuleDeductCategoryEnum value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        return new WriteCellData(value.getDesc());
    }
}
ycl-common/src/main/java/enumeration/general/RuleDeductCategoryEnum.java
New file
@@ -0,0 +1,27 @@
package enumeration.general;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
/**
 * 合同规则扣分类型
 * @author gonghl
 */
@Getter
public enum RuleDeductCategoryEnum {
    DEDUCT_POINTS("DEDUCT_POINTS", "扣指定分数"),
    MULTIPLY_POINTS_BY_QUANTITY("MULTIPLY_POINTS_BY_QUANTITY", "分数乘以数量"),
    MULTIPLY_POINTS_AFTER_DIVIDING_QUANTITY("MULTIPLY_POINTS_AFTER_DIVIDING_QUANTITY", "除以数量后乘以分数");
    @EnumValue // 标明该字段存入数据库
    private final String code;
    @JsonValue // 标明在转JSON时使用该字段
    private final String desc;
    RuleDeductCategoryEnum(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }
}
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRule.java
@@ -9,6 +9,8 @@
import com.baomidou.mybatisplus.annotation.TableName;
import com.ycl.system.domain.TreeEntity;
import com.ycl.system.domain.TreeNode;
import enumeration.converter.RuleDeductCategoryConverter;
import enumeration.general.RuleDeductCategoryEnum;
import lombok.Data;
import java.util.Date;
@@ -61,10 +63,10 @@
    private String ruleCondition;
    /**
     * 扣减方式 1/2/3 扣指定分数/分数乘以数量/除以数量后乘以分数
     * 扣减方式 扣指定分数/分数乘以数量/除以数量后乘以分数
     */
    @ExcelProperty("扣分方式")
    private String deductCategory;
    @ExcelProperty(value = "扣分方式", converter = RuleDeductCategoryConverter.class)
    private RuleDeductCategoryEnum deductCategory;
    /**
     * 扣除分数
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TContract.java
@@ -57,6 +57,11 @@
    @JsonFormat(pattern = "yyyy-MM-dd hh-mm-ss")
    private Date endTime;
    /**
     * 合同附件
     */
    private String attachment;
    private Date createTime;
    private Date updateTime;
ycl-server/src/main/java/com/ycl/platform/controller/TContractController.java
@@ -59,8 +59,7 @@
    @PreAuthorize("@ss.hasPermi('system:user:import')")
    @PostMapping("/importData")
    public AjaxResult importData(MultipartFile file, TContract tContract) {
        tContractService.importData(file, tContract);
        return success();
        return tContractService.importData(file, tContract);
    }
    /**
ycl-server/src/main/java/com/ycl/platform/service/ICalculateRuleService.java
@@ -69,5 +69,10 @@
     */
    List<CalculateRule> readExcel(MultipartFile file);
    /**
     * 根据合同id查询规则
     * @param contractId 合同id
     * @return 合同规则
     */
    List<CalculateRule> getRuleListByContractId(Integer contractId);
}
ycl-server/src/main/java/com/ycl/platform/service/ITContractService.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ycl.platform.domain.entity.TContract;
import com.ycl.system.AjaxResult;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
@@ -27,7 +28,7 @@
     * @param tContract 合同信息
     * @return 导入结果
     */
    void importData(MultipartFile file, TContract tContract);
    AjaxResult importData(MultipartFile file, TContract tContract);
    List<TContract> selectAll();
}
ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java
@@ -12,13 +12,17 @@
import com.ycl.platform.mapper.TContractMapper;
import com.ycl.platform.service.ICalculateRuleService;
import com.ycl.platform.service.ITContractService;
import com.ycl.system.AjaxResult;
import com.ycl.utils.DateUtils;
import com.ycl.utils.StringUtils;
import enumeration.general.RuleDeductCategoryEnum;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.multipart.MultipartFile;
import java.net.URLEncoder;
@@ -77,19 +81,19 @@
        calculateRule1.setRuleName("视频平均在线率");
        calculateRule1.setRuleDesc("(1)视频在线率=视频在线数量÷前端服务配置数(应扣除不可抗力或与中标人服务无关造成的掉线除外。)");
        calculateRule1.setRuleCondition("≥98%");
        calculateRule1.setDeductCategory("扣指定分数");
        calculateRule1.setDeductCategory(RuleDeductCategoryEnum.DEDUCT_POINTS);
        calculateRule1.setCalcFraction(0.00);
        list.add(calculateRule1);
        CalculateRule calculateRule2 = new CalculateRule();
        calculateRule2.setRuleDesc("(2)视频平均在线率:当月每日视频在线率的平均值。");
        calculateRule2.setRuleCondition("95%≤视频平均在线率<98%");
        calculateRule2.setDeductCategory("扣指定分数");
        calculateRule2.setDeductCategory(RuleDeductCategoryEnum.DEDUCT_POINTS);
        calculateRule2.setCalcFraction(5.00);
        list.add(calculateRule2);
        CalculateRule calculateRule3 = new CalculateRule();
        calculateRule3.setRuleDesc("(3)视频在线率保留整数并且向下取整。");
        calculateRule3.setRuleCondition("90%≤视频平均在线率<95%");
        calculateRule3.setDeductCategory("扣指定分数");
        calculateRule3.setDeductCategory(RuleDeductCategoryEnum.DEDUCT_POINTS);
        calculateRule3.setCalcFraction(10.00);
        list.add(calculateRule3);
        CalculateRule calculateRule4 = new CalculateRule();
@@ -97,7 +101,7 @@
        calculateRule4.setRuleName("前端感知源治理工作");
        calculateRule4.setRuleDesc("时钟同步(超过±3秒为不合格)");
        calculateRule4.setRuleCondition("视频监控摄像机时钟不同步,24小时内未修复的");
        calculateRule4.setDeductCategory("分数乘以数量");
        calculateRule4.setDeductCategory(RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY);
        calculateRule4.setCalcFraction(0.1);
        list.add(calculateRule4);
        CalculateRule calculateRule7 = new CalculateRule();
@@ -113,7 +117,7 @@
        calculateRule5.setRuleName("后台系统的保障");
        calculateRule5.setRuleDesc("在个别设备故障但不影响该功能模块整体应用情况下,须在72小时以内排除故障。");
        calculateRule5.setRuleCondition("单次故障时长若超出144小时以后,每超出12小时(不足12小时按12小时计)");
        calculateRule5.setDeductCategory("除以数量后乘以分数");
        calculateRule5.setDeductCategory(RuleDeductCategoryEnum.MULTIPLY_POINTS_AFTER_DIVIDING_QUANTITY);
        calculateRule5.setCalcFraction(2.00);
        calculateRule5.setCalcUnit(12);
        list.add(calculateRule5);
@@ -122,7 +126,8 @@
    @Override
    @Transactional
    public void importData(MultipartFile file, TContract tContract) {
    public AjaxResult importData(MultipartFile file, TContract tContract) {
        // 保存合同
        tContract.setCreateTime(DateUtils.getNowDate());
        tContract.setDeleted("0");
        save(tContract);
@@ -132,7 +137,20 @@
        List<CalculateRule> calculateRulesToSave = new ArrayList<>();
        CalculateRule temp = new CalculateRule();
        for (CalculateRule calculateRule : list) {
            // 父规则
            // 判断数据完整性
            if (ObjectUtils.isEmpty(calculateRule.getDeductCategory())) {
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return AjaxResult.warn("请选择" + calculateRule.getRuleName() + calculateRule.getRuleCondition() + "扣分方式");
            }
            if (RuleDeductCategoryEnum.MULTIPLY_POINTS_AFTER_DIVIDING_QUANTITY.equals(calculateRule.getDeductCategory()) && ObjectUtils.isEmpty(calculateRule.getCalcUnit())) {
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return AjaxResult.warn("请填写" + calculateRule.getRuleName() + calculateRule.getRuleCondition() + "除以数量");
            }
            if(ObjectUtils.isEmpty(calculateRule.getCalcFraction())) {
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return AjaxResult.warn("请填写" + calculateRule.getRuleName() + calculateRule.getRuleCondition() + "扣分数值");
            }
            // 保存父规则获取父id
            if (StringUtils.isNotBlank(calculateRule.getRuleName())) {
                CalculateRule fu = new CalculateRule();
                fu.setContractId(tContract.getId().intValue());
@@ -150,6 +168,7 @@
        }
        // 批量保存规则
        calculateRuleService.saveBatch(calculateRulesToSave);
        return AjaxResult.success("操作成功");
    }
    @Override