feat(dal): В TemplateService.ReserveUnusedTemplateAsync больше не передаем JobId при захвате неиспользуемого шаблона.
This commit is contained in:
@@ -109,64 +109,61 @@ namespace PARR.DAL.Services.Implementations
|
||||
}
|
||||
|
||||
|
||||
public async Task<Guid?> ReserveUnusedTemplateAsync(Guid newUnitId, Guid newJobId, HistoryInitiator initiator)
|
||||
public async Task<Guid?> ReserveUnusedTemplateAsync(Guid newUnitId, HistoryInitiator initiator)
|
||||
{
|
||||
logger.LogDebug("Резервирую неиспользуемый шаблон с проверкой конфигураций роботов для UnitId: {UnitId}, JobId: {JobId}", newUnitId, newJobId);
|
||||
logger.LogDebug("Резервирую неиспользуемый шаблон с проверкой конфигураций роботов для UnitId: {UnitId}", newUnitId);
|
||||
|
||||
var sql = @"
|
||||
UPDATE ""Templates""
|
||||
SET ""StatusTypeId"" = @NewStatus,
|
||||
""DateModified"" = @DateModified,
|
||||
""UnitId"" = @NewUnitId,
|
||||
""JobId"" = @NewJobId,
|
||||
""InitiatorIp"" = @InitiatorIp,
|
||||
""InitiatorParrComponentId"" = @InitiatorComponent,
|
||||
""InitiatorComment"" = @InitiatorComment
|
||||
WHERE ""Id"" = (
|
||||
SELECT t.""Id""
|
||||
FROM ""Templates"" t
|
||||
WHERE t.""StatusTypeId"" = @OldStatus
|
||||
AND t.""UnitId"" != @NewUnitId
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM ""RobotConfigurations"" rc
|
||||
WHERE rc.""TemplateId"" = t.""Id""
|
||||
AND rc.""RobotCode"" = @RobotCode1
|
||||
AND rc.""TaskStatusCode"" = @TaskStatus
|
||||
AND rc.""RobotStatusCode"" = @RobotStatus
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM ""RobotConfigurations"" rc
|
||||
WHERE rc.""TemplateId"" = t.""Id""
|
||||
AND rc.""RobotCode"" = @RobotCode2
|
||||
AND rc.""TaskStatusCode"" = @TaskStatus
|
||||
AND rc.""RobotStatusCode"" = @RobotStatus
|
||||
)
|
||||
ORDER BY t.""DateCreated"" ASC
|
||||
LIMIT 1
|
||||
)
|
||||
RETURNING ""Id"";";
|
||||
UPDATE ""Templates""
|
||||
SET ""StatusTypeId"" = @NewStatus,
|
||||
""DateModified"" = @DateModified,
|
||||
""InitiatorIp"" = @InitiatorIp,
|
||||
""InitiatorParrComponentId"" = @InitiatorComponent,
|
||||
""InitiatorComment"" = @InitiatorComment
|
||||
WHERE ""Id"" = (
|
||||
SELECT t.""Id""
|
||||
FROM ""Templates"" t
|
||||
WHERE t.""StatusTypeId"" = @OldStatus
|
||||
AND t.""UnitId"" != @NewUnitId
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM ""RobotConfigurations"" rc
|
||||
WHERE rc.""TemplateId"" = t.""Id""
|
||||
AND rc.""RobotCode"" = @RobotCode1
|
||||
AND rc.""TaskStatusCode"" = @TaskStatus
|
||||
AND rc.""RobotStatusCode"" = @RobotStatus
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM ""RobotConfigurations"" rc
|
||||
WHERE rc.""TemplateId"" = t.""Id""
|
||||
AND rc.""RobotCode"" = @RobotCode2
|
||||
AND rc.""TaskStatusCode"" = @TaskStatus
|
||||
AND rc.""RobotStatusCode"" = @RobotStatus
|
||||
)
|
||||
ORDER BY t.""DateCreated"" ASC
|
||||
LIMIT 1
|
||||
)
|
||||
RETURNING ""Id"";";
|
||||
|
||||
var parameters = new[]
|
||||
{
|
||||
new NpgsqlParameter("@NewStatus", (int)TemplateStatusTypeEnum.Updating),
|
||||
new NpgsqlParameter("@DateModified", DateTimeOffset.UtcNow),
|
||||
new NpgsqlParameter("@NewUnitId", newUnitId),
|
||||
new NpgsqlParameter("@NewJobId", newJobId),
|
||||
new NpgsqlParameter("@InitiatorIp", initiator.InitiatorIp ?? (object)DBNull.Value),
|
||||
new NpgsqlParameter("@InitiatorComponent",
|
||||
initiator.InitiatorParrComponentId.HasValue
|
||||
? (object)(int)initiator.InitiatorParrComponentId.Value
|
||||
: DBNull.Value),
|
||||
new NpgsqlParameter("@InitiatorComment", initiator.InitiatorComment ?? (object)DBNull.Value),
|
||||
new NpgsqlParameter("@OldStatus", (int)TemplateStatusTypeEnum.Unused),
|
||||
// Параметры для проверки конфигураций роботов
|
||||
new NpgsqlParameter("@RobotCode1", (int)RobotsEnum.TemplateOrder),
|
||||
new NpgsqlParameter("@RobotCode2", (int)RobotsEnum.ScheduleOrder),
|
||||
new NpgsqlParameter("@TaskStatus", (int)TaskStatusEnum.Ok),
|
||||
new NpgsqlParameter("@RobotStatus", (int)RobotStatusEnum.Complete)
|
||||
};
|
||||
new NpgsqlParameter("@NewStatus", (int)TemplateStatusTypeEnum.Updating),
|
||||
new NpgsqlParameter("@DateModified", DateTimeOffset.UtcNow),
|
||||
new NpgsqlParameter("@InitiatorIp", initiator.InitiatorIp ?? (object)DBNull.Value),
|
||||
new NpgsqlParameter("@InitiatorComponent",
|
||||
initiator.InitiatorParrComponentId.HasValue
|
||||
? (object)(int)initiator.InitiatorParrComponentId.Value
|
||||
: DBNull.Value),
|
||||
new NpgsqlParameter("@InitiatorComment", initiator.InitiatorComment ?? (object)DBNull.Value),
|
||||
new NpgsqlParameter("@OldStatus", (int)TemplateStatusTypeEnum.Unused),
|
||||
new NpgsqlParameter("@NewUnitId", newUnitId),
|
||||
// Параметры для проверки конфигураций роботов
|
||||
new NpgsqlParameter("@RobotCode1", (int)RobotsEnum.TemplateOrder),
|
||||
new NpgsqlParameter("@RobotCode2", (int)RobotsEnum.ScheduleOrder),
|
||||
new NpgsqlParameter("@TaskStatus", (int)TaskStatusEnum.Ok),
|
||||
new NpgsqlParameter("@RobotStatus", (int)RobotStatusEnum.Complete)
|
||||
};
|
||||
|
||||
try
|
||||
{
|
||||
@@ -178,19 +175,19 @@ namespace PARR.DAL.Services.Implementations
|
||||
|
||||
if (reservedTemplateId != default(Guid))
|
||||
{
|
||||
logger.LogInformation("Успешно зарезервирован шаблон с ID: {TemplateId} для UnitId: {UnitId}, JobId: {JobId}",
|
||||
reservedTemplateId, newUnitId, newJobId);
|
||||
logger.LogInformation("Успешно зарезервирован шаблон с ID: {TemplateId} для UnitId: {UnitId}",
|
||||
reservedTemplateId, newUnitId);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogDebug("Не удалось зарезервировать шаблон для UnitId: {UnitId}, JobId: {JobId} (не найдено подходящих конфигураций роботов)", newUnitId, newJobId);
|
||||
logger.LogDebug("Не удалось зарезервировать шаблон для UnitId: {UnitId} (не найдено подходящих конфигураций роботов)", newUnitId);
|
||||
}
|
||||
|
||||
return reservedTemplateId;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "Ошибка при резервировании шаблона для UnitId: {UnitId}, JobId: {JobId}", newUnitId, newJobId);
|
||||
logger.LogError(ex, "Ошибка при резервировании шаблона для UnitId: {UnitId}", newUnitId);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,18 +8,18 @@ namespace PARR.DAL.Services.Interfaces
|
||||
{
|
||||
Task<Template?> GetTemplateByNameAsync(string name);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Резервирует неиспользуемый шаблон для указанного ЭК и работы.
|
||||
/// Для корректного расчета NextRun назначает захваченному шаблону ЭК и работу
|
||||
/// Резервирует неиспользуемый шаблон: устанавливает статус <see cref="TemplateStatusTypeEnum.Updating"/>
|
||||
/// и фиксирует данные инициатора.
|
||||
/// </summary>
|
||||
/// <param name="newUnitId">Id ЭК.</param>
|
||||
/// <param name="newJobId">Id работы.</param>
|
||||
/// <param name="newUnitId">Идентификатор подразделения (используется для фильтрации и логирования).</param>
|
||||
/// <param name="initiator">Данные инициатора операции.</param>
|
||||
/// <returns>
|
||||
/// Id зарезервированного шаблона или <see langword="null"/>,
|
||||
/// Идентификатор зарезервированного шаблона или <see langword="null"/>,
|
||||
/// если подходящий шаблон не найден.
|
||||
/// </returns>
|
||||
Task<Guid?> ReserveUnusedTemplateAsync(Guid newUnitId, Guid newJobId, HistoryInitiator initiator);
|
||||
Task<Guid?> ReserveUnusedTemplateAsync(Guid newUnitId, HistoryInitiator initiator);
|
||||
|
||||
IQueryable<Template> GetWithIncludes();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user