ycl-common/src/main/java/enumeration/converter/RuleDeductCategoryConverter.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-common/src/main/java/enumeration/general/RuleDeductCategoryEnum.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRule.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TContract.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/java/com/ycl/platform/controller/TContractController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/java/com/ycl/platform/service/ICalculateRuleService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/java/com/ycl/platform/service/ITContractService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | 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