increased performance of bev import script
This commit is contained in:
@@ -158,9 +158,14 @@ class ADBHausnummerModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(array_key_exists("hausnummer", $filter)) {
|
if(array_key_exists("hausnummer", $filter)) {
|
||||||
$hausnummer = FronkDB::singleton()->escape($filter['hausnummer']);
|
if(is_array($filter['hausnummer'])) {
|
||||||
if($hausnummer) {
|
$hausnummer = $filter['hausnummer'];
|
||||||
$where .= " AND Hausnummer.`hausnummer` = '$hausnummer'";
|
$where .= " AND Hausnummer.`hausnummer` IN ('".implode("','", $hausnummer)."')";
|
||||||
|
} else {
|
||||||
|
$hausnummer = FronkDB::singleton()->escape($filter['hausnummer']);
|
||||||
|
if($hausnummer) {
|
||||||
|
$where .= " AND Hausnummer.`hausnummer` = '$hausnummer'";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,13 +22,15 @@ $folder = BASEDIR."/scripts/addressdb/import/bev";
|
|||||||
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
|
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
|
||||||
$log = mfLoghandler::singleton();
|
$log = mfLoghandler::singleton();
|
||||||
|
|
||||||
|
$db->query("SET autocommit=0");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Import Gemeinden
|
* Import Gemeinden
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$filename = "$folder/GEMEINDE.csv";
|
$filename = "$folder/GEMEINDE.csv";
|
||||||
$input = fopen($filename, "r");
|
$input = fopen($filename, "r");
|
||||||
/*
|
|
||||||
$i = 0;
|
$i = 0;
|
||||||
while($csv = fgetcsv($input, 0, ";")) {
|
while($csv = fgetcsv($input, 0, ";")) {
|
||||||
$i++;
|
$i++;
|
||||||
@@ -59,11 +61,11 @@ while($csv = fgetcsv($input, 0, ";")) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
echo ($i-1)." Gemeinden importiert\n";
|
echo ($i-1)." Gemeinden importiert\n";
|
||||||
*/
|
|
||||||
/*
|
/*
|
||||||
* Import Ortschaften
|
* Import Ortschaften
|
||||||
*/
|
*/
|
||||||
/*
|
|
||||||
$filename = "$folder/ORTSCHAFT.csv";
|
$filename = "$folder/ORTSCHAFT.csv";
|
||||||
$input = fopen($filename, "r");
|
$input = fopen($filename, "r");
|
||||||
|
|
||||||
@@ -101,11 +103,11 @@ while($csv = fgetcsv($input, 0, ";")) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
echo ($i-1)." Ortschaften importiert\n";
|
echo ($i-1)." Ortschaften importiert\n";
|
||||||
*/
|
|
||||||
/*
|
/*
|
||||||
* Import Strassen
|
* Import Strassen
|
||||||
*/
|
*/
|
||||||
/*
|
|
||||||
$filename = "$folder/STRASSE.csv";
|
$filename = "$folder/STRASSE.csv";
|
||||||
$input = fopen($filename, "r");
|
$input = fopen($filename, "r");
|
||||||
|
|
||||||
@@ -226,11 +228,14 @@ while($csv = fgetcsv($input, 0, ";")) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
echo "\n".($i-1)." Straßen importiert\n";
|
echo "\n".($i-1)." Straßen importiert\n";
|
||||||
*/
|
|
||||||
|
|
||||||
$filename = "$folder/ADRESSE.csv";
|
$filename = "$folder/ADRESSE.csv";
|
||||||
$input = fopen($filename, "r");
|
$input = fopen($filename, "r");
|
||||||
|
|
||||||
|
$current_skz = false;
|
||||||
|
$current_gkz = false;
|
||||||
|
$sdata = [];
|
||||||
$i = 0;
|
$i = 0;
|
||||||
while($csv = fgetcsv($input, 0, ";")) {
|
while($csv = fgetcsv($input, 0, ";")) {
|
||||||
$i++;
|
$i++;
|
||||||
@@ -248,6 +253,8 @@ while($csv = fgetcsv($input, 0, ";")) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$adrcd = trim($csv[0]);
|
$adrcd = trim($csv[0]);
|
||||||
$gkz = trim($csv[1]);
|
$gkz = trim($csv[1]);
|
||||||
$okz = trim($csv[2]);
|
$okz = trim($csv[2]);
|
||||||
@@ -260,76 +267,167 @@ while($csv = fgetcsv($input, 0, ";")) {
|
|||||||
$hnz2 = trim($csv[10]);
|
$hnz2 = trim($csv[10]);
|
||||||
$hnb2 = trim($csv[11]);
|
$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);
|
$hausnummer_string = makeHausnummer($hnz1, $hnz2, $hnv, $hnb1, $hnb2);
|
||||||
if(!$hausnummer_string) {
|
if(!$hausnummer_string) {
|
||||||
continue;
|
continue;
|
||||||
//die("Keine Hausnummer: adrcd $adrcd, gkz $gkz, okz $okz, skz $skz, $hnz1, $hnb1, $hnv, $hnz2, $hnb2\n");
|
//die("Keine Hausnummer: adrcd $adrcd, gkz $gkz, okz $okz, skz $skz, $hnz1, $hnb1, $hnv, $hnz2, $hnb2\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
$hausnummer = ADBHausnummerModel::getFirst([
|
if($skz == $current_skz) {
|
||||||
'ortschaft_id' => $ortschaft->id,
|
$sdata[(string)$hausnummer_string] = [
|
||||||
//'plz_id' => $plz->id,
|
"adrcd" => $adrcd,
|
||||||
'strasse_id' => $strasse->id,
|
"gkz" => $gkz,
|
||||||
'hausnummer' => $hausnummer_string
|
"okz" => $okz,
|
||||||
]);
|
"plz" => $plz_string,
|
||||||
|
"skz" => $skz,
|
||||||
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
|
"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) {
|
function makeHausnummer($z1 = false, $z2 = false, $v = false, $b1 = false, $b2 = false) {
|
||||||
$h = "";
|
$h = "";
|
||||||
@@ -368,6 +466,7 @@ function getGemeinde($kz) {
|
|||||||
return $gemeinde;
|
return $gemeinde;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function getOrtschaft($kz) {
|
function getOrtschaft($kz) {
|
||||||
global $ortschaft_cache;
|
global $ortschaft_cache;
|
||||||
|
|
||||||
@@ -383,6 +482,7 @@ function getOrtschaft($kz) {
|
|||||||
return $ortschaft;
|
return $ortschaft;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function getStrasse($kz) {
|
function getStrasse($kz) {
|
||||||
global $strasse_cache;
|
global $strasse_cache;
|
||||||
|
|
||||||
@@ -398,6 +498,7 @@ function getStrasse($kz) {
|
|||||||
return $strasse;
|
return $strasse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function getPlz($plz_search, $gemeinde_id) {
|
function getPlz($plz_search, $gemeinde_id) {
|
||||||
global $plz_cache;
|
global $plz_cache;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user