/// <summary> /// 根据条件查询任务 /// </summary> /// <param name="condition">查询条件</param> /// <returns>符合条件的任务</returns> public static JsonBaseModel <List <TaskUtil> > Query(QueryCondition condition) { JsonBaseModel <List <TaskUtil> > result = new JsonBaseModel <List <TaskUtil> >(); if (string.IsNullOrEmpty(condition.SortField)) { condition.SortField = "CreatedOn"; condition.SortOrder = "DESC"; } Hashtable ht = Pagination.QueryBase <TaskUtil>("SELECT * FROM p_Task", condition); result.Result = ht["data"] as List <TaskUtil>; result.TotalCount = Convert.ToInt32(ht["total"]); result.TotalPage = result.CalculateTotalPage(condition.PageSize, result.TotalCount.Value, condition.IsPagination); return(result); }
/// <summary> /// 计算任务下次运行时间 /// </summary> /// <param name="CronExpressionString"></param> /// <returns>下次运行时间</returns> private static JsonBaseModel <DateTime> GetTaskeLastRunTime(string CronExpressionString) { JsonBaseModel <DateTime> result = new JsonBaseModel <DateTime>(); try { //计算下次任务运行时间 result.Result = QuartzHelper.GetTaskeFireTime(CronExpressionString, 1)[0]; } catch (Exception ex) { result.HasError = true; result.Message = "任务Cron表达式设置错误"; LogHelper.WriteLog("任务Cron表达式设置错误", ex); } return(result); }
/// <summary> /// 根据条件查询任务 /// </summary> /// <param name="condition">查询条件</param> /// <returns>符合条件的任务</returns> public static JsonBaseModel <List <TaskLogUtil> > QueryLog(QueryCondition condition) { JsonBaseModel <List <TaskLogUtil> > result = new JsonBaseModel <List <TaskLogUtil> >(); if (string.IsNullOrEmpty(condition.SortField)) { condition.SortField = "RunTime"; condition.SortOrder = "DESC"; } Hashtable ht = Pagination.QueryBase <TaskLogUtil>( @"SELECT p_Tasklog.*,p_Task.TaskName FROM dbo.p_Tasklog LEFT JOIN dbo.p_Task ON dbo.p_Task.TaskID = p_Tasklog.TaskId", condition); result.Result = ht["data"] as List <TaskLogUtil>; result.TotalCount = Convert.ToInt32(ht["total"]); result.TotalPage = result.CalculateTotalPage(condition.PageSize, result.TotalCount.Value, condition.IsPagination); return(result); }
/// <summary> /// 保存日志任务 /// </summary> /// <param name="value">日志</param> /// <returns>保存日志结果</returns> public static JsonBaseModel <string> SaveTaskLog(TaskLogUtil value) { JsonBaseModel <string> result = new JsonBaseModel <string>(); result.HasError = true; if (value == null) { result.Message = "参数空异常"; return(result); } try { SQLHelper.ExecuteNonQuery(InsertLogSQL, value); result.HasError = false; result.Result = value.TaskID.ToString(); } catch (Exception ex) { result.HasError = true; result.Message = ex.Message; } return(result); }
/// <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); }