feat: Сервисы и модели RabbitMq разнесены согласно архитектуры

This commit is contained in:
Mikhail Trubnikov
2026-04-14 12:01:49 +10:00
parent 734c2e3c99
commit e892aa12d3
196 changed files with 589 additions and 1232 deletions

View File

@@ -0,0 +1,22 @@
namespace PARR.Domain.Common.Rabbit.Messages
{
/// <summary>
/// Модель в MQ, данные из АИХИТ
/// </summary>
public class AihitDataMq
{
public required string EK { get; set; }
public string? IP { get; set; }
public string? DB { get; set; }
public string? APP { get; set; }
public string? CKBS { get; set; }
public string? IB { get; set; }
public string? SI { get; set; }
public string? SM { get; set; }
public string? OS { get; set; }
public string? WorkGroup { get; set; }
public required string Status { get; set; }
public required string ResponseArea { get; set; }
public required string WorkGroupResponseArea { get; set; }
}
}

View File

@@ -0,0 +1,18 @@
namespace PARR.Domain.Common.Rabbit.Messages
{
/// <summary>
/// Модель в MQ, данные из АИХИТ для любой ХП
/// </summary>
public class AihitMainDataMq
{
/// <summary>
/// ЭК
/// </summary>
public required string Name { get; set; }
/// <summary>
/// Список полей ЭК, в формате - имя поля / значение
/// </summary>
public Dictionary<string, string?> Properties { get; set; } = new Dictionary<string, string?>();
}
}

View File

@@ -0,0 +1,50 @@
using PARR.Domain.Entities.Base.History;
namespace PARR.Domain.Common.Rabbit.Messages
{
/// <summary>
/// Модель в MQ, запрос на генерацию шаблона
/// </summary>
public class GeneratorTemplateMq
{
/// <summary>
/// Id работы
/// </summary>
public Guid WorkId { get; set; }
/// <summary>
/// Id приложения
/// </summary>
public Guid ApplicationId { get; set; }
/// <summary>
/// Действие: create, deactivate
/// </summary>
public required string Action { get; set; }
/// <summary>
/// ЭК, принимает регулярное выражение. Например: *, ВРТ-*-ДВС
/// </summary>
public required string Ek { get; set; }
/// <summary>
/// Статус ЭК. Допустимые значения: 0 - все статусы, 1,2,3,4,5,6,7,9
/// </summary>
public int StatusEk { get; set; }
/// <summary>
/// Активировать шаблон
/// </summary>
public bool? IsActiveTemplate { get; set; }
/// <summary>
/// Активировать расписание
/// </summary>
public bool? IsActiveSchedule { get; set; }
/// <summary>
/// Инициатор запроса к генератору
/// </summary>
public HistoryInitiator? HistoryInitiator { get; set; }
}
}

View File

@@ -0,0 +1,14 @@
using PARR.Domain.Entities.Base.History;
namespace PARR.Domain.Common.Rabbit.Messages
{
/// <summary>
/// Запрос на обновление всех nextRun для JobGroup
/// </summary>
public class NextRunUpdateMq
{
public Guid JobGroupId { get; set; }
public required HistoryInitiator Initiator { get; set; }
}
}

View File

@@ -0,0 +1,10 @@
namespace PARR.Domain.Common.Rabbit.Messages
{
/// <summary>
/// Модель в MQ, запрос на изменение Наряда в ЕСПП
/// </summary>
public class OrderManageMq
{
public Guid OrderId { get; set; }
}
}

View File

@@ -0,0 +1,43 @@
using PARR.Domain.Entities.Base.History;
using PARR.Domain.Enums;
namespace PARR.Domain.Common.Rabbit.Messages
{
/// <summary>
/// Модель в MQ, активация/деактивация шаблонов/расписаний
/// </summary>
public class TemplateActivatorMq
{
/// <summary>
/// ИД объекта, JobGroupId, JobId, TemplateId
/// </summary>
public Guid Id { get; set; }
/// <summary>
/// Тип объекта
/// </summary>
public SyncTaskEntityTypeEnum EntityType { get; set; }
/// <summary>
/// Учитывать неиспользованные шаблоны
/// </summary>
public bool AllowUnused { get; set; } = false;
/// <summary>
/// Объект воздейстивя (шаблон, расписание)
/// </summary>
public TemplateActivatorEsppObjectTypesEnum EsppObject { get; set; }
/// <summary>
/// Новое состояние объекта
/// </summary>
public bool NewState { get; set; }
/// <summary>
/// Инициатор изменений
/// </summary>
public required HistoryInitiator HistoryInitiator { get; set; }
}
}

View File

@@ -0,0 +1,14 @@
using PARR.Domain.Entities.Base.History;
namespace PARR.Domain.Common.Rabbit.Messages
{
/// <summary>
/// Модель в MQ, распределить шаблоны для JobGroupId (для TemplateDistributor)
/// </summary>
public class TemplateDistributorMq
{
public Guid JobGroupId { get; set; }
public required HistoryInitiator Initiator { get; set; }
}
}

