From 84a197b3a5c09f08054eb55ac8a2030e868158bd Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Sat, 14 Sep 2024 11:00:09 +0800 Subject: [PATCH] =?UTF-8?q?```=E4=BF=AE=E5=A4=8D=E7=94=9F=E6=97=A5?= =?UTF-8?q?=E6=8F=90=E9=86=92=E4=BB=BB=E5=8A=A1=E5=B9=B6=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=A4=96=E5=8B=A4=E6=89=93=E5=8D=A1=E6=9D=83=E9=99=90=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复了生日提醒任务中的问题,该问题之前未向特定人员发送提醒。此外,新增了外勤打卡权限变更功能,该功能根据用户是否需要进行外勤打卡,动态设置外勤打卡权限。包含对参数解析和用户信息获取的逻辑,以确保正确执行任务。 ``` --- .../system/job/birthday/BirthdayJob.java | 96 ++++++++++++++++++- 1 file changed, 91 insertions(+), 5 deletions(-) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/birthday/BirthdayJob.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/birthday/BirthdayJob.java index d9645c32..b410ae3a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/birthday/BirthdayJob.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/birthday/BirthdayJob.java @@ -1,11 +1,21 @@ 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.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.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.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobContext; import com.xxl.job.core.handler.annotation.XxlJob; +import io.netty.util.internal.StringUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.stereotype.Component; @@ -14,16 +24,31 @@ import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; +import java.util.Map; +import java.util.Set; + +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; @Component @Slf4j @EnableScheduling public class BirthdayJob { - @Resource 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") @TenantJob // --- ⚠️ 这个注解 会将租户列表拉出来 完了后逐个租户执行 定时任务需要注意 public ReturnT execute() { + + // 生日提醒 + birthdayRemind(); + + // 外勤打卡权限变更 + fieldworkPermissionChange(); + + // 返回执行成功 + return ReturnT.SUCCESS; + } + + private void fieldworkPermissionChange() { + + try { + + // 获取用户编号 + Map> goOutList = goOutApi.getLeaveListByTime().getCheckedData(); + + if (CollectionUtil.isNotEmpty(goOutList.get("now"))) { + + // 讲需要当天外出的用户,设置外勤打卡权限 + adminUserMapper.update(new AdminUserDO().setFieldworkFlag(1).setFieldworkType(2), + new LambdaQueryWrapper() + .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() + .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")); // -- 获取当天月日 生日的人员列表 List list = adminUserMapper.selectList(new LambdaQueryWrapper() .like(AdminUserDO::getBirthdayDay, time)); if (!list.isEmpty()) { - // TODO: 2024/9/2 发送短信未指定人 - log.info("生日提醒,生日为{},人员为{}", time, list); + + //获取参数 + XxlJobContext xxlJobContext = XxlJobContext.getXxlJobContext(); + String jobParam = xxlJobContext.getJobParam(); + if (!StringUtil.isNullOrEmpty(jobParam)) { + + // 解析参数 + JSONObject object = new JSONObject(jobParam); + Long roleId = object.getLong("roleId"); + + Set userIds = permissionService.getUserRoleIdListByRoleId(CollectionUtils.singleton(roleId)); + //获得用户组中 用户信息 + List 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)); + } } - // 返回执行成功 - return ReturnT.SUCCESS; } }