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;
}
}
}