Перейти к содержанию

FuelProcessing.Core — Domain Layer

Обзор

FuelProcessing.Core — это библиотека доменной модели и бизнес-логики платформы. Содержит базовые сущности предметной области, перечисления, интерфейсы и вспомогательные классы.

Структура

FuelProcessing.Core/
├── Models/                 # Доменные модели
│   ├── Cards/             # Карты и лимиты
│   ├── Contract/          # Контракты
│   ├── Fuel/              # Топливо
│   ├── Identity/          # Пользователи
│   ├── VinkApi/           # API модели ВИНК
│   └── *.cs               # Прочие модели
├── Settings/              # Перечисления
│   └── Identity/          # Роли пользователей
├── Interfaces/            # Интерфейсы доменной модели
├── Helpers/               # Вспомогательные методы
└── FuelProcessing.Core.csproj

Базовые классы

Entity

Базовый класс для всех сущностей:

public class Entity
{
    public int Id { get; set; }                // Уникальный идентификатор
    public DateTime? LastModifed { get; set; } // Дата изменения
}

Доменные модели

Card — Топливная карта

Основная сущность системы.

Свойства:

Свойство Тип Описание
Number string Номер карты
CardType CardType Тип карты (Газпромнефть, Лукойл, ...)
CardStatus CardStatus Статус карты
BlockStatus BlockStatus? Статус блокировки
IsActive bool Флаг активности
CompanyId int? Компания-владелец
DirectContractId int? Контракт с дистрибьютором
UserId int? Привязанный пользователь
CardGroupId int? Группа карт

Методы:

// Проверка статуса активности
bool IsActiveStatus(bool isActive, BlockStatus status, bool isForce)

// Список статусов для скрытия в UI
List<BlockStatus> GetBlockStatusForHide()

Limit — Лимит на расход

Ограничения на расход топлива по карте.

Свойства:

Свойство Тип Описание
LimitType LimitType Тип лимита
InDay int? Лимит на день (литры)
InWeek int? Лимит на неделю
InMonth int? Лимит на месяц
MaxInDayCurrent decimal Текущее значение за день
MaxInWeekCurrent decimal Текущее значение за неделю
MaxInMonthCurrent decimal Текущее значение за месяц

DirectContract — Прямой договор

Договор между компаниями.

Свойства:

Свойство Тип Описание
CompanySellerId int Продавец
CompanyBuyerId int Покупатель
ContractNumber string Номер договора
ContractStatus ContractStatus Статус договора
CurrentContractBalanceId int? Баланс договора
SumOverDraft decimal Размер овердрафта

FinanceTransaction — Транзакция

Финансовая транзакция (заправка/возврат).

Свойства:

Свойство Тип Описание
CreateTime DateTime Дата/время транзакции
LitersSum decimal Количество литров
PriceBase decimal Базовая цена
FullSum decimal Итоговая сумма
TransactionNumber string Номер транзакции
OperationType OperationType Покупка/Возврат
CardId int? Карта
GasStationId int? АЗС
FuelTypeId int? Тип топлива
NeedCalculate bool Требует расчёта

Статусы карт

CardStatus

Значение Описание
ОжидаетПоставки Карта ещё не выдана
Неактивированная Выдана, но не активирована
Активирована Активная карта

BlockStatus

24 значения статусов блокировки:

Статус Описание
BlockByUser / UnblockByUser Блокировка пользователем
BlockByAdmin / UnblockByAdmin Блокировка администратором
BlockByManager / UnblockByManager Блокировка менеджером
BlockBadBalanceContract Недостаточный баланс контракта
BlockVink Блокировка ВИНКом
BlockedWhenIssuing Блокировка при выдаче
DeleteCard Карта удалена

Приоритеты блокировок

При применении статусов действует строгий приоритет:

  1. Администраторская блокировка — высший приоритет
  2. Менеджерская блокировка
  3. Блокировка суперпользователем
  4. Пользовательская блокировка

Интерфейсы

IDiscount

Интерфейс для сущностей со скидками:

public interface IDiscount
{
    decimal Price { get; set; }
    decimal Discont { get; set; }
    int? FuelTypeId { get; set; }
    int? GasStationId { get; set; }
    int? RegionId { get; set; }
}

IGlobalLimit

Интерфейс для сущностей с лимитами по периодам:

public interface IGlobalLimit
{
    int? InDay { get; set; }
    int? InWeek { get; set; }
    int? InMonth { get; set; }
    decimal MaxInDayCurrent { get; set; }
    decimal MaxInWeekCurrent { get; set; }
    decimal MaxInMonthCurrent { get; set; }
}

Типы карт (VinkType)

public enum VinkType
{
    Газпромнефть,
    Лукойл,
    Роснефть,
    Татнефть,
    ТопливнаяПлатформа,    // СТС
    Вездеход,
    Инфорком,
    Газпромнефть_gpn,      // Globaltruck
    АСМАП,                 // SoftEngineering
    ТаифНК,
    НатКар,
    Трасса
}

Расширение модуля

Добавление новой модели

// Наследуйте от Entity
public class MyEntity : Entity
{
    public string Name { get; set; }
    // ... другие свойства
}

Добавление нового перечисления

// Добавьте в Settings/
public enum MyEnum
{
    Value1,
    Value2
}

Связанная документация