using wms.dto.request.hj; using wms.dto; using Quartz; using Quartz.Impl; using Quartz.Impl.Matchers; using Quartz.Impl.Triggers; namespace wms.api.Job { /// /// 任务调度器 /// public class JobScheduler { public static IScheduler InitScheduler() { //创建调度器工厂 ISchedulerFactory factory = new StdSchedulerFactory(); //创建调度器对象 IScheduler scheduler = factory.GetScheduler().Result; ////创建任务 //IJobDetail job = JobBuilder.Create().Build(); ////创建触发器 //ITrigger trigger = TriggerBuilder.Create().WithIdentity("TimeTrigger", "TimeGroup").WithSimpleSchedule(p => p.WithIntervalInMinutes(1).RepeatForever()).Build(); ////任务、触发器添至调度器对象 //scheduler.ScheduleJob(job, trigger); //scheduler.Start(); return scheduler; } public static void Start(string jobName, Type jobType, string timeCorn) { var sched = InitScheduler(); var jobList = GetJobList(Const.JobGroupName).Result; var job = jobList.Where(p => jobName == p.JobName); if (job.Count() > 0) { //if (job.First().JobStatus == "Stop") { sched.DeleteJob(new JobKey(jobName, Const.JobGroupName)); StartJob(jobName, jobType, timeCorn); } //else //{ // ResumeAsync(jobName, Const.JobGroupName); //} } else { StartJob(jobName, jobType, timeCorn); } } public static async Task> GetJobList(string jobGroup) { var result = new List(); try { var group = await InitScheduler().GetJobGroupNames(); var currentlyExecutingJobs = await InitScheduler().GetCurrentlyExecutingJobs(); var matcher = GroupMatcher.GroupEquals(jobGroup); var jobs = await InitScheduler().GetJobKeys(matcher); foreach (var item in jobs) { var triggers = await InitScheduler().GetTriggersOfJob(item); var state = await InitScheduler().GetTriggerState(triggers.First().Key); var job = InitScheduler().GetJobDetail(item).Result; result.Add(new SysJobDto() { JobName = job.Key.Name, JobDesc = job.Description, JobStatus = state.ToString(), JobGroup = job.Key.Group }); } return result; } catch (Exception ex) { return result; } } public static void StartJob(string jobName, Type jobType, string timeCorn) { var scheduler = InitScheduler(); //获取对象 //创建任务 JobDetailImpl jobDetail = new JobDetailImpl(); jobDetail.Name = jobName; jobDetail.JobType = jobType; jobDetail.Group = Const.JobGroupName; //创建触发器 CronTriggerImpl trigger = new CronTriggerImpl(); trigger.Name = jobName; trigger.Group = Const.TiggerGroupName; trigger.CronExpressionString = timeCorn; //任务、触发器添至调度器对象 scheduler.ScheduleJob(jobDetail, trigger); if (!scheduler.IsShutdown) { scheduler.Start(); } } } }