6. Подсистема ведения заказов (Orders и связанные сущности)
6.1. Диаграмма
На этой схеме отображено хранение информации о заказах, их оплате и доставках.
Покупатель (CUSTOMER) делает заказы (ORDERS) на товары (PRODUCTS). Каждый товар в заказе заносится в таблицу (ORDER_ITEMS) с указанием количества, цены, цены со скидками и склада. Для получения заказа покупатель выбирает удобный ему пункт выдачи заказа (PICKUP_POINTS). После этого заказ переходит в статус “AWAITING_PAYMENT” и ожидает оплаты, а товару для доставки назначается Tracking_Number, дата доставки и вид доставки (Base | Express).
Оплата заносится в таблицу PAYMENTS, где сохраняется информация обо всех платежах, включая неудачные попытки. После завершения покупателем полной оплаты суммы TOTAL_PRICE, заказ считается оплаченным (PAID).
Для регламентированного создания записи заказа служит процедура CREATE_ORDER, в которую передается вся информация о заказе в формате JSON. Для получения отчета по всем заказам конкретного покупателя служит процедура GET_CUSTOMER_ORDER_HISTORY. Список всех заказов можно выбрать в представлении ORDER_HISTORY_VIEW.
Полностью оплаченный и доставленный заказ можно ЗАКРЫТЬ (перевести его статус в ‘CLOSED’). Имеется возможность настроить автоматическое закрытие всех таких заказов с помощью периодического запуска процедуры CLOSE_PENDING_ORDERS.
Заказ можно отменить (CANCEL). Для оплаченного, но не доставленного заказа при отмене производится возврат оплаты (REFUND).
Для вычисления средней прибыли продавца за интервал дат служит функция CALCULATE_REVENUE
6.1.1. ТАБЛИЦЫ
Основные таблицы заказов
ORDERS- Основная таблица заказовORDER_STATUSES- Справочник статусов заказовORDER_CANCELLATIONS- Отменённые заказы
Платежи
PAYMENTS- Платежи по заказамPAYMENT_STATUSES- Справочник статусов платежей
Доставка и логистика
SHIPPING_METHODS- Способы доставкиPICKUP_POINTS- Пункты выдачи заказовADDRESSES- Адреса (используются для пунктов выдачи)PICKUP_MEDIA- Медиафайлы пунктов выдачи
Покупатели
CUSTOMERS- ПокупателиCUSTOMER_ADDRESSES- Адреса покупателей
Продавцы
SELLERS- Продавцы (для связи с платежами/аналитикой)
6.1.2. ПРЕДСТАВЛЕНИЯ (VIEWS)
ORDERS_UNREDEEMED- Неоплаченные заказы с расчётом долгаORDER_HISTORY_VIEW- История заказовSELLERS_INFO- Информация о продавцах (для отчётов по заказам)
6.1.3. ФУНКЦИИ
Управление заказами
COUNT_ORDERS_BY_STATUS- Подсчёт заказов по статусуORDER_PAID_SUM- Сумма оплат по заказуIS_PAID- Проверка оплаты заказаIS_DELIVERED- Проверка доставки заказаGET_ORDER_PAYMENT_INFO- Информация об оплате заказаADD_PAYMENT_GET_ID- Создание платежа для заказа
6.1.4. ХРАНИМЫЕ ПРОЦЕДУРЫ
Создание и обработка заказов
CREATE_ORDER- Создание заказа из JSONCREATE_ORDER_REVIEW- Создание отзыва о заказеCANCEL_ORDER- Отмена заказа с возвратом товаровCANCEL_ORDER_WITH_REFUND- Отмена с полным возвратомCHECK_ORDER_CANCELLATION_STATUS- Проверка возможности отмены
Управление статусами
CLOSE_PENDING_ORDERS- Закрытие ожидающих заказовCLOSE_ORDER_WITH_RESULT- Закрытие конкретного заказаCHECK_ORDER_PAYMENT_STATUS- Проверка статуса оплаты
Платежи и возвраты
PAYMENTS_REFUND- Возврат платежей по заказуPAY_FOR_ORDER- Оплата заказа
Управление клиентами
CUSTOMER_ADD_OR_UPDATE- Добавление/обновление покупателяCUSTOMER_UPDATE- Обновление данных покупателяCUSTOMER_DROP- Удаление покупателяGET_CUSTOMER_ORDER_HISTORY- История заказов покупателя
Управление продавцами
SELLER_ADD_OR_UPDATE- Добавление/обновление продавцаSELLER_DROP- Удаление продавца
Управление пунктами выдачи
PICKUP_POINT_ADD_OR_UPDATE- Добавление/обновление данных пункта выдачиPICKUP_POINT_UPDATE- Обновление данных пункта выдачиPICKUP_POINT_DELETE- Удаление пункта выдачи
6.1.5. ИСКЛЮЧЕНИЯ (EXCEPTIONS)
EXC_INVALID_SHIPPING_METHOD- Недопустимый метод доставкиEXC_HAS_DEPENDENCIES- Имеются зависимые записиEXC_INVALID_PICKUP_POINT- Недопустимый пункт самовывозаEXC_NOVALID_ORDER- Заказ не найденEXC_INVALID_CUSTOMER- Недопустимый клиентEXC_INVALID_SELLER- Недопустимый продавецEXC_INVALID_QUANTITY- Недопустимое количествоEXC_INVALID_JSON- Недопустимый формат JSONEXC_INVALID_WAREHOUSE- Недопустимый складEXC_INSUFFICIENT_STOCK- Недостаточно товараEXC_DUPLICATE_PRODUCT_ON_WAREHOUSE- Дублирование товара со склада
6.1.6. КЛЮЧЕВЫЕ СВЯЗИ МЕЖДУ ОБЪЕКТАМИ ЗАКАЗОВ
ПОКУПАТЕЛИ (CUSTOMERS)
|
├─ АДРЕСА (CUSTOMER_ADDRESSES) -> АДРЕСА (ADDRESSES)
│
└─ ЗАКАЗЫ (ORDERS)
├─ СТАТУСЫ (ORDER_STATUSES)
├─ ПЛАТЕЖИ (PAYMENTS) -> СТАТУСЫ ПЛАТЕЖЕЙ (PAYMENT_STATUSES)
├─ ПУНКТЫ ВЫДАЧИ (PICKUP_POINTS) -> АДРЕСА (ADDRESSES)
├─ СПОСОБЫ ДОСТАВКИ (SHIPPING_METHODS)
└─ ОТМЕНЫ (ORDER_CANCELLATIONS)
6.1.7. ОСНОВНЫЕ БИЗНЕС-ПРОЦЕССЫ
ЖИЗНЕННЫЙ ЦИКЛ ЗАКАЗА:
CREATE_ORDER() -> PAY_FOR_ORDER_0() -> CLOSE_ORDER_WITH_RESULT() | CANCEL_ORDER_WITH_REFUND() (при отмене)ПЛАТЕЖНЫЕ ПРОЦЕССЫ:
SET_PAYMENT_ID() -> CHECK_ORDER_PAYMENT_STATUS() -> PAYMENTS_REFUND()
АНАЛИТИКА:
GET_CUSTOMER_ORDER_HISTORY() + ORDER_HISTORY_VIEW + ORDERS_UNREDEEMED
УПРАВЛЕНИЕ ПОКУПАТЕЛЯМИ:
CUSTOMER_ADD_OR_UPDATE() -> GET_CUSTOMER_ORDER_HISTORY() -> CUSTOMER_DROP()
УПРАВЛЕНИЕ ПУНКТАМИ ВЫДАЧИ:
PICKUP_POINT_ADD_OR_UPDATE() -> PICKUP_POINT_UPDATE() -> PICKUP_POINT_DELETE()