business.md 11 KB

BusinessService

Назначение

Управление остатками и заказами: получение/обновление остатков, создание заказа по счёту (invoice), ожидание подтверждений мастер-системы и статусов оплаты, отмена, выборки заказов пользователя, а также приём внешних обновлений по заказам.

Публичные методы

Остатки

  • GetRemaindersAsync(productsIds[]): decimal[] - получить остатки по товарам.
  • FilterInStockAsync(productsIds[]): int[] - оставить только товары «в наличии».
  • UpdateAllRemaindersAsync(pack): void - полное обновление остатков.
  • UpdateRemaindersAsync(pack): void - частичное обновление остатков.

Создание/управление заказом (жизненный цикл)

  • CreateOrderAsync(invoice): Order - создать заказ по счёту (без подтверждения мастер-системы).
  • AwaitOrderConfirmMasterSystemLPAsync(orderId): Order - дождаться подтверждения мастер-системы.
  • AwaitOrderPaymentPendingLPAsync(orderId): Order - дождаться перехода платежа в ожидание/обработку.
  • CancelOrderByCustomerAsync(orderId): Order - отменить заказ пользователем.

Заказы пользователя

  • GetMyOrders(skip = 0, take = 20): Order[] - получить мои заказы с пагинацией.

Взаимодействие с внешней системой заказов (обновления)

  • UpdateOrderProductsAsync(order): OrdersPairExt - обновить состав товаров заказа.
  • UpdateOrdersStatusAsync(orders[]): void - массовое обновление статусов.
  • UpdateOrderStatusToIssuedToCustomerAsync(orderStatus): OrderExt - проставить статус «выдан покупателю».
  • GetOrdersUpdatedLPAsync(): OrderExt[] - получить заказы, обновлённые (long-polling вариант).
  • GetOrdersUpdatedAsync(): OrderExt[] - получить заказы, обновлённые (обычный вариант).
  • GetLastOrderAsync(): OrderExt - получить последний заказ.
  • QueryOrdersExternalAsync(ordersIds[]): OrderExt[] - запросить заказы по внешним идентификаторам.

Конфигурация BusinessService

Работа сервиса опирается на конфигурационный файл BusinessServiceConfig. В нём содержатся параметры для интеграции с платёжным шлюзом и настройки доставки. Конфиг хранится в секции config.json и загружается при инициализации сервиса.

Параметры платежей (YooKassa)

  • PaymentYooKassa_ShopId - идентификатор магазина в YooKassa.
  • PaymentYooKassa_SecretKey - секретный ключ для подписи и проверки запросов.
  • PaymentYooKassa_ReturnURL - URL, на который возвращается пользователь после завершения платежа.

Эти параметры обязательны для корректной работы онлайн-оплаты.

Параметры доставки

  • DeliveryMasterSystemId - внешний идентификатор доставки в мастер-системе (1С).
  • DeliveryName - отображаемое название услуги доставки (по умолчанию «Доставка»).
  • DeliveryVAT - ставка НДС, применяемая к услуге доставки (значение из VATCodeEnum, по умолчанию Vat20).

Особенности

  • Конфигурация выносится в отдельный JSON и может отличаться между окружениями (Dev/Staging/Prod).
  • В боевом окружении рекомендуется хранить ключи (SecretKey) в защищённом хранилище или использовать секреты CI/CD.
  • Параметры доставки синхронизируются с мастер-системой и должны совпадать с её справочниками.

Взаимодействие c другими сервисами

BusinessService взаимодействует со следующими сервисами:

  • DirectoryService - (get only) полученине данных о товарах.
  • DeliveryService - (get only) проверочный рассчет доставки по заказу.
  • ProfilesService - (get only) получение данных пользователя совершающего заказ (User).

Модели

BusinessServiceConfig

string PaymentYooKassa_ShopId //Идентификатор магазина YooKassa
string PaymentYooKassa_SecretKey //Секретный ключ YooKassa
string PaymentYooKassa_ReturnURL //URL возврата после оплаты

string DeliveryMasterSystemId //Внешний идентификатор доставки в мастер-системе
string DeliveryName //Отображаемое название доставки
VATCodeEnum DeliveryVAT //Код НДС, применяемый к доставке

Конфигурационная модель сервиса; содержит настройки платёжного шлюза (YooKassa) и параметры доставки.

Order

