⟨/⟩ Nts/50_Domain/NtsImportRun.cs

95 строк · в начало

using System;
using Rugrid.Sdaid.Notation.Documents;

namespace Rugrid.Sdaid.Epas.Nts.Domain
{
    /// <summary>
    /// История запусков приёма данных ЭНТС из АИС ОИА ПЭО: один запуск — пакетный
    /// (по организационному объекту) или по одному ТС. Начало запуска — дата создания записи,
    /// инициатор — автор создания.
    /// </summary>
    public class DOC_NtsImportRun : IDomainEntityDocument, IHasStructuralLinks, IFolder<NtsDomainFolder>
    {
        public SdaidLink[] Links => new[]
        {
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Infrastructure.AisOiaPeo.DOC_NtsAisImport>(),
            Rel.Uses<DOC_NavEntity>(),
            Rel.Uses<DOC_Vehicle>(),
            Rel.Uses<DOC_NtsImportRunStatus>(),
        };

        public static string _refName = "Запуск импорта из АИС";

        public string Name => "Запуск импорта из АИС";

        public string Description =>
            @"Запись истории приёма данных из АИС ОИА ПЭО: источник запуска, организационный объект и ТС (для одиночного обновления), статус, счётчики принятых записей по наборам и ошибки.";

        public string Version => "0.1";
        public string Status => "draft";
        public string[] Comments => new string[0];

        public Type Entity => typeof(NtsImportRun);

        public static string Purpose = $"""
            ## Назначение

            Одна запись — один запуск приёма данных: либо пакетный (со страницы импорта,
            {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsAisImportPage>()}), либо по одному
            ТС (иконка «Обновить из АИС» в карточке,
            {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleCard>()}). Запуски обоих видов
            пишутся в одну историю и различаются полем «Источник».

            Начало запуска — техническая дата создания записи, инициатор — автор создания;
            собственных полей для них у сущности нет. Запуск создаётся со статусом «Выполняется»
            и завершается статусом «Успешно» или «С ошибками» с датой завершения.
            """;
    }

    /// <summary>Доменная сущность «Запуск импорта из АИС».</summary>
    [DomainEntity]
    public class NtsImportRun
    {
        /// <summary>Идентификатор записи</summary>
        [DomainField(Alias = "id", RequiredOnCreate = true, Range = "UUID", Immutable = true)]
        public Guid Id { get; set; }

        /// <summary>Источник запуска</summary>
        [DomainField(Alias = "source", RequiredOnCreate = true, Range = "{batch; vehicle}",
            Description = "Пакетный запуск по организационному объекту или обновление одного ТС из карточки")]
        public string? SourceCode { get; set; }

        /// <summary>Организационный объект, по которому выполняется приём</summary>
        [Relation]
        [DomainField(Alias = "nav_id", RequiredOnCreate = true, Immutable = true,
            Description = "Пакетный запуск — корневая компания; обновление ТС — его владелец")]
        public NavEntity? Nav { get; set; }

        /// <summary>Транспортное средство</summary>
        [Relation]
        [DomainField(Alias = "vehicle_id",
            Description = "Заполнено только для источника «vehicle»")]
        public Vehicle? Vehicle { get; set; }

        /// <summary>Статус запуска</summary>
        [Relation]
        [DomainField(Alias = "status_id", RequiredOnCreate = true, Default = "Выполняется",
            Range = "{Выполняется; Успешно; С ошибками}")]
        public NtsImportRunStatus? Status { get; set; }

        /// <summary>Счётчики принятых записей по наборам</summary>
        [DomainField(Alias = "result_json", RequiredOnCreate = true,
            Description = "Количество принятых записей по наборам, JSON")]
        public string? ResultJson { get; set; }

        /// <summary>Ошибки запуска</summary>
        [DomainField(Alias = "errors_json", RequiredOnCreate = true, Description = "Ошибки запуска, JSON")]
        public string? ErrorsJson { get; set; }

        /// <summary>Дата и время завершения запуска</summary>
        [DomainField(Alias = "finished_date",
            Description = "Пусто — запуск выполняется")]
        public DateTime? FinishedDate { get; set; }
    }
}