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 |
Карта удалена |
Приоритеты блокировок¶
При применении статусов действует строгий приоритет:
- Администраторская блокировка — высший приоритет
- Менеджерская блокировка
- Блокировка суперпользователем
- Пользовательская блокировка
Интерфейсы¶
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; }
// ... другие свойства
}
Добавление нового перечисления¶
Связанная документация¶
- Data Access Layer — репозитории и сервисы
- Справочник: Статусы карт — подробное описание