feat(api, core): Доделал атомарный захват задачи роботом.

This commit is contained in:
Mikhail Trubnikov
2026-05-26 11:26:52 +10:00
parent ab563f88b9
commit 856b273e6b
13 changed files with 892 additions and 443 deletions

View File

@@ -0,0 +1,13 @@
namespace PARR.Domain.DTOs.RobotTask
{
/// <summary>
/// Базовая модель для заданий роботам
/// </summary>
public record RobotTaskBase
{
/// <summary>
/// RobotConfigurationId
/// </summary>
public Guid TaskId { get; init; }
}
}

View File

@@ -0,0 +1,67 @@
namespace PARR.Domain.DTOs.RobotTask
{
/// <summary>
/// Модель для задания роботам - расписания
/// </summary>
public record RobotTaskSchedule : RobotTaskBase
{
/// <summary>
/// ИД расписания из ЕСПП. При создании, его не будет
/// </summary>
public string? EsppId { get; init; }
public required string ScheduleName { get; init; }
public bool IsActive { get; init; }
public required string ResponseArea { get; init; }
public required string TemplateName { get; init; }
public Guid TemplateId { get; init; }
public required string WorkGroup { get; init; }
public string? Description { get; init; }
public required string Exclude { get; init; }
// сделал возможный null, так как может в будущем это поле может не заполняться
public string? ExcludeCalendar { get; init; }
public required string Timezone { get; init; }
public required string RepeatRange { get; init; }
/// <summary>
/// Время создания наряда
/// </summary>
public required string GenerationTime { get; init; }
/// <summary>
/// Следующее срабатывание
/// </summary>
public required string NextStart { get; init; }
/// <summary>
/// Тип задания: Регулярно, еженедельно...
/// </summary>
public required string ScheduleType { get; init; }
/// <summary>
/// Код задания
/// </summary>
public int ScheduleTypeCode { get; init; }
public List<RobotTaskScheduleSch>? Schedule { get; init; }
}
public record RobotTaskScheduleSch
{
public required string Type { get; init; }
public int TypeCode { get; init; }
public required string Value { get; init; }
public int Order { get; init; }
}
}

View File

@@ -0,0 +1,53 @@
namespace PARR.Domain.DTOs.RobotTask
{
/// <summary>
/// Модель для задания роботам - шаблоны
/// </summary>
public record RobotTaskTemplate : RobotTaskBase
{
/// <summary>
/// ИД расписания из ЕСПП. При создании, его не будет
/// (при создании шаблона, это поле не смотрим, используем только при изменении)
/// </summary>
public string? ScheduleEsppId { get; init; }
public bool IsActive { get; init; }
public required string ClosingCode { get; init; }
public required string FullDescription { get; init; }
public required string ShortDescription { get; init; }
public required string Solution { get; init; }
public required string ResponseArea { get; init; }
public required string TemplateDuration { get; init; }
public required string Initiator { get; init; }
public required string WorkGroup { get; init; }
public required string Ek { get; init; }
public required string Name { get; init; }
public required string Category { get; init; }
public required string ProcessName { get; init; }
public required string ProcessEsppId { get; init; }
public required string SubprocessName { get; init; }
public required string SubprocessEsppId { get; init; }
public required string TnkName { get; init; }
public required string TnkEsppId { get; init; }
public required string WorkName { get; init; }
}
}

View File

@@ -93,4 +93,17 @@
/// <param name="message"></param>
public ForbiddenException(string message) : base(message) { }
}
/// <summary>
/// Ошибка при расчете NextRun. 422 (запрос валиден, но бизнес логика не смогла нормально его обработать)
/// </summary>
public class NextRunException : BaseException
{
/// <summary>
/// Ошибка при расчете NextRun
/// </summary>
/// <param name="message"></param>
public NextRunException(string message) : base(message){}
}
}