```修复生日提醒任务并添加外勤打卡权限变更功能
修复了生日提醒任务中的问题,该问题之前未向特定人员发送提醒。此外,新增了外勤打卡权限变更功能,该功能根据用户是否需要进行外勤打卡,动态设置外勤打卡权限。包含对参数解析和用户信息获取的逻辑,以确保正确执行任务。 ```
This commit is contained in:
parent
b2effbec4e
commit
84a197b3a5
@ -1,11 +1,21 @@
|
|||||||
package cn.iocoder.yudao.module.system.job.birthday;
|
package cn.iocoder.yudao.module.system.job.birthday;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
|
import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
|
||||||
|
import cn.iocoder.yudao.module.bpm.api.oa.BpmOAGoOutApi;
|
||||||
|
import cn.iocoder.yudao.module.system.api.subscribe.SubscribeMessageSendApi;
|
||||||
|
import cn.iocoder.yudao.module.system.convert.notice.NoticeConvert;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
|
||||||
|
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
|
||||||
|
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.xxl.job.core.biz.model.ReturnT;
|
import com.xxl.job.core.biz.model.ReturnT;
|
||||||
|
import com.xxl.job.core.context.XxlJobContext;
|
||||||
import com.xxl.job.core.handler.annotation.XxlJob;
|
import com.xxl.job.core.handler.annotation.XxlJob;
|
||||||
|
import io.netty.util.internal.StringUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@ -14,16 +24,31 @@ import javax.annotation.Resource;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@EnableScheduling
|
@EnableScheduling
|
||||||
public class BirthdayJob {
|
public class BirthdayJob {
|
||||||
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private AdminUserMapper adminUserMapper;
|
private AdminUserMapper adminUserMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private AdminUserService userService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PermissionService permissionService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SubscribeMessageSendApi subscribeMessageSendApi;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private BpmOAGoOutApi goOutApi;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生日提醒
|
* 生日提醒
|
||||||
*
|
*
|
||||||
@ -32,15 +57,76 @@ public class BirthdayJob {
|
|||||||
@XxlJob("birthdayJob")
|
@XxlJob("birthdayJob")
|
||||||
@TenantJob // --- ⚠️ 这个注解 会将租户列表拉出来 完了后逐个租户执行 定时任务需要注意
|
@TenantJob // --- ⚠️ 这个注解 会将租户列表拉出来 完了后逐个租户执行 定时任务需要注意
|
||||||
public ReturnT<String> execute() {
|
public ReturnT<String> execute() {
|
||||||
|
|
||||||
|
// 生日提醒
|
||||||
|
birthdayRemind();
|
||||||
|
|
||||||
|
// 外勤打卡权限变更
|
||||||
|
fieldworkPermissionChange();
|
||||||
|
|
||||||
|
// 返回执行成功
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fieldworkPermissionChange() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
// 获取用户编号
|
||||||
|
Map<String, List<Long>> goOutList = goOutApi.getLeaveListByTime().getCheckedData();
|
||||||
|
|
||||||
|
if (CollectionUtil.isNotEmpty(goOutList.get("now"))) {
|
||||||
|
|
||||||
|
// 讲需要当天外出的用户,设置外勤打卡权限
|
||||||
|
adminUserMapper.update(new AdminUserDO().setFieldworkFlag(1).setFieldworkType(2),
|
||||||
|
new LambdaQueryWrapper<AdminUserDO>()
|
||||||
|
.in(AdminUserDO::getId, goOutList.get("now"))
|
||||||
|
.ne(AdminUserDO::getFieldworkType, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CollectionUtil.isNotEmpty(goOutList.get("yesterday"))) {
|
||||||
|
|
||||||
|
// 将昨日外出的用户,关闭外勤打卡权限
|
||||||
|
adminUserMapper.update(new AdminUserDO().setFieldworkFlag(0).setFieldworkType(0),
|
||||||
|
new LambdaQueryWrapper<AdminUserDO>()
|
||||||
|
.in(AdminUserDO::getId, goOutList.get("yesterday"))
|
||||||
|
.eq(AdminUserDO::getFieldworkType, 2));
|
||||||
|
}
|
||||||
|
}catch (Exception ex) {
|
||||||
|
log.info(ex.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void birthdayRemind() {
|
||||||
|
|
||||||
String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("MM-dd"));
|
String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("MM-dd"));
|
||||||
// -- 获取当天月日 生日的人员列表
|
// -- 获取当天月日 生日的人员列表
|
||||||
List<AdminUserDO> list = adminUserMapper.selectList(new LambdaQueryWrapper<AdminUserDO>()
|
List<AdminUserDO> list = adminUserMapper.selectList(new LambdaQueryWrapper<AdminUserDO>()
|
||||||
.like(AdminUserDO::getBirthdayDay, time));
|
.like(AdminUserDO::getBirthdayDay, time));
|
||||||
if (!list.isEmpty()) {
|
if (!list.isEmpty()) {
|
||||||
// TODO: 2024/9/2 发送短信未指定人
|
|
||||||
log.info("生日提醒,生日为{},人员为{}", time, list);
|
//获取参数
|
||||||
}
|
XxlJobContext xxlJobContext = XxlJobContext.getXxlJobContext();
|
||||||
// 返回执行成功
|
String jobParam = xxlJobContext.getJobParam();
|
||||||
return ReturnT.SUCCESS;
|
if (!StringUtil.isNullOrEmpty(jobParam)) {
|
||||||
|
|
||||||
|
// 解析参数
|
||||||
|
JSONObject object = new JSONObject(jobParam);
|
||||||
|
Long roleId = object.getLong("roleId");
|
||||||
|
|
||||||
|
Set<Long> userIds = permissionService.getUserRoleIdListByRoleId(CollectionUtils.singleton(roleId));
|
||||||
|
//获得用户组中 用户信息
|
||||||
|
List<AdminUserDO> userDOs = userService.getUserList(userIds);
|
||||||
|
for (AdminUserDO adminUserDO : userDOs) {
|
||||||
|
if( adminUserDO.getOpenId() != null && !adminUserDO.getOpenId().isEmpty()) {
|
||||||
|
|
||||||
|
subscribeMessageSendApi.sendCompanyNotice(NoticeConvert.INSTANCE.convertBirthday(
|
||||||
|
adminUserDO.getOpenId(), "formal"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("生日提醒,生日为{},人员为{}", time, convertList(list, AdminUserDO::getNickname));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user