fix(core): Исправлена логика выдачи заданий роботам при множественном переименовании, можно брать шаблоны в статусах used и unused

This commit is contained in:
Mikhail Trubnikov
2026-07-30 10:53:41 +10:00
parent f10a50edae
commit 4cd6134ad4

View File

@@ -342,9 +342,9 @@ namespace PARR.Core.Services.RobotTask.Implementations
).ToList(); ).ToList();
// Проверим StatusTypeId у старых шаблонов в процессе переименования // Проверим StatusTypeId у старых шаблонов в процессе переименования
// 1. Находим задачи переименования, у которых StatusTypeId шаблона != Used // 1. Находим задачи переименования, у которых StatusTypeId шаблона НЕ является допустимым (!= Used и != Unused)
var invalidRenameTasks = allowedTasks var invalidRenameTasks = allowedTasks
.Where(t => t.Template != null && t.Template.StatusTypeId != TemplateStatusTypeEnum.Used) .Where(t => t.Template != null && t.Template.StatusTypeId != TemplateStatusTypeEnum.Used && t.Template.StatusTypeId != TemplateStatusTypeEnum.Unused)
.ToList(); .ToList();
// 2. Создаем словарь для быстрого поиска и логирования: OldName -> StatusTypeId // 2. Создаем словарь для быстрого поиска и логирования: OldName -> StatusTypeId
@@ -361,9 +361,9 @@ namespace PARR.Core.Services.RobotTask.Implementations
g => g.First().Template!.StatusTypeId // Значение = StatusTypeId первой задачи в группе (для лога) g => g.First().Template!.StatusTypeId // Значение = StatusTypeId первой задачи в группе (для лога)
); );
// 3. Оставляем для подмены только те задачи, у которых StatusTypeId == Used // 3. Оставляем для подмены только те задачи, у которых StatusTypeId является допустимым (== Used или == Unused)
var validAllowedTasks = allowedTasks var validAllowedTasks = allowedTasks
.Where(t => t.Template != null && t.Template.StatusTypeId == TemplateStatusTypeEnum.Used) .Where(t => t.Template != null && (t.Template.StatusTypeId == TemplateStatusTypeEnum.Used || t.Template.StatusTypeId == TemplateStatusTypeEnum.Unused))
.ToList(); .ToList();
// Формируем список заданий // Формируем список заданий
@@ -371,7 +371,7 @@ namespace PARR.Core.Services.RobotTask.Implementations
var errorTaskIdsSet = tasksToSetErrorStatus.ToHashSet(); var errorTaskIdsSet = tasksToSetErrorStatus.ToHashSet();
var errorCount = errorTaskIdsSet.Count; var errorCount = errorTaskIdsSet.Count;
// Создаем словарь подмены ТОЛЬКО из валидных задач (где StatusTypeId == Used) // Создаем словарь подмены ТОЛЬКО из валидных задач (где StatusTypeId == Used или Unused)
// ГРУППИРУЕМ по OldName и берем .First()! // ГРУППИРУЕМ по OldName и берем .First()!
// Это реализует правило: "если записей несколько, берем из них первую и подменяем ей оригинальное задание". // Это реализует правило: "если записей несколько, берем из них первую и подменяем ей оригинальное задание".
var renameTasksToDictionary = validAllowedTasks var renameTasksToDictionary = validAllowedTasks
@@ -400,7 +400,7 @@ namespace PARR.Core.Services.RobotTask.Implementations
{ {
_logger.LogWarning( _logger.LogWarning(
"Задача для шаблона '{TemplateName}' (TaskId: {TaskId}) ИСКЛЮЧЕНА из выдачи. " + "Задача для шаблона '{TemplateName}' (TaskId: {TaskId}) ИСКЛЮЧЕНА из выдачи. " +
"Связанный шаблон в процессе переименования имеет недопустимый StatusTypeId = {StatusTypeId} (ожидалось Used). " + "Связанный шаблон в процессе переименования имеет недопустимый StatusTypeId = {StatusTypeId} (ожидалось Used или Unused). " +
"Исходная задача также не выполняется.", "Исходная задача также не выполняется.",
task.TemplateName, task.TaskId, badStatusId); task.TemplateName, task.TaskId, badStatusId);