示例#1
0
 /// <summary>
 /// 创建类型Simple的触发器
 /// </summary>
 /// <param name="entity"></param>
 /// <returns></returns>
 private ITrigger CreateSimpleTrigger(ScheduleEntity entity)
 {
     //作业触发器
     if (entity.RunTimes.HasValue && entity.RunTimes > 0)
     {
         return(TriggerBuilder.Create()
                .WithIdentity(entity.JobName, entity.JobGroup)
                .StartAt(entity.BeginTime) //开始时间
                .EndAt(entity.EndTime)     //结束数据
                .WithSimpleSchedule(x =>
         {
             x.WithIntervalInSeconds(entity.IntervalSecond.Value) //执行时间间隔,单位秒
             .WithRepeatCount(entity.RunTimes.Value)              //执行次数、默认从0开始
             .WithMisfireHandlingInstructionFireNow();
         })
                .ForJob(entity.JobName, entity.JobGroup)//作业名称
                .Build());
     }
     else
     {
         return(TriggerBuilder.Create()
                .WithIdentity(entity.JobName, entity.JobGroup)
                .StartAt(entity.BeginTime) //开始时间
                .EndAt(entity.EndTime)     //结束数据
                .WithSimpleSchedule(x =>
         {
             x.WithIntervalInSeconds(entity.IntervalSecond.Value) //执行时间间隔,单位秒
             .RepeatForever()                                     //无限循环
             .WithMisfireHandlingInstructionFireNow();
         })
                .ForJob(entity.JobName, entity.JobGroup)//作业名称
                .Build());
     }
 }
示例#2
0
 /// <summary>
 /// 创建类型Simple的触发器
 /// </summary>
 /// <param name="entity"></param>
 /// <returns></returns>
 private ITrigger CreateSimpleTrigger(ScheduleEntity entity)
 {
     //作业触发器
     if (entity.RunTimes > 0)
     {
         return(TriggerBuilder.Create()
                .WithIdentity(entity.JobName, entity.JobGroup)
                .StartAt(entity.BeginTime)                                               //开始时间
                .EndAt(entity.EndTime)                                                   //结束数据
                .WithSimpleSchedule(x => x
                                    .WithIntervalInSeconds(entity.IntervalSecond.Second) //执行时间间隔,单位秒
                                    .WithRepeatCount(entity.RunTimes))                   //执行次数、默认从0开始
                .ForJob(entity.JobName, entity.JobGroup)                                 //作业名称
                .Build());
     }
     else
     {
         return(TriggerBuilder.Create()
                .WithIdentity(entity.JobName, entity.JobGroup)
                .StartAt(entity.BeginTime)                                               //开始时间
                .EndAt(entity.EndTime)                                                   //结束数据
                .WithSimpleSchedule(x => x
                                    .WithIntervalInSeconds(entity.IntervalSecond.Second) //执行时间间隔,单位秒
                                    .RepeatForever())                                    //无限循环
                .ForJob(entity.JobName, entity.JobGroup)                                 //作业名称
                .Build());
     }
 }
