Exemplo n.º 1
0
 /**
  * @throws Exception
  */
 public function geo_extract()
 {
     $text = $this->text_ocr_corrected . $this->text_pdf;
     $strassen_gefunden = RISGeo::suche_strassen($text);
     /** @var array|AntragOrt[] $bisherige */
     $bisherige = AntragOrt::model()->findAllByAttributes(["dokument_id" => $this->id]);
     $bisherige_ids = [];
     foreach ($bisherige as $i) {
         $bisherige_ids[] = $i->ort_id;
     }
     $neue_ids = [];
     $indexed = [];
     foreach ($strassen_gefunden as $strasse_name) {
         if (!in_array($strasse_name, $indexed)) {
             $indexed[] = $strasse_name;
             $geo = OrtGeo::getOrCreate($strasse_name);
             if (is_null($geo)) {
                 continue;
             }
             $neue_ids[] = $geo->id;
             if (!in_array($geo->id, $bisherige_ids)) {
                 $antragort = new AntragOrt();
                 $antragort->antrag_id = $this->antrag_id;
                 $antragort->termin_id = $this->termin_id;
                 $antragort->rathausumschau_id = $this->rathausumschau_id;
                 $antragort->dokument_id = $this->id;
                 $antragort->ort_name = $strasse_name;
                 $antragort->ort_id = $geo->id;
                 $antragort->source = "text_parse";
                 $antragort->datum = date("Y-m-d H:i:s");
                 try {
                     if (!$antragort->save()) {
                         RISTools::send_email(Yii::app()->params['adminEmail'], "Dokument:geo_extract Error", print_r($antragort->getErrors(), true), null, "system");
                         throw new Exception("Fehler beim Speichern: geo_extract");
                     }
                 } catch (Exception $e) {
                     var_dump($antragort->getAttributes());
                     die;
                 }
             }
         }
     }
     foreach ($bisherige_ids as $id) {
         if (!in_array($id, $neue_ids)) {
             AntragOrt::model()->deleteAllByAttributes(["dokument_id" => $this->id, "ort_id" => $id]);
         }
     }
     $this->orte = AntragOrt::model()->findAllByAttributes(["dokument_id" => $this->id]);
 }
 /**
  * @return OrtGeo[]
  */
 public function get_geo()
 {
     $return = [];
     $strassen_gefunden = RISGeo::suche_strassen($this->top_betreff);
     $indexed = [];
     foreach ($strassen_gefunden as $strasse_name) {
         if (!in_array($strasse_name, $indexed)) {
             $indexed[] = $strasse_name;
             $geo = OrtGeo::getOrCreate($strasse_name);
             if (is_null($geo)) {
                 continue;
             }
             $return[] = $geo;
         }
     }
     return $return;
 }