2012-06-07 66 views
4

由于某些原因,订单ID(sales_flat_order表中的increment_id)不会随后在我的Magento 1.6.1上递增。这是它的外观后放置了一些实际的订单:magento订单ID增量跳转

increment_id created_at   updated_at 
100000001  2011-12-14 12:35:24 2011-12-14 12:35:25 
100000002  2011-12-14 13:02:39 2011-12-14 13:02:39 
100000003  2011-12-14 13:04:18 2011-12-14 13:04:18 
100000004  2012-02-01 16:54:58 2012-02-01 16:54:58 
100000005  2012-03-14 12:22:35 2012-03-14 12:22:35 
100000006  2012-03-20 13:10:48 2012-03-20 13:10:48 
100000011  2012-03-29 20:58:48 2012-03-29 20:58:48 
100000012  2012-03-29 21:06:43 2012-03-29 21:06:43 
100000013  2012-03-30 10:48:20 2012-03-30 10:48:21 
100000014  2012-03-30 13:05:40 2012-03-30 13:05:41 
100000015  2012-04-03 15:51:01 2012-04-03 15:51:02 
100000016  2012-04-19 15:00:49 2012-04-19 15:00:50 
100000017  2012-05-09 12:09:21 2012-05-09 12:09:22 
100000019  2012-05-24 05:35:35 2012-05-24 05:35:36 
100000020  2012-05-24 05:41:11 2012-05-24 05:41:12 
100000008  2012-05-24 05:48:52 2012-05-24 05:48:53 

我的问题是,为什么是Magento的跳跃增量有时?更糟糕的是,在我的示例中,增量100000008的顺序是100000020.有人知道为什么会发生这种情况,并且是否有办法解决它?

+0

他们可以取消订单吗?订单是在购物车中,但从来没有成果?像那样的东西? –

+0

你是从数据库直接拉这些数字,看看sales_flat_order我猜他们都在那里。 –

回答

19

这是正常的,尽管可以理解地令人不安。

当Magento进入结帐过程时,它'保留'一个increment_id并将其放在报价(购物车)对象上。你可以看到,在获得增量ID代码:

Mage_Eav_Model_Entity_Type::fetchNewIncrementId() 

上次使用的ID为每家商店被保存在eav_entity_store。如果客户在完成结帐过程之前放弃购物车(即报价对象),则保留的increment_id将永远不会显示在订单上。当他们进入繁忙的商店时,您可以在订单号码中看到这种效果 - 偶尔会有一个非常旧的订单ID在来自正在检查旧购物车的客户的当天订单中出现。

此行为的存在允许Magento在订单完成前允许网关将订单ID与订单关联起来,从而向付款网关发送最终订单ID(increment_id)。如果客户放弃了网关中的付款流程,那么订单ID已经失效(或者更准确地说仍然附加在报价单上)。

你可以看到贝宝表达模块中发生这种情况:

Mage_Paypal_Model_Express_Checkout::start() 

如果你想找到调用

Mage_Sales_Model_Quote::reserveOrderId() 

你的“失踪” increment_ids,采取下在sales_flat_quote看看字段reserved_order_id。你应该看到它们附加到未转换的引用对象(购物车)。

此行为可能导致某些付款网关出现问题; Moneris想到了。当您向Moneris的托管支付页面发送两次相同的订单ID时,它会扼杀并为客户创建一个模糊的错误状态。当客户访问托管的付费页面,退出并重新访问该页面时,就会出现这种情况。因此,在某些情况下,需要以编程方式重新生成与报价对象关联的订单ID。

+0

如果你想找到'缺少'项目(可能如果你需要恢复一个拙劣的销售),搜索sales_flat_quote_items根据Roscius的说明,位于sales_flat_quote表中的entity_id表。 – CarComp

1

我面临同样的问题,但只有当服务器被大量的负载击中时。出现此问题是因为数据库在将报价按顺序转换时进入锁定状态。在进一步的检查中,我发现问题在于,在插入sales_flat_order表后,它试图在事务权限内写入sales_flat_order_grid表中。使用并发查询会导致锁定冲突。真正的解决方案是将sales_flat_order_grid的东西移出交易。

The link helped me understand the issue

这个补丁解决了这个问题对我来说。

你必须从Mage_Sales_Model_Abstract删除功能_afterSave并添加

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

让我知道这是否解决了问题你。