public async Task ProcessAsync(Commands.StaffingScheduleCommand command, IQuidjiboProgress progress, CancellationToken cancellationToken) { progress.Report(1, $"Starting the {Name} Task"); await Task.Factory.StartNew(() => { var _departmentsService = Bootstrapper.GetKernel().Resolve <IDepartmentsService>(); var _scheduledTasksService = Bootstrapper.GetKernel().Resolve <IScheduledTasksService>(); var logic = new StaffingScheduleLogic(); var allItems = _scheduledTasksService.GetAllUpcomingStaffingScheduledTaks(); if (allItems != null && allItems.Any()) { // Filter only the past items and ones that are 5 minutes 30 seconds in the future var items = (from st in allItems let department = _departmentsService.GetDepartmentByUserId(st.UserId) let runTime = st.WhenShouldJobBeRun(TimeConverterHelper.TimeConverter(DateTime.UtcNow, department)) where runTime.HasValue && runTime.Value >= TimeConverterHelper.TimeConverter(DateTime.UtcNow, department) && runTime.Value <= TimeConverterHelper.TimeConverter(DateTime.UtcNow, department).AddMinutes(5).AddSeconds(30) select new { ScheduledTask = st, Department = department }).ToList(); if (items != null && items.Any()) { _logger.LogInformation("StaffingSchedule::Staffing Levels to Change: " + items.Count()); foreach (var i in items) { var qi = new StaffingScheduleQueueItem(); qi.ScheduledTask = i.ScheduledTask; qi.Department = i.Department; _logger.LogInformation("StaffingSchedule::Processing Staffing Schedule:" + qi.ScheduledTask.ScheduledTaskId); var result = logic.Process(qi); if (result.Item1) { _logger.LogInformation($"StaffingSchedule::Processed Staffing Schedule {qi.ScheduledTask.ScheduledTaskId} successfully."); } else { _logger.LogInformation($"StaffingSchedule::Failed to Process staffing schedule {qi.ScheduledTask.ScheduledTaskId} error {result.Item2}"); } } } } }, cancellationToken, TaskCreationOptions.LongRunning, TaskScheduler.Default); progress.Report(100, $"Finishing the {Name} Task"); }
public Tuple <bool, string> Process(StaffingScheduleQueueItem item) { bool success = true; string result = ""; if (item != null && item.ScheduledTask != null) { try { if (item.ScheduledTask.TaskType == (int)TaskTypes.UserStaffingLevel) { _userStateService.CreateUserState(item.ScheduledTask.UserId, item.ScheduledTask.DepartmentId, int.Parse(item.ScheduledTask.Data), item.ScheduledTask.Note); } else if (item.ScheduledTask.TaskType == (int)TaskTypes.DepartmentStaffingReset) { //var department = _departmentsService.GetDepartmentByUserId(item.ScheduledTask.UserId); //var users = _departmentsService.GetAllUsersForDepartment(department.DepartmentId, true); var users = _departmentsService.GetAllUsersForDepartment(item.ScheduledTask.DepartmentId, true); foreach (var user in users) { _userStateService.CreateUserState(user.UserId, item.ScheduledTask.DepartmentId, int.Parse(item.ScheduledTask.Data)); } } else if (item.ScheduledTask.TaskType == (int)TaskTypes.DepartmentStatusReset) { //var department = _departmentsService.GetDepartmentByUserId(item.ScheduledTask.UserId); _actionLogsService.SetActionForEntireDepartment(item.ScheduledTask.DepartmentId, int.Parse(item.ScheduledTask.Data)); } } catch (Exception ex) { Logging.LogException(ex); success = false; result = ex.ToString(); } if (success) { _scheduledTasksService.CreateScheduleTaskLog(item.ScheduledTask); } } return(new Tuple <bool, string>(success, result)); }
public async Task ProcessAsync(Commands.StatusScheduleCommand command, IQuidjiboProgress progress, CancellationToken cancellationToken) { try { progress.Report(1, $"Starting the {Name} Task"); //await Task.Run(async () => //{ var _departmentsService = Bootstrapper.GetKernel().Resolve <IDepartmentsService>(); var _scheduledTasksService = Bootstrapper.GetKernel().Resolve <IScheduledTasksService>(); var logic = new StaffingScheduleLogic(); var allDepartments = await _departmentsService.GetAllAsync(); var allItems = await _scheduledTasksService.GetAllUpcomingStatusScheduledTasksAsync(); if (allItems != null && allItems.Any()) { // Filter only the past items and ones that are 5 minutes 30 seconds in the future var items = (from st in allItems let department = allDepartments.FirstOrDefault(x => x.DepartmentId == st.DepartmentId) let runTime = st.WhenShouldJobBeRun(TimeConverterHelper.TimeConverter(DateTime.UtcNow, department)) where runTime.HasValue && runTime.Value >= TimeConverterHelper.TimeConverter(DateTime.UtcNow, department) && runTime.Value <= TimeConverterHelper.TimeConverter(DateTime.UtcNow, department).AddMinutes(5).AddSeconds(30) select new { ScheduledTask = st, Department = department }).ToList(); if (items != null && items.Any()) { _logger.LogInformation("StatusSchedule::Status Levels to Change: " + items.Count()); foreach (var i in items) { var qi = new StaffingScheduleQueueItem(); qi.ScheduledTask = i.ScheduledTask; qi.Department = i.Department; _logger.LogInformation("StatusSchedule::Processing Status Schedule:" + qi.ScheduledTask.ScheduledTaskId); var result = await logic.Process(qi); if (result.Item1) { _logger.LogInformation($"StatusSchedule::Processed Status Schedule {qi.ScheduledTask.ScheduledTaskId} successfully."); } else { _logger.LogInformation($"StatusSchedule::Failed to Process status schedule {qi.ScheduledTask.ScheduledTaskId} error {result.Item2}"); } } } } //}, cancellationToken); progress.Report(100, $"Finishing the {Name} Task"); } catch (Exception ex) { Resgrid.Framework.Logging.LogException(ex); _logger.LogError(ex.ToString()); } }