示例#3
0
        /// <summary>
        /// 查询任务
        /// </summary>
        /// <param name="jobGroup"></param>
        /// <param name="jobName"></param>
        /// <returns></returns>
        public async Task <ScheduleEntity> QueryJobAsync(string jobGroup, string jobName)
        {
            var entity    = new ScheduleEntity();
            var jobKey    = new JobKey(jobName, jobGroup);
            var jobDetail = await scheduler.GetJobDetail(jobKey);

            var triggersList = await scheduler.GetTriggersOfJob(jobKey);

            var triggers        = triggersList.AsEnumerable().FirstOrDefault();
            var intervalSeconds = (triggers as SimpleTriggerImpl)?.RepeatInterval.TotalSeconds;

            entity.RequestUrl        = jobDetail.JobDataMap.GetString(Constant.REQUESTURL);
            entity.BeginTime         = triggers.StartTimeUtc.LocalDateTime;
            entity.EndTime           = triggers.EndTimeUtc?.LocalDateTime;
            entity.IntervalSecond    = intervalSeconds.HasValue ? Convert.ToInt32(intervalSeconds.Value) : 0;
            entity.JobGroup          = jobGroup;
            entity.JobName           = jobName;
            entity.Cron              = (triggers as CronTriggerImpl)?.CronExpressionString;
            entity.RunTimes          = (triggers as SimpleTriggerImpl)?.RepeatCount;
            entity.TriggerType       = triggers is SimpleTriggerImpl ? TriggerTypeEnum.Simple : TriggerTypeEnum.Cron;
            entity.RequestType       = (RequestTypeEnum)int.Parse(jobDetail.JobDataMap.GetString(Constant.REQUESTTYPE));
            entity.RequestParameters = jobDetail.JobDataMap.GetString(Constant.REQUESTPARAMETERS);
            entity.Headers           = jobDetail.JobDataMap.GetString(Constant.HEADERS);
            entity.MailMessage       = (MailMessageEnum)int.Parse(jobDetail.JobDataMap.GetString(Constant.MAILMESSAGE) ?? "0");
            entity.Description       = jobDetail.Description;
            return(entity);
        }
示例#4
0
 /// <summary>
 /// 创建类型Cron的触发器
 /// </summary>
 /// <param name="entity"></param>
 /// <returns></returns>
 private ITrigger CreateCronTrigger(ScheduleEntity entity)
 {
     // 作业触发器
     return(TriggerBuilder.Create()
            .WithIdentity(entity.JobName, entity.JobGroup)
            .StartAt(entity.BeginTime)               //开始时间
            .EndAt(entity.EndTime)                   //结束时间
            .WithCronSchedule(entity.Cron)           //指定cron表达式
            .ForJob(entity.JobName, entity.JobGroup) //作业名称
            .Build());
 }
示例#5
0
        /// <summary>
        /// 添加一个工作调度
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task <BaseResult> AddScheduleJobAsync(ScheduleEntity entity)
        {
            var result = new BaseResult();

            try
            {
                //检查任务是否已存在
                var jobKey = new JobKey(entity.JobName, entity.JobGroup);
                if (await scheduler.CheckExists(jobKey))
                {
                    result.Code = 500;
                    result.Msg  = "任务已存在";
                    return(result);
                }
                //http请求配置
                var httpDir = new Dictionary <string, string>()
                {
                    { "RequestUrl", entity.RequestUrl },
                    { "RequestParameters", entity.RequestParameters },
                    { Constant.REQUESTTYPE, ((int)entity.RequestType).ToString() },
                    { "EndAt", entity.EndTime.ToString() },
                    { Constant.HEADERS, entity.Headers },
                    { Constant.MAILMESSAGE, ((int)entity.MailMessage).ToString() },
                };
                // 定义这个工作,并将其绑定到我们的IJob实现类
                IJobDetail job = JobBuilder.Create <HttpJob>()
                                 .SetJobData(new JobDataMap(httpDir))
                                 .WithDescription(entity.Description)
                                 .WithIdentity(entity.JobName, entity.JobGroup)
                                 .Build();
                // 创建触发器
                ITrigger trigger;
                //校验是否正确的执行周期表达式
                if (entity.TriggerType == TriggerTypeEnum.Cron)//CronExpression.IsValidExpression(entity.Cron))
                {
                    trigger = CreateCronTrigger(entity);
                }
                else
                {
                    trigger = CreateSimpleTrigger(entity);
                }

                // 告诉Quartz使用我们的触发器来安排作业
                await scheduler.ScheduleJob(job, trigger);

                result.Code = 200;
            }
            catch (Exception ex)
            {
                result.Code = 505;
                result.Msg  = ex.Message;
            }
            return(result);
        }
