Quartz任务管理

  public static class SchedulerHelper
    {
        private static List<SchedulerInfo> jobs;
        private static IScheduler sched;

        public static void InitalScheduler()
        {

            var sched = GetScheduler();


            var list = GetJobs();


            foreach (var s in list)
            {

                sched.ScheduleJob(s.Job, s.Trigger);
            }

            sched.Start();
        }

        public static void Restart()
        {

            var sched = GetScheduler();

            sched.Start();

        }

        public static List<SchedulerInfo> GetJobs()
        {
            if (jobs == null)
            {
                jobs = new List<SchedulerInfo>();

                //从数据库读定时任务信息

                TimerService ts = new TimerService();
                var timers = ts.GetAllTimers();
                foreach (var t in timers)
                {
                    AddJob(t);

                }
            }


            return jobs;
        }

        public static IScheduler GetScheduler()
        {
            if (sched == null)
            {

                ISchedulerFactory sf = new StdSchedulerFactory();
                sched = sf.GetScheduler();
            }
            return sched;
        }

        public static void AddJob(Timer t)
        {
            IJobDetail job;
            switch (t.Action)
            {
                case TimerAction.MeterRecord:
                    job = JobBuilder.Create<MeterJob>().WithIdentity(Guid.NewGuid().ToString("n"), "group").Build(); break;
                case TimerAction.MultiPowerOn:
                    job = JobBuilder.Create<PowerOnJob>().UsingJobData("lampIds", t.Parameter).WithIdentity(Guid.NewGuid().ToString("n"), "group").Build(); break;
                case TimerAction.MultiPowerOff:
                    job = JobBuilder.Create<PowerOffJob>().UsingJobData("lampIds", t.Parameter).WithIdentity(Guid.NewGuid().ToString("n"), "group").Build(); break;
                default:
                    job = JobBuilder.Create<OtherJob>().WithIdentity(Guid.NewGuid().ToString("n"), "group").Build(); break;

            }
            ITrigger trigger = TriggerBuilder.Create()
                                   .WithIdentity(Guid.NewGuid().ToString("n"), "group").StartNow()
                                   .WithCronSchedule("0/30 * * * * ?")
                                   .Build();
            if (job != null)
            {
                jobs.Add(new SchedulerInfo() { Job = job, Trigger = trigger, TimerId = t.TimerId });
                Restart();
            }

        }

        public static void DelJob(Timer t)
        {
            var sched = GetScheduler();
            var list = GetJobs();
            SchedulerInfo si = list.Where(a => a.TimerId == t.TimerId).FirstOrDefault();
            JobKey key = si.Job.Key;
            sched.DeleteJob(si.Job.Key);

        }
    }

    class SchedulerInfo
    {
        public IJobDetail Job { get; set; }
        public ITrigger Trigger { get; set; }
        public int TimerId { get; set; }
    }

    public class PowerOnJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            string lampIds = context.JobDetail.JobDataMap.Values.FirstOrDefault().ToString();

            List<int> ids = lampIds.Split(',').Select(i => int.Parse(i)).ToList();


            //调用业务层的断电方法

            Business.PowerService powerService = new Business.PowerService();
            var isSuccess = powerService.PowerOffDevices(ids);
            IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<BaseHub>();
            foreach (var item in ids)
            {
                hubContext.Clients.All.PowerOn(new { lampId = item, isSuccess = isSuccess });
            }
        }
    }

    public class PowerOffJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            string lampIds = context.JobDetail.JobDataMap.Values.FirstOrDefault().ToString();
            List<int> ids = lampIds.Split(',').Select(i => int.Parse(i)).ToList();

            //调用业务层的断电方法

            Business.PowerService powerService = new Business.PowerService();
            var isSuccess = powerService.PowerOffDevices(ids);
            IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<BaseHub>();
            foreach (var item in ids)
            {
                hubContext.Clients.All.PowerOff(new { lampId = item, isSuccess = isSuccess });
            }
        }
    }

    public class MeterJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            List<string> areas = new List<string>();
            AreaService aService = new AreaService();
            aService.GetGlobalAreas(1).Where(a => a.AreaId > 1).ToList().ForEach(a => areas.Add(a.AreaId.ToString()));

            //调用ExportService的导出方法
            string path = System.Web.HttpContext.Current.Server.MapPath("~/Files/");
            ExportService service = new ExportService();
            service.ExportMeters(path, DateTime.Now.ToShortDateString() + ".xls", areas.ToList());
        }
    }

    public class OtherJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {

        }
    }

 

posted @ 2015-11-24 15:23  nbu_djw  阅读(259)  评论(0编辑  收藏  举报