2010-08-02 406 views
4

我的客戶有一個電子商務網站,銷售電子產品,並且一直存在,其中一個產品售出更多的時間比他們在自己的庫存情況。這是因爲,如果兩個用戶同時購買一個產品,而只剩下一個產品,則一個會話在另一個會話開始之前沒有完成註冊產品的售罄(所以它會像往常一樣繼續,認爲有一個左),即使在流程開始時有一個檢查。這顯然會花費金錢(退單費用,退款等),給消費者帶來不便。避免競爭狀態

所以我想知道是否有解決這個問題?我想在這個過程的開始階段創建一個「標記」,即它會檢查庫存,如果售罄,它會標記產品,從而阻止其他會話購買它。但是這也帶來了更多的問題:如果客戶方面發生了某些事情會導致他們取消中間流程(電力不足等),那麼即使該產品被標記爲已售出,但自結帳以來並未實際銷售過程沒有完成。如果這種情況持續發生,將會出現產品積壓。其次,會話還可以檢查庫存,而另一個會話將其標記爲已售出,因此即使第二個會話已經購買了第一個會話,第一個會話也會繼續。這導致我們回到原來的問題。

我期待在數據庫端表lockings,但我不知道如果多數民衆贊成最好的主意。任何建議將不勝感激!

感謝, dyip

+2

簡單的解決方案,當他們支付,看看該項目是否有貨時,做一個檢查。 eBay在即時支付時會這樣做,現在購買它,它說:「直到您付款之前,股票不會得到保證」,我說採用相同的解決方案。 – 2010-08-02 15:13:54

+0

在大多數消費者的心目中,當他們在結賬時點擊提交按鈕時,他們「付費」。我們實際上並沒有收到貨物發貨前的費用,但我們希望在沒有庫存的情況下阻止他們購買物品。 「 – Dyip302 2010-08-02 15:25:47

+0

」...在流程開始時檢查。「在我看來,當他們在結帳時點擊提交按鈕時,您需要進行額外的檢查。「 - 或者你已經這樣做了? – MrWhite 2010-08-02 18:28:41

回答

1

你可以有一個故障保險,這樣當用戶簽出訂單時,但是用戶的信用卡沒有實際收取,直到他們的訂單的船舶。然後,對於庫存已用完的情況,您可以通過電子郵件向這些客戶發送電子郵件,並告訴他們「對不起,我們已經賣完了X,不會收費等。」

你可以給他們一些樣的折扣他們的下一個順序作爲補償,但這一過程將避免任何退款手續費,退票等,因爲他們從來沒有真正收取,這是沒有現貨的順序。

當然,這聽起來像這會改變訂單如何通過網站來處理,這將需要找人將信息輸入到系統已經準備好每個訂單後。此外,在下訂單之前,您需要驗證一下該卡是否有效,以防止欺詐行爲 - 儘管據推測該網站已經這樣做了?

+0

是的,在結帳時有信用卡驗證,並且只有在物品已經發貨之後才收取該卡,這將避免退單費用,但是在發貨方總會有人爲錯誤的機會...另外,我們希望避免如果我們能夠阻止他們購買缺貨產品,我們將不得不向客戶發送電子郵件通知他們該產品缺貨。 – Dyip302 2010-08-02 15:22:25

0

我建議你做到以下幾點:

  1. 不要遞減的庫存當它添加到購物車的產品;你不想錯過任何可能的未來銷售;
  2. 當用戶決定將它們添加到一個單獨的數據庫表來啓動結帳過程然後在後端你可以標記在購物車中的所有產品如保留
  3. 如果用戶B一段時間後,開始結帳過程,那麼你可以檢查每一個產品的可用性在車一次,像這樣:

    productAvailability - quantityReservedForThisProduct >= quantityRequested 
    

    如果上述條件是假的,它意味着其他人已經表達了購買意願。所以你可以讓你的用戶瞭解當前的情況。

    在一個概括地說,如果別人已經開始結賬過程中,他將自動保留這些產品。

  4. 然後,當第一個用戶的支付成功後,我們都更新與保留的產品表和存儲產品的實際即遞減的庫存的一個。

  5. 另外,我們不希望在用戶預留了產品的情況(即開始結帳過程),但從來沒有購買它們。因此,您可以引入一個TTL機制。因此,在固定的時間間隔內,您可以刪除超過固定時間的結帳流程。

    例如,如果用戶開始結帳過程,但之後,說爲10分鐘還沒有完成它,然後從數據庫中刪除,並釋放了保留的產品。

在我腦海裏,我還沒有測試過這種方法;