diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java index 72178a7..5c35e1e 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java @@ -125,7 +125,14 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { * 计算相差天数 */ public static int differentDaysByMillisecond(Date date1, Date date2) { - return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24))); + return Math.abs((int) (differentMillisecond(date1, date2) / (1000 * 3600 * 24))); + } + + /** + * 计算相差毫秒数 + */ + public static long differentMillisecond(Date date1, Date date2) { + return date2.getTime() - date1.getTime(); } /** diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/controller/web/WebController.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/controller/web/WebController.java index 8531bb3..f9c73e9 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/controller/web/WebController.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/controller/web/WebController.java @@ -3,6 +3,7 @@ package org.dromara.scale.controller.web; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; +import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; @@ -19,6 +20,8 @@ import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; +import static org.dromara.common.satoken.utils.LoginHelper.getLoginUser; + /** *

TODO

* diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScalePublishServiceImpl.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScalePublishServiceImpl.java index e587afd..3a8ce73 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScalePublishServiceImpl.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScalePublishServiceImpl.java @@ -9,10 +9,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.redis.utils.QueueUtils; import org.dromara.scale.constant.StatusEnum; import org.dromara.scale.domain.SysScalePublish; import org.dromara.scale.domain.bo.SysScalePublishBo; @@ -26,6 +28,7 @@ import org.springframework.stereotype.Service; import java.util.Collection; import java.util.Date; import java.util.List; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import static org.dromara.common.satoken.utils.LoginHelper.getLoginUser; @@ -95,7 +98,12 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService { add.setCreateBy(loginUser.getUserId()); add.setCreateTime(new Date()); validEntityBeforeSave(add); - + //将时间校验移出来,方便后面使用 + Date expireTime = add.getExpireTime(); + long l = DateUtils.differentMillisecond(new Date(), expireTime); + if(l<=1000 * 3600 * 12){ + throw new ServiceException("截止日期必须在六小时后"); + } if (CollUtil.isNotEmpty(bo.getScaleIds())) { List list = sysScaleMapper.findSysScaleByIds(StrUtil.join(StrUtil.COMMA, bo.getScaleIds())); add.setScaleNames(list.stream().map(SysScaleVo::getScaleName).collect(Collectors.joining(StrUtil.COMMA))); @@ -113,7 +121,8 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService { if (flag) { bo.setBatchNo(add.getBatchNo()); } - + //加入延迟队列 + QueueUtils.addDelayedQueueObject("scalePublish-delay-queue", add.getBatchNo(), l, TimeUnit.MILLISECONDS); return flag; } @@ -134,9 +143,9 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService { //TODO 做一些数据校验,如唯一约束 Long deptId = entity.getDeptId(); List sysScalePublishVos = baseMapper.selectVoList(new LambdaQueryWrapper() - .eq(SysScalePublish::getDeptId, deptId) - .eq(SysScalePublish::getStatus, StatusEnum.IN_USE.getValue())); - if(!ArrayUtil.isEmpty(sysScalePublishVos)){ + .eq(SysScalePublish::getDeptId, deptId) + .eq(SysScalePublish::getStatus, StatusEnum.IN_USE.getValue())); + if (!ArrayUtil.isEmpty(sysScalePublishVos)) { throw new ServiceException("此年级下已有发布"); } } diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/starter/ApplicationStarter.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/starter/ApplicationStarter.java new file mode 100644 index 0000000..4c0b055 --- /dev/null +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/starter/ApplicationStarter.java @@ -0,0 +1,40 @@ +package org.dromara.scale.starter; + +import lombok.RequiredArgsConstructor; +import org.dromara.common.redis.utils.QueueUtils; +import org.dromara.scale.constant.StatusEnum; +import org.dromara.scale.domain.SysScalePublish; +import org.dromara.scale.mapper.SysScalePublishMapper; +import org.springframework.boot.CommandLineRunner; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +/** + *

项目初始化执行的任务

+ * + * @author cjw + * @version V1.0.0 + * @date 2024/4/15 15:08 + */ +@Component +@RequiredArgsConstructor +@Order(value = 99) +public class ApplicationStarter implements CommandLineRunner { + + private final SysScalePublishMapper publishMapper; + + @Override + public void run(String... strings){ + subscribeRedisDelayedQueue(); + } + + private void subscribeRedisDelayedQueue(){ + // 项目初始化设置一次即可 + QueueUtils.subscribeBlockingQueue("scalePublish-delay-queue", (Long batchNo) -> { + SysScalePublish publish = new SysScalePublish(); + publish.setBatchNo(batchNo); + publish.setStatus(StatusEnum.DISABLED.getValue()); + publishMapper.updateById(publish); + }, true); + } +}