diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index 0153428..b25d20c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -3,6 +3,7 @@ package com.ruoyi; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup; +import org.springframework.scheduling.annotation.EnableScheduling; /** * 启动程序 @@ -11,6 +12,7 @@ import org.springframework.boot.context.metrics.buffering.BufferingApplicationSt */ @SpringBootApplication +@EnableScheduling //开启定时任务注解驱动 public class RuoYiApplication { public static void main(String[] args) { diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaRemindController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaRemindController.java index 9043b4c..ac8f41f 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaRemindController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaRemindController.java @@ -122,4 +122,14 @@ public class SysOaRemindController extends BaseController { @PathVariable Long[] remindIds) { return toAjax(iSysOaRemindService.deleteWithValidByIds(Arrays.asList(remindIds), true)); } + + /** + * 查询所有小于三天的任务和项目提醒,只查当天(到秒)。 + * @return List + */ + @GetMapping("/getRecentRemindList") + public R> getRecentRemindList() { + List remindList = iSysOaRemindService.queryRecentRemindList(); + return R.ok(remindList); + } } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaRemind.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaRemind.java index 43392cc..6b221c4 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaRemind.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaRemind.java @@ -60,6 +60,15 @@ public class SysOaRemind extends BaseEntity { */ private String remark; + /** 提醒类型(task/project) */ + private String remindType; + /** 事件id(taskId/projectId) */ + private Long detailId; + /** 被分配者 */ + private Long targetUserId; + /** 结束时间 */ + private Date endTime; + /** * 创建者 */ diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaRemindBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaRemindBo.java index f22678d..2170bf5 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaRemindBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaRemindBo.java @@ -87,5 +87,14 @@ public class SysOaRemindBo extends BaseEntity { */ private Date updateTime; + /** 提醒类型(task/project) */ + private String remindType; + /** 事件id(taskId/projectId) */ + private Long detailId; + /** 被分配者 */ + private Long targetUserId; + /** 结束时间 */ + private Date endTime; + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaRemindVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaRemindVo.java index 6c54d89..eeb3b19 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaRemindVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaRemindVo.java @@ -96,10 +96,17 @@ public class SysOaRemindVo { private Date updateTime; private String type; - + //截至时间 private Long remainTime; - + /** 提醒类型(task/project) */ + private String remindType; + /** 事件id(taskId/projectId) */ + private Long detailId; + /** 被分配者 */ + private Long targetUserId; + /** 结束时间 */ + private Date endTime; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaRemindService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaRemindService.java index 0d57bce..34cc9f3 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaRemindService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaRemindService.java @@ -44,6 +44,12 @@ public interface ISysOaRemindService { */ List queryList(SysOaRemindBo bo); + /** + * 查询所有小于三天的任务和项目提醒,只查当天(到秒)。 + * @return List + */ + List queryRecentRemindList(); + /** * 新增事件提醒 */ diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaRemindServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaRemindServiceImpl.java index 9e87912..c1f3bbd 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaRemindServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaRemindServiceImpl.java @@ -19,6 +19,7 @@ import com.ruoyi.oa.service.IOaProgressService; import com.ruoyi.oa.service.ISysOaProjectService; import com.ruoyi.oa.service.ISysOaTaskService; import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import com.ruoyi.oa.domain.bo.SysOaRemindBo; import com.ruoyi.oa.domain.vo.SysOaRemindVo; @@ -157,6 +158,45 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService { return baseMapper.selectVoList(lqw); } + @Override + public List queryRecentRemindList() { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.in(SysOaRemind::getRemindType, Arrays.asList("task", "project")); + lqw.eq(SysOaRemind::getTaskStatus, "0"); + // 只查当天(到秒) + java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd"); + String today = sdf.format(new java.util.Date()); + lqw.apply("DATE_FORMAT(create_time, '%Y-%m-%d') = {0}", today); + lqw.orderByAsc(SysOaRemind::getEndTime); + List remindList = baseMapper.selectList(lqw); + List voList = new ArrayList<>(); + for (SysOaRemind remind : remindList) { + SysOaRemindVo vo = new SysOaRemindVo(); + vo.setRemindId(remind.getRemindId()); + vo.setTaskTitle(remind.getTaskTitle()); + vo.setContent(remind.getContent()); + vo.setTaskTime(remind.getTaskTime()); + vo.setTaskStatus(remind.getTaskStatus()); + vo.setAccessory(remind.getAccessory()); + vo.setRemark(remind.getRemark()); + vo.setCreateBy(remind.getCreateBy()); + vo.setCreateTime(remind.getCreateTime()); + vo.setUpdateBy(remind.getUpdateBy()); + vo.setUpdateTime(remind.getUpdateTime()); + vo.setRemindType(remind.getRemindType()); + vo.setDetailId(remind.getDetailId()); + vo.setTargetUserId(remind.getTargetUserId()); + vo.setEndTime(remind.getEndTime()); + // 计算剩余天数 + if (remind.getEndTime() != null) { + long diff = (remind.getEndTime().getTime() - System.currentTimeMillis()) / (1000 * 60 * 60 * 24); + vo.setRemainTime(diff); + } + voList.add(vo); + } + return voList; + } + private LambdaQueryWrapper buildQueryWrapper(SysOaRemindBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); @@ -212,4 +252,66 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService { } return baseMapper.deleteBatchIds(ids) > 0; } + + /** + * 定时任务:每天凌晨1点,查task表和project表,把3天内到期且未完成/未完结的任务和项目插入remind表。 + */ + @Scheduled(cron = "0 0 1 * * ?") + public void generateRemindJob() { + // 查询3天内到期的任务 + SysOaTaskBo taskBo = new SysOaTaskBo(); + // 只查未完成任务 + taskBo.setState(0L); + List taskList = sysOaTaskService.queryList(taskBo); + Date now = new Date(); + for (SysOaTaskVo task : taskList) { + if (task.getFinishTime() != null) { + long diff = (task.getFinishTime().getTime() - now.getTime()) / (1000 * 60 * 60 * 24); + if (diff >= 0 && diff <= 3) { + SysOaRemind remind = new SysOaRemind(); + remind.setRemindType("task"); + remind.setDetailId(task.getTaskId()); + remind.setTargetUserId(task.getWorkerId()); + remind.setTaskTitle(task.getTaskTitle()); + remind.setContent(task.getContent()); + remind.setTaskTime(now); + remind.setTaskStatus("0"); + remind.setEndTime(task.getFinishTime()); + remind.setCreateBy(task.getCreateBy()); + remind.setCreateTime(now); + remind.setUpdateBy(""); // 无updateBy + remind.setAccessory(task.getAccessory()); + remind.setRemark(task.getRemark()); + baseMapper.insert(remind); + } + } + } + // 查询3天内到期的项目 + SysOaProjectBo projectBo = new SysOaProjectBo(); + projectBo.setProjectStatus("0"); // 只查未完结项目 + List projectList = projectService.queryList(projectBo); + for (SysOaProjectVo project : projectList) { + if (project.getFinishTime() != null) { + long diff = (project.getFinishTime().getTime() - now.getTime()) / (1000 * 60 * 60 * 24); + if (diff >= 0 && diff <= 3) { + SysOaRemind remind = new SysOaRemind(); + remind.setRemindType("project"); + remind.setDetailId(project.getProjectId()); + remind.setTaskTitle(project.getProjectName()); + remind.setContent(project.getIntroduction()); + remind.setTaskTime(null); + remind.setTaskStatus("0"); + remind.setEndTime(project.getFinishTime()); + remind.setCreateBy(project.getCreateBy()); + remind.setCreateTime(now); + remind.setUpdateBy(""); // 无updateBy + remind.setAccessory(project.getAccessory()); + remind.setRemark(project.getRemark()); + // 项目提醒targetUserId可为空或负责人id + remind.setTargetUserId(null); + baseMapper.insert(remind); + } + } + } + } }