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

<?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;
}
}