0

我从 CSV 文件中获取数据并根据 SKU 文件加载产品。

我们从 CSV 文件中获取 30 种产品,并在 Magento 中更新这些产品数据。

我们每 5 分钟设置一次 cron,5 分钟后它将获取接下来的 30 个产品并进行更新。

启动过程脚本工作正常。但有时脚本会变慢,更新产品需要时间。

因此,下一个 cron 运行的同时,服务器上正在运行大量脚本,服务器负载会增加。

在服务器网站上承受如此多的负载后会变慢。

您能否让我知道如何使产品更新过程保持一致并且时间不会有太大差异。

公共函数执行(){

        $data = array of csv file data;
        $sql = "Select value FROM " . $tableName . " where path='catalog/product/update_cron' and scope_id=0";
        $result = $connection->fetchAll($sql);
        $update_cron = $result[0]['value'];
        $total_products = count($data);
        if ($total_products == $update_cron) {

            $this->configWriter->save('catalog/product/update_cron_status', '1', 'default', '0'); // inject Magento\Store\Model\ScopeInterface;
            exit;
        }
        
        if ($update_cron != '' && $update_cron != 0) {
            $data = array_slice($data, (int)$update_cron, 30);
        } else {
            $update_cron = 0;
            $data = array_slice($data, 0, 30);
        }
        $current_date = date("m/d/Y");

        $i = 0;

        foreach ($data as $key => $value) {
            
            /*********************************************Update Product Price********************************************************/

            if ($value['Artikel'] != '') {

                $product = $objectManager->create('Magento\Catalog\Model\Product');
                $product_id = $product->getIdBySku($value['Artikel']);
                if (!empty($product_id)) {
                    
                    /************************Update Product Price for all Stores**************************************/

                    $price_b2b = str_replace(',', '.', (string) $value['Verkoopprijs']);
                    $price_b2c = str_replace(',', '.', (string) $value['Numeriek1']);
                    $price_club = str_replace(',', '.', (string) $value['Numeriek2']);
                    //$special_price_b2b = str_replace(',', '.', (string) $value['Numeriek3']);
                    
                    $productActionObject = $objectManager->create('Magento\Catalog\Model\Product\Action');
                    $productActionObject->updateAttributes(array($product_id), 
                        array(
                            'name' => $value['Artikel'],
                            'ean_code'=>$value['Barcode'],
                            'price'=>$price_b2c,
                            'price_wholesale'=>$price_b2b,
                            'price_clubs'=>$price_club,
                            'description'=>$value['Omschrijving Engels'],
                        ),0
                    );
                    
                    /* if ($value['Boolean1'] == 'True') {

                        $objectManager->create('Magento\Catalog\Model\Product\Action')->updateAttributes(array($product_id), array('price' => $price_b2b, 'special_price' => $special_price_b2b, 'special_from_date' => $current_date), 4);

                    } else { */

                        $objectManager->create('Magento\Catalog\Model\Product\Action')->updateAttributes(array($product_id), array('price' => $price_b2b, 'special_price' => '', 'special_from_date' => ''), 4);
                    //}
                    
                    $objectManager->create('Magento\Catalog\Model\Product\Action')->updateAttributes(array($product_id), array('price' => $price_club), 7);

                    /*********************************************Inventory Update********************************************************/
                    $stockRegistry = $objectManager->create('Magento\CatalogInventory\Api\StockRegistryInterface');
                    $sku = $value['Artikel'];
                    
                    
                    if($sku != '')
                    {
                        $qty = round(str_replace(',', '', (string) $value['Stock']));
                        $stockItem = $stockRegistry->getStockItemBySku($sku);
                        $stockItem->setQty($value['Stock']);
                        $stockItem->setIsInStock((int) ($qty > 0)); // this line
                        $stockRegistry->updateStockItemBySku($sku, $stockItem);
                    }

                    /*****************************************************************************************************/
                }
                
                $i++;

                $update_val = $update_cron + $i;
                
                $this->configWriter->save('catalog/product/update_cron', $update_val, 'default', 0);
            }
            else {

                $i++;

                $update_val = $update_cron + $i;

                $this->configWriter->save('catalog/product/update_cron', $update_val, 'default', 0);
            }
        }
        die('records completed');
    }
    }
    die('stop');
}

提前致谢

4

0 回答 0