6. Подсистема ведения заказов (Orders и связанные сущности)

6.1. Диаграмма

_images/orders_md2.svg

На этой схеме отображено хранение информации о заказах, их оплате и доставках.

Покупатель (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. ТАБЛИЦЫ

Основные таблицы заказов

  1. ORDERS - Основная таблица заказов

  2. ORDER_STATUSES - Справочник статусов заказов

  3. ORDER_CANCELLATIONS - Отменённые заказы

Платежи

  1. PAYMENTS - Платежи по заказам

  2. PAYMENT_STATUSES - Справочник статусов платежей

Доставка и логистика

  1. SHIPPING_METHODS - Способы доставки

  2. PICKUP_POINTS - Пункты выдачи заказов

  3. ADDRESSES- Адреса (используются для пунктов выдачи)

  4. PICKUP_MEDIA - Медиафайлы пунктов выдачи

Покупатели

  1. CUSTOMERS - Покупатели

  2. CUSTOMER_ADDRESSES - Адреса покупателей

Продавцы

  1. SELLERS - Продавцы (для связи с платежами/аналитикой)

6.1.2. ПРЕДСТАВЛЕНИЯ (VIEWS)

  1. ORDERS_UNREDEEMED - Неоплаченные заказы с расчётом долга

  2. ORDER_HISTORY_VIEW - История заказов

  3. SELLERS_INFO - Информация о продавцах (для отчётов по заказам)

6.1.3. ФУНКЦИИ

Управление заказами

  1. COUNT_ORDERS_BY_STATUS - Подсчёт заказов по статусу

  2. ORDER_PAID_SUM - Сумма оплат по заказу

  3. IS_PAID - Проверка оплаты заказа

  4. IS_DELIVERED - Проверка доставки заказа

  5. GET_ORDER_PAYMENT_INFO - Информация об оплате заказа

  6. ADD_PAYMENT_GET_ID - Создание платежа для заказа

6.1.4. ХРАНИМЫЕ ПРОЦЕДУРЫ

Создание и обработка заказов

  1. CREATE_ORDER - Создание заказа из JSON

  2. CREATE_ORDER_REVIEW - Создание отзыва о заказе

  3. CANCEL_ORDER - Отмена заказа с возвратом товаров

  4. CANCEL_ORDER_WITH_REFUND - Отмена с полным возвратом

  5. CHECK_ORDER_CANCELLATION_STATUS - Проверка возможности отмены

Управление статусами

  1. CLOSE_PENDING_ORDERS - Закрытие ожидающих заказов

  2. CLOSE_ORDER_WITH_RESULT - Закрытие конкретного заказа

  3. CHECK_ORDER_PAYMENT_STATUS - Проверка статуса оплаты

Платежи и возвраты

  1. PAYMENTS_REFUND - Возврат платежей по заказу

  2. PAY_FOR_ORDER - Оплата заказа

Управление клиентами

  1. CUSTOMER_ADD_OR_UPDATE - Добавление/обновление покупателя

  2. CUSTOMER_UPDATE - Обновление данных покупателя

  3. CUSTOMER_DROP - Удаление покупателя

  4. GET_CUSTOMER_ORDER_HISTORY - История заказов покупателя

Управление продавцами

  1. SELLER_ADD_OR_UPDATE - Добавление/обновление продавца

  2. SELLER_DROP - Удаление продавца

Управление пунктами выдачи

  1. PICKUP_POINT_ADD_OR_UPDATE - Добавление/обновление данных пункта выдачи

  2. PICKUP_POINT_UPDATE - Обновление данных пункта выдачи

  3. PICKUP_POINT_DELETE - Удаление пункта выдачи

6.1.5. ИСКЛЮЧЕНИЯ (EXCEPTIONS)

  1. EXC_INVALID_SHIPPING_METHOD - Недопустимый метод доставки

  2. EXC_HAS_DEPENDENCIES - Имеются зависимые записи

  3. EXC_INVALID_PICKUP_POINT - Недопустимый пункт самовывоза

  4. EXC_NOVALID_ORDER - Заказ не найден

  5. EXC_INVALID_CUSTOMER - Недопустимый клиент

  6. EXC_INVALID_SELLER - Недопустимый продавец

  7. EXC_INVALID_QUANTITY - Недопустимое количество

  8. EXC_INVALID_JSON - Недопустимый формат JSON

  9. EXC_INVALID_WAREHOUSE - Недопустимый склад

  10. EXC_INSUFFICIENT_STOCK - Недостаточно товара

  11. 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. ОСНОВНЫЕ БИЗНЕС-ПРОЦЕССЫ

  1. ЖИЗНЕННЫЙ ЦИКЛ ЗАКАЗА:

    CREATE_ORDER() -> PAY_FOR_ORDER_0() -> CLOSE_ORDER_WITH_RESULT()
                        |
                CANCEL_ORDER_WITH_REFUND() (при отмене)
    
  2. ПЛАТЕЖНЫЕ ПРОЦЕССЫ:

    SET_PAYMENT_ID() -> CHECK_ORDER_PAYMENT_STATUS() -> PAYMENTS_REFUND()
    
  3. АНАЛИТИКА:

    GET_CUSTOMER_ORDER_HISTORY() + ORDER_HISTORY_VIEW + ORDERS_UNREDEEMED
    
  4. УПРАВЛЕНИЕ ПОКУПАТЕЛЯМИ:

    CUSTOMER_ADD_OR_UPDATE() -> GET_CUSTOMER_ORDER_HISTORY() -> CUSTOMER_DROP()
    
  5. УПРАВЛЕНИЕ ПУНКТАМИ ВЫДАЧИ:

    PICKUP_POINT_ADD_OR_UPDATE() -> PICKUP_POINT_UPDATE() -> PICKUP_POINT_DELETE()