using Org.BouncyCastle.Tls; using Quartz; using Quartz.Impl; using Quartz.Impl.Matchers; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEA_Model.Models; namespace WIDESEA_SystemService.Scheduler { public class SchedulerCenter { /// /// 调度中心 /// private static IScheduler _scheduler = StdSchedulerFactory.GetDefaultScheduler().Result; public SchedulerCenter() { } public IScheduler center { get => _scheduler; } public bool IsRun() { return !_scheduler.IsShutdown && _scheduler.IsStarted; } /// /// 添加作业 /// /// public async void AddJob(Sys_Job jobparms) { JobKey jobKey = new JobKey(jobparms.JobName, jobparms.JobGroup); Assembly assembly = Assembly.Load(new AssemblyName(jobparms.AssemblyName)); Type jobType = assembly.GetType(jobparms.AssemblyName + "." + jobparms.ClassName); IJobDetail jobDetail = new JobDetailImpl(jobparms.JobName, jobparms.JobGroup, jobType); //jobDetail.JobDataMap.Add("JobParams", PLCClient.Clients.FirstOrDefault()); ITrigger trigger; trigger = TriggerBuilder.Create() .WithIdentity(jobparms.JobName, jobparms.JobGroup) .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(jobparms.IntervalSecond) .RepeatForever() ) .Build(); await _scheduler.ScheduleJob(jobDetail, trigger); } /// /// 获取job /// /// /// public JobKey? GetJobByJobName(string jobName) { var job = _scheduler.GetJobKeys(GroupMatcher.AnyGroup()).Result.FirstOrDefault(t => t.Name == jobName); return job; } public bool RemoveJob(JobKey job) { return _scheduler.DeleteJob(job).Result; } public void Start() { _scheduler.Start(); } public void Shutdown() { _scheduler.Shutdown(false);//是否等待调度执行完成 _scheduler.Clear(); _scheduler = StdSchedulerFactory.GetDefaultScheduler().Result; } } }