View File

@@ -0,0 +1,46 @@
using PARR.Domain.Entities.Base.History;
namespace PARR.Domain.Common.Rabbit.Messages
{
/// <summary>
/// Модель в MQ, простого создания Template
/// </summary>
public class TemplateGeneratorMq
{
/// <summary>
/// Id регламентной работы
/// </summary>
public Guid JobId { get; set; }
/// <summary>
/// Id Юнита(единицы обслуживания)/ЭК
/// </summary>
public Guid UnitId { get; set; }
/// <summary>
/// Актировать шаблон при инициализации
/// </summary>
public bool? IsActiveTemplate { get; set; }
/// <summary>
/// Актировать расписание при инициализации
/// </summary>
public bool? IsActiveSchedule { get; set; }
/// <summary>
/// Инициатор запроса к генератору
/// </summary>
public HistoryInitiator? HistoryInitiator { get; set; }
/// <summary>
/// Связанные ЭК для сгруппированного типа JobGroup
/// </summary>
public required List<Guid> UnitsInTemplate { get; set; }
/// <summary>
/// Индекс, используется в групповых шаблонах
/// </summary>
public int? Index { get; set; }
}
}

View File

@@ -0,0 +1,13 @@
using PARR.Domain.Entities.Base.History;
using PARR.Domain.Enums;
namespace PARR.Domain.Common.Rabbit.Messages
{
public class TemplateMatcherMq
{
public Guid Id { get; set; }
public SyncTaskEntityTypeEnum EntityType { get; set; }
public TemplateMatcherActionEnum Action { get; set; }
public required HistoryInitiator Initiator { get; set; }
}
}

View File

@@ -0,0 +1,13 @@
namespace PARR.Domain.Common.Rabbit.Messages
{
/// <summary>
/// Модель в MQ, генератора заданий на генерацию шаблонов
/// </summary>
public class TemplateTaskGeneratorMq
{
/// <summary>
/// Id регламентной работы
/// </summary>
public Guid JobId { get; set; }
}
}

View File

@@ -0,0 +1,58 @@
using PARR.Domain.Entities.Base.History;
using PARR.Domain.Enums;
namespace PARR.Domain.Common.Rabbit.Messages
{
public class TemplateUpdaterMq
{
public Guid TemplateId { get; set; }
/// <summary>
/// Id регламентной работы
/// </summary>
public Guid JobId { get; set; }
public required string Name { get; set; }
/// <summary>
/// Актировать шаблон при инициализации
/// </summary>
public bool IsActiveTemplate { get; set; }
/// <summary>
/// Актировать расписание при инициализации
/// </summary>
public bool IsActiveSchedule { get; set; }
//public DateTimeOffset? LastRun { get; set; }
//public DateTimeOffset NextRun { get; set; }
/// <summary>
/// Это новый шаблон? (true - перемещаем существующий в новый Job) (false - шаблон остается в своем Job)
/// </summary>
public bool IsNew { get; set; }
/// <summary>
/// Id Юнита(единицы обслуживания)/ЭК
/// </summary>
public Guid UnitId { get; set; }
/// <summary>
/// Индекс, используется в групповых шаблонах
/// </summary>
public int? Index { get; set; }
public TemplateStatusTypeEnum StatusTypeId { get; set; }
/// <summary>
/// Инициатор запроса к генератору
/// </summary>
public required HistoryInitiator Initiator { get; set; }
/// <summary>
/// Связанные ЭК для сгруппированного типа JobGroup
/// </summary>
public required List<Guid> UnitsInTemplate { get; set; }
}
}

View File

@@ -0,0 +1,18 @@
namespace PARR.Domain.Common.Rabbit
{
/// <summary>
/// Результат отправки очереди в MQ
/// </summary>
public record RabbitSendResult
{
/// <summary>
/// Результат отправки
/// </summary>
public bool IsSuccess { get; init; }
/// <summary>
/// Неотправленные сообщения
/// </summary>
public string[]? NotSendMessages { get; init; }
}
}

View File

@@ -0,0 +1,44 @@
namespace PARR.Domain.Common.Roles
{
/// <summary>
/// Роли ПАРР
/// </summary>
public static class ParrRoles
{
// Подробнее о авторизации в документации в разделе Авторизация
private const string Base = Administrator.Role + ",";
/// <summary>
/// Роль: Администратор
/// </summary>
public static class Administrator
{
public const string Role = "administrator";
public const string Description = "Администратор";
}
/// <summary>
/// Роль: agent Агент
/// </summary>
public static class Agent
{
public const string Role = "agent";
public const string RoleOrAdmin = Base + Role;
public const string Description = "Агент";
}
/// <summary>
/// Роль: espp-robot Робот ЕСПП
/// </summary>
public static class EsppRobot
{
public const string Role = "espp-robot";
public const string RoleOrAdmin = Base + Role;
public const string Description = "Робот ЕСПП";
}
}
}