long Id //Идентификатор заказа
long ForwardFromId //Ид источника/переноса (если есть)
string ExtId //Внешний идентификатор заказа (мастер-система)
OrderStatusEnum Status //Текущий статус заказа
string[] Discounts //Применённые скидки/промокоды
OrderProduct[] Products //Состав заказа
decimal TotalCost //Итоговая стоимость
DateTimeOffset Created //Когда создан
DateTimeOffset Updated //Когда обновлён (последняя синхронизация)
OrderPayment PaymentInfo //Информация об оплате
OrderDelivery Delivery //Информация о доставке
long CustomerId //Идентификатор покупателя (если авторизован)
OrderCustomer Customer //Данные покупателя
string Comment //Комментарий покупателя/оператора
bool IsPayed //Факт оплаты
OrderPaymentStatusEnum PaymentStatus //Статус платежа
OrderStatusEnum StatusInternal //Внутренний статус (служебный)
bool IsClosed //Заказ закрыт
bool IsNeedUpdateForMasterSystem //Требуется обновление в мастер-системе

OrderProduct

int Id //Идентификатор товара
string ExtId //Внешний ИД товара
string Name //Наименование
decimal Count //Кол-во, принятое к исполнению (по нему считается стоимость)
decimal CountInit //Кол-во, выбранное клиентом
decimal CostPerOne //Цена за единицу
decimal CostWithDiscountPerOne //Цена со скидкой за единицу
decimal TotalPrice //Итоговая стоимость позиции
VATCodeEnum VAT //Код НДС
TradeAgentSignEnum TradeAgentSign //Признак торгового агента
TradeAgent TradeAgent //Данные торгового агента

OrderCustomer

long Id //Ид пользователя (0 - если не авторизован)
string Phone //Телефон
string Email //Email
string Name //Имя
string PhotoFile //Идентификатор файла аватара
DateTimeOffset? BirthDay //Дата рождения (опционально)

Срез пользовательских данных, фиксируемый в заказе.

OrderDelivery

OrderDeliveryTypeEnum Type //Тип доставки (самовывоз/курьер и т. п.)
decimal Price //Стоимость доставки
Coordinates Pin //Координаты точки доставки/самовывоза
string Address //Адрес доставки/пункта
DeliveryInfo DeliveryInfo //Детали расчёта (зона/тариф/доступность)

Параметры выбранной доставки; есть статическая заготовка SelfPickUp.

OrderPayment

OrderPaymentTypeEnum Type //Тип оплаты (онлайн, офлайн и т. п.)
string PaymentGate //Платёжный провайдер/шлюз
OrderPaymentDetails Payment //Детали платежа
OrderPaymentDetails Refund //Детали возврата (если был)

OrderPaymentDetails

decimal Amount //Сумма платежа/возврата
string PaymentInternalId //Внутренний идентификатор
string PaymentId //Идентификатор у платёжного провайдера
string PaymentURL //Ссылка на оплату (если применяется)
string Status //Статус у провайдера (текстом)

OrderInvoiceItem

int ProductId //Идентификатор товара
decimal Amount //Количество

OrderInvoice

OrderInvoiceItem[] Items //Позиции счёта
string[] Discounts //Скидки/промокоды
decimal CheckCost //Контрольная сумма (ожидаемый итог от клиента)
OrderDelivery Delivery //Параметры доставки
OrderPaymentTypeEnum PaymentType //Способ оплаты
string UserEmail //Email покупателя (если не авторизован)
string UserName //Имя покупателя (если не авторизован)
string Comment //Комментарий покупателя

DB

Содержит таблицы и индексы

-- Migration 1
remainders (
    ProductId INTEGER PRIMARY KEY,
    Value TEXT NOT NULL DEFAULT '0'
)
-- Migration 2
orders (
    Id INTEGER PRIMARY KEY AUTOINCREMENT,
    ExtId TEXT NOT NULL DEFAULT '',
    Status INTEGER NOT NULL,
    Discounts TEXT NOT NULL DEFAULT '[]',
    Products TEXT NOT NULL DEFAULT '[]',
    TotalCost TEXT NOT NULL DEFAULT '0',
    Created INTEGER NOT NULL,
    Updated INTEGER NOT NULL,
    PaymentInfo TEXT NOT NULL DEFAULT '{}',
    Delivery TEXT NOT NULL DEFAULT '{}',
    CustomerId INTEGER NOT NULL,
    Customer TEXT NOT NULL DEFAULT '{}',
    Comment TEXT NOT NULL DEFAULT '',
    InternalComment TEXT NOT NULL DEFAULT '',
    IsPayed BOOLEAN NOT NULL DEFAULT FALSE,
    IsClosed BOOLEAN NOT NULL DEFAULT FALSE,
    IsNeedUpdateForMasterSystem BOOLEAN NOT NULL DEFAULT FALSE
)

CREATE INDEX IF NOT EXISTS idx_orders_customer_id ON orders (CustomerId);
-- Migration 3
ALTER TABLE orders ADD PaymentStatus INTEGER NOT NULL DEFAULT 0;
-- Migration 4
ALTER TABLE orders ADD StatusInternal INTEGER NOT NULL DEFAULT 0;
-- Migration 5
ALTER TABLE orders ADD ForwardFromId INTEGER NOT NULL DEFAULT 0;

Назад