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

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

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

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

Я ищу, чтобы обсудить, как улучшить функциональность, или что другие делают для достижения этого.

Solutions Collecting From Web of "Управление магазином и складом"

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

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

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 решает, что ему не нравится цена и отменяет операцию. У вас было два потенциальных клиента, но они не могли продать.

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