/// <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; } }
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; } }
/// <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; } }
/// <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秒重复一次,无限循环 }
/// <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); }
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); }
/// <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()); }
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); }
/// <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); } }
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); }
/// <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()); }
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); }
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); }
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); }
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); }
/// <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; } }
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); }
/// <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); }
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); }
/// <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; } }
/// <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(); }
/// <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秒重复一次,无限循环 }
/// <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; } }
/// <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); } }
/// <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; } }
public async Task <MessageModel <string> > AwaitJob([FromBody] TasksQz tasksQz) { return(await _scheduler.StopScheduleJobAsync(tasksQz)); }
public async Task <MessageModel <string> > ResumeJob([FromBody] TasksQz tasksQz) { return(await _scheduler.ResumeJob(tasksQz)); }