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.
91 righe
4.0 KiB
91 righe
4.0 KiB
<?php |
|
if (!empty($elabora_coda)) { |
|
if (empty(getQueueLog("0", "aggiornamentoCentriCosto"))) { |
|
alertManager::printCliInfo("Aggiornamento dei centri di costo"); |
|
|
|
$path = $config["mediaFolder"] . DIRECTORY_SEPARATOR . "centri-di-costo"; |
|
if (!is_dir($path)) { |
|
mkdir($path, 0777, true); |
|
} |
|
|
|
// File zip contenente il 'json' |
|
alertManager::printCliInfo("\tScarico lo zip..."); |
|
$data = file_get_contents("https://dati.anticorruzione.it/opendata/download/dataset/centri-di-costo/filesystem/centri-di-costo_json.zip"); |
|
|
|
if (!empty($data)) { |
|
alertManager::printCliInfo("\tEstraggo lo zip in centri-di-costo_json.json"); |
|
// Salviamo ed estraiamo lo zip |
|
file_put_contents($path . ".zip", $data); |
|
$zip = new ZipArchive; |
|
if ($zip->open($path . ".zip") === true) { |
|
$zip->extractTo($path, "centri-di-costo_json.json"); |
|
$zip->close(); |
|
} |
|
// Lo cancelliamo |
|
unlink($path . ".zip"); |
|
|
|
alertManager::printCliInfo("\tInizio a iterare i centri di costo"); |
|
// Apriamo il file con SplFileObject per non doverlo caricare tutto |
|
$pseudo_json_lines = new SplFileObject($path . DIRECTORY_SEPARATOR . "centri-di-costo_json.json"); |
|
|
|
|
|
$processed = 0; |
|
// Avviamo una transazione |
|
$pdo->beginTransaction(); |
|
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); |
|
try { |
|
|
|
$accumulated = []; |
|
$bind = []; |
|
// Per ogni linea abbiamo un json separato |
|
while (!$pseudo_json_lines->eof()) { |
|
$line = $pseudo_json_lines->current(); |
|
$centro_di_costo = json_decode($line, true); |
|
// Inseriamo nel db |
|
|
|
if(!$centro_di_costo || empty($centro_di_costo["id_centro_di_costo"])) { |
|
$pseudo_json_lines->next(); |
|
continue; |
|
} |
|
$accumulated[] = $centro_di_costo["id_centro_di_costo"]; |
|
$accumulated[] = substr($centro_di_costo["denominazione_centro_di_costo"], 0, 254); |
|
$accumulated[] = $centro_di_costo["stato"] === "ATTIVO" ? "S": "N"; |
|
$accumulated[] = $centro_di_costo["codice_ausa"]; |
|
$accumulated[] = $centro_di_costo["stazione_appaltante_codice_fiscale"]; |
|
$bind[] = "(?, ?, ?, ?, ?) "; |
|
|
|
|
|
if(count($accumulated) >= 1000) { |
|
$processed += count($bind); |
|
$bind = implode(",", $bind); |
|
$statement = $pdo->prepare("REPLACE INTO b_centri_costo (uuid, denominazione, attivo, codice_ausa, cf) VALUES $bind"); |
|
$statement->execute($accumulated); |
|
$accumulated = []; |
|
$bind = []; |
|
} |
|
$pseudo_json_lines->next(); |
|
} |
|
|
|
if(!empty($accumulated) ) { |
|
$processed += count($bind); |
|
$bind = implode(",", $bind); |
|
$statement = $pdo->prepare("REPLACE INTO b_centri_costo (uuid, denominazione, attivo, codice_ausa, cf) VALUES $bind"); |
|
$statement->execute($accumulated); |
|
$accumulated = []; |
|
$bind = []; |
|
alertManager::printCliInfo("\tProcessati {$processed} centri di costo"); |
|
} |
|
// Committiamo la transazione |
|
$pdo->commit(); |
|
} catch(\Throwable $th) { |
|
$pdo->rollback(); |
|
throw $th; |
|
} |
|
// Eliminiamo il 'json' |
|
unlink($path . DIRECTORY_SEPARATOR . "centri-di-costo_json.json"); |
|
writeQueueLog("0","aggiornamentoCentriCosto"); |
|
} |
|
} else { |
|
alertManager::printCliWarning("Già eseguito"); |
|
} |
|
}
|
|
|