File manager - Edit - /var/www/html/portal/database/seeders/ObservatorioMapasSeeder.php
Back
<?php namespace Database\Seeders; use Database\Seeders\Concerns\ReadsObservatorioOds; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; use RuntimeException; /** * Popula temas e mapas do Observatório a partir de MAPA_TEMAS.ods e MAPA_MAPAS.ods. * * Executa: php artisan db:seed --class=Database\\Seeders\\ObservatorioMapasSeeder * É idempotente: limpa observa_mapas e observa_mapa_temas e recarrega. */ class ObservatorioMapasSeeder extends Seeder { use ReadsObservatorioOds; private const CONNECTION = 'mysql_observatorio'; /** URL base dos ícones legados dos temas de mapa (site antigo). */ private const LEGACY_ICONE_BASE_URL = 'https://angra.rj.gov.br/sopa/fotos/map/'; public function run(): void { $dataDir = database_path('seeders/data/observatorio'); $temasOds = $dataDir . DIRECTORY_SEPARATOR . 'MAPA_TEMAS.ods'; $mapasOds = $dataDir . DIRECTORY_SEPARATOR . 'MAPA_MAPAS.ods'; if (!is_file($temasOds) || !is_file($mapasOds)) { throw new RuntimeException( 'Planilhas MAPA_TEMAS.ods e MAPA_MAPAS.ods não encontradas em database/seeders/data/observatorio/.' ); } $db = DB::connection(self::CONNECTION); $now = now(); Schema::connection(self::CONNECTION)->disableForeignKeyConstraints(); $db->table('observa_mapas')->truncate(); $db->table('observa_mapa_temas')->truncate(); $temasSheet = $this->readOds($temasOds)['Planilha1'] ?? []; $mapasSheet = $this->readOds($mapasOds)['Planilha1'] ?? []; $temasHeader = array_map('trim', array_shift($temasSheet) ?? []); $mapasHeader = array_map('trim', array_shift($mapasSheet) ?? []); $temasCol = array_flip($temasHeader); $mapasCol = array_flip($mapasHeader); $temasIds = []; $temasRows = []; foreach ($temasSheet as $row) { $id = (int) $this->cell($row, $temasCol, 'id_tema'); if ($id <= 0) { continue; } $iconeArquivo = $this->nullable($this->cell($row, $temasCol, 'tema_icone')); $temasRows[] = [ 'id' => $id, 'nome' => trim($this->cell($row, $temasCol, 'tema_nome')), 'descricao' => $this->nullable($this->cell($row, $temasCol, 'tema_descricao')), 'cor' => $this->nullable($this->cell($row, $temasCol, 'tema_cor')), 'icone' => $iconeArquivo ? self::LEGACY_ICONE_BASE_URL . rawurlencode($iconeArquivo) : null, 'status' => 'ATIVADO', 'created_at' => $now, 'updated_at' => $now, ]; $temasIds[$id] = true; } if ($temasRows) { $db->table('observa_mapa_temas')->insert($temasRows); } $this->command?->info(sprintf(' %-22s %4d registros', 'observa_mapa_temas', count($temasRows))); $mapasRows = []; foreach ($mapasSheet as $row) { $id = (int) $this->cell($row, $mapasCol, 'id_mapa'); $temaId = (int) $this->cell($row, $mapasCol, 'mapa_id_tema'); if ($id <= 0) { continue; } if ($temaId <= 0 || !isset($temasIds[$temaId])) { $this->command?->warn(" Mapa {$id} ignorado: tema {$temaId} inexistente."); continue; } $link = trim($this->cell($row, $mapasCol, 'mapa_link')); if ($link === '') { $this->command?->warn(" Mapa {$id} ignorado: link vazio."); continue; } $mapasRows[] = [ 'id' => $id, 'mapa_tema_id' => $temaId, 'titulo' => trim($this->cell($row, $mapasCol, 'mapa_titulo')), 'link' => $link, 'status' => 'ATIVADO', 'created_at' => $now, 'updated_at' => $now, ]; } foreach (array_chunk($mapasRows, 100) as $chunk) { $db->table('observa_mapas')->insert($chunk); } $this->command?->info(sprintf(' %-22s %4d registros', 'observa_mapas', count($mapasRows))); Schema::connection(self::CONNECTION)->enableForeignKeyConstraints(); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.09 |
proxy
|
phpinfo
|
Settings