Magento订单号发行


9

Magento中的订单号有一个奇怪的问题。

最近,当在我的网站上下订单时100000350,订单号是,理想情况下应该是100000370我以前的订单号100000369100000367。我已经附上了下面的截图

订单号截图

此外,我已经检查了错误日志,但没有找到任何条目。我们正在使用SagePay和PayPal作为其支付网关。

有人可以指导我吗?


我可以清楚地看到,您已经安装了与订单有关的任何模块,否则会出现问题,
Keyul Shah 2014年

没有与订单相关的模块。.我们使用的唯一第三方模块是Ebizmarts_SagePay,Mass_Product_Relater,TBT_Enhancegrid和Sphinix Search
Dexter

1
没什么大不了的,拥有客户帐户的人几乎完成了要提交付款的订单,分配了销售订单号,然后在一段时间内放弃了购物车。一直发生...您得到了订单,祝贺您,完成了订单而不是放弃了。
Fiasco Labs

我想你没有得到我的问题
德克斯特

1
@huzefam-请与Magento设计团队联系,或创建自己的序列自动编号列,并在完成的Magento SO上为ERP键入此序列号。是的,我从审计的角度了解,如果缺少发票编号,则很麻烦。Magento似乎采取了并非所有订单都有效的立场,因此缺少SO号并不重要。我还了解到,某些会计系统,政府管辖区对销售订单的感觉相同,并希望具有审计跟踪,以完整的序列顺序显示无效的订单。
Fiasco Labs 2015年

Answers:


28

我第一次弄不清序列号,我们感到惊讶和沮丧,直到我弄清楚发生了什么。它与Magento如何分配销售订单编号有关。

像这样不按顺序排列,早于当前分配的编号并且使用一个月或更长时间是完全正常的。它的秘密在于,它是一个已登录的客户,在某个关键阶段之后没有完成订单,而是返回并登录并决定最终购买。

具有分配的销售订单编号的报价使用该编号作为销售订单编号。

现在进行解释。

Magento订单流程会在第一次将商品添加到购物车时创建报价。

  • 对于来宾客户,只要他们的会话尚未超时,该报价就会持续,此时会话存在于数据库中,但来宾客户无法恢复。
  • 当注册客户登录时,将为购物车报价分配其客户ID,以便只要客户不清空购物车即可使用该购物车,注册客户可通过登录其帐户来检索该购物车。

此时,报价仅是潜在的销售订单。它没有分配的号码,因为客户尚未承诺付款。

当客户单击“ 继续”按钮进行结帐时,他们将:

  • 可以在启动购物车之前登录
  • 或如果未登录,则询问他们是否要注册或以客人身份退房。

接下来的一点很重要:选择在购物车中注册的客户将被视为来宾客户,直到订单完成并进入成功页面为止,此时将创建他们的帐户并登录。如果订单未完成并显示成功页面,则仍将保留来宾客户报价以及购物车会话超时丢失。

对于信用卡订单,单击“下订单”按钮时会发生以下情况。

  • 信用卡信息,账单地址信息,购物车总额和订单信息被汇总
  • 为此报价分配了销售订单编号(sales_flat_quote列中的表格reserved_order_id
  • 数据包将提交给信用卡网关,以授权/获取用于支付订单的资金。
  • 信用卡购物车处理程序回传:
    • 无论是在资金的授权/捕获将记录相应的交易信息
    • 拒绝付款,并提供有关为何拒绝授权/捕获的适当信息。
  • 成功进行授权/捕获后,报价将转换为销售订单,如果这是购物车注册,则会创建客户帐户。

如果信用卡付款网关拒绝了任何客户的信用卡交易,并且下一位客户下达了成功的订单,则由于已为拒绝付款的销售订单分配了保留的销售订单编号,因此销售订单编号顺序将被跳过并为以下成功的销售订单分配下一个可用编号。

对于超过会话超时的来料车(来宾订单和在客户中的未成功注册),当会话期满时,此保留的销售订单号将丢失,从而在销售订单序列中留下空白

对于在单击“ 继续”按钮之前登录的客户,报价被分配了一个客户ID,因此,如果他们尝试下订单并发现订单被拒绝,他们可以返回并登录,查找购物车中仍然有内容并放置订单,有时要晚得多(迄今为止最长为四个月)。报价将使用分配的保留的销售订单号,导致销售订单管理屏幕中显示的顺序不正确的销售订单号。


出于检查目的,我假装不选择付款方式,最后关闭浏览器(在先打开站点+结帐的计算机上)而陷入结帐。并且同时完成了第二台计算机订单(应该获得下一个ID增量)。结果是它不会跳过该数字。如果它以这种方式工作,它将在订单10和订单11之间添加一个未使用的ID,但不会。根据您的信息,我已尝试验证并完全执行您所指定的操作,但未提供输出。
西瓦(Siva)'18

相反,如果客户在Payement Gateway中失败,它将显示为待处理的付款或已取消,并且如果订单在结帐的最后部分失败,则根本不会显示(仅继续输入正确的ID)序列)。所以现在,我对此感到困惑。请帮助我了解为什么订单号随机跳过。谢谢
西瓦

很好的解释。
Wolfack '19

2

我面临着同样的问题,但是只有当服务器受到巨大负载时才被击中。发生此问题的原因是,在将报价转换为顺序时,db进入了锁定状态。经过进一步检查,我发现问题在于它试图在插入sales_flat_order表之后立即在事务内写入sales_flat_order_grid表。对于并发查询,它导致锁定冲突。真正的解决方案是将sales_flat_order_grid的内容移出事务。

链接帮助我了解了问题

该补丁为我解决了该问题。

您必须从Mage_Sales_Model_Abstract中删除函数_afterSave并添加

public function afterCommitCallback(){
    if (!$this->getForceUpdateGridRecords()) {
         $this->_getResource()->updateGridRecords($this->getId());
     }
    parent::afterCommitCallback();
}

让我知道它是否可以为您解决问题。


是否有人尝试过Shaily所说的这种方法?
锡瓦

0

我不确定,但这可能会解决您的问题:

据我认为,可能是有些事情打扰了您的eav_entity_store餐桌。它包含有关下一个递增ID(即order_id)的信息。可能是您的magento系统中的某些模块或代码已更改它。

打开此表,并使用您的上一个订单ID更新crement_last_id。请注意,它包含其他发票的增量ID,例如发票,货件等。可以肯定的是,只需到eav_entity_types表中查看其 entity_type_id用途sales/order(列entity_model)。在我的magento中,它的5。所以现在转到eav_entity_store表,只需更新entity_type_id为5的行的creation_id 。您可以直接通过phpmyadmin更新它,也可以运行查询,

update eav_entity_store set increment_last_id = 'your_last_order_id' where entity_type_id = 5; 

请注意5是我的magento中的entity_type_id,用于订购

您的问题可能有很多原因,但我认为这可能会解决您的问题。


谢谢..,但已经检查了表格,并且表格具有正确的增量ID
Dexter 2014年

您在管理员销售->订单中的最大(不是最新)订单ID是多少?将该值放在我说的表格中。下一个测试订单并检查..
Pradeep
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.