public static string GeneratePresentation(SmartJob sj) { string presentation = ""; //Regular if (sj.ExecutionMode == SmartJob.ExecutionModeEnum.Regular) { presentation = string.Format("{0} - {1}", string.IsNullOrEmpty(sj.Rule.RegularDateFrom) ? "..." : sj.Rule.RegularDateFrom, string.IsNullOrEmpty(sj.Rule.RegularDateTo) ? "..." : sj.Rule.RegularDateTo); if (sj.Rule.RegularValue == 0) { presentation = string.Format("{0} No repeat", presentation); } else { presentation = string.Format("{0} Every {1} {2}", presentation, sj.Rule.RegularValue, sj.Rule.RegularPeriod.ToString()); } } //Once else if (sj.ExecutionMode == SmartJob.ExecutionModeEnum.Once) { presentation = string.Format("Once: {0}", sj.Rule.OnceDate); } //CronExpression else if (sj.ExecutionMode == SmartJob.ExecutionModeEnum.CronExpression) { presentation = string.Format("Cron expression: {0}", sj.Rule.CronExpression); } return(presentation); }
//Инициализация задачи. Вызывается при старте сервера или после обновления задачи public async static Task InitJob(SmartJob smartJob, bool AllowLog = true) { try { if (smartJob.IsActive == false) { return; } //Создаем задачу IJobDetail job = JobBuilder.Create <SmartJob>().WithIdentity(smartJob.ID.ToString()).Build(); //Создаем триггер для задачи ITrigger trigger; //Режим: Регулярное выполнение if (smartJob.ExecutionMode == SmartJob.ExecutionModeEnum.Regular) { DateTime startAt = string.IsNullOrEmpty(smartJob.Rule.RegularDateFrom) ? DateTime.MinValue : ConvertToDateTime(smartJob.Rule.RegularDateFrom); DateTime endAt = string.IsNullOrEmpty(smartJob.Rule.RegularDateTo) ? DateTime.MaxValue : ConvertToDateTime(smartJob.Rule.RegularDateTo); var interval = 0; if (smartJob.Rule.RegularValue > 0) { if (smartJob.Rule.RegularPeriod == PeriodEnum.Second) { interval = smartJob.Rule.RegularValue; } else if (smartJob.Rule.RegularPeriod == PeriodEnum.Minute) { interval = smartJob.Rule.RegularValue * 60; } else if (smartJob.Rule.RegularPeriod == PeriodEnum.Hour) { interval = smartJob.Rule.RegularValue * 60 * 60; } else if (smartJob.Rule.RegularPeriod == PeriodEnum.Day) { interval = smartJob.Rule.RegularValue * 60 * 60 * 24; } } if (interval == 0) { trigger = TriggerBuilder.Create().StartAt(startAt).EndAt(endAt).Build(); } else { trigger = TriggerBuilder.Create().StartAt(startAt).EndAt(endAt).WithSimpleSchedule(x => x.WithIntervalInSeconds(interval).RepeatForever()).Build(); } } //Режим: Одноразовое выполнение else if (smartJob.ExecutionMode == SmartJob.ExecutionModeEnum.Once) { DateTime startAt = string.IsNullOrEmpty(smartJob.Rule.OnceDate) ? DateTime.MinValue : ConvertToDateTime(smartJob.Rule.OnceDate); trigger = TriggerBuilder.Create().StartAt(startAt).Build(); } //Режим: Cron выражение else { trigger = TriggerBuilder.Create().WithCronSchedule(smartJob.Rule.CronExpression).Build(); } //Добавляем в планировщик задачу и триггер await _scheduler.ScheduleJob(job, trigger); //Пишем лог if (AllowLog) { await AddEvent(smartJob.ID, "Initialized"); } } catch (Exception err) { //Пишем лог await AddEvent(smartJob.ID, "StartJob error: " + err.Message + " Smart: " + JsonConvert.SerializeObject(smartJob)); } }