Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SourceItemIndexer.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
18 
25 {
29  private $getSkuListInStock;
30 
34  private $indexStructure;
35 
39  private $indexHandler;
40 
44  private $indexDataBySkuListProvider;
45 
49  private $indexNameBuilder;
50 
54  private $stockIndexer;
55 
59  private $defaultStockProvider;
60 
72  public function __construct(
73  GetSkuListInStock $getSkuListInStockToUpdate,
74  IndexStructureInterface $indexStructureHandler,
75  IndexHandlerInterface $indexHandler,
76  IndexDataBySkuListProvider $indexDataBySkuListProvider,
77  IndexNameBuilder $indexNameBuilder,
78  StockIndexer $stockIndexer,
79  DefaultStockProviderInterface $defaultStockProvider
80  ) {
81  $this->getSkuListInStock = $getSkuListInStockToUpdate;
82  $this->indexStructure = $indexStructureHandler;
83  $this->indexHandler = $indexHandler;
84  $this->indexDataBySkuListProvider = $indexDataBySkuListProvider;
85  $this->indexNameBuilder = $indexNameBuilder;
86  $this->stockIndexer = $stockIndexer;
87  $this->defaultStockProvider = $defaultStockProvider;
88  }
89 
93  public function executeFull()
94  {
95  $this->stockIndexer->executeFull();
96  }
97 
102  public function executeRow(int $sourceItemId)
103  {
104  $this->executeList([$sourceItemId]);
105  }
106 
111  public function executeList(array $sourceItemIds)
112  {
113  $skuListInStockList = $this->getSkuListInStock->execute($sourceItemIds);
114 
115  foreach ($skuListInStockList as $skuListInStock) {
116  $stockId = $skuListInStock->getStockId();
117  if ($this->defaultStockProvider->getId() === $stockId) {
118  continue;
119  }
120 
121  $skuList = $skuListInStock->getSkuList();
122 
123  $mainIndexName = $this->indexNameBuilder
124  ->setIndexId(InventoryIndexer::INDEXER_ID)
125  ->addDimension('stock_', (string)$stockId)
126  ->setAlias(Alias::ALIAS_MAIN)
127  ->build();
128 
129  if (!$this->indexStructure->isExist($mainIndexName, ResourceConnection::DEFAULT_CONNECTION)) {
130  $this->indexStructure->create($mainIndexName, ResourceConnection::DEFAULT_CONNECTION);
131  }
132 
133  $this->indexHandler->cleanIndex(
134  $mainIndexName,
135  new \ArrayIterator($skuList),
137  );
138 
139  $indexData = $this->indexDataBySkuListProvider->execute($stockId, $skuList);
140  $this->indexHandler->saveIndex(
141  $mainIndexName,
142  $indexData,
144  );
145  }
146  }
147 }
__construct(GetSkuListInStock $getSkuListInStockToUpdate, IndexStructureInterface $indexStructureHandler, IndexHandlerInterface $indexHandler, IndexDataBySkuListProvider $indexDataBySkuListProvider, IndexNameBuilder $indexNameBuilder, StockIndexer $stockIndexer, DefaultStockProviderInterface $defaultStockProvider)