gestione gare pubbliche
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

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