Подтвердить что ты не робот

Управление магазином и складом

В настоящее время я создаю сайт электронной торговли с PHP/MySQL. Недавно я работал над интеграцией с корзиной покупок. Клиент хотел, чтобы акции были доступны потенциальным покупателям, поэтому я создал систему управления запасами. Корзина работает следующим образом:

  • Клиент добавляет количество элементов для его тележку.
  • Товарное количество зарезервировано доступный запас в базе данных.
  • Никто не может купить зарезервированные акций.
  • Остаток остается зарезервированным до тех пор, пока клиент порядок процессов - тогда, когда запасы удалены из базы данных.
  • Если клиент покидает свою тележку, запасы остаются зарезервированными.
  • Если другой клиент хочет купить товар, но только доступный запас зарезервирован другим клиентом, тогда клиент может украсть зарезервированный запас, если он неактивен в течение 20 минут.

Мой вопрос: какие лучшие практики для такого рода сценариев? Правильно ли я делаю это? Главное, что клиент не хочет продавать акции, которых у него нет.

Я хочу поговорить о том, как улучшить функциональность или что делают другие, чтобы выполнить это.

4b9b3361

Ответ 1

Альтернативный подход может заключаться в том, чтобы не запасать запас при помещении его в корзину покупок. Выполняйте проверку каждый раз, когда страница перезагружается, если элемент больше не доступен, отобразите сообщение типа "Предмет, который вы хотите купить, только что был распродан, он будет доступен в ближайшее время". И вы удаляете продукт из корзины.

Теперь вам абсолютно необходимо зарезервировать содержимое корзины покупок прямо перед началом операции оплаты, либо либо удалить ее из запаса, либо удалить резервную копию в зависимости от успеха/отказа платежа. Вы делаете это лучше в одном прогоне кода, чтобы резерв длился как можно короче.

ProcessOrder ()
{
    bool reserved = ReserveShoppingCartContents ();
    if (reserved)
    {
        bool paymentStatus = ProcessPayment ();
        if (paymentStatus)
            RemoveShoppingCartContentsFromStock ();
        else
            ReleaseShoppingCartReserve ();
    }
    else
    {
        RefreshShoppingCartContents (); // Remove positions or adjust quantities
        MessageBox ("Could not reserve your shopping cart contents. Please check out your selection");
    }
}

Чем выше ваш запас, тем выше вероятность того, что ваш товар будет продан. Вы минимизируете возможность конфликта: CustomerA начинается с корзины покупок, товар становится зарезервированным, приходит Клиент, видит, что товар отсутствует на складе и уходит, CustomerA решает, что ему не нравится цена и отменяет операцию. У вас было два потенциальных клиента, но они не могли продать.

Ответ 2

Я проверяю запас на каждую перезагрузку страниц во время проверки и перенаправляет их на страницу корзины с сообщением об ошибке, если во время процесса были проданы предметы. Акция снижается только по подтвержденному заказу Также я восстанавливаю запас, если заказ отменен.