推送项目重构代码
This commit is contained in:
@@ -4,6 +4,7 @@ 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.im.ImSendService;
|
||||
import com.ruoyi.oa.mapper.OaSalaryMasterMapper;
|
||||
import com.ruoyi.oa.mapper.SysOaRemindMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -19,6 +20,7 @@ public class OaSalaryRemindScheduler {
|
||||
|
||||
private final OaSalaryMasterMapper salaryMasterMapper;
|
||||
private final SysOaRemindMapper remindMapper;
|
||||
private final ImSendService imSendService;
|
||||
|
||||
// 老板用户ID
|
||||
private static final Long BOSS_USER_ID = 1859252208375152641L;
|
||||
@@ -60,6 +62,15 @@ public class OaSalaryRemindScheduler {
|
||||
remind.setRemark(master.getRemark());
|
||||
|
||||
remindMapper.insert(remind);
|
||||
|
||||
// 同时通过 IM 推送给老板
|
||||
imSendService.sendToOaUser(
|
||||
BOSS_USER_ID,
|
||||
"工资审批提醒",
|
||||
remind.getContent(),
|
||||
"salary", master.getMasterId(),
|
||||
"/finance/salary/list"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
package com.ruoyi.oa.task;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.oa.domain.SysOaProject;
|
||||
import com.ruoyi.oa.im.ImSendService;
|
||||
import com.ruoyi.oa.mapper.SysOaProjectMapper;
|
||||
import com.ruoyi.system.mapper.SysUserMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 项目到期提醒:每天 09:00 扫描 finishTime 在 [today, today+THRESHOLD_DAYS] 区间且未完结的项目,
|
||||
* 通过 OpenIM 推送给项目负责人。
|
||||
*
|
||||
* @author wangyu
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class ProjectExpiryRemindScheduler {
|
||||
|
||||
/** 提前多少天提醒 */
|
||||
private static final int THRESHOLD_DAYS = 3;
|
||||
|
||||
private final SysOaProjectMapper projectMapper;
|
||||
private final SysUserMapper userMapper;
|
||||
private final ImSendService imSendService;
|
||||
|
||||
@Scheduled(cron = "0 0 9 * * ?")
|
||||
public void notifyExpiringProjects() {
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0);
|
||||
cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0);
|
||||
Date start = cal.getTime();
|
||||
cal.add(Calendar.DAY_OF_MONTH, THRESHOLD_DAYS + 1);
|
||||
Date end = cal.getTime();
|
||||
|
||||
LambdaQueryWrapper<SysOaProject> qw = Wrappers.lambdaQuery();
|
||||
qw.between(SysOaProject::getFinishTime, start, end);
|
||||
// 已结项的不推("3" 通常表示已完结,按你们的字典调整)
|
||||
qw.ne(SysOaProject::getProjectStatus, "3");
|
||||
List<SysOaProject> projects = projectMapper.selectList(qw);
|
||||
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||
for (SysOaProject p : projects) {
|
||||
String nickName = p.getFunctionary();
|
||||
if (nickName == null || nickName.isEmpty()) { continue; }
|
||||
|
||||
// functionary 存的是 nickName,反查 user_id
|
||||
SysUser user = userMapper.selectOne(
|
||||
Wrappers.<SysUser>lambdaQuery()
|
||||
.eq(SysUser::getNickName, nickName)
|
||||
.eq(SysUser::getDelFlag, "0")
|
||||
.last("limit 1")
|
||||
);
|
||||
if (user == null) {
|
||||
log.debug("[ProjectExpiry] nickName={} 未找到对应用户,跳过", nickName);
|
||||
continue;
|
||||
}
|
||||
|
||||
String title = "项目即将到期";
|
||||
String desc = String.format("项目【%s】将于 %s 到期,请及时跟进",
|
||||
p.getProjectName(), sdf.format(p.getFinishTime()));
|
||||
|
||||
imSendService.sendToOaUser(
|
||||
user.getUserId(), title, desc,
|
||||
"project", p.getProjectId(),
|
||||
"/oa/project?projectId=" + p.getProjectId()
|
||||
);
|
||||
}
|
||||
log.info("[ProjectExpiry] 推送 {} 个即将到期项目", projects.size());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user