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 
 | 
    { 
 | 
        /// <summary> 
 | 
        /// 调度中心 
 | 
        /// </summary> 
 | 
        private static IScheduler _scheduler = StdSchedulerFactory.GetDefaultScheduler().Result; 
 | 
  
 | 
        public SchedulerCenter() 
 | 
        { 
 | 
  
 | 
        } 
 | 
  
 | 
        public IScheduler center { get => _scheduler; } 
 | 
  
 | 
  
 | 
        public bool IsRun() 
 | 
        { 
 | 
            return !_scheduler.IsShutdown && _scheduler.IsStarted; 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 添加作业 
 | 
        /// </summary> 
 | 
        /// <param name="jobparms"></param> 
 | 
        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); 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 获取job 
 | 
        /// </summary> 
 | 
        /// <param name="jobName"></param> 
 | 
        /// <returns></returns> 
 | 
        public JobKey? GetJobByJobName(string jobName) 
 | 
        { 
 | 
            var job = _scheduler.GetJobKeys(GroupMatcher<JobKey>.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; 
 | 
        } 
 | 
    } 
 | 
} 
 |