事件提醒

This commit is contained in:
2025-07-09 16:26:04 +08:00
parent 5e331360bd
commit 387e728b26
7 changed files with 147 additions and 2 deletions

View File

@@ -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) {

View File

@@ -122,4 +122,14 @@ public class SysOaRemindController extends BaseController {
@PathVariable Long[] remindIds) {
return toAjax(iSysOaRemindService.deleteWithValidByIds(Arrays.asList(remindIds), true));
}
/**
* 查询所有小于三天的任务和项目提醒,只查当天(到秒)。
* @return List<SysOaRemindVo>
*/
@GetMapping("/getRecentRemindList")
public R<List<SysOaRemindVo>> getRecentRemindList() {
List<SysOaRemindVo> remindList = iSysOaRemindService.queryRecentRemindList();
return R.ok(remindList);
}
}

View File

@@ -60,6 +60,15 @@ public class SysOaRemind extends BaseEntity {
*/
private String remark;
/** 提醒类型task/project */
private String remindType;
/** 事件idtaskId/projectId */
private Long detailId;
/** 被分配者 */
private Long targetUserId;
/** 结束时间 */
private Date endTime;
/**
* 创建者
*/

View File

@@ -87,5 +87,14 @@ public class SysOaRemindBo extends BaseEntity {
*/
private Date updateTime;
/** 提醒类型task/project */
private String remindType;
/** 事件idtaskId/projectId */
private Long detailId;
/** 被分配者 */
private Long targetUserId;
/** 结束时间 */
private Date endTime;
}

View File

@@ -96,10 +96,17 @@ public class SysOaRemindVo {
private Date updateTime;
private String type;
//截至时间
private Long remainTime;
/** 提醒类型task/project */
private String remindType;
/** 事件idtaskId/projectId */
private Long detailId;
/** 被分配者 */
private Long targetUserId;
/** 结束时间 */
private Date endTime;
}

View File

@@ -44,6 +44,12 @@ public interface ISysOaRemindService {
*/
List<SysOaRemindVo> queryList(SysOaRemindBo bo);
/**
* 查询所有小于三天的任务和项目提醒,只查当天(到秒)。
* @return List<SysOaRemindVo>
*/
List<SysOaRemindVo> queryRecentRemindList();
/**
* 新增事件提醒
*/

View File

@@ -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<SysOaRemindVo> queryRecentRemindList() {
LambdaQueryWrapper<SysOaRemind> 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<SysOaRemind> remindList = baseMapper.selectList(lqw);
List<SysOaRemindVo> 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<SysOaRemind> buildQueryWrapper(SysOaRemindBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SysOaRemind> 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<SysOaTaskVo> 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<SysOaProjectVo> 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);
}
}
}
}
}