fix(dal): Исправлен метод захвата заданий роботом. Теперь правильно захватываются зависшие задачи.
This commit is contained in:
@@ -5,12 +5,18 @@ using PARR.DAL.Context;
|
||||
using PARR.DAL.Repositories.Base;
|
||||
using PARR.Domain.Entities;
|
||||
using PARR.Domain.Enums;
|
||||
using PARR.Domain.Settings;
|
||||
|
||||
namespace PARR.DAL.Repositories
|
||||
{
|
||||
internal class RobotConfigurationRepository : BaseRepository<RobotConfiguration>, IRobotConfigurationRepository
|
||||
{
|
||||
public RobotConfigurationRepository(DataContext dataContext, ILogger<RobotConfigurationRepository> logger) : base(logger, dataContext) { }
|
||||
private readonly SettingsFromDb settingsFromDb;
|
||||
|
||||
public RobotConfigurationRepository(DataContext dataContext, ILogger<RobotConfigurationRepository> logger, SettingsFromDb settingsFromDb) : base(logger, dataContext)
|
||||
{
|
||||
this.settingsFromDb = settingsFromDb;
|
||||
}
|
||||
|
||||
|
||||
public void ChangeTaskStatus(TaskStatusEnum taskStatus, RobotConfiguration configuration)
|
||||
@@ -107,8 +113,21 @@ namespace PARR.DAL.Repositories
|
||||
{
|
||||
// Если задание все еще в статусе Wait (RobotStatusEnum.Wait), установить ему статус "InProgress"
|
||||
|
||||
var endDate = DateTimeOffset.UtcNow.Add(-settingsFromDb.RobotWaitTime);
|
||||
|
||||
// Выполняем атомарный UPDATE напрямую в базе данных
|
||||
var affectedRows = await EntitySet.Where(t => t.Id == id && t.RobotStatusCode == (int)RobotStatusEnum.Wait)
|
||||
var affectedRows = await EntitySet.Where(t => t.Id == id
|
||||
&& (
|
||||
// Задания в статусе ожидание
|
||||
t.RobotStatusCode == (int)RobotStatusEnum.Wait
|
||||
|| (
|
||||
// Задание в статусе в работе, но они зависли
|
||||
t.RobotStatusCode == (int)RobotStatusEnum.InProgress
|
||||
&& t.AttemptsNumber < settingsFromDb.RobotAttemptsNumber
|
||||
&& t.LastRobotStatusUpdated < endDate
|
||||
)
|
||||
)
|
||||
)
|
||||
.ExecuteUpdateAsync(s => s
|
||||
.SetProperty(t => t.RobotStatusCode, (int)RobotStatusEnum.InProgress)
|
||||
.SetProperty(t => t.LastRobotStatusUpdated, DateTimeOffset.UtcNow)
|
||||
|
||||
Reference in New Issue
Block a user