电子商务实施:订单状态是什么?

4

大家好,我是你们中的一名程序员。

我正在从头开始设计和编程一个在线商店。它有一个模块来管理通过前端接收到的“订单”。

我需要一个状态来了解在某个特定时刻订单的情况,假设状态如下:

  • 待付款
  • 已确认 - 等待发货
  • 已发货
  • 已取消

我的问题很简单,但对于商店设计非常重要,就是:您会怎样存储这种状态?您会在订单表中为其创建一个列,还是仅根据每个订单是否已收到付款或已发货来“计算”每个订单的状态?(除了取消列外)

对于这种问题,最好的建模方法是什么?

附言:我甚至希望将来其他客户可以使用相同的软件来配置这些状态。

5个回答

2

订单创建状态列

这么做的原因是,如果订单可以与多个支付发票(取决于您的实现)关联,那么订单的状态并不与任何一个待处理或已完成的支付有绝对关系,因此无法直接计算

即使没有收到任何付款,也可以将订单标记为已付款已完成。订单确切代表了计划中的一次向客户的运输。它不应该代表实际收入,而后者则是您的支付表的领域

具体实现将取决于您的工作流程;我以前曾将“已完成”的订单视为支付的“替代品”,但这会变得混乱。特别是当您进行促销或想要赠送库存并且必须考虑损失的库存和未收到的收入时。 欢迎来到会计地狱。

当收到订单支付时,您的业务逻辑应该决定是否调整订单的状态。如果订单处于待处理状态并且总共收到的支付已经达到或超过订单价值,则应将订单标记为已付款,表示它已准备好发货。

总之:已完成的支付代表收入,而已完成的订单则代表运输和/或库存更改。


2

如果你可以计算,那么你应该计算。否则你会有冗余数据,并且存在不一致的风险。

这并不是说你不能为了性能或查询方便而添加状态列,但最好先不要添加,确保你的权威数据始终如一。个人而言,除非我能证明性能不够好,否则我更喜欢采用按查询计算的方法。


谢谢,这就是我考虑的冗余问题,如果我添加一个不是用于缓存的状态列。 - Guillermo

1

我会按顺序为每行存储状态。 您需要考虑如果有人订购了2件物品,然后取消其中一件。


好的观点,但不是我所需之物。我的意思是,如果我需要取消一个项目,那对我来说实际上会是一个不同的订单。 - Guillermo

0

在您的订单表中,您将拥有一个status_id列,然后是一个单独的orders_status表,其中包含id和状态描述:“待处理,挂起”等。

完成订单后,您的支付模块将把状态设置为待处理。

我倾向于有另外两个字段:-

布尔值ispaymentcompleted用于指示订单是否实际上已经在付款方面完成并准备好进行处理。如果您仅在成功付款后保存订单详细信息,则这不是问题。

然后,我会有一个isneworder布尔字段,仅仅是为了在管理系统中突出显示新订单,并快速确定需要处理的新订单。

附注:您确实需要跟踪订单状态。即时计算会导致灵活性较差。这是我遇到的所有电子商务系统的标准实现。


0

目前我能想到的有两种不同的方式:

第一种选择:

创建一个订单表并插入一列,该列根据状态数量为0、1、2或3。

在另一个表中,主键从0到3(如上所述)升序排列,下一列显示状态作为varchar或字符串,具体取决于您的SQL服务器。在那里,您可以插入像“待处理”这样的内容。

第二种选择:

您可以在每个订单中额外添加一列来存储它。对于小商店而言,这是最佳解决方案。随着订单数量的增加,这需要越来越多的时间。

第二种解决方案较慢的原因是通常选择字符串比选择整数值要慢。

问候


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接