feat(oa): 添加工资审批提醒功能

- 在 SysOaRemindServiceImpl 中增加 salary 类型的提醒过滤
- 新增 OaSalaryRemindScheduler 定时任务类
- 实现每天凌晨1点自动生成待审批工资提醒
- 提醒内容包括单位名称、薪资周期及状态信息
- 设置默认目标用户为老板用户 ID
- 工资提醒创建时间为当前时间,截止时间为三天后
This commit is contained in:
2025-12-06 13:56:39 +08:00
parent 81faa1de84
commit 7638f68988
2 changed files with 66 additions and 1 deletions

View File

@@ -0,0 +1,65 @@
package com.ruoyi.oa.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.oa.domain.OaSalaryMaster;
import com.ruoyi.oa.domain.SysOaRemind;
import com.ruoyi.oa.mapper.OaSalaryMasterMapper;
import com.ruoyi.oa.mapper.SysOaRemindMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
@RequiredArgsConstructor
@Service
public class OaSalaryRemindScheduler {
private final OaSalaryMasterMapper salaryMasterMapper;
private final SysOaRemindMapper remindMapper;
// 老板用户ID
private static final Long BOSS_USER_ID = 1859252208375152641L;
// 每天凌晨1点执行
@Scheduled(cron = "0 0 1 * * ?")
public void generateSalaryReminds() {
// 查询未审批(0)且未删除(0)的工资主表
LambdaQueryWrapper<OaSalaryMaster> salaryWrapper = Wrappers.lambdaQuery();
salaryWrapper.eq(OaSalaryMaster::getSalaryStatus, 0)
.eq(OaSalaryMaster::getDelFlag, 0L);
List<OaSalaryMaster> pendingSalaries = salaryMasterMapper.selectList(salaryWrapper);
Date now = new Date();
for (OaSalaryMaster master : pendingSalaries) {
SysOaRemind remind = new SysOaRemind();
remind.setRemindType("salary");
remind.setDetailId(master.getMasterId());
remind.setTargetUserId(BOSS_USER_ID);
remind.setTaskTitle("工资审批提醒");
StringBuilder content = new StringBuilder();
if (master.getUnitName() != null) {
content.append(master.getUnitName()).append(" ");
}
if (master.getSalaryPeriod() != null) {
content.append(master.getSalaryPeriod()).append(" ");
}
content.append("工资待审批");
remind.setContent(content.toString());
remind.setTaskStatus("0");
remind.setTaskTime(null);
Date threeDaysLater = new Date(now.getTime() + 3L * 24 * 60 * 60 * 1000);
remind.setEndTime(threeDaysLater);
remind.setCreateBy(master.getCreateBy());
remind.setCreateTime(now);
remind.setUpdateBy("admin");
remind.setAccessory(null);
remind.setRemark(master.getRemark());
remindMapper.insert(remind);
}
}
}

View File

@@ -171,7 +171,7 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService {
public List<SysOaRemindVo> queryRecentRemindList(SysOaRemindBo bo) {
// 过滤仅当天创建、到期在未来0~3天、未处理的任务/项目提醒
LambdaQueryWrapper<SysOaRemind> lqw = Wrappers.lambdaQuery();
lqw.in(SysOaRemind::getRemindType, Arrays.asList("task", "project"));
lqw.in(SysOaRemind::getRemindType, Arrays.asList("task", "project","salary"));
lqw.eq(SysOaRemind::getTaskStatus, "0");
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");