Сводная статистика ТС

Доменная сущность Версия: 0.1 draft

Агрегирующий read-model по реестру ТС: состояние обработки (количество ТС по каждому статусу обработки) и потребление топлива в разрезе вида топлива (нормативный расход — сумма, максимум, минимум, среднее). Не хранимая сущность, вычисляется по запросу из уже сохранённых данных.

⟨/⟩ Исходник

1. Назначение

Сводная статистика — не хранимая сущность, а форма результата агрегирующего запроса по реестру ТС. Вычисляется по запросу (не отчётный движок, не фоновая задача), читает уже сохранённые Транспортное средство и Расчёт ТС, никаких собственных данных не хранит и ничего не пересчитывает.

Используется в двух местах: на главной странице модуля (без фильтра, по всему реестру ТС) и на вкладке «Сведения» организационного объекта (с фильтром по этому объекту). Оба места — один и тот же read-model с разным значением входного фильтра, см. Плашки сводной статистики ТС.

2. Фильтр по организационному объекту

Поле OrgObject — тот же фильтр, что и в Реестр транспортных средств: не задан — статистика по всему реестру ТС; задан — по ТС этого объекта и, при включённом «С потомками», подчинённых объектов (ТС числятся за МЭС и ПМЭС). На главной странице модуля фильтр не задаётся; на вкладке «Сведения» — всегда задаётся объектом вкладки, переключателя «С потомками» на самой вкладке нет, значение фиксировано как «с потомками» (сводка по объекту в целом).

3. Группа 1 — состояние обработки

TotalCount — общее количество ТС, отобранных фильтром. ByProcessingStatus — одна строка Количество ТС по статусу обработки на каждое значение справочника Статус обработки ТС (состав — там, не повторяется здесь) — строка выводится всегда, даже если по этому статусу нет ни одного ТС (Count = 0), чтобы состав плашек не менялся от выборки к выборке.

НаименованиеАтрибутТипОбязательно для созданияВычисляемый, методикаДиапазон / формат
Статус обработкиprocessing_status_idProcessingStatusДа
Количество ТСcountInt32НетДа, количество ТС выборки с этим статусом обработкицелое, ≥ 0

4. Группа 2 — потребление топлива, в разрезе вида топлива

ByFuelKind — одна строка Потребление топлива по виду топлива на каждое значение Вид автомобильного топлива, встретившееся среди ТС, отобранных фильтром (бензин/дизельное топливо; литры разных видов топлива не складываются — два самостоятельных разреза). VehicleCount — количество ТС этого вида топлива с успешным расчётом (CalculationStatus = «Успешно выполнен»), участвующих в агрегации. Нормативный расход (NormConsumptionSum/Max/Min/Avg) — сумма, максимум, минимум и среднее по полю VehicleCalc.NormConsumption (итоговый результат расчёта \(Q_н\), Расчёт ТС) этих ТС; источник — уже сохранённый результат расчёта, агрегация не обращается к InputModel (контракту входа расчёта, существующему только во время его выполнения) и не запускает расчёт повторно. ActualConsumption — зарезервировано на будущее: в домене ЭНТС сейчас нет источника фактических данных по топливу ТС; поле не вычисляется и не выводится, пока источник не появится. Не путать с «Фактическое потребление» модуля ЭНЗС (Ntr) — там про тепло/электричество зданий, другая модель данных, другой модуль.

НаименованиеАтрибутТипОбязательно для созданияВычисляемый, методикаЕИДиапазон / форматОписание
Вид топливаfuel_kind_idFuelKindДаVehicle.FuelKindPrimary — основной вид топлива ТС
Количество ТС с успешным расчётомvehicle_countInt32НетДа, количество ТС этого вида топлива с CalculationStatus = «Успешно выполнен»целое, ≥ 0
Нормативный расход — сумма, лnorm_consumption_sumDecimalНетДа, сумма VehicleCalc.NormConsumption по ТС этого вида топлива с успешным расчётомлвещественное, ≥ 0
Нормативный расход — максимум, лnorm_consumption_maxDecimalНетДа, максимум VehicleCalc.NormConsumption по той же выборкелвещественное, ≥ 0
Нормативный расход — минимум, лnorm_consumption_minDecimalНетДа, минимум VehicleCalc.NormConsumption по той же выборкелвещественное, ≥ 0
Нормативный расход — среднее, лnorm_consumption_avgDecimalНетДа, среднее VehicleCalc.NormConsumption по той же выборкелвещественное, ≥ 0
Фактический расход, л — зарезервированоactual_consumptionDecimalНетлЗарезервировано на будущее: источник фактических данных по топливу ТС в домене ЭНТС не определён; поле не вычисляется

Связи

classDiagram
    direction LR
    class VehicleSummaryStatistics {
        +NavEntity org_object_id
        +Int32 total_count
    }
    class NavEntity
    VehicleSummaryStatistics "0..1" --> "1" NavEntity : org_object_id

Структура

НаименованиеАтрибутТипОбязательно для созданияВычисляемый, методикаДиапазон / форматОписание
Организационный объект — фильтрorg_object_idNavEntityНетНе задан — статистика по всему реестру ТС; задан — по объекту и, при «С потомками», подчинённым объектам
Всего ТСtotal_countInt32НетДа, количество ТС, отобранных фильтром `OrgObject`целое, ≥ 0

Исходник

    public class VehicleSummaryStatistics
    {
        /// <summary>Организационный объект — фильтр</summary>
        [Relation]
        [DomainField(Alias = "org_object_id",
            Description = "Не задан — статистика по всему реестру ТС; задан — по объекту и, при «С потомками», подчинённым объектам")]
        public NavEntity? OrgObject { get; set; }

        /// <summary>Всего ТС</summary>
        [DomainField(Alias = "total_count", Range = "целое, ≥ 0",
            Calculated = "Да, количество ТС, отобранных фильтром `OrgObject`")]
        public int TotalCount { get; set; }
    }

Связанные артефакты

Документы