/// <summary>
 /// 创建SimpleTrigger触发器(简单触发器)
 /// </summary>
 /// <param name="sysSchedule"></param>
 /// <param name="starRunTime"></param>
 /// <param name="endRunTime"></param>
 /// <returns></returns>
 private ITrigger CreateSimpleTrigger(SysSchedule sysSchedule)
 {
     if (sysSchedule.RunTimes > 0)
     {
         ITrigger trigger = TriggerBuilder.Create()
                            .WithIdentity(sysSchedule.Id.ToString(), sysSchedule.JobGroup)
                            .StartAt(sysSchedule.BeginTime.Value)
                            .EndAt(sysSchedule.EndTime.Value)
                            .WithSimpleSchedule(x =>
                                                x.WithIntervalInSeconds(sysSchedule.IntervalSecond)
                                                .WithRepeatCount(sysSchedule.RunTimes)).ForJob(sysSchedule.Id.ToString(), sysSchedule.JobGroup).Build();
         return(trigger);
     }
     else
     {
         ITrigger trigger = TriggerBuilder.Create()
                            .WithIdentity(sysSchedule.Id.ToString(), sysSchedule.JobGroup)
                            .StartAt(sysSchedule.BeginTime.Value)
                            .EndAt(sysSchedule.EndTime.Value)
                            .WithSimpleSchedule(x =>
                                                x.WithIntervalInSeconds(sysSchedule.IntervalSecond)
                                                .RepeatForever()).ForJob(sysSchedule.Id.ToString(), sysSchedule.JobGroup).Build();
         return(trigger);
     }
     // 触发作业立即运行,然后每10秒重复一次,无限循环
 }
        /// <summary>
        /// 暂停一个指定的计划任务
        /// </summary>
        /// <returns></returns>
        public async Task <JobResuleModel> StopScheduleJobAsync(SysSchedule sysSchedule)
        {
            var result = new JobResuleModel();

            try
            {
                JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
                if (!await _scheduler.Result.CheckExists(jobKey))
                {
                    result.IsSuccess = false;
                    result.Message   = $"未找到要暂停的任务:【{sysSchedule.Name}】";
                    return(result);
                }
                else
                {
                    await this._scheduler.Result.PauseJob(jobKey);

                    result.IsSuccess = true;
                    result.Message   = $"暂停任务:【{sysSchedule.Name}】成功";
                    return(result);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
Пример #3
0
 public async Task <bool> UpdateScheduleAsync(SysSchedule sysSchedule)
 {
     sysSchedule.UpdateDate = DateTime.Now;
     return(await _scheduleRepositoty.UpdateNotQueryAsync(sysSchedule,
                                                          x => x.Name, x => x.JobGroup, x => x.Cron, x => x.UpdateDate, x => x.UpdateName, x => x.UpdateId
                                                          , x => x.AssemblyName, x => x.ClassName, x => x.Remark, x => x.RunTimes, x => x.BeginTime, x => x.BeginTime,
                                                          x => x.EndTime, x => x.TriggerType, x => x.IntervalSecond, x => x.IsStart) > 0);
 }
 /// <summary>
 /// 创建类型Cron的触发器
 /// </summary>
 /// <param name="m"></param>
 /// <returns></returns>
 private ITrigger CreateCronTrigger(SysSchedule sysSchedule)
 {
     // 作业触发器
     return(TriggerBuilder.Create()
            .WithIdentity(sysSchedule.Id.ToString(), sysSchedule.JobGroup)
            .StartAt(sysSchedule.BeginTime.Value)                    //开始时间
            .EndAt(sysSchedule.EndTime.Value)                        //结束数据
            .WithCronSchedule(sysSchedule.Cron)                      //指定cron表达式
            .ForJob(sysSchedule.Id.ToString(), sysSchedule.JobGroup) //作业名称
            .Build());
 }
Пример #5
0
        public async Task <MessageModel <string> > UpdateSchedule([FromBody] SysSchedule sysRole)
        {
            var data = new MessageModel <string>();

            data.success = await _scheduleServer.UpdateScheduleAsync(sysRole);

            if (data.success)
            {
                data.msg = "角色修改成功";
            }
            return(data);
        }
Пример #6
0
        /// <summary>
        /// 创建SimpleTrigger触发器(简单触发器)
        /// </summary>
        /// <param name="sysSchedule"></param>
        /// <param name="starRunTime"></param>
        /// <param name="endRunTime"></param>
        /// <returns></returns>
        private ITrigger CreateSimpleTrigger(SysSchedule sysSchedule)
        {
            // 触发作业立即运行,然后每10秒重复一次,无限循环
            ITrigger trigger = TriggerBuilder.Create()
                               .WithIdentity(sysSchedule.Name, sysSchedule.JobGroup)
                               .StartAt(sysSchedule.BeginTime.Value)
                               .EndAt(sysSchedule.EndTime.Value)
                               .WithSimpleSchedule(x =>
                                                   x.WithIntervalInSeconds(sysSchedule.IntervalSecond)
                                                   .RepeatForever()).Build();

            return(trigger);
        }
Пример #7
0
        public async Task <MessageModel <string> > AddSchedule([FromBody] SysSchedule sysSchedule)
        {
            var data = new MessageModel <string>();

            data.success = await _scheduleServer.AddScheduleAsync(sysSchedule);

            if (data.success)
            {
                data.msg = "任务添加成功";
            }
            else
            {
                data.msg = "任务添加失败";
            }
            return(data);
        }
        /// <summary>
        /// 恢复指定的计划任务
        /// </summary>
        /// <param name="sysSchedule"></param>
        /// <returns></returns>
        public async Task <JobResuleModel> ResumeJob(SysSchedule sysSchedule)
        {
            var result = new JobResuleModel();

            try
            {
                JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
                if (!await _scheduler.Result.CheckExists(jobKey))
                {
                    result.IsSuccess = false;
                    result.Message   = $"未找到要重新的任务:【{sysSchedule.Name}】,请先选择添加计划!";
                    return(result);
                }
                await this._scheduler.Result.ResumeJob(jobKey);

                result.IsSuccess = true;
                result.Message   = $"恢复计划任务:【{sysSchedule.Name}】成功";
                return(result);
            }
            catch (Exception)
            {
                throw;
            }
        }
Пример #9
0
 public async Task <bool> AddScheduleAsync(SysSchedule sysSchedule)
 {
     return(await this._scheduleRepositoty.InsertAsync(sysSchedule));
 }
Пример #10
0
 public bool AddSchedule(SysSchedule sysSchedule)
 {
     return(this._scheduleRepositoty.Insert(sysSchedule));
 }
        /// <summary>
        /// 添加一个计划任务(映射程序集指定IJob实现类)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sysSchedule"></param>
        /// <returns></returns>
        public async Task <JobResuleModel> AddScheduleJobAsync(SysSchedule sysSchedule)
        {
            var result = new JobResuleModel();

            try
            {
                if (sysSchedule != null)
                {
                    JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
                    if (await _scheduler.Result.CheckExists(jobKey))
                    {
                        result.IsSuccess = false;
                        result.Message   = $"该任务计划已经在执行:【{sysSchedule.Name}】,请勿重复启动!";
                        return(result);
                    }
                    #region 设置开始时间和结束时间

                    if (sysSchedule.BeginTime == null)
                    {
                        sysSchedule.BeginTime = DateTime.Now;
                    }
                    DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(sysSchedule.BeginTime, 1);//设置开始时间
                    if (sysSchedule.EndTime == null)
                    {
                        sysSchedule.EndTime = DateTime.MaxValue.AddDays(-1);
                    }
                    DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(sysSchedule.EndTime, 1);//设置暂停时间

                    #endregion

                    #region 通过反射获取程序集类型和类

                    Assembly assembly = Assembly.Load(new AssemblyName(sysSchedule.AssemblyName));
                    Type     jobType  = assembly.GetType(sysSchedule.AssemblyName + "." + sysSchedule.ClassName);

                    #endregion
                    //判断任务调度是否开启
                    if (!_scheduler.Result.IsStarted)
                    {
                        await StartScheduleAsync();
                    }

                    //传入反射出来的执行程序集
                    IJobDetail job = new JobDetailImpl(sysSchedule.Id.ToString(), sysSchedule.JobGroup, jobType);
                    //Job执行时的参数还有待解决?????????????????????
                    ITrigger trigger;

                    #region 泛型传递
                    //IJobDetail job = JobBuilder.Create<T>()
                    //    .WithIdentity(sysSchedule.Name, sysSchedule.JobGroup)
                    //    .Build();
                    #endregion

                    if (!sysSchedule.Cron.IsNullOrEmpty() && CronExpression.IsValidExpression(sysSchedule.Cron) && sysSchedule.TriggerType > 0)
                    {
                        trigger = CreateCronTrigger(sysSchedule);
                    }
                    else
                    {
                        trigger = CreateSimpleTrigger(sysSchedule);
                    }
                    // 告诉Quartz使用我们的触发器来安排作业
                    await _scheduler.Result.ScheduleJob(job, trigger);

                    //await Task.Delay(TimeSpan.FromSeconds(120));
                    //await Console.Out.WriteLineAsync("关闭了调度器!");
                    //await _scheduler.Result.Shutdown();
                    result.IsSuccess = true;
                    result.Message   = $"启动任务:【{sysSchedule.Name}】成功";
                    return(result);
                }
                else
                {
                    result.IsSuccess = false;
                    result.Message   = $"任务计划不存在:【{sysSchedule.Name}】";
                    return(result);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Пример #12
0
 /// <summary>
 /// 添加或修改调度
 /// </summary>
 /// <param name="schedule"></param>
 /// <returns></returns>
 public async Task <bool> AddOrUpdateAsync(SysSchedule schedule)
 {
     return(schedule.JobId > 0
         ? await databaseFixture.Db.SysSchedule.UpdateScheduleAsync(schedule) //编辑
         : await databaseFixture.Db.SysSchedule.AddSceduleAsync(schedule));   //新增
 }
Пример #13
0
 public async Task <bool> AddOrUpdateAsync([FromBody] SysSchedule schedule)
 {
     return(await scheduleService.AddOrUpdateAsync(schedule));
 }