| | |
| | | package com.ruoyi.device.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.utils.bean.BeanUtils; |
| | |
| | | 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.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.time.LocalDateTime; |
| | |
| | | */ |
| | | @Service |
| | | @Slf4j |
| | | @RequiredArgsConstructor |
| | | public class MaintenanceTaskServiceImpl extends ServiceImpl<MaintenanceTaskMapper, MaintenanceTask> implements MaintenanceTaskService { |
| | | |
| | | @Autowired |
| | | private MaintenanceTaskMapper maintenanceTaskMapper; |
| | | private final MaintenanceTaskMapper maintenanceTaskMapper; |
| | | private final SysUserMapper sysUserMapper; |
| | | private final TimingTaskServiceImpl timingTaskService; |
| | | private final MaintenanceTaskScheduler maintenanceTaskScheduler; |
| | | |
| | | @Autowired |
| | | private SysUserMapper sysUserMapper; |
| | | |
| | | @Autowired |
| | | private TimingTaskServiceImpl timingTaskService; |
| | | |
| | | @Autowired |
| | | private 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) { |
| | | Page<MaintenanceTask> taskPage = maintenanceTaskMapper.selectPage(page, null); |
| | | Page<MaintenanceTask> taskPage = maintenanceTaskMapper.selectPage(page, new QueryWrapper<MaintenanceTask>().orderByDesc("create_time")); |
| | | // 2. 如果没有数据,直接返回空分页 |
| | | if (taskPage.getRecords().isEmpty()) { |
| | | return AjaxResult.success(taskPage); |
| | |
| | | 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("更新成功"); |
| | | } |