public async Task <ResponseData> UpDataScheduler(string id, UpdateScheduler updateScheduler) { var Result = _verificationUpdateSchedulerData.Validate(updateScheduler); ITrigger trigger; if (!Result.IsValid) { return(new ResponseData(Result.ToString(), "", StatusCode.Fail)); } var selectData = await _Database.SingleAsync <DataBaseScheduler>("where id = @0", id); if (string.IsNullOrEmpty(selectData.Interval) && selectData.ExecuteReuslt == 1) { return(new ResponseData("非循环任务不能进行修改", "", StatusCode.Fail)); } //暂停任务 await scheduler.PauseJob(new JobKey(updateScheduler.Name)); var job = await scheduler.GetJobDetail(new JobKey(updateScheduler.Name)); await scheduler.UnscheduleJob(new TriggerKey(updateScheduler.Name)); // 取消触发器 // 检查更改的数据是否有间隔时间 if (string.IsNullOrEmpty(updateScheduler.Interval)) { trigger = TriggerBuilder.Create() .WithIdentity(updateScheduler.Name) .StartAt(Convert.ToDateTime(updateScheduler.PresetTime)) .Build(); } else { var arryDate = ConversionTime.ChangeInterval(updateScheduler.Interval); TimeSpan timeSpan = new TimeSpan(arryDate[0], arryDate[1], arryDate[2], arryDate[3]); trigger = TriggerBuilder.Create() .WithIdentity(updateScheduler.Name) .WithSimpleSchedule(x => x.WithInterval(timeSpan).RepeatForever()) .StartAt(Convert.ToDateTime(updateScheduler.PresetTime)) .Build(); } // 把任务和触发器绑定 await scheduler.ScheduleJob(job, trigger); Sql sql = new Sql(); sql.Set("PresetTime = @0, Interval = @1", updateScheduler.PresetTime, updateScheduler.Interval) .Where("id = @0", id); if (await _Database.UpdateAsync <DataBaseScheduler>(sql) < 0) { return(new ResponseData("修改失败", "", StatusCode.Fail)); } // 重启任务 await scheduler.ResumeJob(new JobKey(updateScheduler.Name)); return(new ResponseData("修改成功", "", StatusCode.Success)); }
public async Task <bool> AddSchedulerType(DataBaseScheduler OperationSqlData) { scheduler = await _schedulerFactory.GetScheduler(); await scheduler.Start(); // 创建任务 var jobDetail = JobBuilder.Create <ExecuteJob>() .WithIdentity(OperationSqlData.Name) .Build(); // 根据任务的类型 来创建触发器 switch (OperationSqlData.TaskType) { case "OneOff": _trigger = TriggerBuilder.Create() .StartNow() .Build(); break; case "TimedTask": if (string.IsNullOrEmpty(OperationSqlData.Interval)) { _trigger = TriggerBuilder.Create() .WithIdentity(OperationSqlData.Name) .StartAt(Convert.ToDateTime(OperationSqlData.PresetTime)) .Build(); } else { var arryDate = ConversionTime.ChangeInterval(OperationSqlData.Interval); TimeSpan timeSpan = new TimeSpan(arryDate[0], arryDate[1], arryDate[2], arryDate[3]); _trigger = TriggerBuilder.Create() .WithIdentity(OperationSqlData.Name) .WithSimpleSchedule(x => x.WithInterval(timeSpan).RepeatForever()) .StartAt(Convert.ToDateTime(OperationSqlData.PresetTime)) .Build(); } break; default: return(false); } // 绑定任务和触发器 await scheduler.ScheduleJob(jobDetail, _trigger); // 添加监听 scheduler.ListenerManager.AddJobListener(new JobListen()); return(true); }