/// <summary> /// 保存任务 /// </summary> /// <param name="value">任务</param> /// <returns>保存结果</returns> public static JsonBaseModel<string> SaveTask(TaskUtil value) { JsonBaseModel<string> result = new JsonBaseModel<string>(); result.HasError = true; if (value == null) { result.Message = "参数空异常"; return result; } #region "校验" if (string.IsNullOrEmpty(value.TaskName)) { result.Message = "任务名称不能为空"; return result; } if (string.IsNullOrEmpty(value.Assembly)) { result.Message = "程序集名称不能为空"; return result; } if (string.IsNullOrEmpty(value.CronExpressionString)) { result.Message = "Cron表达式不能为空"; return result; } if (!QuartzHelper.ValidExpression(value.CronExpressionString)) { result.Message = "Cron表达式格式不正确"; return result; } if (string.IsNullOrEmpty(value.CronRemark)) { result.Message = "表达式说明不能为空"; return result; } if (string.IsNullOrEmpty(value.Class)) { result.Message = "类名不能为空"; return result; } #endregion JsonBaseModel<DateTime> cronResult = null; try { //新增 if (value.TaskID == Guid.Empty) { value.TaskID = Guid.NewGuid(); //任务状态处理 cronResult = GetTaskeLastRunTime(value.CronExpressionString); if (cronResult.HasError) { result.Message = cronResult.Message; return result; } else { value.LastRunTime = cronResult.Result; } //添加新任务 QuartzHelper.ScheduleJob(value); SQLHelper.ExecuteNonQuery(InsertSQL, value); } else { value.ModifyOn = DateTime.Now; TaskUtil srcTask = GetById(value.TaskID.ToString()); //表达式改变了重新计算下次运行时间 if (!value.CronExpressionString.Equals(srcTask.CronExpressionString, StringComparison.OrdinalIgnoreCase)) { cronResult = GetTaskeLastRunTime(value.CronExpressionString); if (cronResult.HasError) { result.Message = cronResult.Message; return result; } else { value.LastRunTime = cronResult.Result; } //更新任务 QuartzHelper.ScheduleJob(value, true); } else { value.LastRunTime = srcTask.LastRunTime; } SQLHelper.ExecuteNonQuery(UpdateSQL, value); } result.HasError = false; result.Result = value.TaskID.ToString(); } catch (Exception ex) { result.HasError = true; result.Message = ex.Message; } return result; }
/// <summary> /// 启用任务 /// <param name="taskUtil">任务信息</param> /// <param name="isDeleteOldTask">是否删除原有任务</param> /// <returns>返回任务trigger</returns> /// </summary> public static void ScheduleJob(TaskUtil taskUtil, bool isDeleteOldTask = false) { if (isDeleteOldTask) { //先删除现有已存在任务 DeleteJob(taskUtil.TaskID.ToString()); } //验证是否正确的Cron表达式 if (ValidExpression(taskUtil.CronExpressionString)) { IJobDetail job = new JobDetailImpl(taskUtil.TaskID.ToString(), GetClassInfo(taskUtil.Assembly, taskUtil.Class)); CronTriggerImpl trigger = new CronTriggerImpl(); trigger.CronExpressionString = taskUtil.CronExpressionString; trigger.Name = taskUtil.TaskID.ToString(); trigger.Description = taskUtil.TaskName; scheduler.ScheduleJob(job, trigger); if (taskUtil.Status == TaskStatus.STOP) { JobKey jk = new JobKey(taskUtil.TaskID.ToString()); scheduler.PauseJob(jk); } else { LogHelper.WriteLog(string.Format("任务“{0}”启动成功,未来5次运行时间如下:", taskUtil.TaskName)); List<DateTime> list = GetTaskeFireTime(taskUtil.CronExpressionString, 5); foreach (var time in list) { LogHelper.WriteLog(time.ToString()); } } } else { throw new Exception(taskUtil.CronExpressionString + "不是正确的Cron表达式,无法启动该任务!"); } }
/// <summary> /// 保存任务 /// </summary> /// <param name="value">任务</param> /// <returns>保存结果</returns> public static ApiResult <string> SaveTask(TaskUtil value) { ApiResult <string> result = new ApiResult <string>(); result.HasError = true; if (value == null) { result.Message = "参数空异常"; return(result); } #region "校验" if (string.IsNullOrEmpty(value.TaskName)) { result.Message = "任务名称不能为空"; return(result); } if (string.IsNullOrEmpty(value.Assembly)) { result.Message = "程序集名称不能为空"; return(result); } if (string.IsNullOrEmpty(value.CronExpressionString)) { result.Message = "Cron表达式不能为空"; return(result); } if (!QuartzHelper.ValidExpression(value.CronExpressionString)) { result.Message = "Cron表达式格式不正确"; return(result); } if (string.IsNullOrEmpty(value.CronRemark)) { result.Message = "表达式说明不能为空"; return(result); } if (string.IsNullOrEmpty(value.Class)) { result.Message = "类名不能为空"; return(result); } #endregion ApiResult <DateTime> cronResult = null; try { //新增 if (string.IsNullOrEmpty(value.TaskID)) { value.TaskID = Guid.NewGuid().ToString("N"); //任务状态处理 cronResult = GetTaskeLastRunTime(value.CronExpressionString); if (cronResult.HasError) { result.Message = cronResult.Message; return(result); } else { value.LastRunTime = cronResult.Result; } //添加新任务 QuartzHelper.ScheduleJob(value); SQLHelper.ExecuteNonQuery(InsertSQL, value); } else { value.ModifyOn = DateTime.Now; TaskUtil srcTask = GetById(value.TaskID.ToString()); //表达式改变了重新计算下次运行时间 if (!value.CronExpressionString.Equals(srcTask.CronExpressionString, StringComparison.OrdinalIgnoreCase)) { cronResult = GetTaskeLastRunTime(value.CronExpressionString); if (cronResult.HasError) { result.Message = cronResult.Message; return(result); } else { value.LastRunTime = cronResult.Result; } //更新任务 QuartzHelper.ScheduleJob(value, true); } else { value.LastRunTime = srcTask.LastRunTime; } SQLHelper.ExecuteNonQuery(UpdateSQL, value); } result.HasError = false; result.Result = value.TaskID.ToString(); } catch (Exception ex) { result.HasError = true; result.Message = ex.Message; } return(result); }