事件提醒
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
* 创建者
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -44,6 +44,12 @@ public interface ISysOaRemindService {
|
||||
*/
|
||||
List<SysOaRemindVo> queryList(SysOaRemindBo bo);
|
||||
|
||||
/**
|
||||
* 查询所有小于三天的任务和项目提醒,只查当天(到秒)。
|
||||
* @return List<SysOaRemindVo>
|
||||
*/
|
||||
List<SysOaRemindVo> queryRecentRemindList();
|
||||
|
||||
/**
|
||||
* 新增事件提醒
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user