using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.Drawing.Printing; using System.Linq; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading; using System.Threading.Tasks; using Quartz; using Quartz.Impl; namespace BLL { public class QuartzServices { public static async Task Init() { //初始化计划者 StdSchedulerFactory factory = new StdSchedulerFactory(); // StdSchedulerFactory factory = new StdSchedulerFactory(properties); IScheduler scheduler = await factory.GetScheduler(); var jobAndTriggerMapping = new Dictionary>(); // 将映射关系包装成制度字典集合 var model = new Model.InterFaceTask(); model.Enable = true; var list = InterFaceTaskService.GetInterFaceTaskByModle(model); foreach (var item in list) { var jobDetail1 = GetJobDetailByInterFaceTaskId(item.InterFaceTaskId); var trigger1 = GetTriggerByTime(item.InterFaceTaskId, item.Frequency); //给计划者添加Job和触发器 jobAndTriggerMapping[jobDetail1] = trigger1; //keyValuePairs.Add(item.InterFaceTaskId, scheduler); //Funs.ScheduledTasks = keyValuePairs; } //// jobAndTriggerMapping[GetClJobDetail()] = GetClTrigger();//增加材料定时 var readOnlyjobAndTriggerMapping = new ReadOnlyDictionary>(jobAndTriggerMapping); await scheduler.ScheduleJobs(readOnlyjobAndTriggerMapping, true); await scheduler.Start(); //只有启动了,里面的任务才会定时触发 Funs.ScheduledTasks = scheduler; } public static void ISchedulerShupDown(IScheduler scheduler) { scheduler.Shutdown(); } /// /// 同步任务调度 /// /// /// public static async Task SyncISchedulerById(string InterFaceTaskId) { try { StdSchedulerFactory factory = new StdSchedulerFactory(); var model = InterFaceTaskService.GetInterFaceTaskById(InterFaceTaskId); // var item = Funs.ScheduledTasks.Where(x => x.Key == InterFaceTaskId).FirstOrDefault(); IScheduler scheduler = Funs.ScheduledTasks; JobKey jk = new JobKey(InterFaceTaskId, "group1"); if (model != null) { if (model.Enable == true) { if (scheduler.GetJobDetail(jk, default) != null) { var jobDetail1 = GetJobDetailByInterFaceTaskId(model.InterFaceTaskId); var trigger1 = GetTriggerByTime(model.InterFaceTaskId, model.Frequency); await scheduler.ScheduleJob(jobDetail1, trigger1,true); } else { var jobDetail1 = GetJobDetailByInterFaceTaskId(model.InterFaceTaskId); var trigger1 = GetTriggerByTime(model.InterFaceTaskId, model.Frequency); await scheduler.ScheduleJob(jobDetail1, trigger1,true); } } else { if (scheduler.GetJobDetail(jk, default) != null) { await scheduler.DeleteJob(jk, default); // SyncScheduledTasks(model.InterFaceTaskId, scheduler, 2); } } } Funs.ScheduledTasks = scheduler; } catch (Exception ex) { string a = ex.ToString(); throw; } } /// /// 同步任务列表 /// /// /// /// 0 增 1 修改 2删除 public static void SyncScheduledTasks(string InterFaceTaskId, IScheduler scheduler, int type) { if (type == 0) { // Funs.ScheduledTasks.Add(InterFaceTaskId, scheduler); } else if (type == 1) { // Funs.ScheduledTasks.Remove(InterFaceTaskId); // Funs.ScheduledTasks.Add(InterFaceTaskId, scheduler); } else if (type == 2) { // Funs.ScheduledTasks.Remove(InterFaceTaskId); } } public static IJobDetail GetJobDetailByInterFaceTaskId(string InterFaceTaskId) { //创建Job IJobDetail jobDetail1 = JobBuilder.Create() .WithIdentity(InterFaceTaskId, "group1")//给Job身份 .WithDescription("任务的描述,方便查找") .UsingJobData("InterFaceTaskId", InterFaceTaskId) .Build(); return jobDetail1; } public static ReadOnlyCollection GetTriggerByTime(string InterFaceTaskId, string time) { string cron = "0 0 0/& * * ? "; cron = cron.Replace("&", time); // cron = "0 0/1 * * * ? "; //创建触发器 var trigger1 = new ReadOnlyCollection( new List() { TriggerBuilder.Create() .WithIdentity(InterFaceTaskId, "group1") //给触发器身份 .WithDescription("触发器的描述,方便查找") .StartAt(new DateTimeOffset(DateTime.Now.AddSeconds(10))) //.StartNow()都是启动触发器方式 .WithCronSchedule(cron) //定时策略,Cron表达式 .Build() }); return trigger1; } #region 材料到货 public static IJobDetail GetClJobDetail() { //创建Job IJobDetail jobDetail1 = JobBuilder.Create() .WithIdentity("CL", "group1")//给Job身份 .WithDescription("任务的描述,方便查找") .Build(); return jobDetail1; } public static ReadOnlyCollection GetClTrigger() { string cron = "0 0/1 * * * ? "; cron = "0 0/1 * * * ? "; //创建触发器 var trigger1 = new ReadOnlyCollection( new List() { TriggerBuilder.Create() .WithIdentity("CL", "group1") //给触发器身份 .WithDescription("触发器的描述,方便查找") .StartAt(new DateTimeOffset(DateTime.Now.AddSeconds(10))) //.StartNow()都是启动触发器方式 .WithCronSchedule(cron) //定时策略,Cron表达式 .Build() }); return trigger1; } #endregion } }