increased performance of bev import script
This commit is contained in:
@@ -22,13 +22,15 @@ $folder = BASEDIR."/scripts/addressdb/import/bev";
|
||||
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
|
||||
$log = mfLoghandler::singleton();
|
||||
|
||||
$db->query("SET autocommit=0");
|
||||
|
||||
/*
|
||||
* Import Gemeinden
|
||||
*/
|
||||
|
||||
$filename = "$folder/GEMEINDE.csv";
|
||||
$input = fopen($filename, "r");
|
||||
/*
|
||||
|
||||
$i = 0;
|
||||
while($csv = fgetcsv($input, 0, ";")) {
|
||||
$i++;
|
||||
@@ -59,11 +61,11 @@ while($csv = fgetcsv($input, 0, ";")) {
|
||||
}
|
||||
|
||||
echo ($i-1)." Gemeinden importiert\n";
|
||||
*/
|
||||
|
||||
/*
|
||||
* Import Ortschaften
|
||||
*/
|
||||
/*
|
||||
|
||||
$filename = "$folder/ORTSCHAFT.csv";
|
||||
$input = fopen($filename, "r");
|
||||
|
||||
@@ -101,11 +103,11 @@ while($csv = fgetcsv($input, 0, ";")) {
|
||||
}
|
||||
|
||||
echo ($i-1)." Ortschaften importiert\n";
|
||||
*/
|
||||
|
||||
/*
|
||||
* Import Strassen
|
||||
*/
|
||||
/*
|
||||
|
||||
$filename = "$folder/STRASSE.csv";
|
||||
$input = fopen($filename, "r");
|
||||
|
||||
@@ -226,11 +228,14 @@ while($csv = fgetcsv($input, 0, ";")) {
|
||||
}
|
||||
|
||||
echo "\n".($i-1)." Straßen importiert\n";
|
||||
*/
|
||||
|
||||
|
||||
$filename = "$folder/ADRESSE.csv";
|
||||
$input = fopen($filename, "r");
|
||||
|
||||
$current_skz = false;
|
||||
$current_gkz = false;
|
||||
$sdata = [];
|
||||
$i = 0;
|
||||
while($csv = fgetcsv($input, 0, ";")) {
|
||||
$i++;
|
||||
@@ -248,6 +253,8 @@ while($csv = fgetcsv($input, 0, ";")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
|
||||
$adrcd = trim($csv[0]);
|
||||
$gkz = trim($csv[1]);
|
||||
$okz = trim($csv[2]);
|
||||
@@ -260,76 +267,167 @@ while($csv = fgetcsv($input, 0, ";")) {
|
||||
$hnz2 = trim($csv[10]);
|
||||
$hnb2 = trim($csv[11]);
|
||||
|
||||
if(!$skz) continue;
|
||||
|
||||
$gemeinde = getGemeinde($gkz);
|
||||
if(!$gemeinde) {
|
||||
die("Kann Adresse nicht importieren: Gemeinde nicht gefunden ($gkz)\n");
|
||||
}
|
||||
|
||||
$ortschaft = getOrtschaft($okz);
|
||||
if(!$ortschaft) {
|
||||
die("Kann Adresse nicht importieren: Ortschaft nicht gefunden ($okz)\n");
|
||||
}
|
||||
|
||||
$strasse = getStrasse($skz);
|
||||
if(!$strasse) {
|
||||
die("Kann Adresse nicht importieren: Strasse nicht gefunden ($okz)\n");
|
||||
}
|
||||
|
||||
|
||||
//$plz = ADBPlzModel::getFirst(['gemeinde_id' => $gemeinde->id, "plz" => $plz_string]);
|
||||
$plz = getPlz($plz_string, $gemeinde->id);
|
||||
if(!$plz) {
|
||||
$plz = ADBPlzModel::create([
|
||||
"gemeinde_id" => $gemeinde->id,
|
||||
"plz" => $plz_string,
|
||||
"plzstring" => $plz_string
|
||||
]);
|
||||
if(!$plz->save()) {
|
||||
die("Cannot create PLZ $plz_string (gemeinde ".$gemeinde->id.")\n");
|
||||
}
|
||||
}
|
||||
|
||||
$hausnummer_string = makeHausnummer($hnz1, $hnz2, $hnv, $hnb1, $hnb2);
|
||||
if(!$hausnummer_string) {
|
||||
continue;
|
||||
//die("Keine Hausnummer: adrcd $adrcd, gkz $gkz, okz $okz, skz $skz, $hnz1, $hnb1, $hnv, $hnz2, $hnb2\n");
|
||||
}
|
||||
|
||||
$hausnummer = ADBHausnummerModel::getFirst([
|
||||
'ortschaft_id' => $ortschaft->id,
|
||||
//'plz_id' => $plz->id,
|
||||
'strasse_id' => $strasse->id,
|
||||
'hausnummer' => $hausnummer_string
|
||||
]);
|
||||
|
||||
if($hausnummer) {
|
||||
// update plz if necessary
|
||||
//var_dump($hausnummer->plz);exit;
|
||||
if($hausnummer->plz->plz != $plz->plz ) {
|
||||
echo "Updating PLZ from ".$hausnummer->plz->plz." to ".$plz->plz."\n";
|
||||
$hausnummer->plz_id = $plz->id;
|
||||
$hausnummer->save();
|
||||
}
|
||||
|
||||
} else {
|
||||
// create new Hausnummer
|
||||
$hausnummer = ADBHausnummerModel::create([
|
||||
"netzgebiet_id" => 0,
|
||||
"ortschaft_id" => $ortschaft->id,
|
||||
"plz_id" => $plz->id,
|
||||
"strasse_id" => $strasse->id,
|
||||
if($skz == $current_skz) {
|
||||
$sdata[(string)$hausnummer_string] = [
|
||||
"adrcd" => $adrcd,
|
||||
"gkz" => $gkz,
|
||||
"okz" => $okz,
|
||||
"plz" => $plz_string,
|
||||
"skz" => $skz,
|
||||
"hausnummer" => $hausnummer_string
|
||||
]);
|
||||
if(!$hausnummer->save()) {
|
||||
die("Error creating Hausnummer: ".print_r($hausnummer, true));
|
||||
}
|
||||
];
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if($current_skz) {
|
||||
//var_dump($sdata);exit;
|
||||
$gemeinde = getGemeinde($current_gkz);
|
||||
if(!$gemeinde) {
|
||||
die("Kann Adresse nicht importieren: Gemeinde nicht gefunden ($gkz)\n");
|
||||
}
|
||||
|
||||
$strasse = getStrasse($current_skz);
|
||||
if(!$strasse) {
|
||||
die("Kann Adresse nicht importieren: Strasse nicht gefunden ($okz)\n");
|
||||
}
|
||||
|
||||
// do database work for all sdata
|
||||
$hausnummern_filter = [];
|
||||
|
||||
foreach($sdata as $s) {
|
||||
$plz = getPlz($s["plz"], $gemeinde->id);
|
||||
if(!$plz) {
|
||||
//echo "Creating PLZ ".$s["plz"]."\n";
|
||||
$plz = ADBPlzModel::create([
|
||||
"gemeinde_id" => $gemeinde->id,
|
||||
"plz" => $s["plz"],
|
||||
"plzstring" => $s["plz"]
|
||||
]);
|
||||
if(!$plz->save()) {
|
||||
die("Cannot create PLZ $plz_string (gemeinde ".$gemeinde->id.")\n");
|
||||
}
|
||||
}
|
||||
|
||||
$hausnummern_filter[] = $s['hausnummer'];
|
||||
}
|
||||
|
||||
|
||||
$hausnummern = ADBHausnummerModel::search(["strasse_id" => $strasse->id, "hausnummer" => $hausnummern_filter]);
|
||||
$new_hausnummern = [];
|
||||
|
||||
foreach($sdata as $shausnummer => $s) {
|
||||
$found = false;
|
||||
foreach($hausnummern as $h) {
|
||||
if($h->hausnummer == $shausnummer) {
|
||||
//exists already
|
||||
$found = true;
|
||||
|
||||
// check to update plz
|
||||
if($h->plz->plz != $s['plz'] ) {
|
||||
echo "Updating PLZ for Hausnummer ".$h->id." from ".$h->plz->plz." to ".$s["plz"]."\n";
|
||||
$plz = getPlz($s['plz'], $gemeinde->id);
|
||||
$h->plz_id = $plz->id;
|
||||
$h->save();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if(!$found) {
|
||||
$new_hausnummern[$shausnummer] = $s;
|
||||
}
|
||||
}
|
||||
|
||||
if(count($new_hausnummern)) {
|
||||
$insert = "INSERT INTO `Hausnummer` (`netzgebiet_id`, `adrcd`, `ortschaft_id`, `plz_id`, `strasse_id`, `hausnummer`, `create`, `edit`) VALUES ";
|
||||
foreach($new_hausnummern as $h_string => $s) {
|
||||
//var_dump($h_string, $s);exit;
|
||||
//$h_string = $h->hausnummer;
|
||||
//$s = $sdata[$h_string];
|
||||
$adrcd = $s["adrcd"];
|
||||
$strasse_id = $strasse->id;
|
||||
$plz = getPlz($s['plz'],$gemeinde->id);
|
||||
if(!$plz) {
|
||||
var_dump($s);exit;
|
||||
}
|
||||
$plz_id = $plz->id;
|
||||
$ortschaft = getOrtschaft($s["okz"]);
|
||||
if(!$ortschaft) {
|
||||
die("Kann Adresse nicht importieren: Ortschaft nicht gefunden (strasse: hausnummer: $h_string, okz: ".$sdata[$h_string]["okz"].")\n");
|
||||
}
|
||||
$ortschaft_id = $ortschaft->id;
|
||||
// add to INSERT statement
|
||||
$insert .= "(0, '$adrcd', $ortschaft_id, $plz_id, $strasse_id,'$h_string', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),";
|
||||
|
||||
}
|
||||
$insert = preg_replace('/,$/', "", $insert);
|
||||
//echo "$insert\n";
|
||||
$db->query($insert);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
$hausnummer = ADBHausnummerModel::getFirst([
|
||||
'ortschaft_id' => $ortschaft->id,
|
||||
//'plz_id' => $plz->id,
|
||||
'strasse_id' => $strasse->id,
|
||||
'hausnummer' => $hausnummer_string
|
||||
]);
|
||||
|
||||
if($hausnummer) {
|
||||
// update plz if necessary
|
||||
//var_dump($hausnummer->plz);exit;
|
||||
if($hausnummer->plz->plz != $plz->plz ) {
|
||||
echo "Updating PLZ from ".$hausnummer->plz->plz." to ".$plz->plz."\n";
|
||||
$hausnummer->plz_id = $plz->id;
|
||||
$hausnummer->save();
|
||||
}
|
||||
|
||||
} else {
|
||||
// create new Hausnummer
|
||||
$hausnummer = ADBHausnummerModel::create([
|
||||
"netzgebiet_id" => 0,
|
||||
"ortschaft_id" => $ortschaft->id,
|
||||
"plz_id" => $plz->id,
|
||||
"strasse_id" => $strasse->id,
|
||||
"hausnummer" => $hausnummer_string
|
||||
]);
|
||||
if(!$hausnummer->save()) {
|
||||
die("Error creating Hausnummer: ".print_r($hausnummer, true));
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
$current_skz = $skz;
|
||||
$current_gkz = $gkz;
|
||||
$sdata = [];
|
||||
$sdata[(string)$hausnummer_string] = [
|
||||
"adrcd" => $adrcd,
|
||||
"gkz" => $gkz,
|
||||
"okz" => $okz,
|
||||
"plz" => $plz_string,
|
||||
"skz" => $skz,
|
||||
"hausnummer" => $hausnummer_string
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
$db->query("COMMIT");
|
||||
|
||||
function makeHausnummer($z1 = false, $z2 = false, $v = false, $b1 = false, $b2 = false) {
|
||||
$h = "";
|
||||
@@ -368,6 +466,7 @@ function getGemeinde($kz) {
|
||||
return $gemeinde;
|
||||
}
|
||||
|
||||
|
||||
function getOrtschaft($kz) {
|
||||
global $ortschaft_cache;
|
||||
|
||||
@@ -383,6 +482,7 @@ function getOrtschaft($kz) {
|
||||
return $ortschaft;
|
||||
}
|
||||
|
||||
|
||||
function getStrasse($kz) {
|
||||
global $strasse_cache;
|
||||
|
||||
@@ -398,6 +498,7 @@ function getStrasse($kz) {
|
||||
return $strasse;
|
||||
}
|
||||
|
||||
|
||||
function getPlz($plz_search, $gemeinde_id) {
|
||||
global $plz_cache;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user