| | |
| | | package com.ruoyi.inspectiontask.service.impl; |
| | | |
| | | import com.ruoyi.inspectiontask.pojo.TimingTask; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.quartz.*; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.time.LocalTime; |
| | |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Service |
| | | @RequiredArgsConstructor |
| | | public class TimingTaskScheduler { |
| | | |
| | | @Autowired |
| | | private Scheduler scheduler; |
| | | private final Scheduler scheduler; |
| | | |
| | | /** |
| | | * 添加新任务到调度器 |
| | |
| | | |
| | | // 获取现有触发器并转换为 CronTrigger |
| | | Trigger oldTrigger = scheduler.getTrigger(triggerKey); |
| | | if (oldTrigger == null) { |
| | | JobKey jobKey = new JobKey("timingTask_" + task.getId()); |
| | | JobDetail jobDetail = scheduler.getJobDetail(jobKey); |
| | | if (jobDetail != null) { |
| | | Trigger trigger = buildJobTrigger(task, jobDetail); |
| | | scheduler.scheduleJob(trigger); |
| | | } else { |
| | | scheduleTimingTask(task); |
| | | } |
| | | return; |
| | | } |
| | | if (!(oldTrigger instanceof CronTrigger)) { |
| | | throw new SchedulerException("Existing trigger is not a CronTrigger"); |
| | | } |
| | |
| | | |
| | | // 使用switch确保条件互斥 |
| | | String frequencyType = task.getFrequencyType().toUpperCase(); // 统一转为大写比较 |
| | | switch (frequencyType) { |
| | | case "DAILY": |
| | | return convertDailyToCron(task.getFrequencyDetail()); |
| | | case "WEEKLY": |
| | | return convertWeeklyToCron(task.getFrequencyDetail()); |
| | | case "MONTHLY": |
| | | return convertMonthlyToCron(task.getFrequencyDetail()); |
| | | case "QUARTERLY": |
| | | return convertQuarterlyToCron(task.getFrequencyDetail()); |
| | | default: |
| | | throw new IllegalArgumentException("不支持的频率类型: " + task.getFrequencyType()); |
| | | } |
| | | return switch (frequencyType) { |
| | | case "DAILY" -> convertDailyToCron(task.getFrequencyDetail()); |
| | | case "WEEKLY" -> convertWeeklyToCron(task.getFrequencyDetail()); |
| | | case "MONTHLY" -> convertMonthlyToCron(task.getFrequencyDetail()); |
| | | case "QUARTERLY" -> convertQuarterlyToCron(task.getFrequencyDetail()); |
| | | default -> throw new IllegalArgumentException("不支持的频率类型: " + task.getFrequencyType()); |
| | | }; |
| | | } |
| | | |
| | | // 每日任务转换 |