Управление остатками и заказами: получение/обновление остатков, создание заказа по счёту (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[] - запросить заказы по внешним идентификаторам.Работа сервиса опирается на конфигурационный файл BusinessServiceConfig. В нём содержатся параметры для интеграции с платёжным шлюзом и настройки доставки. Конфиг хранится в секции config.json и загружается при инициализации сервиса.
PaymentYooKassa_ShopId - идентификатор магазина в YooKassa.PaymentYooKassa_SecretKey - секретный ключ для подписи и проверки запросов.PaymentYooKassa_ReturnURL - URL, на который возвращается пользователь после завершения платежа.Эти параметры обязательны для корректной работы онлайн-оплаты.
DeliveryMasterSystemId - внешний идентификатор доставки в мастер-системе (1С).DeliveryName - отображаемое название услуги доставки (по умолчанию «Доставка»).DeliveryVAT - ставка НДС, применяемая к услуге доставки (значение из VATCodeEnum, по умолчанию Vat20).SecretKey) в защищённом хранилище или использовать секреты CI/CD.BusinessService взаимодействует со следующими сервисами:
string PaymentYooKassa_ShopId //Идентификатор магазина YooKassa
string PaymentYooKassa_SecretKey //Секретный ключ YooKassa
string PaymentYooKassa_ReturnURL //URL возврата после оплаты
string DeliveryMasterSystemId //Внешний идентификатор доставки в мастер-системе
string DeliveryName //Отображаемое название доставки
VATCodeEnum DeliveryVAT //Код НДС, применяемый к доставке
Конфигурационная модель сервиса; содержит настройки платёжного шлюза (YooKassa) и параметры доставки.
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 //Требуется обновление в мастер-системе
int Id //Идентификатор товара
string ExtId //Внешний ИД товара
string Name //Наименование
decimal Count //Кол-во, принятое к исполнению (по нему считается стоимость)
decimal CountInit //Кол-во, выбранное клиентом
decimal CostPerOne //Цена за единицу
decimal CostWithDiscountPerOne //Цена со скидкой за единицу
decimal TotalPrice //Итоговая стоимость позиции
VATCodeEnum VAT //Код НДС
TradeAgentSignEnum TradeAgentSign //Признак торгового агента
TradeAgent TradeAgent //Данные торгового агента
long Id //Ид пользователя (0 - если не авторизован)
string Phone //Телефон
string Email //Email
string Name //Имя
string PhotoFile //Идентификатор файла аватара
DateTimeOffset? BirthDay //Дата рождения (опционально)
Срез пользовательских данных, фиксируемый в заказе.
OrderDeliveryTypeEnum Type //Тип доставки (самовывоз/курьер и т. п.)
decimal Price //Стоимость доставки
Coordinates Pin //Координаты точки доставки/самовывоза
string Address //Адрес доставки/пункта
DeliveryInfo DeliveryInfo //Детали расчёта (зона/тариф/доступность)
Параметры выбранной доставки; есть статическая заготовка SelfPickUp.
OrderPaymentTypeEnum Type //Тип оплаты (онлайн, офлайн и т. п.)
string PaymentGate //Платёжный провайдер/шлюз
OrderPaymentDetails Payment //Детали платежа
OrderPaymentDetails Refund //Детали возврата (если был)
decimal Amount //Сумма платежа/возврата
string PaymentInternalId //Внутренний идентификатор
string PaymentId //Идентификатор у платёжного провайдера
string PaymentURL //Ссылка на оплату (если применяется)
string Status //Статус у провайдера (текстом)
int ProductId //Идентификатор товара
decimal Amount //Количество
OrderInvoiceItem[] Items //Позиции счёта
string[] Discounts //Скидки/промокоды
decimal CheckCost //Контрольная сумма (ожидаемый итог от клиента)
OrderDelivery Delivery //Параметры доставки
OrderPaymentTypeEnum PaymentType //Способ оплаты
string UserEmail //Email покупателя (если не авторизован)
string UserName //Имя покупателя (если не авторизован)
string Comment //Комментарий покупателя
Содержит таблицы и индексы
-- 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;