From 04d3fb216773775fc937a892426495d85747579c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Tue, 13 Nov 2018 18:02:22 +0100 Subject: [PATCH] =?UTF-8?q?Datenverbund=20-=20BPK=20Abfrage=20f=C3=BCr=20m?= =?UTF-8?q?ehrere=20Eintr=C3=A4ge=20wird=20verz=C3=B6gert=20wenn=20die=20m?= =?UTF-8?q?aximale=20Anzahl=20an=20Requests=20pro=20Minute=20erreicht=20wu?= =?UTF-8?q?rde=20-=20Manuelle=20Abfrage=20von=20BPKs=20zu=20Datenverbund?= =?UTF-8?q?=20Client=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/dvb.class.php | 14 +++++++++++++- soap/datenverbund_client.php | 21 +++++++++++++++++++++ vilesci/cronjobs/bpk.php | 8 ++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/include/dvb.class.php b/include/dvb.class.php index 257fb4ee0..fb2f97afd 100644 --- a/include/dvb.class.php +++ b/include/dvb.class.php @@ -1117,7 +1117,7 @@ class dvb extends basis_db * @param $strasse Strasse der Person (optional). * @return BPK or false on error. */ - private function pruefeBPK($geburtsdatum, $vorname, $nachname, $geschlecht, $plz = null, $strasse = null) + public function pruefeBPK($geburtsdatum, $vorname, $nachname, $geschlecht, $plz = null, $strasse = null) { if ($this->tokenIsExpired()) { @@ -1211,6 +1211,18 @@ class dvb extends basis_db $dom = new DOMDocument(); $dom->loadXML($response); $namespace = 'http://www.brz.gv.at/datenverbund-unis'; + $domnodes_fehlernummer = $dom->getElementsByTagNameNS($namespace, 'fehlernummer'); + if($domnodes_fehlernummer->length > 0) + { + $fehlercode = $domnodes_fehlernummer->item(0)->textContent; + if($fehlercode == 'ZD00001') + { + // Zu viele Requests pro Minute + $this->debug('Zu viele Requests pro Minute -> Pause'); + sleep(30); + } + } + $domnodes_bpk = $dom->getElementsByTagNameNS($namespace, 'personenkennzeichen'); if($domnodes_bpk->length > 0) { diff --git a/soap/datenverbund_client.php b/soap/datenverbund_client.php index 91245f1a0..4651c9f46 100644 --- a/soap/datenverbund_client.php +++ b/soap/datenverbund_client.php @@ -55,6 +55,7 @@ $matura = filter_input(INPUT_POST, 'matura'); $svnr = filter_input(INPUT_POST, 'svnr'); $ersatzkennzeichen = filter_input(INPUT_POST, 'ersatzkennzeichen'); $person_id = filter_input(INPUT_POST, 'person_id'); +$strasse = filter_input(INPUT_POST, 'strasse'); ?> @@ -78,6 +79,7 @@ $person_id = filter_input(INPUT_POST, 'person_id');
  • Matrikelnummer Vergabe melden
  • Gesamtprozess (Abfrage, ggf Vergabemeldung, Speichern bei Person)
  • BPK ermitteln
  • +
  • BPK ermitteln manuell
  • Portal: ".DVB_PORTAL; @@ -152,6 +154,16 @@ $person_id = filter_input(INPUT_POST, 'person_id'); printrow('person_id', 'PersonID', $person_id); break; + case 'pruefeBPK': + printrow('nachname', 'Nachname', $nachname, '', 255); + printrow('vorname', 'Vorname', $vorname, '', 30); + printrow('geburtsdatum', 'Geburtsdatum', $geburtsdatum, 'Format: YYYYMMDD', 10); + printrow('geschlecht', 'Geschlecht', $geschlecht, 'Format: M | W', 1); + printrow('postleitzahl', 'Postleitzahl', $postleitzahl, 'optional', 10); + printrow('strasse', 'Strasse', $strasse, 'optional', 255); + + break; + default: echo "Unknown action"; break; @@ -296,6 +308,15 @@ if (isset($_REQUEST['submit'])) echo '
    Fehlgeschlagen:'.$dvb->errormsg; break; + case 'pruefeBPK': + $data = $dvb->pruefeBPK($geburtsdatum, $vorname, $nachname, $geschlecht, $postleitzahl, $strasse); + if(ErrorHandler::isSuccess($data)) + { + echo '
    OK BPK: '.$data->retval->bpk; + } + else + echo '
    Fehlgeschlagen:'.$dvb->errormsg; + break; default: echo "Unknown action"; break; diff --git a/vilesci/cronjobs/bpk.php b/vilesci/cronjobs/bpk.php index 7fa7c8355..2d26634e3 100644 --- a/vilesci/cronjobs/bpk.php +++ b/vilesci/cronjobs/bpk.php @@ -85,6 +85,7 @@ $qry = " WHERE public.tbl_benutzer.aktiv = true AND tbl_person.matr_nr is not null + AND tbl_person.bpk is null AND studiengang_kz<10000 AND EXISTS(SELECT 1 FROM public.tbl_prestudent WHERE person_id=tbl_person.person_id AND bismelden=true) AND gebdatum is not null"; @@ -93,10 +94,17 @@ if ($limit != '') $qry .= " LIMIT ".$limit; $db = new basis_db(); +$cnt = 0; if ($result = $db->db_query($qry)) { while ($row = $db->db_fetch_object($result)) { + $cnt++; + // Nach jeweils 25 Requests eine Pause einlegen damit die + // Anzahl Requests pro Minute nicht überschritten wird + if($cnt%25 == 0) + sleep(30); + echo $nl."Pruefe $row->person_id $row->vorname $row->nachname"; $data = $webservice->getBPK($row->person_id); if (ErrorHandler::isSuccess($data))