File manager - Edit - /var/www/html/portal/database/seeders/LegislacaoSeeder.php
Back
<?php namespace Database\Seeders; use App\Support\LegislacaoImportPaths; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\DB; class LegislacaoSeeder extends Seeder { private const BATCH_SIZE = 500; private string $basePath; public function run(): void { $this->basePath = LegislacaoImportPaths::resolveBasePath(); $this->ensureBasePathExists(); DB::statement('SET FOREIGN_KEY_CHECKS=0'); try { $this->truncateTables(); $this->importLegislacaoAutorCargo(); $this->importLegislacaoAutor(); $this->importLegislacaoTipo(); $this->importLegislacaoCategoria(); $this->importLegislacao(); $this->importLegislacaoCategoriaAssociada(); $this->importLegislacaoAcao(); $this->importLegislacaoRetificacao(); $this->importLegislacaoPortaria(); $this->importLegislacaoPortariaAcao(); $this->importLegislacaoPortariaRetificacao(); } finally { DB::statement('SET FOREIGN_KEY_CHECKS=1'); } $this->vincularBoletinsOficiais(); } private function vincularBoletinsOficiais(): void { if ($this->command !== null) { $this->command->info('Vinculando boletins oficiais (UUID)...'); } Artisan::call('legislacao:import-boletins', [ '--path' => $this->basePath, ]); if ($this->command !== null) { $this->command->line(trim(Artisan::output())); } } private function truncateTables(): void { $tables = [ 'legislacao_portaria_retificacao', 'legislacao_portaria_acao', 'legislacao_portaria', 'legislacao_retificacao', 'legislacao_acao', 'legislacao_categoria_associada', 'legislacao', 'legislacao_categoria', 'legislacao_tipo', 'legislacao_autor', 'legislacao_autor_cargo', ]; foreach ($tables as $table) { DB::table($table)->truncate(); } } private function importLegislacaoAutorCargo(): void { $this->importCsv('LEGISLACAO_AUTOR_CARGO.csv', 'legislacao_autor_cargo', function (array $row): array { return [ 'id_cargo' => $this->toInt($row['id_cargo'] ?? null), 'nm_cargo' => $this->toString($row['nm_cargo'] ?? null), 'created_at' => now(), 'updated_at' => now(), ]; }); } private function importLegislacaoAutor(): void { $this->importCsv('LEGISLACAO_AUTOR.csv', 'legislacao_autor', function (array $row): array { return [ 'id_autor' => $this->toInt($row['id_autor'] ?? null), 'nm_autor' => $this->toString($row['nm_autor'] ?? null), 'id_cargo' => $this->toInt($row['id_cargo'] ?? null), 'created_at' => now(), 'updated_at' => now(), ]; }); } private function importLegislacaoTipo(): void { $this->importCsv('LEGISLACAO_TIPO.csv', 'legislacao_tipo', function (array $row): array { return [ 'id_tipo_legislacao' => $this->toInt($row['id_tipo_legislacao'] ?? null), 'ds_tipo_legislacao' => $this->toString($row['ds_tipo_legislacao'] ?? null), 'created_at' => now(), 'updated_at' => now(), ]; }); } private function importLegislacaoCategoria(): void { $this->importCsv('LEGISLACAO_CATEGORIA.csv', 'legislacao_categoria', function (array $row): array { return [ 'id_categoria' => $this->toInt($row['id_categoria'] ?? null), 'nm_categoria' => $this->toString($row['nm_categoria'] ?? null), 'created_at' => now(), 'updated_at' => now(), ]; }); } private function importLegislacao(): void { $this->importCsv('LEGISLACAO.csv', 'legislacao', function (array $row): array { return [ 'id_legislacao' => $this->toInt($row['id_legislacao'] ?? null), 'nr_legislacao' => $this->toString($row['nr_legislacao'] ?? null), 'id_tipo_legislacao' => $this->toInt($row['id_tipo_legislacao'] ?? null), 'id_autor' => $this->toInt($row['id_autor'] ?? null), 'id_autor_sancao' => $this->toInt($row['id_autor_sancao'] ?? null), 'ds_ementa' => $this->toNullableString($row['ds_ementa'] ?? null), 'id_boletim_oficial' => $this->toBulletinUuidOrNull($row['id_boletim_oficial'] ?? null), 'dt_assinatura' => $this->toDate($row['dt_assinatura'] ?? null), 'dt_publicacao' => $this->toDate($row['dt_publicacao'] ?? null), 'ds_legislacao_sem_html' => $this->toNullableString($row['ds_legislacao_sem_html'] ?? null), 'ds_legislacao_original' => $this->toNullableString($row['ds_legislacao_original'] ?? null), 'ds_legislacao_compilada' => $this->toNullableString($row['ds_legislacao_compilada'] ?? null), 'nm_arquivo_anexo' => $this->toNullableString($row['nm_arquivo_anexo'] ?? null), 'cd_status' => $this->toInt($row['cd_status'] ?? null) ?? 1, 'id_usuario_cadastro' => $this->toInt($row['id_usuario_cadastro'] ?? null), 'dt_cadastro' => $this->toDateTime($row['dt_cadastro'] ?? null), 'id_usuario_alteracao' => $this->toInt($row['id_usuario_alteracao'] ?? null), 'dt_alteracao' => $this->toDateTime($row['dt_alteracao'] ?? null), 'created_at' => now(), 'updated_at' => now(), ]; }); } private function importLegislacaoCategoriaAssociada(): void { $this->importCsv('LEGISLACAO_CATEGORIA_ASSOCIADA.csv', 'legislacao_categoria_associada', function (array $row): array { return [ 'id_legislacao' => $this->toInt($row['id_legislacao'] ?? null), 'id_categoria' => $this->toInt($row['id_categoria'] ?? null), 'created_at' => now(), 'updated_at' => now(), ]; }); } private function importLegislacaoAcao(): void { $this->importCsv('LEGISLACAO_ACAO.csv', 'legislacao_acao', function (array $row): array { return [ 'id_acao' => $this->toInt($row['id_acao'] ?? null), 'id_legislacao' => $this->toInt($row['id_legislacao'] ?? null), 'id_legislacao_sofre_acao' => $this->toInt($row['id_legislacao_sofre_acao'] ?? null), 'cd_acao' => $this->toInt($row['cd_acao'] ?? null) ?? 1, 'dt_acao' => $this->toDate($row['dt_acao'] ?? null), 'created_at' => now(), 'updated_at' => now(), ]; }); } private function importLegislacaoRetificacao(): void { $this->importCsv('LEGISLACAO_RETIFICACAO.csv', 'legislacao_retificacao', function (array $row): array { return [ 'id_retificacao' => $this->toInt($row['id_retificacao'] ?? null), 'id_legislacao' => $this->toInt($row['id_legislacao'] ?? null), 'cd_tipo' => $this->toInt($row['cd_tipo'] ?? null) ?? 1, 'id_boletim_oficial' => $this->toBulletinUuidOrNull($row['id_boletim_oficial'] ?? null), 'ds_descricao' => $this->toNullableString($row['ds_descricao'] ?? null), 'created_at' => now(), 'updated_at' => now(), ]; }); } private function importLegislacaoPortaria(): void { $this->importCsv('LEGISLACAO_PORTARIA.csv', 'legislacao_portaria', function (array $row): array { return [ 'id_portaria' => $this->toInt($row['id_portaria'] ?? null), 'nr_portaria' => $this->toString($row['nr_portaria'] ?? null), 'dt_ato' => $this->toDate($row['dt_ato'] ?? null), 'dt_publicacao' => $this->toDate($row['dt_publicacao'] ?? null), 'ds_ementa' => $this->toNullableString($row['ds_ementa'] ?? null), 'id_boletim_oficial' => $this->toBulletinUuidOrNull($row['id_boletim_oficial'] ?? null), 'cd_status' => $this->toInt($row['cd_status'] ?? null) ?? 1, 'id_usuario_cadastro' => $this->toInt($row['id_usuario_cadastro'] ?? null), 'dt_cadastro' => $this->toDateTime($row['dt_cadastro'] ?? null), 'id_usuario_alteracao' => $this->toInt($row['id_usuario_alteracao'] ?? null), 'dt_alteracao' => $this->toDateTime($row['dt_alteracao'] ?? null), 'created_at' => now(), 'updated_at' => now(), ]; }); } private function importLegislacaoPortariaAcao(): void { $this->importCsv('LEGISLACAO_PORTARIA_ACAO.csv', 'legislacao_portaria_acao', function (array $row): array { return [ 'id_acao' => $this->toInt($row['id_acao'] ?? null), 'id_portaria' => $this->toInt($row['id_portaria'] ?? null), 'id_portaria_sofre_acao' => $this->toInt($row['id_portaria_sofre_acao'] ?? null), 'cd_acao' => $this->toInt($row['cd_acao'] ?? null) ?? 1, 'dt_acao' => $this->toDate($row['dt_acao'] ?? null), 'created_at' => now(), 'updated_at' => now(), ]; }); } private function importLegislacaoPortariaRetificacao(): void { $this->importCsv('LEGISLACAO_PORTARIA_RETIFICACAO.csv', 'legislacao_portaria_retificacao', function (array $row): array { return [ 'id_retificacao' => $this->toInt($row['id_retificacao'] ?? null), 'id_portaria' => $this->toInt($row['id_portaria'] ?? null), 'cd_tipo' => $this->toInt($row['cd_tipo'] ?? null) ?? 1, 'id_boletim_oficial' => $this->toBulletinUuidOrNull($row['id_boletim_oficial'] ?? null), 'ds_descricao' => $this->toNullableString($row['ds_descricao'] ?? null), 'created_at' => now(), 'updated_at' => now(), ]; }); } private function importCsv(string $filename, string $table, callable $mapper): void { $path = LegislacaoImportPaths::resolveCsvPath($this->basePath, $filename); $handle = fopen($path, 'r'); if ($handle === false) { throw new \RuntimeException("Nao foi possivel abrir o arquivo CSV: {$path}"); } try { $header = fgetcsv($handle, 0, ';'); if (! $header) { return; } $header = array_map(fn ($value) => $this->normalizeHeader((string) $value), $header); $batch = []; while (($row = fgetcsv($handle, 0, ';')) !== false) { if ($this->isRowEmpty($row)) { continue; } $mappedRow = []; foreach ($header as $index => $column) { $mappedRow[$column] = $this->decode((string) ($row[$index] ?? '')); } $batch[] = $mapper($mappedRow); if (count($batch) >= self::BATCH_SIZE) { DB::table($table)->insert($batch); $batch = []; } } if ($batch !== []) { DB::table($table)->insert($batch); } } finally { fclose($handle); } } private function ensureBasePathExists(): void { if (! is_dir($this->basePath)) { throw new \RuntimeException("Pasta de importacao nao encontrada: {$this->basePath}"); } } private function normalizeHeader(string $value): string { return trim(mb_strtolower($this->decode($value))); } private function decode(string $value): string { $value = trim($value); if ($value === '') { return ''; } return mb_convert_encoding($value, 'UTF-8', 'UTF-8, ISO-8859-1, Windows-1252'); } private function toInt(?string $value): ?int { $value = trim((string) $value); if ($value === '' || ! is_numeric($value)) { return null; } return (int) $value; } /** * IDs de boletim vindos do legado (inteiro) não correspondem a bulletins.id (UUID). * Só persiste quando o CSV já trouxer um UUID válido. */ private function toBulletinUuidOrNull(?string $value): ?string { $s = trim((string) $value); if ($s === '') { return null; } if (preg_match('/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i', $s)) { return $s; } return null; } private function toDate(?string $value): ?string { $value = trim((string) $value); if ($value === '') { return null; } if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $value)) { return $value; } return null; } private function toDateTime(?string $value): ?string { $value = trim((string) $value); if ($value === '') { return null; } if (preg_match('/^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}$/', $value)) { return $value; } if (preg_match('/^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d+$/', $value)) { return substr($value, 0, 19); } return null; } private function toString(?string $value): string { return trim((string) $value); } private function toNullableString(?string $value): ?string { $value = trim((string) $value); return $value === '' ? null : $value; } private function isRowEmpty(array $row): bool { foreach ($row as $value) { if (trim((string) $value) !== '') { return false; } } return true; } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.15 |
proxy
|
phpinfo
|
Settings