using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace VueWebCoreApi.Quartz { public class QuartzRepository { #region 任务基础操作 public async Task> GetAllTasksAsync() { var sql = @"SELECT TaskName,GroupName,Interval,ApiUrl,AuthKey,AuthValue,Describe,MessagePush,PushUserCode,RequestType,LastRunTime,Status,CreateAuthor,CreateTime,UpdateTime FROM ScheduleInfo"; return await DapperHelper.QueryAsync(sql); } public async Task CreateTaskAsync(TaskOptions task) { var sql = @"INSERT INTO ScheduleInfo(TaskName,GroupName,Interval,ApiUrl,RequestParameters,AuthKey,AuthValue,Describe,MessagePush,PushUserCode,RequestType,LastRunTime,Status,CreateAuthor,CreateTime,UpdateTime) VALUES(@TaskName,@GroupName,@Interval,@ApiUrl,@RequestParameters,@AuthKey,@AuthValue,@Describe,@MessagePush,@PushUserCode,@RequestType,@LastRunTime,@Status,'9999',GETDATE(),GETDATE())"; var rows = await DapperHelper.ExecuteAsync(sql, task); return rows > 0; } /// /// 修复:增加更新结果校验,返回具体信息 /// public async Task<(bool Success, string Msg)> UpdateTaskWithCheckAsync(TaskOptions task) { if (string.IsNullOrEmpty(task.TaskName) || string.IsNullOrEmpty(task.GroupName)) { return (false, "任务名/分组名不能为空"); } // 先校验任务是否存在 if (!await TaskExistsAsync(task.TaskName, task.GroupName)) { return (false, $"任务[{task.TaskName}-{task.GroupName}]不存在"); } var sql = @"UPDATE ScheduleInfo SET Interval=@Interval,ApiUrl=@ApiUrl,RequestParameters=@RequestParameters,AuthKey=@AuthKey,AuthValue=@AuthValue,Describe=@Describe, MessagePush=@MessagePush,PushUserCode=@PushUserCode,RequestType=@RequestType,LastRunTime=@LastRunTime,Status=@Status,UpdateTime=GETDATE() WHERE TaskName=@TaskName AND GroupName=@GroupName"; var rows = await DapperHelper.ExecuteAsync(sql, task); return rows > 0 ? (true, "更新成功") : (false, "更新失败(无数据行更新)"); } // 兼容原有方法 public async Task UpdateTaskAsync(TaskOptions task) { var (success, _) = await UpdateTaskWithCheckAsync(task); return success; } public async Task DeleteTaskAsync(string taskName, string groupName) { var sql = "DELETE FROM ScheduleInfo WHERE TaskName=@TaskName AND GroupName=@GroupName"; var rows = await DapperHelper.ExecuteAsync(sql, new { TaskName = taskName, GroupName = groupName }); return rows > 0; } public async Task> TaskExists(string taskName, string groupName) { var sql = "SELECT * FROM ScheduleInfo WHERE TaskName=@TaskName AND GroupName=@GroupName"; return await DapperHelper.QueryAsync(sql, new { TaskName = taskName, GroupName = groupName }); } public async Task TaskExistsAsync(string taskName, string groupName) { var sql = "SELECT 1 FROM ScheduleInfo WHERE TaskName=@TaskName AND GroupName=@GroupName"; var result = await DapperHelper.QueryFirstOrDefaultAsync(sql, new { TaskName = taskName, GroupName = groupName }); return result.HasValue; } public async Task UpdateTaskLastRunTimeAsync(string taskName, string groupName, DateTime lastRunTime) { var sql = "UPDATE ScheduleInfo SET LastRunTime=@LastRunTime,UpdateTime=GETDATE() WHERE TaskName=@TaskName AND GroupName=@GroupName"; var rows = await DapperHelper.ExecuteAsync(sql, new { TaskName = taskName, GroupName = groupName, LastRunTime = lastRunTime }); return rows > 0; } #endregion #region 任务运行日志操作 public async Task AddJobRunLogAsync(string taskName, string groupName, DateTime beginDate, DateTime endDate, string msg,string MessagePush,string PushUserCode) { var sql = @"INSERT INTO JobRunLog(TaskName,GroupName,BeginDate,EndDate,Msg,CreateTime,MessagePush,PushUserCode) VALUES(@TaskName,@GroupName,@BeginDate,@EndDate,@Msg,GETDATE(),@MessagePush,@PushUserCode)"; var param = new { TaskName = taskName, GroupName = groupName, BeginDate = beginDate, EndDate = endDate, Msg = msg, MessagePush= MessagePush, PushUserCode= PushUserCode }; var rows = await DapperHelper.ExecuteAsync(sql, param); return rows > 0; } /// /// 修复:分页参数可配置,避免写死100 /// public async Task> GetJobRunLogAsync(string taskName, string groupName, int page, int pageSize = 20) { var sql = $@"SELECT Id,TaskName,GroupName,CONVERT(VARCHAR(20),BeginDate,120) AS BeginDate, CONVERT(VARCHAR(20),EndDate,120) AS EndDate,Msg,CreateTime,MessagePush,PushUserCode FROM JobRunLog WHERE TaskName=@TaskName AND GroupName=@GroupName ORDER BY CreateTime DESC OFFSET {(page - 1) * pageSize} ROWS FETCH NEXT {pageSize} ROWS ONLY"; return await DapperHelper.QueryAsync(sql, new { TaskName = taskName, GroupName = groupName }); } #endregion #region 任务操作日志操作 public async Task AddJobActionLogAsync(string actionType, string taskName, string groupName, string content) { var sql = @"INSERT INTO JobActionLog(ActionType,TaskName,GroupName,Content,CreateTime) VALUES(@ActionType,@TaskName,@GroupName,@Content,GETDATE())"; var param = new { ActionType = actionType, TaskName = taskName, GroupName = groupName, Content = content }; var rows = await DapperHelper.ExecuteAsync(sql, param); return rows > 0; } #endregion #region 系统启动日志操作 public async Task WriteStartLogAsync(string content) { var sql = "INSERT INTO SystemStartLog(Content,CreateTime) VALUES(@Content,GETDATE())"; var rows = await DapperHelper.ExecuteAsync(sql, new { Content = content }); return rows > 0; } #endregion } }