| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | using wms.dto.request.hj;using wms.dto;using Quartz;using Quartz.Impl;using Quartz.Impl.Matchers;using Quartz.Impl.Triggers;namespace wms.api.Job{    /// <summary>    /// 任务调度器    /// </summary>    public class JobScheduler    {        public static IScheduler InitScheduler()        {            //创建调度器工厂            ISchedulerFactory factory = new StdSchedulerFactory();            //创建调度器对象            IScheduler scheduler = factory.GetScheduler().Result;            ////创建任务            //IJobDetail job = JobBuilder.Create<PostJob>().Build();            ////创建触发器            //ITrigger trigger = TriggerBuilder.Create().WithIdentity("TimeTrigger", "TimeGroup").WithSimpleSchedule(p => p.WithIntervalInMinutes(1).RepeatForever()).Build();            ////任务、触发器添至调度器对象            //scheduler.ScheduleJob(job, trigger);            //scheduler.Start();            return scheduler;        }        public static void Start(string jobName, Type jobType, string timeCorn)        {            var sched = InitScheduler();            var jobList = GetJobList(Const.JobGroupName).Result;            var job = jobList.Where(p => jobName == p.JobName);            if (job.Count() > 0)            {                //if (job.First().JobStatus == "Stop")                {                    sched.DeleteJob(new JobKey(jobName, Const.JobGroupName));                    StartJob(jobName, jobType, timeCorn);                }                //else                //{                //    ResumeAsync(jobName, Const.JobGroupName);                //}            }            else            {                StartJob(jobName, jobType, timeCorn);            }        }        public static async Task<List<SysJobDto>> GetJobList(string jobGroup)        {            var result = new List<SysJobDto>();            try            {                var group = await InitScheduler().GetJobGroupNames();                var currentlyExecutingJobs = await InitScheduler().GetCurrentlyExecutingJobs();                var matcher = GroupMatcher<JobKey>.GroupEquals(jobGroup);                var jobs = await InitScheduler().GetJobKeys(matcher);                foreach (var item in jobs)                {                    var triggers = await InitScheduler().GetTriggersOfJob(item);                    var state = await InitScheduler().GetTriggerState(triggers.First().Key);                    var job = InitScheduler().GetJobDetail(item).Result;                    result.Add(new SysJobDto()                    {                        JobName = job.Key.Name,                        JobDesc = job.Description,                        JobStatus = state.ToString(),                        JobGroup = job.Key.Group                    });                }                return result;            }            catch (Exception ex)            { return result; }        }        public static void StartJob(string jobName, Type jobType, string timeCorn)        {            var scheduler = InitScheduler(); //获取对象            //创建任务            JobDetailImpl jobDetail = new JobDetailImpl();            jobDetail.Name = jobName;            jobDetail.JobType = jobType;            jobDetail.Group = Const.JobGroupName;            //创建触发器            CronTriggerImpl trigger = new CronTriggerImpl();            trigger.Name = jobName;            trigger.Group = Const.TiggerGroupName;            trigger.CronExpressionString = timeCorn;            //任务、触发器添至调度器对象            scheduler.ScheduleJob(jobDetail, trigger);            if (!scheduler.IsShutdown)            {                scheduler.Start();            }        }    }}
 |