⟨/⟩ Ntr/45_Api/Endpoints/ActualConsumption/GetActualConsumptionEndpoint.cs

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

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

namespace Rugrid.Sdaid.Epas.Ntr.Api.Endpoints.ActualConsumption
{
    /// <summary>
    /// Возвращает расход энергии от сторонних источников за календарный год по зданиям выбранного
    /// организационного объекта или по одному зданию. Что происходит при вызове —
    /// <see cref="Rugrid.Sdaid.Epas.Ntr.Backend.Handlers.ActualConsumption.DOC_GetActualConsumptionHandler"/>.
    /// </summary>
    public class DOC_GetActualConsumptionEndpoint : IApiContractDocument, IHasStructuralLinks, IFolder<NtrApiFolder>
    {
        public SdaidLink[] Links => new[]
        {
            Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Backend.Handlers.ActualConsumption.DOC_GetActualConsumptionHandler>(),
        };

        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];
    }

    /// <summary>Вид ТЭР, расход которого запрашивается.</summary>
    public enum ResourceKind
    {
        /// <summary>Электрическая энергия, тыс. кВт·ч</summary>
        ElectricEnergy,

        /// <summary>Тепловая энергия, Гкал</summary>
        HeatEnergy,
    }

    /// <summary>
    /// Запрос расхода энергии от сторонних источников.
    /// Задаётся либо организационный объект, либо здание.
    /// </summary>
    public class GetActualConsumptionQuery
    {
        /// <summary>Организационный объект, по зданиям которого запрашивается расход</summary>
        public Guid? NavId { get; set; }

        /// <summary>Здание, расход которого запрашивается</summary>
        public Guid? BuildingId { get; set; }

        /// <summary>Вид ТЭР</summary>
        public ResourceKind ResourceKind { get; set; }

        /// <summary>Календарный год. Не задан — берётся год, предшествующий текущему</summary>
        public int? Year { get; set; }

        /// <summary>
        /// Включать здания организационных объектов, подчинённых заданному.
        /// Для запроса по зданию значения не имеет
        /// </summary>
        public bool WithDescendants { get; set; }
    }

    /// <summary>Расход энергии за год: строки иерархии и перечень доступных лет.</summary>
    public class GetActualConsumptionQueryResult
    {
        /// <summary>Год, за который возвращены строки</summary>
        public int Year { get; set; }

        /// <summary>Годы, за которые есть данные учёта в пределах запроса, по возрастанию</summary>
        public int[]? AvailableYears { get; set; }

        /// <summary>
        /// Строки таблицы в порядке обхода иерархии сверху вниз: организационный объект предшествует
        /// своим подчинённым объектам и зданиям
        /// </summary>
        public GetActualConsumptionRow[]? Rows { get; set; }
    }

    /// <summary>Строка таблицы расхода: организационный объект или здание.</summary>
    public class GetActualConsumptionRow
    {
        /// <summary>Глубина в иерархии; 0 — объект или здание, по которому сделан запрос</summary>
        public int Level { get; set; }

        /// <summary>Наименование организационного объекта или здания</summary>
        public string? Name { get; set; }

        /// <summary>Здание, если строка — здание; иначе не задан</summary>
        public Guid? BuildingId { get; set; }

        /// <summary>
        /// Расход по месяцам года, двенадцать значений в календарном порядке.
        /// Незаданное значение означает, что расход за месяц в источнике не задан
        /// </summary>
        public decimal?[]? Months { get; set; }

        /// <summary>Расход за год — сумма заданных значений месяцев</summary>
        public decimal? Total { get; set; }
    }
}