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;
}
}
}