Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 4
0
        /// <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));
            }
        }