Skip to content

Instantly share code, notes, and snippets.

@viniciusss
Created September 1, 2016 23:02
Show Gist options
  • Save viniciusss/ce07ac9950ff4dedbd29b000515bdf13 to your computer and use it in GitHub Desktop.
Save viniciusss/ce07ac9950ff4dedbd29b000515bdf13 to your computer and use it in GitHub Desktop.
<?php
include("../includes/global.php");
require("../includes/funcoes.inc.php");
try {
if (isset($_FILES['dne_zip'])) {
geraDebugOn();
define('ATUALIZAR', 'UPD');
define('APAGAR', 'DEL');
define('INSERIR', 'INS');
if ( !in_array($_FILES['dne_zip']['type'], ['application/zip', 'application/x-zip-compressed']) ) {
throw new \Exception('O arquivo postado deve ser do tipo zip.');
}
$zip = new ZipArchive();
if (!$zip->open($_FILES['dne_zip']['tmp_name'])) {
throw new \Exception('não foi possível ler o arquivo zip corretamente');
}
$extrairDados = function ($name) use ($zip) {
$content = $zip->getFromName('Delimitado/' . $name . '.TXT');
if (false === $content) {
throw new \Exception('O arquivo ' . $name . ' não foi encontrado no arquivo');
}
$content = trim($content);
if(empty($content)) {
return [];
}
return array_map(function ($linha) {
return explode('@', trim(trim($linha), '@'));
}, explode("\n", $content));
};
$dbExecuta = new Vs_Db_Executa();
$getCodigo = function ($localno) use ($dbExecuta) {
return $dbExecuta->fetchOne("SELECT codigo FROM webpdv.municipio WHERE localno = {$localno} ");
};
$localides = $extrairDados('DELTA_LOG_LOCALIDADE');
$municipios = array_filter($localides, function ($localidade) {
return 'M' == $localidade[5];
});
$distritos = array_filter($localides, function ($localidade) {
return 'D' == $localidade[5] && !empty($localidade[3]);
});
$povoados = array_filter($localides, function ($localidade) {
return 'P' == $localidade[5] && !empty($localidade[3]);
});
$municipiosSemFaixaCep = array_filter($localides, function ($localidade) {
return '0' == $localidade[4];
});
$faixasCep = array_merge($distritos, $povoados, $municipiosSemFaixaCep);
$faixasCep = array_map(function ($municipio) {
return [
$municipio[6] ?: $municipio[0],
$municipio[3],
$municipio[3],
$municipio[9],
isset($municipio[10]) ? $municipio[10] : $municipio[3],
];
}, $faixasCep);
$faixasCep = array_merge($faixasCep, $extrairDados('DELTA_LOG_FAIXA_LOC'));
foreach ($municipios as $dadosMunicipio) {
$ativo = (APAGAR == $dadosMunicipio[9]) ? 0 : 1;
$dadosMunicipio[2] = g_str_limpa_string($dadosMunicipio[2]);
$replace = <<<SQL
REPLACE INTO webpdv.municipio SET
codigo = {$dadosMunicipio[8]},
nome = '{$dadosMunicipio[2]}',
uf = '{$dadosMunicipio[1]}',
localno = '{$dadosMunicipio[0]}',
cep = '{$dadosMunicipio[3]}',
cep_inicio = NULL,
cep_fim = NULL,
usuario_atualizacao = 1231,
atualizacao = now(),
ativo = {$ativo}
SQL;
$dbExecuta->execute($replace);
}
foreach ($faixasCep as $dadosFaixaCep) {
$codigoIbge = $getCodigo($dadosFaixaCep[0]);
switch($dadosFaixaCep[3]) {
case INSERIR:
$sql = <<<SQL
INSERT INTO webpdv.municipio_faixa_cep SET
codigo = {$codigoIbge},
cep_inicio = {$dadosFaixaCep[1]},
cep_fim = {$dadosFaixaCep[2]},
usuario_alteracao = 1231,
alteracao = now()
SQL;
break;
case APAGAR:
$sql = <<<SQL
DELETE FROM webpdv.municipio_faixa_cep mfc
WHERE codigo = {$codigoIbge}
AND cep_inicio = {$dadosFaixaCep[1]}
AND cep_fim = {$dadosFaixaCep[2]}
SQL;
case ATUALIZAR:
$cepInicio = isset($dadosFaixaCep[4]) ? $dadosFaixaCep[4] : $dadosFaixaCep[1];
$sql = <<<SQL
UPDATE webpdv.municipio_faixa_cep SET
codigo = {$codigoIbge},
cep_inicio = {$dadosFaixaCep[1]},
cep_fim = {$dadosFaixaCep[2]},
usuario_alteracao = 1231,
alteracao = now()
WHERE codigo = {$codigoIbge}
AND cep_inicio = {$cepInicio}
SQL;
}
$dbExecuta->execute($sql);
}
}
} catch (Exception $e) {
echo $e->getMessage();
}
?>
<html>
<head>
<title>Importar Atualização Base Correios</title>
</head>
<body>
<form action="atualizar_base_correios.php" method="post" enctype="multipart/form-data">
<fieldset>
<legend></legend>
<label>
<span>Arquivo Zip:</span>
<input type="file" name="dne_zip" required/>
</label>
</fieldset>
<input type="submit" value="Atualizar"/>
</form>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment