|
|
|
|
#!/usr/bin/php -q
|
|
|
|
|
<?php
|
|
|
|
|
/*
|
|
|
|
|
* Script que importa os dados do arquivo CNL FIXO da Anatel para a tabela pbx_municipios
|
|
|
|
|
*/
|
|
|
|
|
error_reporting(E_ERROR);
|
|
|
|
|
ini_set('display_errors', "Off");
|
|
|
|
|
include("util/util.php");
|
|
|
|
|
|
|
|
|
|
$display = isset($argv[1]) && $argv[1] == "D";
|
|
|
|
|
/*
|
|
|
|
|
* Tamanho do pacote de dados inserido no banco de uma vez.
|
|
|
|
|
*/
|
|
|
|
|
define("NUM_PACK_INSERT", 1000);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Nome dos campos no banco de dados e as posi<EFBFBD><EFBFBD>es nos arrays $arLen e $arPos, que cont<EFBFBD>m informa<EFBFBD><EFBFBD>es para leitura do arquivo.
|
|
|
|
|
*/
|
|
|
|
|
$arCampos = array("uf" => 0, "sigla_area" => 1, "codigo_localidade" => 2, "nome_localidade" => 3, "nome_municipio" => 4, "areatarifacao" => 5, "prefixo" => 6,
|
|
|
|
|
"nome_operadora" => 7, "faixa_inicial" => 8, "faixa_final" => 9, "latitude" => 10, "hemisferio" => 11, "longitude" => 12, "sigla_area_local" => 13, "codigo_ddd" => -1);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Quantidade de carecteres do campo referido.
|
|
|
|
|
*/
|
|
|
|
|
$arLen = array(0 => 2, 1 => 4, 2 => 5, 3 => 50, 4 => 50, 5 => 5, 6 => 7, 7 => 30, 8 => 4, 9 => 4, 10 => 8, 11 => 5, 12 => 8, 13 => 4);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Posi<EFBFBD><EFBFBD>o do campo no arquivo.
|
|
|
|
|
*/
|
|
|
|
|
$arPos = array(0 => 0, 1 => 2, 2 => 6, 3 => 11, 4 => 61, 5 => 111, 6 => 116, 7 => 123, 8 => 153, 9 => 157, 10 => 161, 11 => 169, 12 => 174, 13 => 182);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Campos que n<EFBFBD>o constam no arquivo e s<EFBFBD>o obtidos atrav<EFBFBD>s de um campo lido no arquivo.
|
|
|
|
|
*/
|
|
|
|
|
$arCompl = array("codigo_ddd" => array('codigo_localidade', 0, 2));
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Diretorio da aplica<EFBFBD><EFBFBD>o.
|
|
|
|
|
*/
|
|
|
|
|
$baseDir = dirname(__FILE__);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Diretorio para download dos arquivos.
|
|
|
|
|
*/
|
|
|
|
|
$dir = "arquivos_cnl";
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Nome para o arquivo remoto.
|
|
|
|
|
*/
|
|
|
|
|
$remoteFile = sprintf("cnl_fixo_%s.zip", date('Y-m-d')); //Arqjuivo compactado.
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Contera o nome do arquivo de dados descompactados, sempre um txt.
|
|
|
|
|
*/
|
|
|
|
|
$workFile = ''; //Arqjuivo txt.
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* urel para o arquivo na anatel.
|
|
|
|
|
*/
|
|
|
|
|
$urlFile = "http://sistemas.anatel.gov.br/areaarea/N_Download/Tela.asp?varTIPO=CentralCNL&varPRESTADORA=&varCENTRAL=F&varUF=&varPERIODO=&acao=c&cmd=&varMOD=Publico";
|
|
|
|
|
//$urlFile = "http://192.168.115.17/audio/CE_F_100203.ZIP";
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Caminho completo para o diret<EFBFBD>rio de download.
|
|
|
|
|
*/
|
|
|
|
|
$workDir = sprintf("%s/%s/", $baseDir, $dir);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Caminho completo para o arquivo baixado.
|
|
|
|
|
*/
|
|
|
|
|
$remoteFile = sprintf("%s%s", $workDir, $remoteFile);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
/*
|
|
|
|
|
* Verifica se o diretorio exitir apaga seu conteudo do contrario ir<EFBFBD> cria-lo.
|
|
|
|
|
*/
|
|
|
|
|
MsgCnl("Verificando diretorios para download!");
|
|
|
|
|
if (!file_exists($workDir)) {
|
|
|
|
|
mkdir($workDir);
|
|
|
|
|
} else {
|
|
|
|
|
system(sprintf("rm -rf %s/*", $workDir));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Baixa o aquivo remoto.
|
|
|
|
|
*/
|
|
|
|
|
MsgCnl("Baixando o arquivo remoto!");
|
|
|
|
|
downloadFile($urlFile, $remoteFile);
|
|
|
|
|
if (!file_exists($remoteFile)) {
|
|
|
|
|
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel baixar o arquivo!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Desconpacta o arquivo baixado.
|
|
|
|
|
*/
|
|
|
|
|
MsgCnl("Descompactando o arquivo remoto!");
|
|
|
|
|
system(sprintf("unzip -q %s -d %s", $remoteFile, $workDir));
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Pega o nome do arquivo que ser<EFBFBD> im?ortado.
|
|
|
|
|
*/
|
|
|
|
|
$workFile = sprintf("%s%s", $workDir, GetFileByStr($workDir, ".txt"));
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Verifica se o arquivo foi descompactado.
|
|
|
|
|
*/
|
|
|
|
|
if (!file_exists($workFile)) {
|
|
|
|
|
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel descompactar o arquivo!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Importa o arquivo para o banco de dados
|
|
|
|
|
*/
|
|
|
|
|
MsgCnl("Iniciando a leitura do arquivo!");
|
|
|
|
|
if (!($handle = fopen($workFile, 'r'))) {
|
|
|
|
|
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel abrir o arquivo! $workFile ");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Comando para o banco de dados.
|
|
|
|
|
*/
|
|
|
|
|
$cmd = sprintf("insert into pbx_municipios(%s)values(%s);\n", GetArrayKey($arCampos), '%s');
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Conex<EFBFBD>o para o banco de daods;
|
|
|
|
|
*/
|
|
|
|
|
//$connStr = sprintf("host='%s' port='%s' dbname='%s' user='%s' password='%s'", '127.0.0.1', '5432', 'portabilidade', 'contacte', 'ctepgSQL');
|
|
|
|
|
$connStr = sprintf("host='%s' port='%s' dbname='%s' user='%s' password='%s'", '127.0.0.1', '5432', 'pbx', 'contacte', 'ctepgSQL');
|
|
|
|
|
$conn = CnpFGetConnection($connStr);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Inicia transa<EFBFBD><EFBFBD>o com o banco de dados.
|
|
|
|
|
*/
|
|
|
|
|
if (!pg_query($conn, "begin")) {
|
|
|
|
|
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel iniciar uma transa<EFBFBD><EFBFBD>o!");
|
|
|
|
|
}
|
|
|
|
|
MsgCnl("Transa<EFBFBD><EFBFBD>o com banco de dados iniciada!");
|
|
|
|
|
|
|
|
|
|
MsgCnl("Removendo registros existentes!");
|
|
|
|
|
if (!pg_query($conn, "truncate table pbx_municipios")) {
|
|
|
|
|
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel remover os registros existentes!");
|
|
|
|
|
}
|
|
|
|
|
MsgCnl("Registros existentes removidos!");
|
|
|
|
|
$i = 0;
|
|
|
|
|
$numLines = 0;
|
|
|
|
|
while (!feof($handle)) {
|
|
|
|
|
$buffer = trim(fgets($handle));
|
|
|
|
|
|
|
|
|
|
if (!$buffer) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
$values = '';
|
|
|
|
|
foreach ($arCampos as $key => $value) {
|
|
|
|
|
/*
|
|
|
|
|
* Value -1 indica que o campo n<EFBFBD>o faz parte do arquivo, sendo obtido
|
|
|
|
|
* a partir de outro.
|
|
|
|
|
*/
|
|
|
|
|
if ($value === -1) {
|
|
|
|
|
/*
|
|
|
|
|
* Se o campo n<EFBFBD>o estiver no array compl, o loop pula o registro.
|
|
|
|
|
*/
|
|
|
|
|
if (!array_key_exists($key, $arCompl)) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* $arCompl contem o campo referencia de onde sera obtido o valor,
|
|
|
|
|
* e tambem a posi<EFBFBD>a<EFBFBD> inicial e o tamanho da string resultante.
|
|
|
|
|
*/
|
|
|
|
|
$arParam = $arCompl[$key];
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Pega o valor da linha lida.
|
|
|
|
|
*/
|
|
|
|
|
$pos = GetPosLine($arCampos[$arParam[0]]);
|
|
|
|
|
$tam = GetPosLine($arCampos[$arParam[0]], false);
|
|
|
|
|
$str = trim(substr($buffer, $pos, $tam));
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Copia a string a ser obtida no campo referencia.
|
|
|
|
|
*/
|
|
|
|
|
$str = trim(substr($str, $arParam[1], $arParam[2]));
|
|
|
|
|
} else {
|
|
|
|
|
$pos = GetPosLine($value);
|
|
|
|
|
$tam = GetPosLine($value, false);
|
|
|
|
|
$str = trim(substr($buffer, $pos, $tam));
|
|
|
|
|
}
|
|
|
|
|
$values .= !$values ? QuotedStr($str) : ',' . QuotedStr($str);
|
|
|
|
|
}
|
|
|
|
|
$query .= sprintf($cmd, $values);
|
|
|
|
|
$numLines++;
|
|
|
|
|
if (++$i >= NUM_PACK_INSERT) {
|
|
|
|
|
if (!pg_query($conn, $query)) {
|
|
|
|
|
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel inserir os registros na base de dados!");
|
|
|
|
|
}
|
|
|
|
|
MsgCnl(sprintf("Inserido %s registros no banco de dados!", str_pad($numLines, 6, '0', STR_PAD_LEFT)), true);
|
|
|
|
|
$query = '';
|
|
|
|
|
$i = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/*
|
|
|
|
|
* Se $i < 500 ainda devem ter registros para inserir.
|
|
|
|
|
*/
|
|
|
|
|
if ($query) {
|
|
|
|
|
if (!pg_query($conn, $query)) {
|
|
|
|
|
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel inserir os registros finais na base de dados!");
|
|
|
|
|
}
|
|
|
|
|
MsgCnl(sprintf("Inserido %s registros no banco de dados!", str_pad($numLines, 6, '0', STR_PAD_LEFT)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Importa para tabela pbx_consulta_ddd
|
|
|
|
|
*/
|
|
|
|
|
MsgCnl("Removendo registros da tabela consulta DDD!");
|
|
|
|
|
if (!pg_query($conn, "truncate table pbx_consulta_ddd")) {
|
|
|
|
|
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel apagar a tabela de consultas DDD!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MsgCnl("Importando registros para tabela consulta DDD!");
|
|
|
|
|
$query = "insert into pbx_consulta_ddd(id, codigo_ddd, nome_municipio, uf, prefixo, inicial, final) select id, codigo_ddd, nome_localidade, uf, prefixo, faixa_inicial, faixa_final from pbx_municipios";
|
|
|
|
|
if (!pg_query($conn, $query)) {
|
|
|
|
|
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel importar registros para a tabela de consultas DDD!");
|
|
|
|
|
}
|
|
|
|
|
MsgCnl("Importa<EFBFBD><EFBFBD>o de registros para a tabela consulta DDD concluida!");
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Finaliza a transa<EFBFBD><EFBFBD>o.
|
|
|
|
|
*/
|
|
|
|
|
if (!pg_query($conn, "commit")) {
|
|
|
|
|
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel finalizar a transa<EFBFBD><EFBFBD>o!");
|
|
|
|
|
}
|
|
|
|
|
MsgCnl("Opera<EFBFBD><EFBFBD>o finalizada com sucesso!");
|
|
|
|
|
|
|
|
|
|
fclose($handle);
|
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
|
$path = '/var/log/asterisk/importa_cnlf.log';
|
|
|
|
|
$log = trim($ex->getMessage() . "\n" . GetLasterror() . "\n");
|
|
|
|
|
MsgCnl("Erro ao realizar opera<EFBFBD><EFBFBD>o: \n" . $log);
|
|
|
|
|
WriteLog(str_repeat("-", 255) . "\n", $path);
|
|
|
|
|
WriteLog(sprintf("[Data: %s]\n", date('Y-m-d H:i:s')), $path);
|
|
|
|
|
WriteLog($log, $path);
|
|
|
|
|
WriteLog($query, $path);
|
|
|
|
|
WriteLog(str_repeat("-", 255) . "\n", $path);
|
|
|
|
|
MsgCnl("Para mais informa<EFBFBD><EFBFBD>es consulte o log: $path\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetPosLine($key, $pos = true) {
|
|
|
|
|
global $arLen, $arPos;
|
|
|
|
|
if ($pos)
|
|
|
|
|
return $arPos[$key];
|
|
|
|
|
else
|
|
|
|
|
return $arLen[$key];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function CnpFGetConnection($connStr = '') {
|
|
|
|
|
/*
|
|
|
|
|
* Se precisar de uma conex<EFBFBD>o diferente da padr<EFBFBD>o, espcifique sua propria connection string.
|
|
|
|
|
* $connStr = sprintf("host='%s' port='%s' dbname='%s' user='%s' password='%s'", '127.0.0.1', '5432', 'pbx', 'contacte', 'ctepgSQL');
|
|
|
|
|
*/
|
|
|
|
|
$connStr = !$connStr ? GetDefStrDb() : $connStr;
|
|
|
|
|
$conn = pg_pconnect($connStr);
|
|
|
|
|
if (!$conn) {
|
|
|
|
|
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel estabelecer uma conex<EFBFBD>o com o banco de dados!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $conn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function MsgCnl($msg, $bLine = false) {
|
|
|
|
|
global $display;
|
|
|
|
|
|
|
|
|
|
if ($display) {
|
|
|
|
|
echo "\r";
|
|
|
|
|
echo "\033[K"; // Erase to the end of the line
|
|
|
|
|
echo $bLine ? trim(RemoveAcentos($msg)) : ( RemoveAcentos($msg) . "\n");
|
|
|
|
|
}
|
|
|
|
|
}
|