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