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; } }