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/device/service/impl/MaintenanceTaskJob.java |   82 ++++++++++++++++++++++++++++++++++++++--
 1 files changed, 77 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java
index b9deb2d..bef3be6 100644
--- a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java
+++ b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java
@@ -1,9 +1,17 @@
 package com.ruoyi.device.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.device.pojo.DeviceMaintenance;
 import com.ruoyi.device.pojo.MaintenanceTask;
+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.quartz.*;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Component;
@@ -16,16 +24,28 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.ArrayList;
 
 @Component
-@DisallowConcurrentExecution // 绂佹骞跺彂鎵ц鍚屼竴涓狫ob
-@RequiredArgsConstructor
+@DisallowConcurrentExecution
+@Slf4j
 public class MaintenanceTaskJob implements Job, Serializable {
-    private static final long serialVersionUID = 1L; // 蹇呴』瀹氫箟搴忓垪鍖朓D
+    private static final long serialVersionUID = 1L;
 
-    private final DeviceMaintenanceServiceImpl deviceMaintenanceService;
+    @Autowired
+    private DeviceMaintenanceServiceImpl deviceMaintenanceService;
 
-    private final JdbcTemplate jdbcTemplate;
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+
+    @Autowired
+    private StaffOnJobMapper staffOnJobMapper;
+
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Autowired
+    private ISysNoticeService sysNoticeService;
 
     @Override
     public void execute(JobExecutionContext context) throws JobExecutionException {
@@ -50,6 +70,9 @@
             // 2. 鍒涘缓骞朵繚瀛樺贰妫�浠诲姟璁板綍 - 杩欏氨鏄偍鎻愪緵鐨勪唬鐮佸簲璇ユ斁鐨勪綅缃�
             DeviceMaintenance deviceMaintenance = createInspectionTask(timingTask);
             deviceMaintenanceService.save(deviceMaintenance);
+
+            // 鍙戦�佷繚鍏绘彁閱掗�氱煡
+            sendMaintenanceReminder(timingTask);
 
             // 3. 鏇存柊瀹氭椂浠诲姟鐨勬墽琛屾椂闂�
             if (!tasks.isEmpty()) {
@@ -91,11 +114,13 @@
         inspectionTask.setMaintenanceTaskId(timingTask.getId());
         inspectionTask.setDeviceLedgerId(timingTask.getTaskId());
         inspectionTask.setMaintenancePlanTime(LocalDateTime.now());
+        inspectionTask.setMaintenanceActuallyName(timingTask.getMaintenancePerson());
         inspectionTask.setFrequencyType(timingTask.getFrequencyType());
         inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail());
         inspectionTask.setTenantId(timingTask.getTenantId());
         inspectionTask.setStatus(0);
         inspectionTask.setDeviceModel(timingTask.getDeviceModel());
+        inspectionTask.setMachineryCategory(timingTask.getMachineryCategory());
         inspectionTask.setCreateUser(Integer.parseInt(timingTask.getRegistrantId().toString()));
         inspectionTask.setUpdateTime(LocalDateTime.now());
         inspectionTask.setCreateTime(LocalDateTime.now());
@@ -239,4 +264,51 @@
 
         return days;
     }
+
+    /**
+     * 鍙戦�佽澶囦繚鍏绘彁閱掗�氱煡
+     * @param timingTask 淇濆吇浠诲姟
+     */
+    private void sendMaintenanceReminder(MaintenanceTask timingTask) {
+        try {
+            if (timingTask.getMaintenancePerson() == null || timingTask.getMaintenancePerson().isEmpty()) {
+                log.warn("淇濆吇浠诲姟 {} 鏈寚瀹氫繚鍏讳汉锛岃烦杩囨帹閫�", timingTask.getTaskName());
+                return;
+            }
+
+            // 閫氳繃淇濆吇浜哄鍚嶆煡璇㈠憳宸ユ。妗�
+            List<StaffOnJob> staffList = staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery()
+                    .eq(StaffOnJob::getStaffName, timingTask.getMaintenancePerson())
+                    .eq(StaffOnJob::getStaffState, 1)
+                    .last("LIMIT 1"));
+
+            if (staffList.isEmpty()) {
+                log.warn("鏈壘鍒颁繚鍏讳汉 {} 鐨勫憳宸ユ。妗�", timingTask.getMaintenancePerson());
+                return;
+            }
+
+            StaffOnJob staff = staffList.get(0);
+
+            // 閫氳繃鍛樺伐缂栧彿鏌ヨ绯荤粺鐢ㄦ埛
+            SysUser sysUser = sysUserMapper.selectUserByUserName(staff.getStaffNo());
+            if (sysUser == null) {
+                log.warn("淇濆吇浜� {} 鏈壘鍒板搴旂殑绯荤粺鐢ㄦ埛璐﹀彿", staff.getStaffName());
+                return;
+            }
+
+            // 鏋勫缓閫氱煡鍐呭
+            String title = "璁惧淇濆吇鎻愰啋";
+            String message = String.format("鎮ㄥソ锛岃澶囥��%s銆戦渶瑕佽繘琛屼繚鍏伙紝璇峰強鏃跺鐞嗐��",
+                    timingTask.getTaskName());
+
+            // 鍙戦�侀�氱煡
+            List<Long> userIds = new ArrayList<>();
+            userIds.add(sysUser.getUserId());
+            sysNoticeService.simpleNoticeByUser(title, message, userIds, "/deviceMaintenance");
+
+            log.info("宸插悜淇濆吇浜� {} 鍙戦�佽澶囦繚鍏绘彁閱�", timingTask.getMaintenancePerson());
+        } catch (Exception e) {
+            log.error("鍙戦�佽澶囦繚鍏绘彁閱掑け璐ワ細{}", e.getMessage(), e);
+        }
+    }
 }

--
Gitblit v1.9.3