feat(core): Логика выдачи задания роботу для переименованных шаблонов
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using InfluxDB.Client.Api.Domain;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using PARR.Core.Repositories.Interfaces;
|
||||
using PARR.DAL.Context;
|
||||
using PARR.DAL.Repositories.Base;
|
||||
using PARR.Domain.Entities;
|
||||
using PARR.Domain.Entities.RobotEntities;
|
||||
using PARR.Domain.Enums;
|
||||
using PARR.Domain.Settings;
|
||||
|
||||
@@ -94,8 +96,8 @@ namespace PARR.DAL.Repositories
|
||||
configuration.AttemptsNumber++;
|
||||
configuration.LastRobotStatusUpdated = DateTimeOffset.UtcNow;
|
||||
break;
|
||||
//case RobotStatusEnum.Error:
|
||||
// break;
|
||||
case RobotStatusEnum.Error:
|
||||
break;
|
||||
case RobotStatusEnum.Complete:
|
||||
configuration.LastRobotStatusUpdated = DateTimeOffset.UtcNow;
|
||||
break;
|
||||
@@ -108,6 +110,14 @@ namespace PARR.DAL.Repositories
|
||||
}
|
||||
}
|
||||
|
||||
public void SetErrorRobotStatusAndMaxAttempts(RobotConfiguration configuration)
|
||||
{
|
||||
ChangeRobotStatus(RobotStatusEnum.Error, configuration);
|
||||
|
||||
configuration.AttemptsNumber = settingsFromDb.RobotAttemptsNumber;
|
||||
configuration.LastRobotStatusUpdated = DateTimeOffset.UtcNow;
|
||||
}
|
||||
|
||||
|
||||
public async Task<bool> SetInProgressStatusAsync(Guid id)
|
||||
{
|
||||
@@ -175,10 +185,55 @@ namespace PARR.DAL.Repositories
|
||||
logger.LogInformation($"Устанавливаю RobotStatus: {RobotStatusEnum.Error} для RobotConfigurationId {item.Id}");
|
||||
});
|
||||
|
||||
#region Ищем, есть ли связанные шаблоны, которые должны переименоваться, им тоже нужно установить статус ошибки, но только для Шаблонов
|
||||
|
||||
var linksCount = 0;
|
||||
|
||||
var templateIds = configObjs.Where(t => t.RobotCode == (int)RobotsEnum.TemplateOrder).Select(t => t.TemplateId).ToList();
|
||||
if (templateIds.Any())
|
||||
{
|
||||
// По этим именам находим целевые шаблоны, берем их задания, и ставим им статус Ошибка + записать в лог робота
|
||||
var configs = await EntitySet
|
||||
.Where(t => t.RobotCode == (int)RobotsEnum.TemplateOrder
|
||||
&& t.RobotStatusCode != (int)RobotStatusEnum.Error
|
||||
&& EntityContext.Templates.Any(tmpl =>
|
||||
templateIds.Contains(tmpl.Id)
|
||||
&& tmpl.TemplateRenamePending != null
|
||||
&& tmpl.TemplateRenamePending.OldName == t.Template!.Name))
|
||||
.ToListAsync();
|
||||
|
||||
linksCount = configs.Count;
|
||||
|
||||
foreach (var item in configs)
|
||||
{
|
||||
SetErrorRobotStatusAndMaxAttempts(item);
|
||||
|
||||
// Пишем в лог роботу
|
||||
var history = new RobotHistory
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
HistoryLevel = (int)RobotStatusEnum.Error,
|
||||
TaskStatusCode = item.TaskStatusCode,
|
||||
RobotConfigurationId = item.Id,
|
||||
RobotIp = null,
|
||||
RobotId = ParrComponentsEnum.Api.ToString(),
|
||||
RobotMessage = "[RobotConfigurationRepository] Установлен статус ошибки, так как не переименован связанный шаблон"
|
||||
};
|
||||
|
||||
// Синхронный Add работает быстрее и безопаснее внутри цикла
|
||||
EntityContext.RobotHistories.Add(history);
|
||||
|
||||
logger.LogInformation($"Устанавливаю RobotStatus: {RobotStatusEnum.Error} для RobotConfigurationId {item.Id}");
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
var result = await CommitAsync();
|
||||
|
||||
if (!result)
|
||||
logger.LogError($"Ошибка при сохранении изменений RobotStatus для RobotConfigurationId: item.Id, RobotStatus: {RobotStatusEnum.Error}");
|
||||
logger.LogError("Ошибка при сохранении изменений RobotStatus для просроченных заданий в количестве {Count} шт.", configObjs.Count + linksCount);
|
||||
//else
|
||||
// logger.LogInformation("Успешно обработано и переведено в статус Ошибки просроченных заданий: {Count} шт.", configObjs.Count + linksCount);
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user