同时处理来自2个系统的相同订单会导致多个装运问题Magento

时间:2015-07-28 05:25:27

标签: mysql magento zend-framework commit mass-assignment

我发现了一个奇怪的问题。

  

我已经创建了一个新的群发行动,可以创建订单发货。

     

问题是当此动作同时触发时   相同的订单会为某些订单创建多个货件。

以下是我的代码

public function batchshipAction() {
        $orderIds = $this->getRequest()->getParam('order_ids'); // to get selected order ids
        $success  = 0;
        if (count($orderIds) > 200) { // to restrict maximum orders selected to 200
            Mage::getSingleton('core/session')->addError($this->__('Only 200 records can be processed at a time. Please select again.'));
            $this->_redirectReferer(); // to redirect to sales order page after performing batchinvoice action
            session_write_close(); // to close messages session
        } else {
            try {

                foreach ($orderIds as $orderIdss) {
                    $order             = Mage::getModel('sales/order')->load($orderIdss); // to load order details
                    $order_status_code = $order->getStatus(); // to get status code of order
                    if ($order_status_code == 'order_processing') { // to cpmapare current order status code  with  "order_processing"

                        if ($order->canShip()) { // to check if the order can be ship or not
                            //create shipment
                            $itemQty       = $order->getItemsCollection()->count();
                            $shipment      = Mage::getModel('sales/service_order', $order)->prepareShipment($itemQty);
                            $shipment      = new Mage_Sales_Model_Order_Shipment_Api();
                            $shipmentId    = $shipment->create($order->getIncrementId(), array(), 'Shipment created through ShipMailInvoice', true, true);
                            $success_ids[] = $order->getIncrementId();
                            $success++;
                        }
                    } else {
                        $error_id[] = $order->getIncrementId();
                    }

                }
            }
            catch (Mage_Core_Exception $e) {
                $error_id[] = $order->getIncrementId();
            }

你能否建议我如何避免这种情况。感谢

1 个答案:

答案 0 :(得分:0)

在加载订单后将inprocess设置为true。

$order  = Mage::getModel('sales/order')->load($orderIdss);
$order->setIsInProcess(true);