From 0d7c3e7923c420ae6d3f8feff280bf4fcaac5ce7 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期四, 28 五月 2026 11:22:06 +0800
Subject: [PATCH] feat 人员合同、设备定时保养、排班之后APP推送通知
---
src/main/java/com/ruoyi/staff/task/StaffContractReminderTask.java | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 104 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/ruoyi/staff/task/StaffContractReminderTask.java b/src/main/java/com/ruoyi/staff/task/StaffContractReminderTask.java
new file mode 100644
index 0000000..c10712d
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/task/StaffContractReminderTask.java
@@ -0,0 +1,104 @@
+package com.ruoyi.staff.task;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.project.system.service.ISysNoticeService;
+import com.ruoyi.staff.pojo.StaffOnJob;
+import com.ruoyi.staff.mapper.StaffOnJobMapper;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 浜哄憳鍚堝悓鍒版湡鎻愰啋瀹氭椂浠诲姟
+ * 妫�鏌ュ嵆灏嗗埌鏈熺殑鍚堝悓锛屾帹閫侀�氱煡缁欑浉鍏冲憳宸�
+ *
+ * @author system
+ */
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class StaffContractReminderTask {
+
+ private final StaffOnJobMapper staffOnJobMapper;
+ private final SysUserMapper sysUserMapper;
+ private final ISysNoticeService sysNoticeService;
+
+ /**
+ * 姣忓ぉ鏃╀笂8鐐规墽琛屽悎鍚屽埌鏈熸彁閱�
+ * 鎻愬墠30澶┿��7澶┿��1澶╂彁閱�
+ */
+ @Scheduled(cron = "0 0 8 * * ?")
+ public void contractExpirationReminder() {
+ log.info("寮�濮嬫墽琛屽悎鍚屽埌鏈熸彁閱掍换鍔�...");
+ try {
+ LocalDate today = LocalDate.now();
+
+ // 鎻愬墠30澶╂彁閱�
+ sendReminder(today.plusDays(30), "30澶╁悗鍒版湡");
+
+ // 鎻愬墠7澶╂彁閱�
+ sendReminder(today.plusDays(7), "7澶╁悗鍒版湡");
+
+ // 鎻愬墠1澶╂彁閱�
+ sendReminder(today.plusDays(1), "1澶╁悗鍒版湡");
+
+ log.info("鍚堝悓鍒版湡鎻愰啋浠诲姟鎵ц瀹屾垚");
+ } catch (Exception e) {
+ log.error("鍚堝悓鍒版湡鎻愰啋浠诲姟鎵ц澶辫触锛歿}", e.getMessage(), e);
+ }
+ }
+
+ /**
+ * 鍙戦�佸悎鍚屽埌鏈熸彁閱�
+ * @param expireDate 鍒版湡鏃ユ湡
+ * @param daysDesc 鍓╀綑澶╂暟鎻忚堪
+ */
+ private void sendReminder(LocalDate expireDate, String daysDesc) {
+ Date targetDate = Date.from(expireDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
+
+ // 鏌ヨ鍚堝悓鍒版湡鏃ユ湡绛変簬鐩爣鏃ユ湡鐨勫湪鑱屽憳宸�
+ List<StaffOnJob> staffList = staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery()
+ .eq(StaffOnJob::getStaffState, 1)
+ .eq(StaffOnJob::getContractExpireTime, targetDate));
+
+ if (CollectionUtil.isEmpty(staffList)) {
+ return;
+ }
+
+ for (StaffOnJob staff : staffList) {
+ try {
+ // 閫氳繃鍛樺伐缂栧彿鏌ヨ绯荤粺鐢ㄦ埛
+ SysUser sysUser = sysUserMapper.selectUserByUserName(staff.getStaffNo());
+ if (sysUser == null) {
+ log.warn("鍛樺伐 {} 鏈壘鍒板搴旂殑绯荤粺鐢ㄦ埛璐﹀彿", staff.getStaffName());
+ continue;
+ }
+
+ // 鏋勫缓閫氱煡鍐呭
+ String title = "鍚堝悓鍒版湡鎻愰啋";
+ String message = String.format("鎮ㄥソ锛�%s 鐨勫悎鍚屽皢浜�%s鍒版湡锛岃鍙婃椂澶勭悊鐩稿叧浜嬪疁銆�",
+ staff.getStaffName(), daysDesc);
+
+ // 鍙戦�侀�氱煡
+ List<Long> userIds = new ArrayList<>();
+ userIds.add(sysUser.getUserId());
+ sysNoticeService.simpleNoticeByUser(title, message, userIds, "/staffOnJob");
+
+ log.info("宸插悜鍛樺伐 {} 鍙戦�佸悎鍚屽埌鏈熸彁閱�", staff.getStaffName());
+ } catch (Exception e) {
+ log.error("鍚戝憳宸� {} 鍙戦�佸悎鍚屽埌鏈熸彁閱掑け璐ワ細{}", staff.getStaffName(), e.getMessage());
+ }
+ }
+ }
+}
--
Gitblit v1.9.3