feat(api,core,dal): RobotTasks - вынесение логики в Core, оптимизация взятия задания роботом

This commit is contained in:
Mikhail Trubnikov
2026-05-25 16:59:42 +10:00
parent 146e8f6f9a
commit ab563f88b9
8 changed files with 595 additions and 276 deletions

View File

@@ -102,6 +102,22 @@ namespace PARR.DAL.Repositories
}
}
public async Task<bool> SetInProgressStatusAsync(Guid id)
{
// Если задание все еще в статусе Wait (RobotStatusEnum.Wait), установить ему статус "InProgress"
// Выполняем атомарный UPDATE напрямую в базе данных
var affectedRows = await EntitySet.Where(t => t.Id == id && t.RobotStatusCode == (int)RobotStatusEnum.Wait)
.ExecuteUpdateAsync(s => s
.SetProperty(t => t.RobotStatusCode, (int)RobotStatusEnum.InProgress)
.SetProperty(t => t.LastRobotStatusUpdated, DateTimeOffset.UtcNow)
);
return affectedRows > 0;
}
public RobotConfiguration GetFromTemplateByRobotCode(RobotsEnum robotsEnum, Template template)
{
var config = template.RobotConfigurations.FirstOrDefault(t => t.RobotCode == (int)robotsEnum);
@@ -117,7 +133,7 @@ namespace PARR.DAL.Repositories
// Поиск невыполненных заданий и установка им статуса ошибки робота
public async Task FindUnfulfilledTaskAndSetRobotErrorStatusAsync(int robotAttemptsNumber, TimeSpan robotWaitTime)
public async Task MarkExpiredTasksAsFailedAsync(int robotAttemptsNumber, TimeSpan robotWaitTime)
{
//Ищем `RobotStatusCode` = 22 и `LastStatusUpdated` истекло и `AttemptsNumber` >= допустимого значения из настроек,
//ставим всем этим записям `RobotStatusCode`= 33