| | |
| | | import com.ruoyi.inspectiontask.service.impl.TimingTaskServiceImpl; |
| | | import com.ruoyi.project.system.domain.SysUser; |
| | | import com.ruoyi.project.system.mapper.SysUserMapper; |
| | | import jakarta.annotation.PostConstruct; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | private final SysUserMapper sysUserMapper; |
| | | private final TimingTaskServiceImpl timingTaskService; |
| | | private final MaintenanceTaskScheduler maintenanceTaskScheduler; |
| | | |
| | | /** |
| | | * 启动时把已启用但未注册到 Quartz 的保养任务补注册, |
| | | * 避免调度记录丢失后定时任务静默不执行 |
| | | */ |
| | | @PostConstruct |
| | | public void restoreScheduledTasks() { |
| | | try { |
| | | List<MaintenanceTask> tasks = maintenanceTaskMapper.selectList(new QueryWrapper<MaintenanceTask>() |
| | | .eq("is_active", 1) |
| | | .eq("deleted", 0)); |
| | | for (MaintenanceTask task : tasks) { |
| | | try { |
| | | TimingTask timingTask = new TimingTask(); |
| | | timingTask.setFrequencyType(task.getFrequencyType()); |
| | | timingTask.setFrequencyDetail(task.getFrequencyDetail()); |
| | | LocalDateTime nextTime = timingTaskService.calculateFirstExecutionTime(timingTask); |
| | | if (!Objects.equals(task.getNextExecutionTime(), nextTime)) { |
| | | task.setNextExecutionTime(nextTime); |
| | | maintenanceTaskMapper.updateById(task); |
| | | } |
| | | maintenanceTaskScheduler.ensureScheduled(task); |
| | | } catch (Exception e) { |
| | | log.error("恢复保养定时任务失败: id={}, name={}", task.getId(), task.getTaskName(), e); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("恢复保养定时任务异常", e); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public AjaxResult listPage(Page page, MaintenanceTask maintenanceTask) { |
| | |
| | | if (maintenanceTask1 == null) { |
| | | return AjaxResult.warn("没有此数据"); |
| | | } |
| | | // 频率变化时重算下次执行时间,避免页面显示与实际调度不一致 |
| | | boolean frequencyChanged = !Objects.equals(maintenanceTask.getFrequencyType(), maintenanceTask1.getFrequencyType()) |
| | | || !Objects.equals(maintenanceTask.getFrequencyDetail(), maintenanceTask1.getFrequencyDetail()); |
| | | BeanUtils.copyProperties(maintenanceTask, maintenanceTask1); |
| | | if (frequencyChanged) { |
| | | TimingTask task = new TimingTask(); |
| | | task.setFrequencyType(maintenanceTask1.getFrequencyType()); |
| | | task.setFrequencyDetail(maintenanceTask1.getFrequencyDetail()); |
| | | maintenanceTask1.setNextExecutionTime(timingTaskService.calculateFirstExecutionTime(task)); |
| | | } |
| | | int update = maintenanceTaskMapper.updateById(maintenanceTask1); |
| | | if (update > 0) { |
| | | maintenanceTaskScheduler.rescheduleMaintenanceTask(maintenanceTask1); |
| | | if (maintenanceTask1.isActive()) { |
| | | maintenanceTaskScheduler.rescheduleMaintenanceTask(maintenanceTask1); |
| | | } else { |
| | | maintenanceTaskScheduler.unscheduleMaintenanceTask(maintenanceTask1.getId()); |
| | | } |
| | | } |
| | | return AjaxResult.success("更新成功"); |
| | | } |