using Quartz; using Quartz.Impl; using Quartz.Impl.Triggers; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Web; namespace VueWebApi.TimeTick { public class QuartzUtil { private static ISchedulerFactory sf = null; private static IScheduler sched = null; static QuartzUtil() { } public static async void Init() { sf = new StdSchedulerFactory(); sched = await sf.GetScheduler(); await sched.Start(); } /// /// 添加Job 并且以定点的形式运行 /// /// /// /// /// /// public static async Task AddJob(string JobName, string CronTime, Dictionary map) where T : IJob { IJobDetail jobCheck = JobBuilder.Create().WithIdentity(JobName, JobName + "_Group").Build(); jobCheck.JobDataMap.PutAll(map); ICronTrigger CronTrigger = new CronTriggerImpl(JobName + "_CronTrigger", JobName + "_TriggerGroup", CronTime); await sched.ScheduleJob(jobCheck, CronTrigger); } /// /// 添加Job 并且以定点的形式运行 /// /// /// /// /// public static async Task AddJob(string JobName, string CronTime) where T : IJob { await AddJob(JobName, CronTime, null); } /// /// 添加Job 并且以周期的形式运行 /// /// /// /// /// /// 毫秒数 /// public static async Task AddJob(string JobName, DateTimeOffset StartTime, DateTimeOffset EndTime, int SimpleTime) where T : IJob { await AddJob(JobName, StartTime, EndTime, TimeSpan.FromMilliseconds(SimpleTime)); } /// /// 添加Job 并且以周期的形式运行 /// /// /// /// /// /// /// public static async Task AddJob(string JobName, DateTimeOffset StartTime, DateTimeOffset EndTime, TimeSpan SimpleTime) where T : IJob { await AddJob(JobName, StartTime, EndTime, SimpleTime, new Dictionary()); } /// /// 添加Job 并且以周期的形式运行 /// /// /// /// /// /// 毫秒数 /// /// public static async Task AddJob(string JobName, DateTimeOffset StartTime, DateTimeOffset EndTime, int SimpleTime, string MapKey, object MapValue) where T : IJob { Dictionary map = new Dictionary(); map.Add(MapKey, MapValue); await AddJob(JobName, StartTime, EndTime, TimeSpan.FromMilliseconds(SimpleTime), map); } /// /// 添加Job 并且以周期的形式运行 /// /// /// /// /// /// /// /// public static async Task AddJob(string JobName, DateTimeOffset StartTime, DateTimeOffset EndTime, TimeSpan SimpleTime, Dictionary map) where T : IJob { IJobDetail jobCheck = JobBuilder.Create().WithIdentity(JobName, JobName + "_Group").Build(); jobCheck.JobDataMap.PutAll(map); ISimpleTrigger triggerCheck = new SimpleTriggerImpl(JobName + "_SimpleTrigger", JobName + "_TriggerGroup", StartTime, EndTime, SimpleTriggerImpl.RepeatIndefinitely, SimpleTime); await sched.ScheduleJob(jobCheck, triggerCheck); } /// /// 修改触发器时间,需要job名,以及修改结果 /// CronTriggerImpl类型触发器 /// public static async void UpdateTime(string jobName, string CronTime) { TriggerKey TKey = new TriggerKey(jobName + "_CronTrigger", jobName + "_TriggerGroup"); CronTriggerImpl cti = await sched.GetTrigger(TKey) as CronTriggerImpl; cti.CronExpression = new CronExpression(CronTime); await sched.RescheduleJob(TKey, cti); } /// /// 修改触发器时间,需要job名,以及修改结果 /// SimpleTriggerImpl类型触发器 /// /// /// 分钟数 public static void UpdateTime(string jobName, int SimpleTime) { UpdateTime(jobName, TimeSpan.FromMinutes(SimpleTime)); } /// /// 修改触发器时间,需要job名,以及修改结果 /// SimpleTriggerImpl类型触发器 /// public static async void UpdateTime(string jobName, TimeSpan SimpleTime) { TriggerKey TKey = new TriggerKey(jobName + "_SimpleTrigger", jobName + "_TriggerGroup"); SimpleTriggerImpl sti = await sched.GetTrigger(TKey) as SimpleTriggerImpl; sti.RepeatInterval = SimpleTime; await sched.RescheduleJob(TKey, sti); } /// /// 暂停所有Job /// 暂停功能Quartz提供有很多,以后可扩充 /// public static void PauseAll() { sched.PauseAll(); } /// /// 恢复所有Job /// 恢复功能Quartz提供有很多,以后可扩充 /// public static void ResumeAll() { sched.ResumeAll(); } /// /// 删除Job /// 删除功能Quartz提供有很多,以后可扩充 /// /// public static void DeleteJob(string JobName) { JobKey jk = new JobKey(JobName, JobName + "_Group"); sched.DeleteJob(jk); } /// /// 卸载定时器 /// /// 是否等待job执行完成 public static void Shutdown(bool waitForJobsToComplete) { sched.Shutdown(waitForJobsToComplete); } /// /// 判断任务是否已经建立 /// /// 任务名 public static async Task CheckExist(string jobName) { bool isExists = false; TriggerKey triggerKey = new TriggerKey(jobName + "_CronTrigger", jobName + "_TriggerGroup"); isExists = await sched.CheckExists(triggerKey); return isExists; } /// /// 判断简单任务是否已经建立 /// /// 任务名 public static async Task CheckSimpleExist(string jobName) { bool isExists = false; TriggerKey triggerKey = new TriggerKey(jobName + "_SimpleTrigger", jobName + "_TriggerGroup"); isExists = await sched.CheckExists(triggerKey); return isExists; } } }