using Quartz.Impl; using Quartz; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using Newtonsoft.Json.Linq; namespace Emergency_platform { internal class TimedTask:IJob { public TimedTask() { } public void pp() { HashSet hashSet2 = new HashSet(); foreach (object value in Enum.GetValues(typeof(DayOfWeek))) { var allDaysOfTheWeek = new HashSet(); foreach (var d in Enum.GetValues(typeof(DayOfWeek))) { var dayOfWeek = (DayOfWeek)d; allDaysOfTheWeek.Add(dayOfWeek); if (dayOfWeek >= DayOfWeek.Monday && dayOfWeek <= DayOfWeek.Friday) { //mondayThroughFriday.Add(dayOfWeek); } } } //DayOfWeek dayOfWeek = (DayOfWeek)value; //hashSet.Add(dayOfWeek); //if (dayOfWeek >= DayOfWeek.Monday && dayOfWeek <= DayOfWeek.Friday) //{ // hashSet2.Add(dayOfWeek); //} } public virtual Task Execute(IJobExecutionContext context) { //执行控制轨道机巡逻任务 //取出巡逻点位集合 string[] sPatrols = context.JobDetail.JobDataMap.GetString("parameter").Split(';'); for (int i = 0; i < sPatrols.Length; i++) { string[] sPatrol = sPatrols[i].Split(','); //下达巡逻指令 //GuiDaoJiMove(sPatrol[0], sPatrol[1]); } Console.WriteLine("业务逻辑" + DateTime.Now); PrintInfo("业务逻辑" + DateTime.Now); Thread.Sleep(60000); return Task.CompletedTask; } /////// /////// 每天HH:mm:ss进行任务 /////// /////// 时间:格式必须为“HH:mm:ss” /////// 巡逻点位计集合:格式必须为“x1,y1;x2,y2;......” ////public static void DailyJob(string sTime, string sPatrols) ////{ //// int iHour = Convert.ToInt32(sTime.Substring(0, 2)); //// int iMinute = Convert.ToInt32(sTime.Substring(3, 2)); //// int iSecond = Convert.ToInt32(sTime.Substring(6, 2)); //// //创建一个调度器 //// IScheduler _temp_schheduler = StdSchedulerFactory.GetDefaultScheduler().Result; //// // 创建作业 //// IJobDetail job = JobBuilder.Create() //// .WithIdentity("dailyTaskJob", "group1") //// .Build(); //// // 创建触发器,每天九点 //// ITrigger trigger = TriggerBuilder.Create() //// .WithIdentity("dailyTaskTrigger", "group1") //// .StartNow() //// .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(iHour, iMinute)) // 每天9:00执行 //// .Build(); //// // 将作业和触发器加入调度器 //// _temp_schheduler.ScheduleJob(job, trigger); //// _temp_schheduler.Start(); ////} /// /// 每天HH:mm:ss进行任务 /// /// 时间:格式必须为“HH:mm:ss” /// 巡逻点位计集合:格式必须为“x1,y1;x2,y2;......” public static async Task DailyJob(string sTime, string sPatrols) { if (sTime == null) { return; } int iHour = Convert.ToInt32(sTime.Substring(0, 2)); int iMinute = Convert.ToInt32(sTime.Substring(3, 2)); int iSecond = Convert.ToInt32(sTime.Substring(6, 2)); string sJob = "job" + iHour + iMinute + iSecond; string sGroup = "group" + iHour + iMinute + iSecond; string sTrigger = "trigger" + iHour + iMinute + iSecond; //每天每天HH:mm:ss进行任务 string cronExpression = string.Format("{0} {1} {2} ? * *", iSecond, iMinute, iHour); //创建一个调度器 IScheduler _temp_schheduler = StdSchedulerFactory.GetDefaultScheduler().Result; // 创建作业 IJobDetail job = JobBuilder.Create() .WithIdentity(sJob, sGroup) .UsingJobData("parameter", sPatrols) .Build(); // 创建触发器,每天上午sTime执行 ITrigger trigger = TriggerBuilder.Create().WithIdentity(sTrigger, sGroup) .WithCronSchedule(cronExpression) .WithPriority(10) // 设置优先级,范围是0到255,数字越高,优先级越高 .Build(); // 将作业和触发器加入调度器 await _temp_schheduler.ScheduleJob(job, trigger); await _temp_schheduler.Start(); } ///// ///// 每天HH:mm:ss进行任务 ///// ///// 时间:格式必须为“HH:mm:ss” ///// 巡逻点位计集合:格式必须为“x1,y1;x2,y2;......” //public static void DailyJob(string sTime, string sPatrols) //{ // if (sTime == null) // { // return; // } // int iHour = Convert.ToInt32(sTime.Substring(0, 2)); // int iMinute = Convert.ToInt32(sTime.Substring(3, 2)); // int iSecond = Convert.ToInt32(sTime.Substring(6, 2)); // string sJob = "job" + iHour + iMinute + iSecond; // string sGroup = "group" + iHour + iMinute + iSecond; // string sTrigger = "trigger" + iHour + iMinute + iSecond; // //创建一个调度器 // IScheduler _temp_schheduler = StdSchedulerFactory.GetDefaultScheduler().Result; // // 创建作业 // IJobDetail job = JobBuilder.Create() // .WithIdentity(sJob, sGroup) // //.UsingJobData("parameter", sPatrols) // .Build(); // // 创建触发器,每天上午sTime执行 // ITrigger trigger = TriggerBuilder.Create() // .WithIdentity(sTrigger, sGroup) // .WithDailyTimeIntervalSchedule(a => // a.WithIntervalInHours(24) // .OnEveryDay() // .StartingDailyAt(TimeOfDay.HourMinuteAndSecondOfDay(iHour, iMinute, iSecond))) // //.WithPriority(10) // 设置优先级,范围是0到255,数字越高,优先级越高 // .Build(); // // 将作业和触发器加入调度器 // _temp_schheduler.ScheduleJob(job, trigger); // _temp_schheduler.Start(); //} /// /// 每周中的某几天进行任务 /// /// 周中某几天 /// 时间:格式必须为“HH:mm:ss” /// 编号(不能重复) /// 巡逻点位计集合:格式必须为“x1,y1;x2,y2;......” public static async Task WeeklyJob(IReadOnlyCollection onDaysOfWeek, string sTime, int iNo, string sPatrols) { int iHour = Convert.ToInt32(sTime.Substring(0, 2)); int iMinute = Convert.ToInt32(sTime.Substring(3, 2)); int iSecond = Convert.ToInt32(sTime.Substring(6, 2)); string sJob = "jobWeek" + iNo; string sGroup = "groupWeek" + iNo; string sTrigger = "triggerWeek" + iNo; //创建一个调度器 IScheduler _temp_schheduler = StdSchedulerFactory.GetDefaultScheduler().Result; // 创建作业 IJobDetail job = JobBuilder.Create() .WithIdentity(sJob, sGroup) .UsingJobData("parameter", sPatrols) .Build(); // 创建触发器,每天上午sTime执行 ITrigger trigger = TriggerBuilder.Create() .WithIdentity(sTrigger, sGroup) .WithDailyTimeIntervalSchedule(a => a.OnDaysOfTheWeek(onDaysOfWeek) .StartingDailyAt(TimeOfDay.HourMinuteAndSecondOfDay(iHour, iMinute, iSecond))) //.WithPriority(10) // 设置优先级,范围是0到255,数字越高,优先级越高 .Build(); // 将作业和触发器加入调度器 await _temp_schheduler.ScheduleJob(job, trigger); await _temp_schheduler.Start(); } ///// ///// 每周中的某几天进行任务(暂时无法实现) ///// ///// 周中某几天,如"1,2,3"即每周的周一周二周三,用半角逗号隔开 ///// 时间:格式必须为“HH:mm:ss” ///// 编号(不能重复) ///// 巡逻点位计集合:格式必须为“x1,y1;x2,y2;......” //public static void WeeklyJob(string sDaysOfWeek, string sTime, int iNo, string sPatrols) //{ // if (sTime == null) // { // return; // } // int iHour = Convert.ToInt32(sTime.Substring(0, 2)); // int iMinute = Convert.ToInt32(sTime.Substring(3, 2)); // int iSecond = Convert.ToInt32(sTime.Substring(6, 2)); // string sJob = "jobWeek" + iNo; // string sGroup = "groupWeek" + iNo; // string sTrigger = "triggerWeek" + iNo; // //每周中的某几天某点进行任务 // string cronExpression = string.Format("{0} {1} {2} ? * {3}", iSecond, iMinute, iHour, sDaysOfWeek); // //创建一个调度器 // IScheduler _temp_schheduler = StdSchedulerFactory.GetDefaultScheduler().Result; // // 创建作业 // IJobDetail job = JobBuilder.Create().WithIdentity(sJob, sGroup).Build(); // //给任务传参 // job.JobDataMap.Add("parameter", sPatrols); // // 创建触发器,每周某几天某点进行作业 // ITrigger trigger = TriggerBuilder.Create().WithIdentity(sTrigger, sGroup) // .WithCronSchedule(cronExpression) // .WithPriority(10) // 设置优先级,范围是0到255,数字越高,优先级越高 // .Build(); // // 将作业和触发器加入调度器 // _temp_schheduler.ScheduleJob(job, trigger); // _temp_schheduler.Start(); //} /// /// 每月中的某几天进行任务 /// /// 每月的某几天,如"1,5,10"即每月的1号,5号,10号执行。用半角逗号隔开 /// 时间:格式必须为“HH:mm:ss” /// 编号(不能重复) /// 巡逻点位计集合:格式必须为“x1,y1;x2,y2;......” public static async Task CertainDaysJob(string sDays, string sTime, int iNo, string sPatrols) { int iHour = Convert.ToInt32(sTime.Substring(0, 2)); int iMinute = Convert.ToInt32(sTime.Substring(3, 2)); int iSecond = Convert.ToInt32(sTime.Substring(6, 2)); string sJob = "jobDays" + iNo; string sGroup = "groupDays" + iNo; string sTrigger = "triggerDays" + iNo; // 在Quartz.NET中使用Cron表达式 //string cronExpression = "0 15 10 5,15 * ?"; // 每月的第5号和第15号上午10点15分 string cronExpression = string.Format("{0} {1} {2} {3} * ?", iSecond, iMinute, iHour, sDays); //创建一个调度器 IScheduler _temp_schheduler = StdSchedulerFactory.GetDefaultScheduler().Result; // 创建作业 IJobDetail job = JobBuilder.Create().WithIdentity(sJob, sGroup).Build(); //给任务传参 job.JobDataMap.Add("parameter", sPatrols); // 创建触发器,每周某几天0点进行作业 ITrigger trigger = TriggerBuilder.Create().WithIdentity(sTrigger, sGroup) .WithCronSchedule(cronExpression) .WithPriority(10) // 设置优先级,范围是0到255,数字越高,优先级越高 .Build(); // 将作业和触发器加入调度器 await _temp_schheduler.ScheduleJob(job, trigger); await _temp_schheduler.Start(); } public static void PrintInfo(string str) { string Folder = Environment.CurrentDirectory + @"\Logs"; string FileNamme = Environment.CurrentDirectory + @"\Logs\Info_" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; if (!System.IO.Directory.Exists(Folder)) { System.IO.Directory.CreateDirectory(Folder); } using (TextWriter fw = new StreamWriter(FileNamme, true)) { try { FileInfo fi = new FileInfo(FileNamme); fw.WriteLine(str); } catch (Exception ex) { fw.WriteLine(ex.Message); } finally { fw.Close(); fw.Dispose(); } } } } }