/// <summary>
 /// 暂停一个指定的计划任务
 /// </summary>
 /// <returns></returns>
 public async Task<MessageModel<string>> StopScheduleJobAsync(TasksQz sysSchedule)
 {
     var result = new MessageModel<string>();
     try
     {
         JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
         if (!await _scheduler.Result.CheckExists(jobKey))
         {
             result.Success = false;
             result.Msg = $"未找到要暂停的任务:【{sysSchedule.Name}】";
             _logger.LogInformation(result.Msg);
             return result;
         }
         else
         {
             await this._scheduler.Result.PauseJob(jobKey);
             result.Success = true;
             result.Msg = $"暂停任务:【{sysSchedule.Name}】成功";
             _logger.LogInformation(result.Msg);
             return result;
         }
     }
     catch (Exception ex)
     {
         _logger.LogError(ex, "暂停任务异常");
         throw;
     }
 }
Exemplo n.º 2
0
        public async Task <object> PostTasksQz([FromBody] TasksQz tasksQz)
        {
            var data = new MessageModel <string>();

            tasksQz.JobStatus = tasksQz.IsStart ? JobStatus.运行中 : JobStatus.未启动;
            var id = await _tasksQzSvc.Add(tasksQz);

            data.Success  = id > 0;
            data.Response = id.ToString();
            data.Message  = data.Success ? "添加成功" : "添加失败";
            if (data.Success)
            {
                tasksQz.Id = id;
                if (tasksQz.IsStart)
                {
                    var resuleModel = await _schedulerCenter.AddScheduleJobAsync(tasksQz);

                    data.Success = resuleModel.Success;
                    if (resuleModel.Success)
                    {
                        data.Message = $"{data.Message}=>启动成功=>{resuleModel.Message}";
                    }
                    else
                    {
                        data.Message = $"{data.Message}=>启动失败=>{resuleModel.Message}";
                    }
                }
            }

            return(data);
        }
        /// <summary>
        /// 恢复指定的计划任务
        /// </summary>
        /// <param name="tasksQz"></param>
        /// <returns></returns>
        public async Task<MessageModel<string>> ResumeJob(TasksQz tasksQz)
        {
            var result = new MessageModel<string>();
            try
            {
                JobKey jobKey = new JobKey(tasksQz.Id.ToString(), tasksQz.JobGroup);
                if (!await _scheduler.Result.CheckExists(jobKey))
                {
                    result.Success = false;
                    result.Msg = $"未找到要重新的任务:【{tasksQz.Name}】,请先选择添加计划!";
                    _logger.LogInformation(result.Msg);
                    return result;
                }

                ITrigger trigger = CreateCronTrigger(tasksQz);

                TriggerKey triggerKey = new TriggerKey(tasksQz.Id.ToString(), tasksQz.JobGroup);
                await _scheduler.Result.RescheduleJob(triggerKey, trigger);

                result.Success = true;
                result.Msg = $"恢复计划任务:【{tasksQz.Name}】成功";
                _logger.LogInformation(result.Msg);
                return result;
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "恢复计划任务异常");
                throw;
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 暂停一个指定的计划任务
        /// </summary>
        /// <returns></returns>
        public async Task <MessageModel <string> > StopScheduleJobAsync(TasksQz sysSchedule)
        {
            var result = new MessageModel <string>();

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

                    result.success = true;
                    result.msg     = $"暂停任务:【{sysSchedule.Name}】成功";
                    return(result);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemplo n.º 5
0
 /// <summary>
 /// 创建SimpleTrigger触发器(简单触发器)
 /// </summary>
 /// <param name="sysSchedule"></param>
 /// <param name="starRunTime"></param>
 /// <param name="endRunTime"></param>
 /// <returns></returns>
 private ITrigger CreateSimpleTrigger(TasksQz 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秒重复一次,无限循环
 }
Exemplo n.º 6
0
        /// <summary>
        /// 恢复一个指定的计划任务
        /// </summary>
        /// <param name="tasksQz"></param>
        /// <returns></returns>
        public async Task <MessageModel <string> > ResumeScheduleJobAsync(TasksQz tasksQz)
        {
            var result = new MessageModel <string>();

            try
            {
                JobKey jobKey = new JobKey(tasksQz.Id.ToString(), tasksQz.JobGroup);
                if (!await _scheduler.Result.CheckExists(jobKey))
                {
                    result.Message = $"未找到要恢复的任务:【{tasksQz.JobName}】,请先选择添加计划!";
                }
                else
                {
                    await _scheduler.Result.ResumeJob(jobKey);

                    result.Success = true;
                    result.Message = $"恢复计划任务:【{tasksQz.JobName}】成功";
                }
            }
            catch (Exception)
            {
                result.Message = $"恢复计划任务:【{tasksQz.JobName}】失败";
            }

            return(result);
        }
Exemplo n.º 7
0
        public async Task <MessageModel <string> > Put([FromBody] TasksQz tasksQz)
        {
            var data = new MessageModel <string>();

            if (tasksQz != null && tasksQz.Id > 0)
            {
                _unitOfWork.BeginTran();
                data.success = await _tasksQzServices.Update(tasksQz);

                try
                {
                    if (data.success)
                    {
                        data.msg      = "修改成功";
                        data.response = tasksQz?.Id.ObjToString();
                        if (tasksQz.IsStart)
                        {
                            var ResuleModelStop = await _schedulerCenter.StopScheduleJobAsync(tasksQz);

                            data.msg = $"{data.msg}=>停止:{ResuleModelStop.msg}";
                            var ResuleModelStar = await _schedulerCenter.AddScheduleJobAsync(tasksQz);

                            data.success = ResuleModelStar.success;
                            data.msg     = $"{data.msg}=>启动:{ResuleModelStar.msg}";
                        }
                        else
                        {
                            var ResuleModelStop = await _schedulerCenter.StopScheduleJobAsync(tasksQz);

                            data.msg = $"{data.msg}=>停止:{ResuleModelStop.msg}";
                        }
                    }
                    else
                    {
                        data.msg = "修改失败";
                    }
                }
                catch (Exception)
                {
                    throw;
                }
                finally
                {
                    if (data.success)
                    {
                        _unitOfWork.CommitTran();
                    }
                    else
                    {
                        _unitOfWork.RollbackTran();
                    }
                }
            }
            return(data);
        }
Exemplo n.º 8
0
 /// <summary>
 /// 创建类型Cron的触发器
 /// </summary>
 /// <param name="m"></param>
 /// <returns></returns>
 private ITrigger CreateCronTrigger(TasksQz 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());
 }
Exemplo n.º 9
0
        public async Task <MessageModel <string> > TasksQzAdd(TasksQz p)
        {
            var data = new MessageModel <string>();
            var id   = (await _tasksQzServices.TasksQzAdd(p));

            if (id > 0)
            {
                data.response = id.ObjToString();
                data.msg      = "添加成功";
            }
            return(data);
        }
Exemplo n.º 10
0
        /// <summary>
        /// 任务是否存在?
        /// </summary>
        /// <returns></returns>
        public async Task <bool> IsExistScheduleJobAsync(TasksQz sysSchedule)
        {
            JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);

            if (await _scheduler.Result.CheckExists(jobKey))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 11
0
        public async Task <MessageModel <string> > Post([FromBody] TasksQz tasksQz)
        {
            var data = new MessageModel <string>();

            _unitOfWork.BeginTran();
            var id = (await _tasksQzServices.Add(tasksQz));

            data.success = id > 0;
            try
            {
                if (data.success)
                {
                    tasksQz.Id    = id;
                    data.response = id.ObjToString();
                    data.msg      = "添加成功";
                    if (tasksQz.IsStart)
                    {
                        //如果是启动自动
                        var ResuleModel = await _schedulerCenter.AddScheduleJobAsync(tasksQz);

                        data.success = ResuleModel.success;
                        if (ResuleModel.success)
                        {
                            data.msg = $"{data.msg}=>启动成功=>{ResuleModel.msg}";
                        }
                        else
                        {
                            data.msg = $"{data.msg}=>启动失败=>{ResuleModel.msg}";
                        }
                    }
                }
                else
                {
                    data.msg = "添加失败";
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            { if (data.success)
              {
                  _unitOfWork.CommitTran();
              }
              else
              {
                  _unitOfWork.RollbackTran();
              } }
            return(data);
        }
Exemplo n.º 12
0
        /// <summary>
        /// 创建类型Cron的触发器
        /// </summary>
        /// <param name="m"></param>
        /// <returns></returns>
        private static ITrigger CreateCronTrigger(TasksQz tasksQz)
        {
            DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(tasksQz.StartTime ?? DateTime.Now, 1);
            DateTimeOffset endRunTime  = DateBuilder.NextGivenSecondDate(tasksQz.EndTime ?? DateTime.MaxValue.AddDays(-1), 1);

            // 作业触发器
            return(TriggerBuilder.Create()
                   .WithIdentity(tasksQz.Id.ToString(), tasksQz.JobGroup)
                   .StartAt(starRunTime)                            //开始时间
                   .EndAt(endRunTime)                               //结束数据
                   .WithCronSchedule(tasksQz.Cron)                  //指定cron表达式
                   .ForJob(tasksQz.Id.ToString(), tasksQz.JobGroup) //作业名称
                   .Build());
        }
Exemplo n.º 13
0
        public async Task <MessageModel <string> > Post([FromBody] TasksQz tasksQz)
        {
            var data = new MessageModel <string>();

            var id = (await _tasksQzServices.Add(tasksQz));

            data.success = id > 0;
            if (data.success)
            {
                data.response = id.ObjToString();
                data.msg      = "添加成功";
            }

            return(data);
        }
Exemplo n.º 14
0
        public async Task <MessageModel <string> > TasksQzUpdate(TasksQz p)
        {
            var data = new MessageModel <string>();

            if (p != null && p.Id > 0)
            {
                var id = await _tasksQzServices.TasksQzUpdate(p);

                if (id != false)
                {
                    data.response = id.ObjToString();
                    data.msg      = "修改成功";
                }
            }
            return(data);
        }
Exemplo n.º 15
0
        public async Task <MessageModel <string> > Put([FromBody] TasksQz tasksQz)
        {
            var data = new MessageModel <string>();

            if (tasksQz != null && tasksQz.Id > 0)
            {
                data.success = await _tasksQzServices.Update(tasksQz);

                if (data.success)
                {
                    data.msg      = "更新成功";
                    data.response = tasksQz?.Id.ObjToString();
                }
            }

            return(data);
        }
Exemplo n.º 16
0
        public async Task <MessageModel <int> > AddJobEntity([FromBody] TasksQz tasksQz)
        {
            var data = new MessageModel <int>();

            try
            {
                data.Response = await _tasksQz.AddTasks(tasksQz);

                data.Success = true;
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "添加计划任务失败");
                data.Success = false;
                data.Msg     = ex.Message;
            }
            return(data);
        }
Exemplo n.º 17
0
        /// <summary>
        /// 暂停一个指定的计划任务
        /// </summary>
        /// <returns></returns>
        public async Task <MessageModel <string> > StopScheduleJobAsync(TasksQz sysSchedule)
        {
            var result = new MessageModel <string>();

            try
            {
                JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
                if (!await _scheduler.Result.CheckExists(jobKey))
                {
                    result.success = false;
                    result.msg     = $"未找到要暂停的任务:【{sysSchedule.Name}】";
                    return(result);
                }
                #region triggers方式也通过
                //if (sysSchedule.TriggerType == 1)
                //{
                //    var triggers = await _scheduler.Result.GetTriggersOfJob(jobKey);
                //    ITrigger trigger = triggers?.Where(x => (x as CronTriggerImpl).Name == sysSchedule.Id.ToString()).FirstOrDefault();

                //    if (trigger == null)
                //    {
                //        result.success = false;
                //        result.msg = $"未找到触发器[{sysSchedule.Name}]";
                //        return result;
                //    }

                //    //await this._scheduler.Result.PauseJob(jobKey);
                //    await this._scheduler.Result.PauseTrigger(trigger.Key);
                //    //var res= await this._scheduler.Result.DeleteJob(trigger.JobKey);
                //    var rea = await this._scheduler.Result.DeleteJob(jobKey);
                //}
                #endregion

                await this._scheduler.Result.PauseJob(jobKey);

                result.success = true;
                result.msg     = $"暂停任务:【{sysSchedule.Name}】成功";
                return(result);
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemplo n.º 18
0
        public async Task <List <TaskInfoDto> > GetTaskStaus(TasksQz sysSchedule)
        {
            var ls     = new List <TaskInfoDto>();
            var noTask = new List <TaskInfoDto> {
                new TaskInfoDto {
                    jobId         = sysSchedule.Id.ObjToString(),
                    jobGroup      = sysSchedule.JobGroup,
                    triggerId     = "",
                    triggerGroup  = "",
                    triggerStatus = "不存在"
                }
            };
            JobKey     jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
            IJobDetail job    = await this._scheduler.Result.GetJobDetail(jobKey);

            if (job == null)
            {
                return(noTask);
            }
            //info.Append(string.Format("任务ID:{0}\r\n任务名称:{1}\r\n", job.Key.Name, job.Description));
            var triggers = await this._scheduler.Result.GetTriggersOfJob(jobKey);

            if (triggers == null || triggers.Count == 0)
            {
                return(noTask);
            }
            foreach (var trigger in triggers)
            {
                var triggerStaus = await this._scheduler.Result.GetTriggerState(trigger.Key);

                string state = GetTriggerState(triggerStaus.ObjToString());
                ls.Add(new TaskInfoDto
                {
                    jobId         = job.Key.Name,
                    jobGroup      = job.Key.Group,
                    triggerId     = trigger.Key.Name,
                    triggerGroup  = trigger.Key.Group,
                    triggerStatus = state
                });
                //info.Append(string.Format("触发器ID:{0}\r\n触发器名称:{1}\r\n状态:{2}\r\n", item.Key.Name, item.Description, state));
            }
            return(ls);
        }
Exemplo n.º 19
0
        /// <summary>
        /// 获取任务触发器状态
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public async Task <List <TaskInfoDto> > GetTaskStaus(TasksQz tasksQz)
        {
            var ls     = new List <TaskInfoDto>();
            var noTask = new List <TaskInfoDto> {
                new TaskInfoDto {
                    jobId         = tasksQz.Id.ToString(),
                    jobGroup      = tasksQz.JobGroup,
                    triggerId     = "",
                    triggerGroup  = "",
                    triggerStatus = "不存在"
                }
            };
            JobKey     jobKey = new JobKey(tasksQz.Id.ToString(), tasksQz.JobGroup);
            IJobDetail job    = await this._scheduler.Result.GetJobDetail(jobKey);

            if (job == null)
            {
                return(noTask);
            }
            var triggers = await this._scheduler.Result.GetTriggersOfJob(jobKey);

            if (triggers == null || triggers.Count == 0)
            {
                return(noTask);
            }
            foreach (var trigger in triggers)
            {
                var triggerStaus = await this._scheduler.Result.GetTriggerState(trigger.Key);

                string state = GetTriggerState(triggerStaus.ToString());
                ls.Add(new TaskInfoDto
                {
                    jobId         = job.Key.Name,
                    jobGroup      = job.Key.Group,
                    triggerId     = trigger.Key.Name,
                    triggerGroup  = trigger.Key.Group,
                    triggerStatus = state
                });
            }
            return(ls);
        }
Exemplo n.º 20
0
        public async Task <object> PutTasksQz([FromBody] TasksQz tasksQz)
        {
            var data = new MessageModel <string>();

            if (tasksQz != null)
            {
                tasksQz.ModifyTime = DateTime.Now;
                tasksQz.JobStatus  = tasksQz.IsStart ? JobStatus.运行中 : JobStatus.已停止;
                data.Success       = await _tasksQzSvc.Update(tasksQz);

                data.Response = tasksQz?.Id.ToString();
                data.Message  = data.Success ? "更新成功" : "更新失败";
                if (data.Success)
                {
                    if (tasksQz.IsStart)
                    {
                        var resuleModelStop = await _schedulerCenter.StopScheduleJobAsync(tasksQz);

                        data.Success = resuleModelStop.Success;
                        data.Message = $"{data.Message}=>停止:{resuleModelStop.Message}";

                        var resuleModelStar = await _schedulerCenter.AddScheduleJobAsync(tasksQz);

                        data.Success = resuleModelStar.Success;
                        data.Message = $"{data.Message}=>启动:{resuleModelStar.Message}";
                    }
                    else
                    {
                        var resuleModelStop = await _schedulerCenter.StopScheduleJobAsync(tasksQz);

                        data.Success = resuleModelStop.Success;
                        data.Message = $"{data.Message}=>停止:{resuleModelStop.Message}";
                    }
                }
            }
            else
            {
                data.Message = "任务不存在";
            }
            return(data);
        }
Exemplo n.º 21
0
        /// <summary>
        /// 恢复指定的计划任务
        /// </summary>
        /// <param name="tasksQz"></param>
        /// <returns></returns>
        public async Task <MessageModel <string> > ResumeJob(TasksQz tasksQz)
        {
            var result = new MessageModel <string>();

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

                //await this._scheduler.Result.ResumeJob(jobKey);

                ITrigger trigger;
                if (tasksQz.Cron != null && CronExpression.IsValidExpression(tasksQz.Cron) && tasksQz.TriggerType > 0)
                {
                    trigger = CreateCronTrigger(tasksQz);
                }
                else
                {
                    trigger = CreateSimpleTrigger(tasksQz);
                }

                ((CronTriggerImpl)trigger).MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing;

                TriggerKey triggerKey = new TriggerKey(tasksQz.Id.ToString(), tasksQz.JobGroup);
                await _scheduler.Result.RescheduleJob(triggerKey, trigger);


                result.success = true;
                result.msg     = $"恢复计划任务:【{tasksQz.Name}】成功";
                return(result);
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemplo n.º 22
0
        /// <summary>
        /// 立即执行 一个任务
        /// </summary>
        /// <param name="tasksQz"></param>
        /// <returns></returns>
        public async Task <MessageModel <string> > ExecuteJobAsync(TasksQz tasksQz)
        {
            var result = new MessageModel <string>();

            try
            {
                JobKey jobKey = new JobKey(tasksQz.Id.ToString(), tasksQz.JobGroup);

                //判断任务是否存在,存在则 触发一次,不存在则先添加一个任务,触发以后再 停止任务
                if (!await _scheduler.Result.CheckExists(jobKey))
                {
                    //不存在 则 添加一个计划任务
                    await AddScheduleJobAsync(tasksQz);

                    //触发执行一次
                    await _scheduler.Result.TriggerJob(jobKey);

                    //停止任务
                    await StopScheduleJobAsync(tasksQz);

                    result.success = true;
                    result.msg     = $"立即执行计划任务:【{tasksQz.Name}】成功";
                }
                else
                {
                    await _scheduler.Result.TriggerJob(jobKey);

                    result.success = true;
                    result.msg     = $"立即执行计划任务:【{tasksQz.Name}】成功";
                }
            }
            catch (Exception ex)
            {
                result.msg = $"立即执行计划任务失败:【{ex.Message}】";
            }

            return(result);
        }
 /// <summary>
 /// 创建类型Cron的触发器
 /// </summary>
 /// <param name="m"></param>
 /// <returns></returns>
 private ITrigger CreateCronTrigger(TasksQz sysSchedule)
 {
     //CronExpression.IsValidExpression(sysSchedule.Cron)
     var trigger = TriggerBuilder.Create();
     trigger.WithIdentity(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
     // 开始时间
     trigger.StartAt(sysSchedule.BeginTime.Value);
     // 结束数据
     trigger.EndAt(sysSchedule.EndTime.Value);
     // 指定cron表达式
     if (CronExpression.IsValidExpression(sysSchedule.Cron))
         trigger.WithCronSchedule(sysSchedule.Cron);
     else
     {
         trigger.WithSimpleSchedule(x =>
             x.WithIntervalInSeconds(sysSchedule.IntervalSecond)
             .RepeatForever()).ForJob(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
     }
     // 作业名称
     trigger.ForJob(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
     // 作业触发器
     return trigger.Build();
 }
Exemplo n.º 24
0
        /// <summary>
        /// 创建SimpleTrigger触发器(简单触发器)
        /// </summary>
        /// <param name="tasksQz"></param>
        /// <param name="starRunTime"></param>
        /// <param name="endRunTime"></param>
        /// <returns></returns>
        private static ITrigger CreateSimpleTrigger(TasksQz tasksQz)
        {
            DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(tasksQz.StartTime.HasValue ? tasksQz.StartTime : DateTime.Now, 1);
            DateTimeOffset endRunTime  = DateBuilder.NextGivenSecondDate(tasksQz.EndTime.HasValue ? tasksQz.EndTime : DateTime.MaxValue.AddDays(-1), 1);

            if (tasksQz.RunTimes > 0)
            {
                ITrigger trigger = TriggerBuilder.Create()                                                  //创建触发器trigger实例
                                   .WithIdentity(tasksQz.Id.ToString(), tasksQz.JobGroup)
                                   .StartAt(starRunTime)                                                    //开始时间
                                   .EndAt(endRunTime)                                                       //结束时间
                                   .WithSimpleSchedule(x => x
                                                       .WithIntervalInSeconds(tasksQz.IntervalSecond.Value) //执行时间间隔,单位秒
                                                       .WithRepeatCount(tasksQz.RunTimes)                   //执行次数、默认从0开始
                                                       )
                                   .ForJob(tasksQz.Id.ToString(), tasksQz.JobGroup)                         //作业名称
                                   .Build();

                return(trigger);
            }
            else
            {
                ITrigger trigger = TriggerBuilder.Create()
                                   .WithIdentity(tasksQz.Id.ToString(), tasksQz.JobGroup)
                                   .StartAt(starRunTime)
                                   .EndAt(endRunTime)
                                   .WithSimpleSchedule(x => x
                                                       .WithIntervalInSeconds(tasksQz.IntervalSecond.Value) //执行时间间隔,单位秒
                                                       .RepeatForever()                                     //无限循环
                                                       )
                                   .ForJob(tasksQz.Id.ToString(), tasksQz.JobGroup)
                                   .Build();

                return(trigger);
            }
            // 触发作业立即运行,然后每10秒重复一次,无限循环
        }
Exemplo n.º 25
0
        /// <summary>
        /// 恢复指定的计划任务
        /// </summary>
        /// <param name="sysSchedule"></param>
        /// <returns></returns>
        public async Task <MessageModel <string> > ResumeJob(TasksQz sysSchedule)
        {
            var result = new MessageModel <string>();

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

                result.success = true;
                result.msg     = $"恢复计划任务:【{sysSchedule.Name}】成功";
                return(result);
            }
            catch (Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// 添加一个计划任务(映射程序集指定IJob实现类)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="tasksQz"></param>
        /// <returns></returns>
        public async Task<MessageModel<string>> AddScheduleJobAsync(TasksQz tasksQz)
        {
            var result = new MessageModel<string>();
            if (tasksQz != null)
            {
                try
                {
                    JobKey jobKey = new JobKey(tasksQz.Id.ToString(), tasksQz.JobGroup);
                    if (await _scheduler.Result.CheckExists(jobKey))
                    {
                        result.Success = false;
                        result.Msg = $"该任务计划已经在执行:【{tasksQz.Name}】,请勿重复启动!";
                        return result;
                    }
                    if (tasksQz.BeginTime == null)
                    {
                        tasksQz.BeginTime = DateTime.Now;
                    }
                    DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(tasksQz.BeginTime, 1);//设置开始时间
                    if (tasksQz.EndTime == null)
                    {
                        tasksQz.EndTime = DateTime.MaxValue.AddDays(1);
                    }
                    DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(tasksQz.EndTime, 1);//设置暂停时间

                    Assembly assembly = Assembly.Load(new AssemblyName(tasksQz.AssemblyName));
                    Type jobType = assembly.GetTypes().Where(t=>t.Name==tasksQz.ClassName).First();

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

                    //传入反射出来的执行程序集
                    IJobDetail job = new JobDetailImpl(tasksQz.Id.ToString(), tasksQz.JobGroup, jobType);
                    job.JobDataMap.Add("JobParam", tasksQz.JobParams);

                    ITrigger trigger = CreateCronTrigger(tasksQz);
                    // 告诉Quartz使用我们的触发器来安排作业
                    await _scheduler.Result.ScheduleJob(job, trigger);
                    result.Success = true;
                    result.Msg = $"启动任务:【{tasksQz.Name}】成功";
                    return result;
                }
                catch (Exception ex)
                {
                    result.Success = false;
                    result.Msg = $"任务计划异常:【{ex.Message}】";
                    _logger.LogError(ex, result.Msg);
                    return result;
                }
            }
            else
            {
                result.Success = false;
                result.Msg = $"任务计划不存在:【{tasksQz?.Name}】";
                _logger.LogInformation(result.Msg);
                return result;
            }
        }
Exemplo n.º 27
0
        /// <summary>
        /// 添加一个计划任务(映射程序集指定IJob实现类)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="tasksQz"></param>
        /// <returns></returns>
        public async Task <MessageModel <string> > AddScheduleJobAsync(TasksQz tasksQz)
        {
            var result = new MessageModel <string>();

            if (tasksQz != null)
            {
                try
                {
                    JobKey jobKey = new JobKey(tasksQz.Id.ToString(), tasksQz.JobGroup);
                    if (await _scheduler.Result.CheckExists(jobKey))
                    {
                        await this._scheduler.Result.ResumeJob(jobKey);

                        #region triggers方式也通过
                        //var triggers = await this._scheduler.Result.GetTriggersOfJob(jobKey);
                        //ITrigger triggerHas = triggers?.Where(x => (x as CronTriggerImpl).Name == tasksQz.Id.ToString()).FirstOrDefault();

                        //if (triggerHas == null)
                        //{
                        //    result.success = false;
                        //    result.msg = $"未找到触发器[{tasksQz.Name}]";
                        //    return result;
                        //}
                        //await this._scheduler.Result.ResumeTrigger(triggerHas.Key);
                        #endregion
                        result.success = true;
                        result.msg     = $"重复启动!";
                        return(result);
                    }
                    #region 通过反射获取程序集类型和类
                    Assembly assembly = Assembly.Load(new AssemblyName(tasksQz.AssemblyName));
                    Type     jobType  = assembly.GetType(tasksQz.AssemblyName + "." + tasksQz.ClassName);
                    #endregion
                    //判断任务调度是否开启
                    if (!_scheduler.Result.IsStarted)
                    {
                        await StartScheduleAsync();
                    }

                    //传入反射出来的执行程序集
                    IJobDetail job = new JobDetailImpl(tasksQz.Id.ToString(), tasksQz.JobGroup, jobType);
                    job.JobDataMap.Add("JobParam", tasksQz.JobParams);
                    ITrigger trigger;

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

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

                    //await Task.Delay(TimeSpan.FromSeconds(120));
                    //await Console.Out.WriteLineAsync("关闭了调度器!");
                    //await _scheduler.Result.Shutdown();
                    result.success = true;
                    result.msg     = $"启动任务:【{tasksQz.Name}】成功";
                    return(result);
                }
                catch (Exception ex)
                {
                    result.success = false;
                    result.msg     = $"任务计划异常:【{ex.Message}】";
                    Console.WriteLine(result.msg);
                    return(result);
                }
            }
            else
            {
                result.success = false;
                result.msg     = $"任务计划不存在:【{tasksQz.Name}】";
                return(result);
            }
        }
Exemplo n.º 28
0
        /// <summary>
        /// 添加一个计划任务(映射程序集指定IJob实现类)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="tasksQz"></param>
        /// <returns></returns>
        public async Task <MessageModel <string> > AddScheduleJobAsync(TasksQz tasksQz)
        {
            var result = new MessageModel <string>();

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

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

                    #endregion

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

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

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

                    //传入反射出来的执行程序集
                    IJobDetail job = new JobDetailImpl(tasksQz.Id.ToString(), tasksQz.JobGroup, jobType);
                    job.JobDataMap.Add("JobParam", tasksQz.JobParams);
                    ITrigger trigger;

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

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

                    //await Task.Delay(TimeSpan.FromSeconds(120));
                    //await Console.Out.WriteLineAsync("关闭了调度器!");
                    //await _scheduler.Result.Shutdown();
                    result.success = true;
                    result.msg     = $"启动任务:【{tasksQz.Name}】成功";
                    return(result);
                }
                else
                {
                    result.success = false;
                    result.msg     = $"任务计划不存在:【{tasksQz.Name}】";
                    return(result);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemplo n.º 29
0
 public async Task <MessageModel <string> > AwaitJob([FromBody] TasksQz tasksQz)
 {
     return(await _scheduler.StopScheduleJobAsync(tasksQz));
 }
Exemplo n.º 30
0
 public async Task <MessageModel <string> > ResumeJob([FromBody] TasksQz tasksQz)
 {
     return(await _scheduler.ResumeJob(tasksQz));
 }