Merge branch 'dev' of gitlab.dvgd.oao.rzd:devptk/parr/parr_api into dev

This commit is contained in:
Mikhail Trubnikov
2026-02-26 08:46:08 +10:00
7 changed files with 74 additions and 30 deletions

View File

@@ -316,12 +316,12 @@ internal class UnitFilterService : IUnitFilterService
}
// Выполняем промежуточный запрос для логирования
var intermediateResult = await query.Select(u => u.Id).ToListAsync(cancellationToken);
logger.LogDebug(" После фильтра #{Index}: осталось {Count} юнитов", filterIndex, intermediateResult.Count);
//var intermediateResult = await query.Select(u => u.Id).ToListAsync(cancellationToken);
//logger.LogDebug(" После фильтра #{Index}: осталось {Count} юнитов", filterIndex, intermediateResult.Count);
// Обновляем query для следующей итерации
query = unitService.Get().AsNoTracking()
.Where(u => intermediateResult.Contains(u.Id));
//// Обновляем query для следующей итерации
//query = unitService.Get().AsNoTracking()
// .Where(u => intermediateResult.Contains(u.Id));
}
var result = await query.Select(u => u.Id).ToListAsync(cancellationToken);

View File

@@ -111,24 +111,40 @@ namespace PARR.DAL.Services.Implementations
public async Task<Guid?> ReserveUnusedTemplateAsync(Guid newUnitId, HistoryInitiator initiator)
{
logger.LogDebug("Резервирую неиспользуемый шаблон для UnitId: {UnitId}", newUnitId);
logger.LogDebug("Резервирую неиспользуемый шаблон с проверкой конфигураций роботов для UnitId: {UnitId}", newUnitId);
var sql = @"
UPDATE ""Templates""
SET ""StatusTypeId"" = @NewStatus,
""DateModified"" = @DateModified,
""InitiatorIp"" = @InitiatorIp,
""InitiatorParrComponentId"" = @InitiatorComponent,
""InitiatorComment"" = @InitiatorComment
WHERE ""Id"" = (
SELECT ""Id""
FROM ""Templates""
WHERE ""StatusTypeId"" = @OldStatus
AND ""UnitId"" != @NewUnitId
ORDER BY ""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[]
{
@@ -141,7 +157,12 @@ namespace PARR.DAL.Services.Implementations
: DBNull.Value),
new NpgsqlParameter("@InitiatorComment", initiator.InitiatorComment ?? (object)DBNull.Value),
new NpgsqlParameter("@OldStatus", (int)TemplateStatusTypeEnum.Unused),
new NpgsqlParameter("@NewUnitId", newUnitId)
new NpgsqlParameter("@NewUnitId", newUnitId),
// Параметры для проверки конфигураций роботов
new NpgsqlParameter("@RobotCode1", 1),
new NpgsqlParameter("@RobotCode2", 2),
new NpgsqlParameter("@TaskStatus", 30),
new NpgsqlParameter("@RobotStatus", 44)
};
try
@@ -159,7 +180,7 @@ namespace PARR.DAL.Services.Implementations
}
else
{
logger.LogDebug("Не удалось зарезервировать шаблон для UnitId: {UnitId}", newUnitId);
logger.LogDebug("Не удалось зарезервировать шаблон для UnitId: {UnitId} (не найдено подходящих конфигураций роботов)", newUnitId);
}
return reservedTemplateId;