Loading Classes/WE/SpreadsheetImport/Command/SpreadsheetImportCommandController.php +1 −1 Original line number Original line Diff line number Diff line Loading @@ -54,7 +54,7 @@ class SpreadsheetImportCommandController extends CommandController { $this->quit(); $this->quit(); } } /** @var SpreadsheetImport $spreadsheetImport */ /** @var SpreadsheetImport $spreadsheetImport */ $spreadsheetImport = $this->spreadsheetImportRepository->findOneByImportingStatus(SpreadsheetImport::IMPORTING_STATUS_IN_QUEUE); $spreadsheetImport = $this->spreadsheetImportRepository->findPreviousOneInQueue(); if ($spreadsheetImport instanceof SpreadsheetImport) { if ($spreadsheetImport instanceof SpreadsheetImport) { // mark importing status as "Progressing" before continuing the importing // mark importing status as "Progressing" before continuing the importing $spreadsheetImport->setImportingStatus(SpreadsheetImport::IMPORTING_STATUS_IN_PROGRESS); $spreadsheetImport->setImportingStatus(SpreadsheetImport::IMPORTING_STATUS_IN_PROGRESS); Loading Classes/WE/SpreadsheetImport/Domain/Repository/SpreadsheetImportRepository.php +17 −1 Original line number Original line Diff line number Diff line Loading @@ -12,7 +12,9 @@ namespace WE\SpreadsheetImport\Domain\Repository; * */ * */ use TYPO3\Flow\Annotations as Flow; use TYPO3\Flow\Annotations as Flow; use TYPO3\Flow\Persistence\QueryInterface; use TYPO3\Flow\Persistence\Repository; use TYPO3\Flow\Persistence\Repository; use WE\SpreadsheetImport\Domain\Model\SpreadsheetImport; /** /** * @Flow\Scope("singleton") * @Flow\Scope("singleton") Loading @@ -22,7 +24,21 @@ class SpreadsheetImportRepository extends Repository { /** /** * @var array * @var array */ */ protected $defaultOrderings = array('scheduleDate' => \TYPO3\Flow\Persistence\QueryInterface::ORDER_ASCENDING); protected $defaultOrderings = array('scheduleDate' => QueryInterface::ORDER_DESCENDING); /** * @return SpreadsheetImport */ public function findPreviousOneInQueue() { $query = $this->createQuery(); $constraint = $query->logicalAnd( $query->equals('importingStatus', SpreadsheetImport::IMPORTING_STATUS_IN_QUEUE), $query->lessThanOrEqual('scheduleDate', new \DateTime()) ); return $query->matching($constraint) ->setOrderings(array('scheduleDate' => QueryInterface::ORDER_ASCENDING)) ->execute()->getFirst(); } /** /** * @param \DateTime $dateTime * @param \DateTime $dateTime Loading Classes/WE/SpreadsheetImport/SpreadsheetImportService.php +14 −0 Original line number Original line Diff line number Diff line Loading @@ -190,6 +190,8 @@ class SpreadsheetImportService { $identifierProperties = $this->getDomainMappingIdentifierProperties(); $identifierProperties = $this->getDomainMappingIdentifierProperties(); $file = $this->spreadsheetImport->getFile()->createTemporaryLocalCopy(); $file = $this->spreadsheetImport->getFile()->createTemporaryLocalCopy(); $reader = \PHPExcel_IOFactory::load($file); $reader = \PHPExcel_IOFactory::load($file); $numberOfRecordsToPersist = $this->settings['numberOfRecordsToPersist']; $i = 0; /** @var \PHPExcel_Worksheet_Row $row */ /** @var \PHPExcel_Worksheet_Row $row */ foreach ($reader->getActiveSheet()->getRowIterator(2) as $row) { foreach ($reader->getActiveSheet()->getRowIterator(2) as $row) { $object = $this->findObjectByIdentifierPropertiesPerRow($identifierProperties, $row); $object = $this->findObjectByIdentifierPropertiesPerRow($identifierProperties, $row); Loading @@ -199,6 +201,7 @@ class SpreadsheetImportService { $this->setObjectPropertiesByRow($object, $row); $this->setObjectPropertiesByRow($object, $row); $objectRepository->update($object); $objectRepository->update($object); $totalUpdated++; $totalUpdated++; $i++; } else { } else { $totalSkipped++; $totalSkipped++; } } Loading @@ -208,17 +211,28 @@ class SpreadsheetImportService { $objectRepository->add($newObject); $objectRepository->add($newObject); $objectIds[] = $this->persistenceManager->getIdentifierByObject($newObject); $objectIds[] = $this->persistenceManager->getIdentifierByObject($newObject); $totalInserted++; $totalInserted++; $i++; } else { } else { $totalSkipped++; $totalSkipped++; } } if ($i >= $numberOfRecordsToPersist) { $this->persistenceManager->persistAll(); $i = 0; } } } // remove objects which are not exist on the spreadsheet // remove objects which are not exist on the spreadsheet if ($this->spreadsheetImport->isDeleting()) { if ($this->spreadsheetImport->isDeleting()) { $notExistingObjects = $this->findObjectsByExcludedIds($objectIds); $notExistingObjects = $this->findObjectsByExcludedIds($objectIds); $i = 0; foreach ($notExistingObjects as $object) { foreach ($notExistingObjects as $object) { $objectRepository->remove($object); $objectRepository->remove($object); $totalDeleted++; $totalDeleted++; $i++; if ($i >= $numberOfRecordsToPersist) { $this->persistenceManager->persistAll(); $i = 0; } } } } } Loading Configuration/Settings.yaml +1 −0 Original line number Original line Diff line number Diff line WE: WE: SpreadsheetImport: SpreadsheetImport: cleanupImportFromPreviousDay: 5 cleanupImportFromPreviousDay: 5 numberOfRecordsToPersist: 100 swisscomGrb: swisscomGrb: domain: WE\KIME\Domain\Model\User domain: WE\KIME\Domain\Model\User Configuration: Configuration: Loading Migrations/Mysql/Version20161026173055.php +0 −2 Original line number Original line Diff line number Diff line Loading @@ -26,7 +26,6 @@ class Version20161026173055 extends AbstractMigration $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on "mysql".'); $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on "mysql".'); $this->addSql('ALTER TABLE we_spreadsheetimport_domain_model_spreadsheetimport ADD arguments LONGTEXT NOT NULL'); $this->addSql('ALTER TABLE we_spreadsheetimport_domain_model_spreadsheetimport ADD arguments LONGTEXT NOT NULL'); $this->addSql('ALTER TABLE we_spreadsheetimport_domain_model_spreadsheetimport ADD CONSTRAINT FK_19518FA38C9F3610 FOREIGN KEY (file) REFERENCES typo3_flow_resource_resource (persistence_object_identifier)'); } } /** /** Loading @@ -37,7 +36,6 @@ class Version20161026173055 extends AbstractMigration { { $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on "mysql".'); $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on "mysql".'); $this->addSql('ALTER TABLE we_spreadsheetimport_domain_model_spreadsheetimport DROP FOREIGN KEY FK_19518FA38C9F3610'); $this->addSql('ALTER TABLE we_spreadsheetimport_domain_model_spreadsheetimport DROP arguments'); $this->addSql('ALTER TABLE we_spreadsheetimport_domain_model_spreadsheetimport DROP arguments'); } } } } Loading
Classes/WE/SpreadsheetImport/Command/SpreadsheetImportCommandController.php +1 −1 Original line number Original line Diff line number Diff line Loading @@ -54,7 +54,7 @@ class SpreadsheetImportCommandController extends CommandController { $this->quit(); $this->quit(); } } /** @var SpreadsheetImport $spreadsheetImport */ /** @var SpreadsheetImport $spreadsheetImport */ $spreadsheetImport = $this->spreadsheetImportRepository->findOneByImportingStatus(SpreadsheetImport::IMPORTING_STATUS_IN_QUEUE); $spreadsheetImport = $this->spreadsheetImportRepository->findPreviousOneInQueue(); if ($spreadsheetImport instanceof SpreadsheetImport) { if ($spreadsheetImport instanceof SpreadsheetImport) { // mark importing status as "Progressing" before continuing the importing // mark importing status as "Progressing" before continuing the importing $spreadsheetImport->setImportingStatus(SpreadsheetImport::IMPORTING_STATUS_IN_PROGRESS); $spreadsheetImport->setImportingStatus(SpreadsheetImport::IMPORTING_STATUS_IN_PROGRESS); Loading
Classes/WE/SpreadsheetImport/Domain/Repository/SpreadsheetImportRepository.php +17 −1 Original line number Original line Diff line number Diff line Loading @@ -12,7 +12,9 @@ namespace WE\SpreadsheetImport\Domain\Repository; * */ * */ use TYPO3\Flow\Annotations as Flow; use TYPO3\Flow\Annotations as Flow; use TYPO3\Flow\Persistence\QueryInterface; use TYPO3\Flow\Persistence\Repository; use TYPO3\Flow\Persistence\Repository; use WE\SpreadsheetImport\Domain\Model\SpreadsheetImport; /** /** * @Flow\Scope("singleton") * @Flow\Scope("singleton") Loading @@ -22,7 +24,21 @@ class SpreadsheetImportRepository extends Repository { /** /** * @var array * @var array */ */ protected $defaultOrderings = array('scheduleDate' => \TYPO3\Flow\Persistence\QueryInterface::ORDER_ASCENDING); protected $defaultOrderings = array('scheduleDate' => QueryInterface::ORDER_DESCENDING); /** * @return SpreadsheetImport */ public function findPreviousOneInQueue() { $query = $this->createQuery(); $constraint = $query->logicalAnd( $query->equals('importingStatus', SpreadsheetImport::IMPORTING_STATUS_IN_QUEUE), $query->lessThanOrEqual('scheduleDate', new \DateTime()) ); return $query->matching($constraint) ->setOrderings(array('scheduleDate' => QueryInterface::ORDER_ASCENDING)) ->execute()->getFirst(); } /** /** * @param \DateTime $dateTime * @param \DateTime $dateTime Loading
Classes/WE/SpreadsheetImport/SpreadsheetImportService.php +14 −0 Original line number Original line Diff line number Diff line Loading @@ -190,6 +190,8 @@ class SpreadsheetImportService { $identifierProperties = $this->getDomainMappingIdentifierProperties(); $identifierProperties = $this->getDomainMappingIdentifierProperties(); $file = $this->spreadsheetImport->getFile()->createTemporaryLocalCopy(); $file = $this->spreadsheetImport->getFile()->createTemporaryLocalCopy(); $reader = \PHPExcel_IOFactory::load($file); $reader = \PHPExcel_IOFactory::load($file); $numberOfRecordsToPersist = $this->settings['numberOfRecordsToPersist']; $i = 0; /** @var \PHPExcel_Worksheet_Row $row */ /** @var \PHPExcel_Worksheet_Row $row */ foreach ($reader->getActiveSheet()->getRowIterator(2) as $row) { foreach ($reader->getActiveSheet()->getRowIterator(2) as $row) { $object = $this->findObjectByIdentifierPropertiesPerRow($identifierProperties, $row); $object = $this->findObjectByIdentifierPropertiesPerRow($identifierProperties, $row); Loading @@ -199,6 +201,7 @@ class SpreadsheetImportService { $this->setObjectPropertiesByRow($object, $row); $this->setObjectPropertiesByRow($object, $row); $objectRepository->update($object); $objectRepository->update($object); $totalUpdated++; $totalUpdated++; $i++; } else { } else { $totalSkipped++; $totalSkipped++; } } Loading @@ -208,17 +211,28 @@ class SpreadsheetImportService { $objectRepository->add($newObject); $objectRepository->add($newObject); $objectIds[] = $this->persistenceManager->getIdentifierByObject($newObject); $objectIds[] = $this->persistenceManager->getIdentifierByObject($newObject); $totalInserted++; $totalInserted++; $i++; } else { } else { $totalSkipped++; $totalSkipped++; } } if ($i >= $numberOfRecordsToPersist) { $this->persistenceManager->persistAll(); $i = 0; } } } // remove objects which are not exist on the spreadsheet // remove objects which are not exist on the spreadsheet if ($this->spreadsheetImport->isDeleting()) { if ($this->spreadsheetImport->isDeleting()) { $notExistingObjects = $this->findObjectsByExcludedIds($objectIds); $notExistingObjects = $this->findObjectsByExcludedIds($objectIds); $i = 0; foreach ($notExistingObjects as $object) { foreach ($notExistingObjects as $object) { $objectRepository->remove($object); $objectRepository->remove($object); $totalDeleted++; $totalDeleted++; $i++; if ($i >= $numberOfRecordsToPersist) { $this->persistenceManager->persistAll(); $i = 0; } } } } } Loading
Configuration/Settings.yaml +1 −0 Original line number Original line Diff line number Diff line WE: WE: SpreadsheetImport: SpreadsheetImport: cleanupImportFromPreviousDay: 5 cleanupImportFromPreviousDay: 5 numberOfRecordsToPersist: 100 swisscomGrb: swisscomGrb: domain: WE\KIME\Domain\Model\User domain: WE\KIME\Domain\Model\User Configuration: Configuration: Loading
Migrations/Mysql/Version20161026173055.php +0 −2 Original line number Original line Diff line number Diff line Loading @@ -26,7 +26,6 @@ class Version20161026173055 extends AbstractMigration $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on "mysql".'); $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on "mysql".'); $this->addSql('ALTER TABLE we_spreadsheetimport_domain_model_spreadsheetimport ADD arguments LONGTEXT NOT NULL'); $this->addSql('ALTER TABLE we_spreadsheetimport_domain_model_spreadsheetimport ADD arguments LONGTEXT NOT NULL'); $this->addSql('ALTER TABLE we_spreadsheetimport_domain_model_spreadsheetimport ADD CONSTRAINT FK_19518FA38C9F3610 FOREIGN KEY (file) REFERENCES typo3_flow_resource_resource (persistence_object_identifier)'); } } /** /** Loading @@ -37,7 +36,6 @@ class Version20161026173055 extends AbstractMigration { { $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on "mysql".'); $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on "mysql".'); $this->addSql('ALTER TABLE we_spreadsheetimport_domain_model_spreadsheetimport DROP FOREIGN KEY FK_19518FA38C9F3610'); $this->addSql('ALTER TABLE we_spreadsheetimport_domain_model_spreadsheetimport DROP arguments'); $this->addSql('ALTER TABLE we_spreadsheetimport_domain_model_spreadsheetimport DROP arguments'); } } } }