diff --git a/PARR.API/Contracts/V1/ApiRoutes.cs b/PARR.API/Contracts/V1/ApiRoutes.cs
index 18adeb96..1d87ec35 100644
--- a/PARR.API/Contracts/V1/ApiRoutes.cs
+++ b/PARR.API/Contracts/V1/ApiRoutes.cs
@@ -416,9 +416,12 @@
///
public static class TemplateActivator
{
- public const string SendRequest = Base + "/jobs/" + jobId + "/template-activator";
+ public const string SendRequest = Base + "/templates/change-state";
- public const string jobId = "{jobId}";
+
+ //public const string SendRequest = Base + "/jobs/" + jobId + "/template-activator";
+
+ //public const string jobId = "{jobId}";
}
#endregion
diff --git a/PARR.API/Contracts/V1/Requests/TemplateActivatorRequest.cs b/PARR.API/Contracts/V1/Requests/TemplateActivatorRequest.cs
index f2e5ad87..4210a9e9 100644
--- a/PARR.API/Contracts/V1/Requests/TemplateActivatorRequest.cs
+++ b/PARR.API/Contracts/V1/Requests/TemplateActivatorRequest.cs
@@ -4,9 +4,34 @@ namespace PARR.API.Contracts.V1.Requests
{
public class TemplateActivatorRequest
{
+ /////
+ ///// Действие по активации/деактивации
+ /////
+ //public TemplateActivatorActionsEnum Action { get; set; }
+
///
- /// Действие по активации/деактивации
+ /// ИД объекта, JobGroupId, JobId, TemplateId
///
- public TemplateActivatorActionsEnum Action { get; set; }
+ public Guid Id { get; set; }
+
+ ///
+ /// Тип объекта
+ ///
+ public SyncTaskEntityTypeEnum EntityType { get; set; }
+
+ /////
+ ///// Учитывать неиспользованные шаблоны
+ /////
+ //public bool AllowUnused { get; set; } = false;
+
+ ///
+ /// Объект воздейстивя (шаблон, расписание)
+ ///
+ public TemplateActivatorEsppObjectTypesEnum EsppObject { get; set; }
+
+ ///
+ /// Новое состояние объекта
+ ///
+ public bool NewState { get; set; }
}
}
diff --git a/PARR.API/Controllers/V1/RobotTaskRobotStatusController.cs b/PARR.API/Controllers/V1/RobotTaskRobotStatusController.cs
index 7876c19d..7b4a7114 100644
--- a/PARR.API/Controllers/V1/RobotTaskRobotStatusController.cs
+++ b/PARR.API/Controllers/V1/RobotTaskRobotStatusController.cs
@@ -56,7 +56,7 @@ namespace PARR.API.Controllers.V1
//если успех, изменяем статус задания на успех
if (request.RobotStatusCode == RobotStatusEnum.Complete)
- robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Ok, ref config);
+ robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Ok, config);
if (!await robotConfigurationService.CommitAsync())
return BadRequest("Ошибка при изменении статуса работы робота.");
diff --git a/PARR.API/Controllers/V1/TemplateActivatorController.cs b/PARR.API/Controllers/V1/TemplateActivatorController.cs
index 79ebacf6..24a2af7c 100644
--- a/PARR.API/Controllers/V1/TemplateActivatorController.cs
+++ b/PARR.API/Controllers/V1/TemplateActivatorController.cs
@@ -50,25 +50,20 @@ namespace PARR.API.Controllers.V1
///
/// Отправить запрос на активацию/деактивацию шаблонов/расписаний
///
- ///
///
[HttpPost(ApiRoutes.TemplateActivator.SendRequest)]
- public async Task SendRequest([FromRoute] Guid jobId, [FromBody] TemplateActivatorRequest request)
+ public async Task SendRequest([FromBody] TemplateActivatorRequest request)
{
var resultValidate = await validator.ValidateAsync(request);
if (!resultValidate.IsValid)
return BadRequest(new Response(resultValidate.Errors));
- var job = await jobService.GetAsync(jobId);
-
- if (job == null)
- return BadRequest(new Response(false, new List { new ErrorModel { FieldName = nameof(jobId), Message = "Некорректное значение" } }));
-
-
var mqRequest = new TemplateActivatorMq
{
- JobId = jobId,
- Action = request.Action,
+ Id = request.Id,
+ EntityType = request.EntityType,
+ EsppObject = request.EsppObject,
+ NewState = request.NewState,
HistoryInitiator = new HistoryInitiator { InitiatorIp = clientService.GetClientIp()?.ToString(), InitiatorParrComponentId = ParrComponentsEnum.Api }
};
diff --git a/PARR.API/Controllers/V1/TemplateController.cs b/PARR.API/Controllers/V1/TemplateController.cs
index 683ce3dd..78e56fdf 100644
--- a/PARR.API/Controllers/V1/TemplateController.cs
+++ b/PARR.API/Controllers/V1/TemplateController.cs
@@ -118,6 +118,9 @@ namespace PARR.API.Controllers.V1
[HttpPut(ApiRoutes.Template.ChangeState)]
public async Task ChangeState([FromRoute] Guid id, [FromBody] TemplateChangeStateRequest request)
{
+ //TODO:!!! Возможно тут не надо сразу менять, а отправить запрос в TemplateActivator и пусть он сам занимается своей работой!!!
+
+
var template = await templateService.GetWithIncludes()
.Include(t => t.Unit).ThenInclude(t => t!.UnitValues).ThenInclude(t => t.Field)
.Include(t => t.Unit).ThenInclude(t => t!.UnitValues).ThenInclude(t => t.Value)
@@ -135,16 +138,16 @@ namespace PARR.API.Controllers.V1
{
template.IsActiveTemplate = request.IsActiveTemplate;
//необходимо обновить шаблон
- var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.TemplateOrder, ref template);
- robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, ref config);
+ var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.TemplateOrder, template);
+ robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config);
}
if (template.IsActiveSchedule != request.IsActiveSchedule)
{
template.IsActiveSchedule = request.IsActiveSchedule;
//необходимо обновить расписание
- var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.ScheduleOrder, ref template);
- robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, ref config);
+ var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.ScheduleOrder, template);
+ robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config);
}
if (!await templateService.CommitAsync(new HistoryInitiator { InitiatorComment = "Изменён статус шаблона/расписания", InitiatorIp = clientService.GetClientIp()?.ToString(), InitiatorParrComponentId = ParrComponentsEnum.Api }))
diff --git a/PARR.API/Validators/TemplateActivatorRequestValidator.cs b/PARR.API/Validators/TemplateActivatorRequestValidator.cs
index 539e10d8..399222ea 100644
--- a/PARR.API/Validators/TemplateActivatorRequestValidator.cs
+++ b/PARR.API/Validators/TemplateActivatorRequestValidator.cs
@@ -1,16 +1,43 @@
using FluentValidation;
using PARR.API.Contracts.V1.Requests;
using PARR.Constants;
+using PARR.DAL.Services.Interfaces;
+using PARR.DAL.Services.Interfaces.Job;
namespace PARR.API.Validators
{
public class TemplateActivatorRequestValidator : AbstractValidator
{
- public TemplateActivatorRequestValidator()
+ public TemplateActivatorRequestValidator(
+ ITemplateService templateService,
+ IJobService jobService,
+ IJobGroupService jobGroupService
+ )
{
- RuleFor(t => t.Action).Must(action =>
- Enum.IsDefined(typeof(TemplateActivatorActionsEnum), action)
- ).WithMessage("Некорректное значение action");
+ RuleFor(t => t.EntityType).Must(type =>
+ Enum.IsDefined(typeof(SyncTaskEntityTypeEnum), type)
+ ).WithMessage("Некорректное значение EntityType");
+
+ RuleFor(t => t.EsppObject).Must(obj =>
+ Enum.IsDefined(typeof(TemplateActivatorEsppObjectTypesEnum), obj)
+ ).WithMessage("Некорректное значение EsppObject");
+
+ RuleFor(t => t.Id)
+ .MustAsync(async (entity, value, c) =>
+ {
+ switch (entity.EntityType)
+ {
+ case SyncTaskEntityTypeEnum.JobGroup:
+ return await jobGroupService.GetAsync(value) != null;
+ case SyncTaskEntityTypeEnum.Job:
+ return await jobService.GetAsync(value) != null;
+ case SyncTaskEntityTypeEnum.Template:
+ return await templateService.GetAsync(value) != null;
+ }
+
+ return false;
+ })
+ .WithMessage("Некорректное значение Id");
}
}
}
diff --git a/PARR.API/appsettings.json b/PARR.API/appsettings.json
index 84ecdb2d..c303035b 100644
--- a/PARR.API/appsettings.json
+++ b/PARR.API/appsettings.json
@@ -55,7 +55,7 @@
"HostName": "parr-rabbitmq",
"QueueName": "parr-template-activator",
"User": "template_activator_writer",
- "Password": "Gfkjhsdg*%fsdf"
+ "Password": "Gfkjhsdg\\*%fsdf"
},
"TemplatesMatcher": {
"HostName": "parr-rabbitmq",
diff --git a/PARR.BLL/Domain/Mq/TemplateActivatorMq.cs b/PARR.BLL/Domain/Mq/TemplateActivatorMq.cs
index b9d124a5..ec2c1d4f 100644
--- a/PARR.BLL/Domain/Mq/TemplateActivatorMq.cs
+++ b/PARR.BLL/Domain/Mq/TemplateActivatorMq.cs
@@ -9,18 +9,35 @@ namespace PARR.BLL.Domain.Mq
public class TemplateActivatorMq
{
///
- /// Id регламентной работы
+ /// ИД объекта, JobGroupId, JobId, TemplateId
///
- public Guid JobId { get; set; }
+ public Guid Id { get; set; }
///
- /// Действие по активации/деактивации
+ /// Тип объекта
///
- public TemplateActivatorActionsEnum Action { get; set; }
+ public SyncTaskEntityTypeEnum EntityType { get; set; }
+
+ ///
+ /// Учитывать неиспользованные шаблоны
+ ///
+ public bool AllowUnused { get; set; } = false;
+
+ ///
+ /// Объект воздейстивя (шаблон, расписание)
+ ///
+ public TemplateActivatorEsppObjectTypesEnum EsppObject { get; set; }
+
+ ///
+ /// Новое состояние объекта
+ ///
+ public bool NewState { get; set; }
///
/// Инициатор изменений
///
- public HistoryInitiator? HistoryInitiator { get; set; }
+ public required HistoryInitiator HistoryInitiator { get; set; }
}
+
+
}
diff --git a/PARR.Constants/ParrComponentsEnum.cs b/PARR.Constants/ParrComponentsEnum.cs
index 64f47846..db744444 100644
--- a/PARR.Constants/ParrComponentsEnum.cs
+++ b/PARR.Constants/ParrComponentsEnum.cs
@@ -1,8 +1,11 @@
-namespace PARR.Constants
+using System.Text.Json.Serialization;
+
+namespace PARR.Constants
{
///
/// Компоненты ПАРР
///
+ [JsonConverter(typeof(JsonStringEnumConverter))]
public enum ParrComponentsEnum
{
// Тут указываем только Worker`ы
diff --git a/PARR.Constants/TemplateActivatorActionsEnum.cs b/PARR.Constants/TemplateActivatorActionsEnum.cs
index 40434e10..dbda9418 100644
--- a/PARR.Constants/TemplateActivatorActionsEnum.cs
+++ b/PARR.Constants/TemplateActivatorActionsEnum.cs
@@ -1,5 +1,7 @@
namespace PARR.Constants
{
+ //todo: удалить!!!
+
///
/// Действия с шаблонами/расписаниями для TemplateActivator
///
diff --git a/PARR.Constants/TemplateActivatorEsppObjectTypesEnum.cs b/PARR.Constants/TemplateActivatorEsppObjectTypesEnum.cs
new file mode 100644
index 00000000..ef86f2bb
--- /dev/null
+++ b/PARR.Constants/TemplateActivatorEsppObjectTypesEnum.cs
@@ -0,0 +1,21 @@
+using System.Text.Json.Serialization;
+
+namespace PARR.Constants
+{
+ ///
+ /// Объект воздействия активатора
+ ///
+ [JsonConverter(typeof(JsonStringEnumConverter))]
+ public enum TemplateActivatorEsppObjectTypesEnum
+ {
+ ///
+ /// Шаблон
+ ///
+ Template=0,
+
+ ///
+ /// Расписание
+ ///
+ Schedule =1,
+ }
+}
diff --git a/PARR.DAL/Services/Implementations/RobotConfigurationService.cs b/PARR.DAL/Services/Implementations/RobotConfigurationService.cs
index 016f241d..6188d32b 100644
--- a/PARR.DAL/Services/Implementations/RobotConfigurationService.cs
+++ b/PARR.DAL/Services/Implementations/RobotConfigurationService.cs
@@ -25,7 +25,7 @@ namespace PARR.DAL.Services.Implementations
protected override DataContext EntitiContext => dataContext;
- public void ChangeTaskStatus(TaskStatusEnum taskStatus, ref RobotConfiguration configuration)
+ public void ChangeTaskStatus(TaskStatusEnum taskStatus, RobotConfiguration configuration)
{
configuration.TaskStatusCode = (int)taskStatus;
@@ -70,7 +70,7 @@ namespace PARR.DAL.Services.Implementations
}
}
- public RobotConfiguration GetFromTemplateByRobotCode(RobotsEnum robotsEnum, ref Template template)
+ public RobotConfiguration GetFromTemplateByRobotCode(RobotsEnum robotsEnum, Template template)
{
var config = template.RobotConfigurations.FirstOrDefault(t => t.RobotCode == (int)robotsEnum);
diff --git a/PARR.DAL/Services/Interfaces/IRobotConfigurationService.cs b/PARR.DAL/Services/Interfaces/IRobotConfigurationService.cs
index f5540a9d..627b9138 100644
--- a/PARR.DAL/Services/Interfaces/IRobotConfigurationService.cs
+++ b/PARR.DAL/Services/Interfaces/IRobotConfigurationService.cs
@@ -19,7 +19,7 @@ namespace PARR.DAL.Services.Interfaces
///
///
///
- void ChangeTaskStatus(TaskStatusEnum taskStatus, ref RobotConfiguration configuration);
+ void ChangeTaskStatus(TaskStatusEnum taskStatus, RobotConfiguration configuration);
///
/// Поиск невыполненных заданий и установка им статуса ошибки робота
@@ -35,6 +35,6 @@ namespace PARR.DAL.Services.Interfaces
///
///
///
- RobotConfiguration GetFromTemplateByRobotCode(RobotsEnum robotsEnum, ref Template template);
+ RobotConfiguration GetFromTemplateByRobotCode(RobotsEnum robotsEnum, Template template);
}
}
diff --git a/PARR.TemplateActivator/ITemplateActivator.cs b/PARR.TemplateActivator/ITemplateActivator.cs
index 40f24ad7..aa262e9a 100644
--- a/PARR.TemplateActivator/ITemplateActivator.cs
+++ b/PARR.TemplateActivator/ITemplateActivator.cs
@@ -1,15 +1,22 @@
-using PARR.Common.Domain;
-using PARR.Constants;
+using PARR.BLL.Domain.Mq;
namespace PARR.TemplateActivator;
public interface ITemplateActivator
{
+ /////
+ ///// Обновить состояние шаблонов или расписаний в соответствии со значением параметра action по applicationInWorkId
+ /////
+ /////
+ /////
+ /////
+ ////Task ChangeStateAsync(Guid applicationInWorkId, TemplateActivatorActionsEnum action, IHistoryInitiator? historyInitiator);
+
+
///
- /// Обновить состояние шаблонов или расписаний в соответствии со значением параметра action по applicationInWorkId
+ /// Обновить состояние шаблонов и расписаний
///
- ///
- ///
+ ///
///
- Task ChangeStateAsync(Guid applicationInWorkId, TemplateActivatorActionsEnum action, IHistoryInitiator? historyInitiator);
+ Task ChangeStateAsync(TemplateActivatorMq query);
}
diff --git a/PARR.TemplateActivator/MqTemplateActivator.cs b/PARR.TemplateActivator/MqTemplateActivator.cs
index aa83e92c..da35a79a 100644
--- a/PARR.TemplateActivator/MqTemplateActivator.cs
+++ b/PARR.TemplateActivator/MqTemplateActivator.cs
@@ -40,15 +40,15 @@ internal class MqTemplateActivator : IMqTemplateActivator
private async Task UpdateTemplateStatusAsync(string msg)
{
- logger.LogInformation($"{this.GetType().Name}. Получили запрос: {msg}");
+ logger.LogInformation($"Получили запрос: {msg}");
var query = transformService.GetModelFromJson(msg);
if (query == null)
return;
- if (!await validatorService.IsValidApplicationInWorkAsync(query.JobId))
+ if (!await validatorService.IsValidObjectIdAsync(query.Id, query.EntityType))
{
- logger.LogError($"{this.GetType().Name}. Некорректные параметры регламентной работы {nameof(query.JobId)}: {query.JobId}");
+ logger.LogError($"Не найдет объект {nameof(query.Id)}: {query.Id}, типа {nameof(query.EntityType)}: {query.EntityType}.");
return;
}
@@ -56,10 +56,9 @@ internal class MqTemplateActivator : IMqTemplateActivator
{
var service = scope.ServiceProvider.GetService();
if (service == null)
- throw new Exception($"{this.GetType().Name}. Не найден сервис: {nameof(service.GetType)}");
-
- await service.ChangeStateAsync(query.JobId, query.Action, query.HistoryInitiator);
+ throw new Exception($"Не найден сервис: {nameof(service.GetType)}");
+ await service.ChangeStateAsync(query);
}
}
diff --git a/PARR.TemplateActivator/Services/IValidatorService.cs b/PARR.TemplateActivator/Services/IValidatorService.cs
index 86c6de70..ef165142 100644
--- a/PARR.TemplateActivator/Services/IValidatorService.cs
+++ b/PARR.TemplateActivator/Services/IValidatorService.cs
@@ -4,5 +4,6 @@ namespace PARR.TemplateActivator;
internal interface IValidatorService
{
- Task IsValidApplicationInWorkAsync(Guid applicationInWorkId);
+ //Task IsValidApplicationInWorkAsync(Guid applicationInWorkId);
+ Task IsValidObjectIdAsync(Guid id, SyncTaskEntityTypeEnum entityType);
}
diff --git a/PARR.TemplateActivator/Services/ValidatorService.cs b/PARR.TemplateActivator/Services/ValidatorService.cs
index ba03976f..6b0838a7 100644
--- a/PARR.TemplateActivator/Services/ValidatorService.cs
+++ b/PARR.TemplateActivator/Services/ValidatorService.cs
@@ -1,9 +1,15 @@
-using Microsoft.EntityFrameworkCore;
-using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
+using PARR.Constants;
+using PARR.DAL.Models;
+using PARR.DAL.Models.Base;
+using PARR.DAL.Models.Job;
using PARR.DAL.Services.Interfaces;
+using PARR.DAL.Services.Interfaces.Base;
+using PARR.DAL.Services.Interfaces.Job;
namespace PARR.TemplateActivator;
+
internal class ValidatorService : IValidatorService
{
private readonly IServiceProvider serviceProvider;
@@ -18,25 +24,44 @@ internal class ValidatorService : IValidatorService
}
- public async Task IsValidApplicationInWorkAsync(Guid applicationInWorkId)
+ public async Task IsValidObjectIdAsync(Guid id, SyncTaskEntityTypeEnum entityType)
+ {
+ switch (entityType)
+ {
+ case (SyncTaskEntityTypeEnum.JobGroup):
+ return await IsValidAync(id);
+
+ case (SyncTaskEntityTypeEnum.Job):
+ return await IsValidAync(id);
+
+ case (SyncTaskEntityTypeEnum.Template):
+ return await IsValidAync(id);
+ }
+
+ return false;
+ }
+
+
+ private async Task IsValidAync(Guid id)
+ where TService : class, IBaseService
+ where TEntity : class, IBase
{
using (var scope = serviceProvider.CreateScope())
{
- var service = scope.ServiceProvider.GetService();
-
+ var service = scope.ServiceProvider.GetService();
if (service == null)
- throw new Exception($"Не найден сервис: {nameof(IApplicationsInWorkService)}");
+ throw new Exception($"Не найден сервис: {typeof(TService).Name}");
- var appInWork = await service.Get()
- .FirstOrDefaultAsync(t => t.Id == applicationInWorkId);
+ var obj = await service.GetAsync(id);
- if (appInWork == null)
+ if (obj == null)
{
- logger.LogError($"Не найдена регалментная работа {nameof(applicationInWorkId)}: {applicationInWorkId}");
+ logger.LogError($"Не объект {nameof(id)}: {id} в {typeof(TService).Name}");
return false;
}
return true;
}
}
+
}
\ No newline at end of file
diff --git a/PARR.TemplateActivator/TemplateActivator.cs b/PARR.TemplateActivator/TemplateActivator.cs
index dc6369f9..b3f973c9 100644
--- a/PARR.TemplateActivator/TemplateActivator.cs
+++ b/PARR.TemplateActivator/TemplateActivator.cs
@@ -1,13 +1,10 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
-using PARR.BLL.Helpers;
-using PARR.Common.Domain;
+using PARR.BLL.Domain.Mq;
using PARR.Constants;
using PARR.DAL.Contracts;
using PARR.DAL.Models;
using PARR.DAL.Services.Interfaces;
-using System.Threading.Channels;
-using System.Threading.Tasks;
namespace PARR.TemplateActivator;
@@ -16,275 +13,100 @@ internal class TemplateActivator : ITemplateActivator
private readonly ILogger logger;
private readonly ITemplateService templateService;
private readonly IRobotConfigurationService robotConfigurationService;
- private readonly IJobAutoControlService jobAutoControlService;
- private readonly IApplicationsInWorkService applicationsInWorkService;
+ //private readonly IJobAutoControlService jobAutoControlService;
+ //private readonly IApplicationsInWorkService applicationsInWorkService;
public TemplateActivator(
ILogger logger,
ITemplateService templateService,
- IRobotConfigurationService robotConfigurationService,
- IJobAutoControlService jobAutoControlService,
- IApplicationsInWorkService applicationsInWorkService
+ IRobotConfigurationService robotConfigurationService
+ //IJobAutoControlService jobAutoControlService,
+ //IApplicationsInWorkService applicationsInWorkService
)
{
this.logger = logger;
this.templateService = templateService;
this.robotConfigurationService = robotConfigurationService;
- this.jobAutoControlService = jobAutoControlService;
- this.applicationsInWorkService = applicationsInWorkService;
+ //this.jobAutoControlService = jobAutoControlService;
+ //this.applicationsInWorkService = applicationsInWorkService;
}
-
- public async Task ChangeStateAsync(Guid applicationInWorkId, TemplateActivatorActionsEnum action, IHistoryInitiator? historyInitiator)//TODO Migratin to Job
+ public async Task ChangeStateAsync(TemplateActivatorMq query)
{
- var query = templateService.Get()
- .Include(t => t.RobotConfigurations).ThenInclude(t => t.Robot)
- .Where(t => t.JobId == applicationInWorkId);//TODO Migratin to Job
- var changes = 0;
- switch (action)
+ var templates = await GetTemplatesAsync(query);
+
+ logger.LogInformation($"Объектов для изменения: {templates.Count} шт.");
+
+ if (templates.Count == 0)
+ return;
+
+ switch (query.EsppObject)
{
- case TemplateActivatorActionsEnum.ActivateAllTemplates:
- logger.LogInformation($"Получен запрос на активацию всех шаблонов");
- query = query.Where(t => !t.IsActiveTemplate);
- changes = await UpdateTemplateStateAsync(query, true);
+ case TemplateActivatorEsppObjectTypesEnum.Template:
+ foreach (var template in templates)
+ {
+ template.IsActiveTemplate = query.NewState;
+ UpdateRobotConfiguration(RobotsEnum.TemplateOrder, template);
+ }
break;
- case TemplateActivatorActionsEnum.ActivateTemplatesWithActiveSchedules:
- logger.LogInformation($"Получен запрос на активацию всех шаблонов, у которых активировано расписание");
- query = query.Where(t => !t.IsActiveTemplate && t.IsActiveSchedule);
- changes = await UpdateTemplateStateAsync(query, true);
+
+ case TemplateActivatorEsppObjectTypesEnum.Schedule:
+ foreach (var template in templates)
+ {
+ template.IsActiveSchedule = query.NewState;
+ UpdateRobotConfiguration(RobotsEnum.ScheduleOrder, template);
+ }
break;
- case TemplateActivatorActionsEnum.DeactivateAllTemplates:
- logger.LogInformation($"Получен запрос на деактивацию всех шаблонов");
- query = query.Where(t => t.IsActiveTemplate);
- changes = await UpdateTemplateStateAsync(query, false);
+ }
+
+ if (!await templateService.CommitAsync(query.HistoryInitiator))
+ logger.LogError($"Не удалось записать измения в БД о новых состояниях шаблонов и расписаний.");
+
+ logger.LogInformation($"Изменено состояние объектов: {templates.Count}");
+
+ }
+
+ private async Task> GetTemplatesAsync(TemplateActivatorMq query)
+ {
+ // ищем все шаблоны попадающие под условие
+ var templatesQuery = templateService.Get();
+
+ switch (query.EsppObject)
+ {
+ case TemplateActivatorEsppObjectTypesEnum.Template:
+ //нужно изменить шаблоны
+ templatesQuery = templatesQuery.Where(t => t.IsActiveTemplate != query.NewState);
break;
- case TemplateActivatorActionsEnum.DeactivateTemplatesWithDeactivationSchedules:
- logger.LogInformation($"Получен запрос на деактивацию всех шаблонов, у которых неактивированы расписания");
- query = query.Where(t => t.IsActiveTemplate && !t.IsActiveSchedule);
- changes = await UpdateTemplateStateAsync(query, false);
+
+ case TemplateActivatorEsppObjectTypesEnum.Schedule:
+ //нужно изменить расписания
+ templatesQuery = templatesQuery.Where(t => t.IsActiveSchedule != query.NewState);
break;
- case TemplateActivatorActionsEnum.ActivateAllSchedules:
- logger.LogInformation($"Получен запрос на активацию всех расписаний");
- query = query.Where(t => !t.IsActiveSchedule);
- changes = await UpdateScheduleStateAsync(query, true);
+ }
+
+
+ switch (query.EntityType)
+ {
+ case SyncTaskEntityTypeEnum.JobGroup:
+ templatesQuery = templatesQuery.Where(t => t.Job!.GroupId == query.Id);
break;
- case TemplateActivatorActionsEnum.DeactivateAllSchedules:
- logger.LogInformation($"Получен запрос на деактивацию всех расписаний");
- query = query.Where(t => t.IsActiveSchedule);
- changes = await UpdateScheduleStateAsync(query, false);
+ case SyncTaskEntityTypeEnum.Job:
+ templatesQuery = templatesQuery.Where(t => t.JobId == query.Id);
break;
- case TemplateActivatorActionsEnum.ActivateSchedulesWithActiveTemplates:
- logger.LogInformation($"Получен запрос на активацию всех расписаний, у которых активированы шаблоны");
- query = query.Where(t => t.IsActiveTemplate && !t.IsActiveSchedule);
- changes = await UpdateScheduleStateAsync(query, true);
- break;
- case TemplateActivatorActionsEnum.DeactivateSchedulesWithDeactivationTemplates:
- logger.LogInformation($"Получен запрос на деактивацию всех расписаний, у которых неактивированы шаблоны");
- query = query.Where(t => !t.IsActiveTemplate && t.IsActiveSchedule);
- changes = await UpdateScheduleStateAsync(query, false);
- break;
- case TemplateActivatorActionsEnum.DeactivateSchedulesWithTemplateSyncErrors:
- logger.LogInformation($"Получен запрос на деактивацию всех расписаний, у которых шаблоны синхронизированы с ошибкой");
- query = query.Where(t => t.IsActiveTemplate &&
- t.RobotConfigurations.Any(t =>
- t.RobotCode == (int)RobotsEnum.TemplateOrder &&
- t.RobotStatusCode == (int)RobotStatusEnum.Error)
- );
- changes = await UpdateScheduleStateAsync(query, false);
- break;
- case TemplateActivatorActionsEnum.DeactivateAllForAutoControl:
- logger.LogInformation($"Получен запрос на деактивацию шаблонов и расписаний, для ЭК неудовлетворяющим условиям автоконтроля");
- changes = await CoordinateJobsWithAutoControlAsync(applicationInWorkId, query, false);
- break;
- case TemplateActivatorActionsEnum.ActivateAllForAutoControl:
- logger.LogInformation($"Получен запрос на активацию шаблонов и расписаний, для ЭК удовлетворяющим условиям автоконтроля");
- changes = await CoordinateJobsWithAutoControlAsync(applicationInWorkId, query, true);
+ case SyncTaskEntityTypeEnum.Template:
+ templatesQuery = templatesQuery.Where(t => t.Id == query.Id);
break;
default:
- break;
+ // прекращаем, чтоб слуяайно не обновить все шаблоны
+ throw new InvalidOperationException($"Неверный тип объекта. {nameof(query.EntityType)}: {query.EntityType}");
}
- if (historyInitiator != null)
- {
- historyInitiator.InitiatorComment += $" Action: {action.ToString()}";
- historyInitiator.InitiatorComment = historyInitiator.InitiatorComment.Trim();
- }
+ if (query.AllowUnused == false)
+ // учитываем только шаблоны которые не помеченные как IsUnused = true (неиспользуемые)
+ // т е берем только используемые шаблоны
+ templatesQuery = templatesQuery.Where(t => t.IsUnused == false);
- if (changes > 0 && !await templateService.CommitAsync(historyInitiator))
- logger.LogError($"{GetType().Name} не удалось записать измения в БД о новых состояниях шаблонов и расписаний регламентной работы Id {applicationInWorkId}");
-
- logger.LogDebug($"{GetType().Name} изменил состояние шаблонов/расписаний({changes}) регламентной работы Id {applicationInWorkId}");
- }
-
- private async Task CoordinateJobsWithAutoControlAsync(Guid applicationInWorkId, IQueryable query, bool isActivate)
- {
- var changes = 0;
-
- //Добавляем информацию о рабочих группах для возможности их фильтрации
- query = query.Include(t => t.Unit);//TODO Migratin to Job
-
- //Получаем настройки авто-контроля
- var jobAutoControlSettings = await GetJobAutoControlSettingsAsync(applicationInWorkId);
- if (jobAutoControlSettings == null)
- return 0;
-
- var trueEkStatuses = jobAutoControlSettings.JobAutoControlInEkStatuses;
- var trueMasks = jobAutoControlSettings.JobEkMasks;
-
- if (!trueEkStatuses.Any() || !trueMasks.Any())
- {
- logger.LogWarning($"В ApplicationInWork({applicationInWorkId}) не заданы настройки фильтрации статусов ЭК хоста или маски его имени");
- return 0;
- }
-
- //Фильтруем обратное состояние - активированные для деактивации
- query = FilterTemplatesQueryByWrongState(query, jobAutoControlSettings, isActivate);
-
- //Фильтруем по маскам ЭК
- var templates = FilterTemplatesByNameNotMatchToMasks(query, trueMasks);
-
- if (!templates.Any())
- return 0;
-
- //Фильтруем по рабочим группам
- var appInWorkWorkGroups = GetApplicationInWorkWorkGroups(applicationInWorkId);
- if (appInWorkWorkGroups.Any())
- templates = templates.Where(t => appInWorkWorkGroups.Any(awg => t.Unit!.BaseFields!.WorkGroup == awg.WorkGroup!.Name)).ToList();//TODO Migratin to Job
-
- //Фильтруем соответствие статусов ЭК условиям автоконтроля
- var checkEkStatus = FilterTemplatesByWrongEkStatus(templates, trueEkStatuses, isActivate);
- //Меняем состояние отфильтрованных шаблонов если какие-то остались
- if (checkEkStatus.Any())
- changes = UpdateState(checkEkStatus,
- isActivate ? jobAutoControlSettings.OnTemplateIsActive : jobAutoControlSettings.OffTemplateIsActive,
- isActivate ? jobAutoControlSettings.OnScheduleIsActive : jobAutoControlSettings.OffScheduleIsActive);
-
- return changes;
- }
-
- private List GetApplicationInWorkWorkGroups(Guid applicationInWorkId)
- {
- var appInWorkInWorkGroups = applicationsInWorkService.Get()
- .Include(aiw => aiw.WorkGroups)
- .FirstOrDefault(t => t.Id == applicationInWorkId)?.WorkGroups;
-
- if (appInWorkInWorkGroups != null)
- return appInWorkInWorkGroups.ToList();
-
- return new List();
- }
-
- private List FilterTemplatesByWrongEkStatus(List templates, ICollection trueEkStatuses, bool isActivate)
- {
- if (isActivate)
- return templates.Where(t => trueEkStatuses.Any(tes => tes.EkStatus!.Name == t.Unit!.BaseFields!.Status)).ToList();//TODO Migratin to Job
-
- return templates.Where(t => !trueEkStatuses.Any(tes => tes.EkStatus!.Name == t.Unit!.BaseFields!.Status)).ToList();//TODO Migratin to Job
- }
-
- private List FilterTemplatesByNameNotMatchToMasks(IQueryable query, ICollection trueMasks)
- {
- var result = new List();
- foreach (var mask in trueMasks)
- {
- var templates = query.Where(t => EF.Functions.Like(t.Unit!.Name.ToLower(), SqlHelpers.RegexToLike(mask.Name))).ToList();
- result.AddRange(templates);
- }
-
- return result;
- }
-
- private IQueryable FilterTemplatesQueryByWrongState(IQueryable query, JobAutoControl jobAutoControlSettings, bool isActivate)
- {
- if (isActivate)
- return query.Where(t => t.IsActiveTemplate != jobAutoControlSettings.OnTemplateIsActive || t.IsActiveSchedule != jobAutoControlSettings.OnScheduleIsActive);
-
- return query.Where(t => t.IsActiveTemplate != jobAutoControlSettings.OffTemplateIsActive || t.IsActiveSchedule != jobAutoControlSettings.OffScheduleIsActive);
- }
-
- private async Task GetJobAutoControlSettingsAsync(Guid applicationInWorkId)
- {
- return await jobAutoControlService.Get()
- .Include(jac => jac.JobAutoControlInEkStatuses)
- .Include(jac => jac.JobEkMasks)
- .Where(jac => jac.ApplicationInWorkId == applicationInWorkId).FirstAsync();
- }
-
-
-
-
-
- ///
- /// Обновить состояние расписаний по запросу query на newState, без записи в БД. Возвращает количество шаблонов требующих фиксации в БД
- ///
- ///
- ///
- ///
- private async Task UpdateScheduleStateAsync(IQueryable query, bool newState)
- {
- var templates = await query.Select(t => t).ToListAsync();
-
- if (templates.Any())
- templates.ForEach(t =>
- {
- t.IsActiveSchedule = newState;
- UpdateRobotConfiguration(RobotsEnum.ScheduleOrder, t);
- });
-
- templates.ForEach(t => t.IsActiveSchedule = newState);
-
- return templates.Count;
- }
-
-
- ///
- /// Обновить состояние шаблонов по запросу query на newState, без записи в БД. Возвращает количество расписаний требующих фиксацию в БД
- ///
- ///
- ///
- ///
- private async Task UpdateTemplateStateAsync(IQueryable query, bool newState)
- {
- var templates = await query.Select(t => t).ToListAsync();
-
- if (templates.Any())
- templates.ForEach(t =>
- {
- t.IsActiveTemplate = newState;
- UpdateRobotConfiguration(RobotsEnum.TemplateOrder, t);
- });
-
-
- return templates.Count;
- }
-
-
- ///
- /// Обновить состояние шаблонов по запросу query на newState, без записи в БД. Возвращает количество расписаний требующих фиксацию в БД
- ///
- ///
- ///
- ///
- private async Task UpdateStateAsync(IQueryable query, bool newTemplateState, bool newSchedulerState)
- {
- var templates = await query.Select(t => t).ToListAsync();
-
- return UpdateState(templates, newTemplateState, newSchedulerState);
- }
-
-
- private int UpdateState(List templates, bool newTemplateState, bool newSchedulerState)
- {
- if (templates.Any())
- templates.ForEach(t =>
- {
- t.IsActiveTemplate = newTemplateState;
- t.IsActiveSchedule = newSchedulerState;
- UpdateRobotConfiguration(RobotsEnum.TemplateOrder, t);
- });
-
-
- return templates.Count;
+ return await templatesQuery.Include(t => t.RobotConfigurations).ToListAsync();
}
@@ -295,7 +117,264 @@ internal class TemplateActivator : ITemplateActivator
///
private void UpdateRobotConfiguration(RobotsEnum robotsEnum, Template t)
{
- var config = robotConfigurationService.GetFromTemplateByRobotCode(robotsEnum, ref t);
- robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, ref config);
+ var config = robotConfigurationService.GetFromTemplateByRobotCode(robotsEnum, t);
+ robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config);
}
+
+
+
+ #region old
+
+ //public async Task ChangeStateAsyncOld(Guid applicationInWorkId, TemplateActivatorActionsEnum action, IHistoryInitiator? historyInitiator)//TODO Migratin to Job
+ //{
+ // var query = templateService.Get()
+ // .Include(t => t.RobotConfigurations).ThenInclude(t => t.Robot)
+ // .Where(t => t.JobId == applicationInWorkId);//TODO Migratin to Job
+ // var changes = 0;
+ // switch (action)
+ // {
+ // case TemplateActivatorActionsEnum.ActivateAllTemplates:
+ // logger.LogInformation($"Получен запрос на активацию всех шаблонов");
+ // query = query.Where(t => !t.IsActiveTemplate);
+ // changes = await UpdateTemplateStateAsync(query, true);
+ // break;
+ // case TemplateActivatorActionsEnum.ActivateTemplatesWithActiveSchedules:
+ // logger.LogInformation($"Получен запрос на активацию всех шаблонов, у которых активировано расписание");
+ // query = query.Where(t => !t.IsActiveTemplate && t.IsActiveSchedule);
+ // changes = await UpdateTemplateStateAsync(query, true);
+ // break;
+ // case TemplateActivatorActionsEnum.DeactivateAllTemplates:
+ // logger.LogInformation($"Получен запрос на деактивацию всех шаблонов");
+ // query = query.Where(t => t.IsActiveTemplate);
+ // changes = await UpdateTemplateStateAsync(query, false);
+ // break;
+ // case TemplateActivatorActionsEnum.DeactivateTemplatesWithDeactivationSchedules:
+ // logger.LogInformation($"Получен запрос на деактивацию всех шаблонов, у которых неактивированы расписания");
+ // query = query.Where(t => t.IsActiveTemplate && !t.IsActiveSchedule);
+ // changes = await UpdateTemplateStateAsync(query, false);
+ // break;
+ // case TemplateActivatorActionsEnum.ActivateAllSchedules:
+ // logger.LogInformation($"Получен запрос на активацию всех расписаний");
+ // query = query.Where(t => !t.IsActiveSchedule);
+ // changes = await UpdateScheduleStateAsync(query, true);
+ // break;
+ // case TemplateActivatorActionsEnum.DeactivateAllSchedules:
+ // logger.LogInformation($"Получен запрос на деактивацию всех расписаний");
+ // query = query.Where(t => t.IsActiveSchedule);
+ // changes = await UpdateScheduleStateAsync(query, false);
+ // break;
+ // case TemplateActivatorActionsEnum.ActivateSchedulesWithActiveTemplates:
+ // logger.LogInformation($"Получен запрос на активацию всех расписаний, у которых активированы шаблоны");
+ // query = query.Where(t => t.IsActiveTemplate && !t.IsActiveSchedule);
+ // changes = await UpdateScheduleStateAsync(query, true);
+ // break;
+ // case TemplateActivatorActionsEnum.DeactivateSchedulesWithDeactivationTemplates:
+ // logger.LogInformation($"Получен запрос на деактивацию всех расписаний, у которых неактивированы шаблоны");
+ // query = query.Where(t => !t.IsActiveTemplate && t.IsActiveSchedule);
+ // changes = await UpdateScheduleStateAsync(query, false);
+ // break;
+ // case TemplateActivatorActionsEnum.DeactivateSchedulesWithTemplateSyncErrors:
+ // logger.LogInformation($"Получен запрос на деактивацию всех расписаний, у которых шаблоны синхронизированы с ошибкой");
+ // query = query.Where(t => t.IsActiveTemplate &&
+ // t.RobotConfigurations.Any(t =>
+ // t.RobotCode == (int)RobotsEnum.TemplateOrder &&
+ // t.RobotStatusCode == (int)RobotStatusEnum.Error)
+ // );
+ // changes = await UpdateScheduleStateAsync(query, false);
+ // break;
+ // case TemplateActivatorActionsEnum.DeactivateAllForAutoControl:
+ // logger.LogInformation($"Получен запрос на деактивацию шаблонов и расписаний, для ЭК неудовлетворяющим условиям автоконтроля");
+ // changes = await CoordinateJobsWithAutoControlAsync(applicationInWorkId, query, false);
+ // break;
+ // case TemplateActivatorActionsEnum.ActivateAllForAutoControl:
+ // logger.LogInformation($"Получен запрос на активацию шаблонов и расписаний, для ЭК удовлетворяющим условиям автоконтроля");
+ // changes = await CoordinateJobsWithAutoControlAsync(applicationInWorkId, query, true);
+ // break;
+ // default:
+ // break;
+ // }
+
+ // if (historyInitiator != null)
+ // {
+ // historyInitiator.InitiatorComment += $" Action: {action.ToString()}";
+ // historyInitiator.InitiatorComment = historyInitiator.InitiatorComment.Trim();
+ // }
+
+ // if (changes > 0 && !await templateService.CommitAsync(historyInitiator))
+ // logger.LogError($"{GetType().Name} не удалось записать измения в БД о новых состояниях шаблонов и расписаний регламентной работы Id {applicationInWorkId}");
+
+ // logger.LogDebug($"{GetType().Name} изменил состояние шаблонов/расписаний({changes}) регламентной работы Id {applicationInWorkId}");
+ //}
+
+ //private async Task CoordinateJobsWithAutoControlAsync(Guid applicationInWorkId, IQueryable query, bool isActivate)
+ //{
+ // var changes = 0;
+
+ // //Добавляем информацию о рабочих группах для возможности их фильтрации
+ // query = query.Include(t => t.Unit);//TODO Migratin to Job
+
+ // //Получаем настройки авто-контроля
+ // var jobAutoControlSettings = await GetJobAutoControlSettingsAsync(applicationInWorkId);
+ // if (jobAutoControlSettings == null)
+ // return 0;
+
+ // var trueEkStatuses = jobAutoControlSettings.JobAutoControlInEkStatuses;
+ // var trueMasks = jobAutoControlSettings.JobEkMasks;
+
+ // if (!trueEkStatuses.Any() || !trueMasks.Any())
+ // {
+ // logger.LogWarning($"В ApplicationInWork({applicationInWorkId}) не заданы настройки фильтрации статусов ЭК хоста или маски его имени");
+ // return 0;
+ // }
+
+ // //Фильтруем обратное состояние - активированные для деактивации
+ // query = FilterTemplatesQueryByWrongState(query, jobAutoControlSettings, isActivate);
+
+ // //Фильтруем по маскам ЭК
+ // var templates = FilterTemplatesByNameNotMatchToMasks(query, trueMasks);
+
+ // if (!templates.Any())
+ // return 0;
+
+ // //Фильтруем по рабочим группам
+ // var appInWorkWorkGroups = GetApplicationInWorkWorkGroups(applicationInWorkId);
+ // if (appInWorkWorkGroups.Any())
+ // templates = templates.Where(t => appInWorkWorkGroups.Any(awg => t.Unit!.BaseFields!.WorkGroup == awg.WorkGroup!.Name)).ToList();//TODO Migratin to Job
+
+ // //Фильтруем соответствие статусов ЭК условиям автоконтроля
+ // var checkEkStatus = FilterTemplatesByWrongEkStatus(templates, trueEkStatuses, isActivate);
+ // //Меняем состояние отфильтрованных шаблонов если какие-то остались
+ // if (checkEkStatus.Any())
+ // changes = UpdateState(checkEkStatus,
+ // isActivate ? jobAutoControlSettings.OnTemplateIsActive : jobAutoControlSettings.OffTemplateIsActive,
+ // isActivate ? jobAutoControlSettings.OnScheduleIsActive : jobAutoControlSettings.OffScheduleIsActive);
+
+ // return changes;
+ //}
+
+ //private List GetApplicationInWorkWorkGroups(Guid applicationInWorkId)
+ //{
+ // var appInWorkInWorkGroups = applicationsInWorkService.Get()
+ // .Include(aiw => aiw.WorkGroups)
+ // .FirstOrDefault(t => t.Id == applicationInWorkId)?.WorkGroups;
+
+ // if (appInWorkInWorkGroups != null)
+ // return appInWorkInWorkGroups.ToList();
+
+ // return new List();
+ //}
+
+ //private List FilterTemplatesByWrongEkStatus(List templates, ICollection trueEkStatuses, bool isActivate)
+ //{
+ // if (isActivate)
+ // return templates.Where(t => trueEkStatuses.Any(tes => tes.EkStatus!.Name == t.Unit!.BaseFields!.Status)).ToList();//TODO Migratin to Job
+
+ // return templates.Where(t => !trueEkStatuses.Any(tes => tes.EkStatus!.Name == t.Unit!.BaseFields!.Status)).ToList();//TODO Migratin to Job
+ //}
+
+ //private List FilterTemplatesByNameNotMatchToMasks(IQueryable query, ICollection trueMasks)
+ //{
+ // var result = new List();
+ // foreach (var mask in trueMasks)
+ // {
+ // var templates = query.Where(t => EF.Functions.Like(t.Unit!.Name.ToLower(), SqlHelpers.RegexToLike(mask.Name))).ToList();
+ // result.AddRange(templates);
+ // }
+
+ // return result;
+ //}
+
+ //private IQueryable FilterTemplatesQueryByWrongState(IQueryable query, JobAutoControl jobAutoControlSettings, bool isActivate)
+ //{
+ // if (isActivate)
+ // return query.Where(t => t.IsActiveTemplate != jobAutoControlSettings.OnTemplateIsActive || t.IsActiveSchedule != jobAutoControlSettings.OnScheduleIsActive);
+
+ // return query.Where(t => t.IsActiveTemplate != jobAutoControlSettings.OffTemplateIsActive || t.IsActiveSchedule != jobAutoControlSettings.OffScheduleIsActive);
+ //}
+
+ //private async Task GetJobAutoControlSettingsAsync(Guid applicationInWorkId)
+ //{
+ // return await jobAutoControlService.Get()
+ // .Include(jac => jac.JobAutoControlInEkStatuses)
+ // .Include(jac => jac.JobEkMasks)
+ // .Where(jac => jac.ApplicationInWorkId == applicationInWorkId).FirstAsync();
+ //}
+
+ /////
+ ///// Обновить состояние расписаний по запросу query на newState, без записи в БД. Возвращает количество шаблонов требующих фиксации в БД
+ /////
+ /////
+ /////
+ /////
+ //private async Task UpdateScheduleStateAsync(IQueryable query, bool newState)
+ //{
+ // var templates = await query.Select(t => t).ToListAsync();
+
+ // if (templates.Any())
+ // templates.ForEach(t =>
+ // {
+ // t.IsActiveSchedule = newState;
+ // UpdateRobotConfiguration(RobotsEnum.ScheduleOrder, t);
+ // });
+
+ // templates.ForEach(t => t.IsActiveSchedule = newState);
+
+ // return templates.Count;
+ //}
+
+
+ /////
+ ///// Обновить состояние шаблонов по запросу query на newState, без записи в БД. Возвращает количество расписаний требующих фиксацию в БД
+ /////
+ /////
+ /////
+ /////
+ //private async Task UpdateTemplateStateAsync(IQueryable query, bool newState)
+ //{
+ // var templates = await query.Select(t => t).ToListAsync();
+
+ // if (templates.Any())
+ // templates.ForEach(t =>
+ // {
+ // t.IsActiveTemplate = newState;
+ // UpdateRobotConfiguration(RobotsEnum.TemplateOrder, t);
+ // });
+
+
+ // return templates.Count;
+ //}
+
+
+ /////
+ ///// Обновить состояние шаблонов по запросу query на newState, без записи в БД. Возвращает количество расписаний требующих фиксацию в БД
+ /////
+ /////
+ /////
+ /////
+ //private async Task UpdateStateAsync(IQueryable query, bool newTemplateState, bool newSchedulerState)
+ //{
+ // var templates = await query.Select(t => t).ToListAsync();
+
+ // return UpdateState(templates, newTemplateState, newSchedulerState);
+ //}
+
+
+ //private int UpdateState(List templates, bool newTemplateState, bool newSchedulerState)
+ //{
+ // if (templates.Any())
+ // templates.ForEach(t =>
+ // {
+ // t.IsActiveTemplate = newTemplateState;
+ // t.IsActiveSchedule = newSchedulerState;
+ // UpdateRobotConfiguration(RobotsEnum.TemplateOrder, t);
+ // });
+
+
+ // return templates.Count;
+ //}
+
+
+
+
+ #endregion
}
diff --git a/PARR.TemplateActivatorWorker/Worker.cs b/PARR.TemplateActivatorWorker/Worker.cs
index 7aee0811..9ea1baf4 100644
--- a/PARR.TemplateActivatorWorker/Worker.cs
+++ b/PARR.TemplateActivatorWorker/Worker.cs
@@ -15,14 +15,14 @@ namespace PARR.TemplateActivatorWorker
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
- await mqTemplateActivator.StartAsync();
+ await mqTemplateActivator.StartAsync();
+ await Task.Delay(Timeout.Infinite, stoppingToken);
}
- public override Task StopAsync(CancellationToken cancellationToken)
+ public override async Task StopAsync(CancellationToken cancellationToken)
{
- mqTemplateActivator.StopAsync().Wait();
-
- return base.StopAsync(cancellationToken);
+ await mqTemplateActivator.StopAsync();
+ await base.StopAsync(cancellationToken);
}
}
}