zoukankan      html  css  js  c++  java
  • 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)
            {
    
            }
        }
  • 相关阅读:
    angular转场动画
    css常用单位
    css3美化滚动条样式
    grid布局
    angular使用material组件库和tailwindcss样式
    使用 BaGet 搭建 nuget 仓库
    net core api 文件下载,断点续传
    netcore 使用中间件响应文件下载请求
    angular通知组件--angular2-toaster
    angular图标组件--@visurel/iconify-angular
  • 原文地址:https://www.cnblogs.com/tgdjw/p/4991739.html
Copyright © 2011-2022 走看看