2009-08-31 58 views
10

我目前正在用PHP/MySQL構建一個電子商務網站。最近,我一直致力於購物車的整合。客戶希望確保潛在的買家可以獲得庫存,所以我創建了一個庫存管理系統。購物車的工作原理如下:購物車和庫存管理

  • 客戶將一定量的物品添加到 他的購物車。
  • 項目數量從 可用庫存數據庫中保留。
  • 沒有人可以購買保留 股票。其中,股票則 從數據庫中刪除 - 直到客戶 處理順序
  • 股票仍然保留。
  • 如果客戶放棄購物車,庫存保留。
  • 如果另一個客戶希望購買某件物品,但只可用庫存被其他客戶保留,客戶端可以竊取保留的股票,如果它已經閒置20分鐘。

我的問題是,什麼是爲這種情況的最佳做法?我是否正確地做這件事?最主要的是客戶不想賣出他沒有的股票。

我期待就如何改善功能,或別人在做什麼做到這一點的討論。

回答

14

另一種方法可能不是在把它放進購物車預留股票。每次頁面重新加載時執行一次檢查,如果該項目不再可用,則顯示一條消息,如「您希望購買的物品剛剛售罄,它很快就會提供」。然後從購物車中移除產品。

現在,你絕對有你開始支付經營權之前保留購物車的內容,然後將其從庫存中取出或刪除取決於支付的成功/失敗的儲備。你在一次代碼運行中做得更好,這樣保留時間會盡可能短。

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開始的購物車,該項目被保留,CustomerB來臨的時候,看到的項目不上股票和消失,CustomerA決定他不喜歡的價格和取消操作。你有兩個潛在客戶,但不能賣給任何一個。

+0

感謝您的意見。我將重新修改功能。我知道這不是做這件事的最好方法。凍結股票可能不是一個好主意,除非您銷售獨特的產品,例如演唱會門票。 – jgallant 2009-08-31 18:40:41

+0

是的,與源代碼管理和數據庫事務一樣,默認爲樂觀鎖定,除非您有充分的理由不這樣做。 – Jerph 2009-10-26 17:51:20

3

我做的結賬proccess在頁面上的每一個重載的股票進行檢查,並將它們與一個錯誤消息重定向到購物車頁面,如果在過程中,該項目已被搶購一空。 股票僅在訂單確認後減少 如果訂單被取消,我還可以恢復股票。