getSkuListInStock = $getSkuListInStockToUpdate; $this->indexStructure = $indexStructureHandler; $this->indexHandler = $indexHandler; $this->indexDataBySkuListProvider = $indexDataBySkuListProvider; $this->indexNameBuilder = $indexNameBuilder; $this->stockIndexer = $stockIndexer; $this->defaultStockProvider = $defaultStockProvider; } /** * @return void */ public function executeFull() { $this->stockIndexer->executeFull(); } /** * @param int $sourceItemId * @return void */ public function executeRow(int $sourceItemId) { $this->executeList([$sourceItemId]); } /** * @param array $sourceItemIds * @return void */ public function executeList(array $sourceItemIds) { $skuListInStockList = $this->getSkuListInStock->execute($sourceItemIds); foreach ($skuListInStockList as $skuListInStock) { $stockId = $skuListInStock->getStockId(); if ($this->defaultStockProvider->getId() === $stockId) { continue; } $skuList = $skuListInStock->getSkuList(); $mainIndexName = $this->indexNameBuilder ->setIndexId(InventoryIndexer::INDEXER_ID) ->addDimension('stock_', (string)$stockId) ->setAlias(Alias::ALIAS_MAIN) ->build(); if (!$this->indexStructure->isExist($mainIndexName, ResourceConnection::DEFAULT_CONNECTION)) { $this->indexStructure->create($mainIndexName, ResourceConnection::DEFAULT_CONNECTION); } $this->indexHandler->cleanIndex( $mainIndexName, new \ArrayIterator($skuList), ResourceConnection::DEFAULT_CONNECTION ); $indexData = $this->indexDataBySkuListProvider->execute($stockId, $skuList); $this->indexHandler->saveIndex( $mainIndexName, $indexData, ResourceConnection::DEFAULT_CONNECTION ); } } }