2009-08-31 83 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在页面上的每一个重载的股票进行检查,并将它们与一个错误消息重定向到购物车页面,如果在过程中,该项目已被抢购一空。 股票仅在订单确认后减少 如果订单被取消,我还可以恢复股票。