128 lines
3.0 KiB
PHP
Executable File
128 lines
3.0 KiB
PHP
Executable File
<?php
|
|
|
|
namespace JR\NetSuite\Queue;
|
|
|
|
use JR\NetSuite\Lib\NetSuiteAPI;
|
|
use Magento\Framework\Serialize\SerializerInterface;
|
|
|
|
use \JR\NetSuite\Model\ResourceModel\CustomerQueue\CollectionFactory as CustomerQueueCollectionFactory;
|
|
use \JR\NetSuite\Service\CustomersSyncService;
|
|
use \JR\NetSuite\Mapper\CustomerMapper;
|
|
|
|
class CustomerQueueManager extends AbstractQueueManager
|
|
{
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $name = 'Customer';
|
|
|
|
/**
|
|
* @var int
|
|
*/
|
|
protected $pageSize = 200;
|
|
|
|
/**
|
|
* @var CustomerQueueCollectionFactory
|
|
*/
|
|
protected $customerQueueCollectionFactory;
|
|
|
|
/**
|
|
* @var CustomersSyncService
|
|
*/
|
|
protected $customerSync;
|
|
|
|
/**
|
|
* @var CustomerMapper
|
|
*/
|
|
protected $customerMapper;
|
|
|
|
/**
|
|
* CustomerQueueManager constructor.
|
|
*
|
|
* @param \JR\NetSuite\Helper\Data $helper
|
|
* @param \JR\NetSuite\Logger\Logger $logger
|
|
* @param SerializerInterface $serializer
|
|
* @param NetSuiteAPI $netSuiteAPI
|
|
* @param CustomerQueueCollectionFactory $customerQueueCollectionFactory
|
|
* @param CustomersSyncService $customerSync
|
|
* @param CustomerMapper $customerMapper
|
|
* @return void
|
|
*/
|
|
public function __construct(
|
|
\JR\NetSuite\Helper\Data $helper,
|
|
\JR\NetSuite\Logger\Logger $logger,
|
|
SerializerInterface $serializer,
|
|
NetSuiteAPI $netSuiteAPI,
|
|
CustomerQueueCollectionFactory $customerQueueCollectionFactory,
|
|
CustomersSyncService $customerSync,
|
|
CustomerMapper $customerMapper
|
|
) {
|
|
parent::__construct($helper, $logger, $serializer, $netSuiteAPI);
|
|
$this->customerQueueCollectionFactory = $customerQueueCollectionFactory;
|
|
$this->customerSync = $customerSync;
|
|
$this->customerMapper = $customerMapper;
|
|
}
|
|
|
|
/**
|
|
* Fetch data from NetSuite
|
|
*
|
|
* @param int $pageSize
|
|
* @param int $page
|
|
* @return array
|
|
*/
|
|
public function fetch($pageSize = 50, $page = 1, $additionalParams = []){
|
|
return $this->netSuiteAPI->fetchCustomers($pageSize, $page, $additionalParams);
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function getPageSize() {
|
|
return $this->pageSize;
|
|
}
|
|
|
|
/**
|
|
* Convert NetSuite data to Magento format
|
|
*
|
|
* @param array $data
|
|
* @return array
|
|
*/
|
|
public function convertToMagentoFormat($data){
|
|
return $this->customerMapper->convertToMagentoFormat($data);
|
|
}
|
|
|
|
/**
|
|
* adds data to the queue.
|
|
*
|
|
* @param array $data
|
|
* @return void
|
|
*/
|
|
public function enqueue($data){
|
|
$queue = $this->customerQueueCollectionFactory->create();
|
|
foreach ($data as $item) {
|
|
$queue->insertOrUpdate($item);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get next queue items to process
|
|
*
|
|
* @param int $batchSize
|
|
* @return array
|
|
*/
|
|
public function dequeue($batchSize = 50){
|
|
return $this->customerQueueCollectionFactory->create()->getNext($batchSize);
|
|
}
|
|
|
|
/**
|
|
* Process queue item
|
|
*
|
|
* @param $queueItem
|
|
* @return array
|
|
*/
|
|
public function processQueueItem($queueItem){
|
|
$data = $this->serializer->unserialize($queueItem->getData('data'));
|
|
return $this->customerSync->createOrSkip($data);
|
|
}
|
|
} |