160 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
 | ||
| using System;
 | ||
| using System.Collections.Generic;
 | ||
| using System.Collections.ObjectModel;
 | ||
| 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<IJobDetail, IReadOnlyCollection<ITrigger>>();
 | ||
|             // 将映射关系包装成制度字典集合  
 | ||
|             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;
 | ||
|             }
 | ||
|             var readOnlyjobAndTriggerMapping = new ReadOnlyDictionary<IJobDetail, IReadOnlyCollection<ITrigger>>(jobAndTriggerMapping);
 | ||
|             await scheduler.ScheduleJobs(readOnlyjobAndTriggerMapping, true);
 | ||
|             await scheduler.Start(); //只有启动了,里面的任务才会定时触发
 | ||
|             Funs.ScheduledTasks = scheduler;
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
|         public static void ISchedulerShupDown(IScheduler scheduler)
 | ||
|         {
 | ||
|             scheduler.Shutdown();
 | ||
| 
 | ||
|         }
 | ||
|         /// <summary>
 | ||
|         /// 同步任务调度
 | ||
|         /// </summary>
 | ||
|         /// <param name="InterFaceTaskId"></param>
 | ||
|         /// <returns></returns>
 | ||
|         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;
 | ||
|             }
 | ||
| 
 | ||
|         }
 | ||
|         /// <summary>
 | ||
|         /// 同步任务列表
 | ||
|         /// </summary>
 | ||
|         /// <param name="InterFaceTaskId"></param>
 | ||
|         /// <param name="scheduler"></param>
 | ||
|         /// <param name="type">0 增 1 修改 2删除</param>
 | ||
|         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<MyJob>()
 | ||
|                  .WithIdentity(InterFaceTaskId, "group1")//给Job身份
 | ||
|                  .WithDescription("任务的描述,方便查找")
 | ||
|                  .UsingJobData("InterFaceTaskId", InterFaceTaskId)
 | ||
|                  .Build();
 | ||
|             return jobDetail1;
 | ||
|         }
 | ||
|         public static ReadOnlyCollection<ITrigger> GetTriggerByTime(string InterFaceTaskId, string time)
 | ||
|         {
 | ||
|             string cron = "0 0 0/& * * ? ";
 | ||
|             // cron = cron.Replace("&", time);
 | ||
|             cron = time;
 | ||
|             //  cron = "0 0/1 * * * ? ";
 | ||
|             //创建触发器
 | ||
|             var trigger1 = new ReadOnlyCollection<ITrigger>(
 | ||
|                 new List<ITrigger>()
 | ||
|             {
 | ||
|                 TriggerBuilder.Create()
 | ||
|                 .WithIdentity(InterFaceTaskId, "group1") //给触发器身份
 | ||
|                 .WithDescription("触发器的描述,方便查找")
 | ||
|                 .StartAt(new DateTimeOffset(DateTime.Now.AddSeconds(10))) //.StartNow()都是启动触发器方式
 | ||
|                 .WithCronSchedule(cron) //定时策略,Cron表达式
 | ||
|                 .Build()
 | ||
|         });
 | ||
|             return trigger1;
 | ||
| 
 | ||
|         }
 | ||
|     }
 | ||
| }
 | ||
| 
 |