using Quartz.Impl; using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Entity.DomainModels; using WIDESEA_WCS.WCSClient; using WIDESEA_Core.DBManage; using Quartz.Impl.Matchers; namespace WIDESEA_WCS.Services.WCS.Partial.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(VV_Dispatch jobparms) { IJobDetail job = JobBuilder.Create(Type.GetType(jobparms.AssemblyName + "." + jobparms.ClassName)) .WithIdentity(jobparms.JobName, jobparms.JobGroup) .Build(); //添加携带信息 job.JobDataMap.Add("JobParams", PLCClient.Clients.FirstOrDefault(t => t.PLCName == jobparms.JobName)); ITrigger trigger = TriggerBuilder.Create() .WithDescription(jobparms.Remark) .WithIdentity(jobparms.JobName, jobparms.JobGroup) .StartNow() .WithSimpleSchedule(x => x.WithIntervalInSeconds(jobparms.IntervalSecond) .RepeatForever() ) .Build(); await _scheduler.ScheduleJob(job, 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; } } }