From ccf75464534965c47866449b2b4e457a6dadede9 Mon Sep 17 00:00:00 2001
From: liriming <1343021927@qq.com>
Date: 星期一, 14 十月 2024 14:13:00 +0800
Subject: [PATCH] 定时任务权限修改

---
 shasteel-biz/src/main/java/com/iailab/module/shasteel/job/utils/ScheduleUtils.java |  153 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 153 insertions(+), 0 deletions(-)

diff --git a/shasteel-biz/src/main/java/com/iailab/module/shasteel/job/utils/ScheduleUtils.java b/shasteel-biz/src/main/java/com/iailab/module/shasteel/job/utils/ScheduleUtils.java
new file mode 100644
index 0000000..4f1c9f0
--- /dev/null
+++ b/shasteel-biz/src/main/java/com/iailab/module/shasteel/job/utils/ScheduleUtils.java
@@ -0,0 +1,153 @@
+package com.iailab.module.shasteel.job.utils;
+
+import com.iailab.framework.common.constant.Constant;
+import com.iailab.framework.common.enums.ErrorCode;
+import com.iailab.framework.common.exception.ServerException;
+import com.iailab.module.shasteel.job.entity.ScheduleJobEntity;
+import org.quartz.*;
+
+/**
+ * 定时任务工具类
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public class ScheduleUtils {
+    private final static String JOB_NAME = "TASK_";
+    /**
+     * 任务调度参数key
+     */
+    public static final String JOB_PARAM_KEY = "JOB_PARAM_KEY";
+    
+    /**
+     * 获取触发器key
+     */
+    public static TriggerKey getTriggerKey(Long jobId) {
+        return TriggerKey.triggerKey(JOB_NAME + jobId);
+    }
+    
+    /**
+     * 获取jobKey
+     */
+    public static JobKey getJobKey(Long jobId) {
+        return JobKey.jobKey(JOB_NAME + jobId);
+    }
+
+    /**
+     * 获取表达式触发器
+     */
+    public static CronTrigger getCronTrigger(Scheduler scheduler, Long jobId) {
+        try {
+            return (CronTrigger) scheduler.getTrigger(getTriggerKey(jobId));
+        } catch (SchedulerException e) {
+            throw new ServerException(ErrorCode.JOB_ERROR, e.getMessage());
+        }
+    }
+
+    /**
+     * 创建定时任务
+     */
+    public static void createScheduleJob(Scheduler scheduler, ScheduleJobEntity scheduleJob) {
+        try {
+        	//构建job信息
+            JobDetail jobDetail = JobBuilder.newJob(ScheduleJob.class).withIdentity(getJobKey(scheduleJob.getId())).build();
+
+            //表达式调度构建器
+            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression())
+            		.withMisfireHandlingInstructionDoNothing();
+
+            //按新的cronExpression表达式构建一个新的trigger
+            CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(scheduleJob.getId())).withSchedule(scheduleBuilder).build();
+
+            //放入参数,运行时的方法可以获取
+            jobDetail.getJobDataMap().put(JOB_PARAM_KEY, scheduleJob);
+
+            scheduler.scheduleJob(jobDetail, trigger);
+            
+            //暂停任务
+            if(scheduleJob.getStatus() == Constant.ScheduleStatus.PAUSE.getValue()){
+            	pauseJob(scheduler, scheduleJob.getId());
+            }
+        } catch (SchedulerException e) {
+            throw new ServerException(ErrorCode.JOB_ERROR, e.getMessage());
+        }
+    }
+    
+    /**
+     * 更新定时任务
+     */
+    public static void updateScheduleJob(Scheduler scheduler, ScheduleJobEntity scheduleJob) {
+        try {
+            TriggerKey triggerKey = getTriggerKey(scheduleJob.getId());
+
+            //表达式调度构建器
+            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression())
+            		.withMisfireHandlingInstructionDoNothing();
+
+            CronTrigger trigger = getCronTrigger(scheduler, scheduleJob.getId());
+            
+            //按新的cronExpression表达式重新构建trigger
+            trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
+            
+            //参数
+            trigger.getJobDataMap().put(JOB_PARAM_KEY, scheduleJob);
+            
+            scheduler.rescheduleJob(triggerKey, trigger);
+            
+            //暂停任务
+            if(scheduleJob.getStatus() == Constant.ScheduleStatus.PAUSE.getValue()){
+            	pauseJob(scheduler, scheduleJob.getId());
+            }
+            
+        } catch (SchedulerException e) {
+            throw new ServerException(ErrorCode.JOB_ERROR, e.getMessage());
+        }
+    }
+
+    /**
+     * 立即执行任务
+     */
+    public static void run(Scheduler scheduler, ScheduleJobEntity scheduleJob) {
+        try {
+        	//参数
+        	JobDataMap dataMap = new JobDataMap();
+        	dataMap.put(JOB_PARAM_KEY, scheduleJob);
+        	
+            scheduler.triggerJob(getJobKey(scheduleJob.getId()), dataMap);
+        } catch (SchedulerException e) {
+            throw new ServerException(ErrorCode.JOB_ERROR, e.getMessage());
+        }
+    }
+
+    /**
+     * 暂停任务
+     */
+    public static void pauseJob(Scheduler scheduler, Long jobId) {
+        try {
+            scheduler.pauseJob(getJobKey(jobId));
+        } catch (SchedulerException e) {
+            throw new ServerException(ErrorCode.JOB_ERROR, e.getMessage());
+        }
+    }
+
+    /**
+     * 恢复任务
+     */
+    public static void resumeJob(Scheduler scheduler, Long jobId) {
+        try {
+            scheduler.resumeJob(getJobKey(jobId));
+        } catch (SchedulerException e) {
+            throw new ServerException(ErrorCode.JOB_ERROR, e.getMessage());
+        }
+    }
+
+    /**
+     * 删除定时任务
+     */
+    public static void deleteScheduleJob(Scheduler scheduler, Long jobId) {
+        try {
+            scheduler.deleteJob(getJobKey(jobId));
+        } catch (SchedulerException e) {
+            throw new ServerException(ErrorCode.JOB_ERROR, e.getMessage());
+        }
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3