CNCEC_SUBQHSE_WUHUAN/SGGL/BLL/TaskScheduling/TimerTask/TimerTaskBase.cs

198 lines
7.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<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;
}
//// jobAndTriggerMapping[GetClJobDetail()] = GetClTrigger();//增加材料定时
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 = "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;
}
#region
public static IJobDetail GetClJobDetail()
{ //创建Job
IJobDetail jobDetail1 = JobBuilder.Create<CLJob>()
.WithIdentity("CL", "group1")//给Job身份
.WithDescription("任务的描述,方便查找")
.Build();
return jobDetail1;
}
public static ReadOnlyCollection<ITrigger> GetClTrigger()
{
string cron = "0 0/1 * * * ? ";
cron = "0 0/1 * * * ? ";
//创建触发器
var trigger1 = new ReadOnlyCollection<ITrigger>(
new List<ITrigger>()
{
TriggerBuilder.Create()
.WithIdentity("CL", "group1") //给触发器身份
.WithDescription("触发器的描述,方便查找")
.StartAt(new DateTimeOffset(DateTime.Now.AddSeconds(10))) //.StartNow()都是启动触发器方式
.WithCronSchedule(cron) //定时策略Cron表达式
.Build()
});
return trigger1;
}
#endregion
}
}