SourceItemIndexer.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\InventoryConfigurableProductIndexer\Indexer\SourceItem;
  8. use Magento\Framework\App\ResourceConnection;
  9. use Magento\InventoryMultiDimensionalIndexerApi\Model\Alias;
  10. use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexHandlerInterface;
  11. use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexNameBuilder;
  12. use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexStructureInterface;
  13. use Magento\InventoryCatalogApi\Api\DefaultStockProviderInterface;
  14. use Magento\InventoryIndexer\Indexer\InventoryIndexer;
  15. class SourceItemIndexer
  16. {
  17. /**
  18. * @var ResourceConnection
  19. */
  20. private $resourceConnection;
  21. /**
  22. * @var IndexNameBuilder
  23. */
  24. private $indexNameBuilder;
  25. /**
  26. * @var IndexHandlerInterface
  27. */
  28. private $indexHandler;
  29. /**
  30. * @var IndexDataBySkuListProvider
  31. */
  32. private $indexDataBySkuListProvider;
  33. /**
  34. * @var IndexStructureInterface
  35. */
  36. private $indexStructure;
  37. /**
  38. * @var SiblingSkuListInStockProvider
  39. */
  40. private $siblingSkuListInStockProvider;
  41. /**
  42. * @var DefaultStockProviderInterface
  43. */
  44. private $defaultStockProvider;
  45. /**
  46. * @param ResourceConnection $resourceConnection
  47. * @param IndexNameBuilder $indexNameBuilder
  48. * @param IndexHandlerInterface $indexHandler
  49. * @param IndexStructureInterface $indexStructure
  50. * @param IndexDataBySkuListProvider $indexDataBySkuListProvider
  51. * @param SiblingSkuListInStockProvider $siblingSkuListInStockProvider
  52. * @param DefaultStockProviderInterface $defaultStockProvider
  53. */
  54. public function __construct(
  55. ResourceConnection $resourceConnection,
  56. IndexNameBuilder $indexNameBuilder,
  57. IndexHandlerInterface $indexHandler,
  58. IndexStructureInterface $indexStructure,
  59. IndexDataBySkuListProvider $indexDataBySkuListProvider,
  60. SiblingSkuListInStockProvider $siblingSkuListInStockProvider,
  61. DefaultStockProviderInterface $defaultStockProvider
  62. ) {
  63. $this->resourceConnection = $resourceConnection;
  64. $this->indexNameBuilder = $indexNameBuilder;
  65. $this->indexHandler = $indexHandler;
  66. $this->indexDataBySkuListProvider = $indexDataBySkuListProvider;
  67. $this->indexStructure = $indexStructure;
  68. $this->siblingSkuListInStockProvider = $siblingSkuListInStockProvider;
  69. $this->defaultStockProvider = $defaultStockProvider;
  70. }
  71. /**
  72. * @param array $sourceItemIds
  73. */
  74. public function executeList(array $sourceItemIds)
  75. {
  76. $skuListInStockList = $this->siblingSkuListInStockProvider->execute($sourceItemIds);
  77. foreach ($skuListInStockList as $skuListInStock) {
  78. $stockId = $skuListInStock->getStockId();
  79. if ($this->defaultStockProvider->getId() === $stockId) {
  80. continue;
  81. }
  82. $skuList = $skuListInStock->getSkuList();
  83. $mainIndexName = $this->indexNameBuilder
  84. ->setIndexId(InventoryIndexer::INDEXER_ID)
  85. ->addDimension('stock_', (string)$stockId)
  86. ->setAlias(Alias::ALIAS_MAIN)
  87. ->build();
  88. if (!$this->indexStructure->isExist($mainIndexName, ResourceConnection::DEFAULT_CONNECTION)) {
  89. $this->indexStructure->create($mainIndexName, ResourceConnection::DEFAULT_CONNECTION);
  90. }
  91. $indexData = $this->indexDataBySkuListProvider->execute($stockId, $skuList);
  92. $this->indexHandler->cleanIndex(
  93. $mainIndexName,
  94. $indexData,
  95. ResourceConnection::DEFAULT_CONNECTION
  96. );
  97. $this->indexHandler->saveIndex(
  98. $mainIndexName,
  99. $indexData,
  100. ResourceConnection::DEFAULT_CONNECTION
  101. );
  102. }
  103. }
  104. }