Пример #1
0
        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);
        }
Пример #2
0
        //Инициализация задачи. Вызывается при старте сервера или после обновления задачи
        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));
            }
        }