示例#6
0
        /// <summary>
        /// 创建类型Cron的触发器
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        private ITrigger CreateCronTrigger(ScheduleEntity entity)
        {
            // 作业触发器
            return(TriggerBuilder.Create()

                   .WithIdentity(entity.JobName, entity.JobGroup)
                   .StartAt(entity.BeginTime)                                                                                                //开始时间
                   .EndAt(entity.EndTime)                                                                                                    //结束时间
                   .WithCronSchedule(entity.Cron, cronScheduleBuilder => cronScheduleBuilder.WithMisfireHandlingInstructionFireAndProceed()) //指定cron表达式
                   .ForJob(entity.JobName, entity.JobGroup)                                                                                  //作业名称
                   .Build());
        }
示例#7
0
        /// <summary>
        /// 查询任务
        /// </summary>
        /// <param name="jobGroup"></param>
        /// <param name="jobName"></param>
        /// <returns></returns>
        public async Task <ScheduleEntity> QueryJobAsync(string jobGroup, string jobName)
        {
            var entity    = new ScheduleEntity();
            var jobKey    = new JobKey(jobName, jobGroup);
            var jobDetail = await scheduler.GetJobDetail(jobKey);

            var triggersList = await scheduler.GetTriggersOfJob(jobKey);

            var triggers        = triggersList.AsEnumerable().FirstOrDefault();
            var intervalSeconds = (triggers as SimpleTriggerImpl)?.RepeatInterval.TotalSeconds;
            var endTime         = jobDetail.JobDataMap.GetString("EndAt");

            entity.BeginTime = triggers.StartTimeUtc.LocalDateTime;
            if (!string.IsNullOrWhiteSpace(endTime))
            {
                entity.EndTime = DateTime.Parse(endTime);
            }
            if (intervalSeconds.HasValue)
            {
                entity.IntervalSecond = Convert.ToInt32(intervalSeconds.Value);
            }
            entity.JobGroup    = jobGroup;
            entity.JobName     = jobName;
            entity.Cron        = (triggers as CronTriggerImpl)?.CronExpressionString;
            entity.RunTimes    = (triggers as SimpleTriggerImpl)?.RepeatCount;
            entity.TriggerType = triggers is SimpleTriggerImpl ? TriggerTypeEnum.Simple : TriggerTypeEnum.Cron;
            entity.MailMessage = (MailMessageEnum)int.Parse(jobDetail.JobDataMap.GetString(Constant.MAILMESSAGE) ?? "0");
            entity.Description = jobDetail.Description;
            //旧代码没有保存JobTypeEnum,所以None可以默认为Url。
            entity.JobType = (JobTypeEnum)int.Parse(jobDetail.JobDataMap.GetString(Constant.JobTypeEnum) ?? "1");

            switch (entity.JobType)
            {
            case JobTypeEnum.None:
                break;

            case JobTypeEnum.Url:
                entity.RequestUrl        = jobDetail.JobDataMap.GetString(Constant.REQUESTURL);
                entity.RequestType       = (RequestTypeEnum)int.Parse(jobDetail.JobDataMap.GetString(Constant.REQUESTTYPE));
                entity.RequestParameters = jobDetail.JobDataMap.GetString(Constant.REQUESTPARAMETERS);
                entity.Headers           = jobDetail.JobDataMap.GetString(Constant.HEADERS);
                break;

            case JobTypeEnum.Emial:
                entity.MailTitle   = jobDetail.JobDataMap.GetString(Constant.MailTitle);
                entity.MailContent = jobDetail.JobDataMap.GetString(Constant.MailContent);
                entity.MailTo      = jobDetail.JobDataMap.GetString(Constant.MailTo);
                break;

            case JobTypeEnum.Mqtt:
                entity.Payload = jobDetail.JobDataMap.GetString(Constant.Payload);
                entity.Topic   = jobDetail.JobDataMap.GetString(Constant.Topic);
                break;

            case JobTypeEnum.RabbitMQ:
                entity.RabbitQueue = jobDetail.JobDataMap.GetString(Constant.RabbitQueue);
                entity.RabbitBody  = jobDetail.JobDataMap.GetString(Constant.RabbitBody);
                break;

            case JobTypeEnum.Hotreload:
                break;

            default:
                break;
            }
            return(entity);
        }
