using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using PARR.Constants; using PARR.DAL.Contracts; using PARR.DAL.Models; using PARR.DAL.Services.Interfaces; namespace PARR.TemplateActivator; internal class TemplateActivator : ITemplateActivator { private readonly ILogger logger; private readonly ITemplateService templateService; private readonly IRobotConfigurationService robotConfigurationService; public TemplateActivator( ILogger logger, ITemplateService templateService, IRobotConfigurationService robotConfigurationService ) { this.logger = logger; this.templateService = templateService; this.robotConfigurationService = robotConfigurationService; } public async Task ChangeStateAsync(Guid applicationInWorkId, TemplateActivatorActionsEnum action) { var query = templateService.Get() .Include(t => t.RobotConfigurations).ThenInclude(t => t.Robot) .Where(t => t.ApplicationInWorkId == applicationInWorkId); var changes = 0; switch (action) { case TemplateActivatorActionsEnum.ActivateAllTemplates: query = query.Where(t => !t.IsActiveTemplate); changes = await UpdateTemplateStateAsync(query, true); break; case TemplateActivatorActionsEnum.ActivateTemplatesWithActiveSchedules: query = query.Where(t => !t.IsActiveTemplate && t.IsActiveSchedule); changes = await UpdateTemplateStateAsync(query, true); break; case TemplateActivatorActionsEnum.DeactivateAllTemplates: query = query.Where(t => t.IsActiveTemplate); changes = await UpdateTemplateStateAsync(query, false); break; case TemplateActivatorActionsEnum.DeactivateTemplatesWithDeactivationSchedules: query = query.Where(t => !t.IsActiveTemplate && !t.IsActiveSchedule); changes = await UpdateTemplateStateAsync(query, false); break; case TemplateActivatorActionsEnum.ActivateAllSchedules: query = query.Where(t => !t.IsActiveSchedule); changes = await UpdateScheduleStateAsync(query, true); break; case TemplateActivatorActionsEnum.DeactivateAllSchedules: query = query.Where(t => t.IsActiveSchedule); changes = await UpdateScheduleStateAsync(query, false); break; case TemplateActivatorActionsEnum.ActivateSchedulesWithActiveTemplates: query = query.Where(t => t.IsActiveTemplate && !t.IsActiveSchedule); changes = await UpdateScheduleStateAsync(query, true); break; case TemplateActivatorActionsEnum.DeactivateSchedulesWithDeactivationTemplates: query = query.Where(t => !t.IsActiveTemplate); changes = await UpdateScheduleStateAsync(query, false); break; default: break; } if (changes > 0 && !await templateService.CommitAsync()) logger.LogError($"{this.GetType} не удалось записать измения состояний шаблонов и расписаний регламентной работы {applicationInWorkId}"); } private async Task UpdateScheduleStateAsync(IQueryable