Non puoi selezionare più di 25 argomenti
Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
98 righe
5.0 KiB
98 righe
5.0 KiB
<?php |
|
declare(strict_types=1); |
|
|
|
namespace App\Command; |
|
|
|
use Cake\Command\Command; |
|
use Cake\Console\Arguments; |
|
use Cake\Console\ConsoleIo; |
|
use Cake\Console\ConsoleOptionParser; |
|
use App\WGS\SnapshotsHandler\SnapshotsHandler; |
|
use Cake\Datasource\ConnectionManager; |
|
|
|
/** |
|
* UnpackWaterDrawingPaperworkSnapshots command. |
|
*/ |
|
class UnpackWaterDrawingPaperworkSnapshotsCommand extends Command |
|
{ |
|
/** |
|
* Hook method for defining this command's option parser. |
|
* |
|
* @see https://book.cakephp.org/4/en/console-commands/commands.html#defining-arguments-and-options |
|
* @param \Cake\Console\ConsoleOptionParser $parser The parser to be defined |
|
* @return \Cake\Console\ConsoleOptionParser The built parser. |
|
*/ |
|
public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionParser |
|
{ |
|
$parser = parent::buildOptionParser($parser); |
|
$parser->setDescription('Unpacks water_drawing_paperworks from Snapshots and store them to unpacked_water_drawing_paperwork_snapshots table with the last unpacking version number available'); |
|
|
|
$parser |
|
->addOptions([ |
|
'limit' => [ |
|
'short' => 'l', |
|
'help' => 'Number of rows to process', |
|
'boolean' => false, |
|
'required' => true, |
|
], |
|
]); |
|
|
|
return $parser; |
|
} |
|
|
|
/** |
|
* Implement this method with your command's logic. |
|
* |
|
* @param \Cake\Console\Arguments $args The command arguments. |
|
* @param \Cake\Console\ConsoleIo $io The console io |
|
* @return null|void|int The exit code or null for success |
|
*/ |
|
public function execute(Arguments $args, ConsoleIo $io) |
|
{ |
|
$limit = $args->getOption('limit'); |
|
if ($limit < 1) $io->abort("You must specify an Int number greater than ZERO!"); |
|
$io->info("trying processing $limit items..."); |
|
$lastWaterDrawingPaperworkUnpackingVersion = SnapshotsHandler::getLastWaterDrawingPaperworkUnpackingVersion(); |
|
$io->info("lastWaterDrawingPaperworkUnpackingVersion: $lastWaterDrawingPaperworkUnpackingVersion"); |
|
|
|
$processed = 0; |
|
$unpackable_water_drawing_paperwork_snapshots = $this->fetchTable('Snapshots')->find()->where(['Snapshots.controllable_object_type_id' => 9, 'OR' => ['Snapshots.unpacked_with_version is NULL', 'Snapshots.unpacked_with_version <>' => $lastWaterDrawingPaperworkUnpackingVersion]])->limit((int)$limit)->toArray(); |
|
|
|
$io->info("found " . count($unpackable_water_drawing_paperwork_snapshots) . " unpackable items."); |
|
|
|
if (count($unpackable_water_drawing_paperwork_snapshots) > 0) ConnectionManager::get('default')->begin(); |
|
|
|
$this->fetchTable('WaterDrawingPaperworks')->removeBehavior('Trash'); |
|
|
|
foreach ($unpackable_water_drawing_paperwork_snapshots as $unpackable_water_drawing_paperwork_snapshot) { |
|
$io->info("\nUnpackedWaterDrawingPaperworkSnapshot entity:"); |
|
$unpackedWaterDrawingPaperworkSnapshot = SnapshotsHandler::getUnpackedWaterDrawingPaperworkSnapshot($unpackable_water_drawing_paperwork_snapshot->id); |
|
if (!$unpackedWaterDrawingPaperworkSnapshot) { |
|
ConnectionManager::get('default')->rollback(); |
|
$io->abort("\nError retrieving unpackedWaterDrawingPaperworkSnapshot!"); |
|
} |
|
$io->info(json_encode($unpackedWaterDrawingPaperworkSnapshot)); |
|
$io->info("\nSaving unpacked water_drawing_paperwork snapshot to unpackedWaterDrawingPaperworkSnapshots table..."); |
|
if (!$this->fetchTable('UnpackedWaterDrawingPaperworkSnapshots')->save($unpackedWaterDrawingPaperworkSnapshot)) { |
|
ConnectionManager::get('default')->rollback(); |
|
$io->abort("\nError saving unpackedWaterDrawingPaperworkSnapshot: " . json_encode($unpackedWaterDrawingPaperworkSnapshot->getErrors())); |
|
} |
|
$io->info("\nMarking and saving snapshot with ID " . $unpackable_water_drawing_paperwork_snapshot->id . " as unpacked with version: " . $lastWaterDrawingPaperworkUnpackingVersion); |
|
$unpackable_water_drawing_paperwork_snapshot->unpacked_with_version = $lastWaterDrawingPaperworkUnpackingVersion; |
|
if (!$this->fetchTable('Snapshots')->save($unpackable_water_drawing_paperwork_snapshot)) { |
|
ConnectionManager::get('default')->rollback(); |
|
$io->abort("\nError saving snapshot: " . json_encode($unpackable_water_drawing_paperwork_snapshot->getErrors())); |
|
} |
|
$processed++; |
|
$io->success("\nSUCCESSFULLY PROCESSED: $processed !\n"); |
|
} |
|
|
|
$this->fetchTable('WaterDrawingPaperworks')->addBehavior('Muffin/Trash.Trash'); |
|
|
|
$io->success("\nJOB IS DONE. REQUESTED: $limit, UNPACKABLE: " . count($unpackable_water_drawing_paperwork_snapshots) . " SUCCESSFULLY PROCESSED: $processed"); |
|
|
|
if (count($unpackable_water_drawing_paperwork_snapshots) > 0) ConnectionManager::get('default')->commit(); |
|
|
|
return static::CODE_SUCCESS; |
|
} |
|
}
|
|
|