示例#8
0
        /// <summary>
        /// 添加一个工作调度
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="runNumber"></param>
        /// <returns></returns>
        public async Task <BaseResult> AddScheduleJobAsync(ScheduleEntity entity, long?runNumber = null)
        {
            var result = new BaseResult();

            try
            {
                //检查任务是否已存在
                var jobKey = new JobKey(entity.JobName, entity.JobGroup);
                if (await scheduler.CheckExists(jobKey))
                {
                    result.Code = 500;
                    result.Msg  = "任务已存在";
                    return(result);
                }
                //http请求配置
                var httpDir = new Dictionary <string, string>()
                {
                    { Constant.EndAt, entity.EndTime.ToString() },
                    { Constant.JobTypeEnum, ((int)entity.JobType).ToString() },
                    { Constant.MAILMESSAGE, ((int)entity.MailMessage).ToString() },
                };
                if (runNumber.HasValue)
                {
                    httpDir.Add(Constant.RUNNUMBER, runNumber.ToString());
                }

                IJobConfigurator jobConfigurator = null;
                if (entity.JobType == JobTypeEnum.Url)
                {
                    jobConfigurator = JobBuilder.Create <HttpJob>();
                    httpDir.Add(Constant.REQUESTURL, entity.RequestUrl);
                    httpDir.Add(Constant.HEADERS, entity.Headers);
                    httpDir.Add(Constant.REQUESTPARAMETERS, entity.RequestParameters);
                    httpDir.Add(Constant.REQUESTTYPE, ((int)entity.RequestType).ToString());
                }
                else if (entity.JobType == JobTypeEnum.Emial)
                {
                    jobConfigurator = JobBuilder.Create <MailJob>();
                    httpDir.Add(Constant.MailTitle, entity.MailTitle);
                    httpDir.Add(Constant.MailContent, entity.MailContent);
                    httpDir.Add(Constant.MailTo, entity.MailTo);
                }
                else if (entity.JobType == JobTypeEnum.Mqtt)
                {
                    jobConfigurator = JobBuilder.Create <MqttJob>();
                    httpDir.Add(Constant.Topic, entity.Topic);
                    httpDir.Add(Constant.Payload, entity.Payload);
                }
                else if (entity.JobType == JobTypeEnum.RabbitMQ)
                {
                    jobConfigurator = JobBuilder.Create <RabbitJob>();
                    httpDir.Add(Constant.RabbitQueue, entity.RabbitQueue);
                    httpDir.Add(Constant.RabbitBody, entity.RabbitBody);
                }

                // 定义这个工作,并将其绑定到我们的IJob实现类
                IJobDetail job = jobConfigurator
                                 .SetJobData(new JobDataMap(httpDir))
                                 .WithDescription(entity.Description)
                                 .WithIdentity(entity.JobName, entity.JobGroup)
                                 .Build();
                // 创建触发器
                ITrigger trigger;
                //校验是否正确的执行周期表达式
                if (entity.TriggerType == TriggerTypeEnum.Cron)//CronExpression.IsValidExpression(entity.Cron))
                {
                    trigger = CreateCronTrigger(entity);
                }
                else
                {
                    trigger = CreateSimpleTrigger(entity);
                }

                // 告诉Quartz使用我们的触发器来安排作业
                await scheduler.ScheduleJob(job, trigger);

                result.Code = 200;
            }
            catch (Exception ex)
            {
                result.Code = 505;
                result.Msg  = ex.Message;
            }
            return(result);
        }
示例#9
0
 internal void UpdateScheduleStatus(ScheduleEntity scheduleModel)
 {
     throw new NotImplementedException();
 }