/// <summary> /// 更新定时任务 /// </summary> /// <param name="dbContext">数据库上下文</param> /// <param name="taskId">定时任务Id</param> /// <param name="content">定时任务执行内容</param> /// <param name="executeDate">执行时间</param> /// <param name="isSavedChanges">是否存储数据库变化,默认不保存</param> /// <returns>true or false</returns> public void UpdateTask(MissionskyOAEntities dbContext, int taskId, DateTime executeDate, string content, bool isSavedChanges = false) { //更新定时任务执行时间 var entity = dbContext.ScheduledTasks.FirstOrDefault(it => it.Id == taskId); if (entity == null) { throw new KeyNotFoundException("更新定时任务异常。"); } //更新执行时间 entity.LastExecTime = executeDate; //无详细内容 if (!string.IsNullOrEmpty(content)) { //更新定时任务 var history = new ScheduledTaskHistoryModel() { TaskId = taskId, Result = true, Desc = content, CreatedTime = executeDate }; //添加执行记录 dbContext.ScheduledTaskHistories.Add(history.ToEntity()); } if (isSavedChanges) { dbContext.SaveChanges(); } }
public static ScheduledTaskHistoryModel ToModel(this ScheduledTaskHistory entity) { var model = new ScheduledTaskHistoryModel() { Id = entity.Id, TaskId = entity.TaskId, Desc = entity.Desc, Result = entity.Result, CreatedTime = entity.CreatedTime }; return(model); }
public static ScheduledTaskHistory ToEntity(this ScheduledTaskHistoryModel model) { var entity = new ScheduledTaskHistory() { Id = model.Id, Desc = model.Desc, Result = model.Result, TaskId = model.TaskId, CreatedTime = model.CreatedTime }; return(entity); }
/// <summary> /// 执行定时任务 /// </summary> /// <param name="task">定时任务</param> /// <param name="executeDate">执行时间</param> public void Execute(ScheduledTaskModel task, DateTime executeDate) { if (task == null) { Log.Error("无效的定时任务。"); throw new InvalidOperationException("无效的定时任务。"); } using (var dbContext = new MissionskyOAEntities()) { #region 推送消息 var sql = @"SELECT * FROM BookBorrow WHERE ISNULL([Status], 0) = {0} --借阅中 AND DATEDIFF(DAY, ReturnDate, GETDATE()) >= 0 --已到预计归还日期 ;" ; //推送消息 var notification = new NotificationModel() { CreatedUserId = 0, MessageType = NotificationType.PushMessage, BusinessType = BusinessType.Approving, Title = "Missionsky OA Notification", MessagePrams = "test", Scope = NotificationScope.User, CreatedTime = DateTime.Now }; var entities = dbContext.BookBorrows.SqlQuery(string.Format(sql, (int)UserBorrowStatus.Borrowing)).ToList(); //当前需要归还的借阅图书 entities.ForEach(borrow => { var user = dbContext.Users.FirstOrDefault(it => it.Id == borrow.UserId); var book = dbContext.Books.FirstOrDefault(it => it.Id == borrow.BookId); if (user != null && book != null) { notification.Target = user.Email; notification.TargetUserIds = new List <int> { user.Id }; notification.MessageContent = string.Format("请及时归还您借阅的图书《{0}》。", book.Name); NotificationService.Add(notification, Global.IsProduction); //消息推送 } }); #endregion //更新定时任务 var history = new ScheduledTaskHistoryModel() { TaskId = task.Id, Result = true, Desc = task.Name, CreatedTime = executeDate }; ScheduledTaskService.UpdateTask(dbContext, history); dbContext.SaveChanges(); Log.Info(string.Format("定时任务执行成功: {0}。", task.Name)); } }