forked from SimplesIP/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
290 lines
11 KiB
290 lines
11 KiB
#!/usr/bin/php -q |
|
<?php |
|
error_reporting(E_ALL); |
|
ini_set('display_errors', false); |
|
include("util/util.php"); |
|
|
|
/* |
|
* Informe o arquivo de dados na linha de comando se necessario. |
|
*/ |
|
$workFile = isset($argv[1]) && file_exists($argv[1]) ? $argv[1] : $defFile; |
|
$pathLog = GetFilePath($argv[0]) . "resumo-cdr.log"; |
|
|
|
$cdr = InsereCdr($workFile,$pathLog); |
|
print_r($cdr); |
|
|
|
function LimpaBuffer($line) { |
|
$strLine = substr($line, -1) == ',' ? $line : ($line . ','); |
|
$tam = strlen($strLine); |
|
$str = ''; |
|
$colunas = array(); |
|
$quote = false; |
|
|
|
for ($i = 0; $i < $tam; $i++) { |
|
$ch = substr($strLine, $i, 1); |
|
|
|
if (!$quote && ($ch == ',')) { |
|
$colunas[] = $str; |
|
$str = ''; |
|
$quote = false; |
|
$ch = ''; |
|
} |
|
if ($ch == '"') { |
|
$quote = !$quote; |
|
} |
|
$str .= ($ch == '"') ? '' : $ch; |
|
} |
|
return $colunas; |
|
} |
|
|
|
function InsereCdr($workFile, $pathLog) { |
|
|
|
try { |
|
$connStr = ''; |
|
$connStr = !$connStr ? GetDefStrDb() : $connStr; |
|
$conn = pg_connect($connStr); |
|
if (!$conn) { |
|
GeraExcept("Não foi possível estabelecer uma conexão com o banco de dados!"); |
|
} |
|
|
|
/* |
|
* Variaveis de controle. |
|
*/ |
|
$lineErro = ''; |
|
$lines = 0; |
|
$lineOk = 0; |
|
$numErro = 0; |
|
|
|
/* |
|
* Abre arquivo de dados. |
|
*/ |
|
if (!($handle = fopen($workFile, 'r'))) { |
|
GeraExcept("Não foi possível abrir o arquivo! $workFile "); |
|
} |
|
|
|
while (!feof($handle)) { |
|
$buffer = trim(fgets($handle)); |
|
|
|
if ($buffer) { |
|
$dados = LimpaBuffer($buffer); |
|
//$columns = explode(",", $dados[0]); |
|
$columns = is_array($dados) ? $dados : explode(",", $dados); |
|
|
|
if(count($columns) == 18){ |
|
$columnInsert = array( |
|
"accountcode" => $columns[0], |
|
"src" => $columns[1], |
|
"dst" => $columns[2], |
|
"dcontext" => $columns[3], |
|
"clid" => $columns[4], |
|
"channel" => $columns[5], |
|
"dstchannel" => $columns[6], |
|
"lastapp" => $columns[7], |
|
"lastdata" => $columns[8], |
|
"calldate" => $columns[9], |
|
"answerdate" => $columns[10], |
|
"hangupdate" => $columns[11], |
|
"duration" => $columns[12], |
|
"billsec" => $columns[13], |
|
"disposition" => $columns[14], |
|
"amaflags" => $columns[15], |
|
"uniqueid" => $columns[16], |
|
"userfield" => $columns[17] |
|
); |
|
} |
|
|
|
if(count($columns) == 25){ |
|
|
|
$lastdata = array( |
|
$columns[8], |
|
$columns[9], |
|
$columns[10], |
|
$columns[10], |
|
$columns[11], |
|
$columns[12], |
|
$columns[13], |
|
$columns[14], |
|
$columns[15], |
|
); |
|
|
|
$columnInsert = array( |
|
"accountcode" => $columns[0], |
|
"src" => $columns[1], |
|
"dst" => $columns[2], |
|
"dcontext" => $columns[3], |
|
"clid" => $columns[4], |
|
"channel" => $columns[5], |
|
"dstchannel" => $columns[6], |
|
"lastapp" => $columns[7], |
|
"lastdata" => implode(",", $lastdata), |
|
"calldate" => $columns[16], |
|
"answerdate" => $columns[17], |
|
"hangupdate" => $columns[18], |
|
"duration" => $columns[19], |
|
"billsec" => $columns[20], |
|
"disposition" => $columns[21], |
|
"amaflags" => $columns[22], |
|
"uniqueid" => $columns[23], |
|
"userfield" => $columns[24] |
|
); |
|
} |
|
|
|
if(count($columns) == 27){ |
|
|
|
$lastdata = array( |
|
$columns[8], |
|
$columns[9], |
|
$columns[10], |
|
$columns[10], |
|
$columns[11], |
|
$columns[12], |
|
$columns[13], |
|
$columns[14], |
|
$columns[15], |
|
$columns[16], |
|
$columns[17], |
|
); |
|
|
|
$columnInsert = array( |
|
"accountcode" => $columns[0], |
|
"src" => $columns[1], |
|
"dst" => $columns[2], |
|
"dcontext" => $columns[3], |
|
"clid" => $columns[4], |
|
"channel" => $columns[5], |
|
"dstchannel" => $columns[6], |
|
"lastapp" => $columns[7], |
|
"lastdata" => implode(",", $lastdata), |
|
"calldate" => $columns[18], |
|
"answerdate" => $columns[19], |
|
"hangupdate" => $columns[20], |
|
"duration" => $columns[21], |
|
"billsec" => $columns[22], |
|
"disposition" => $columns[23], |
|
"amaflags" => $columns[24], |
|
"uniqueid" => $columns[25], |
|
"userfield" => $columns[26] |
|
); |
|
} |
|
|
|
if(count($columns) == 28){ |
|
|
|
$lastdata = array( |
|
$columns[8], |
|
$columns[9], |
|
$columns[10], |
|
$columns[10], |
|
$columns[11], |
|
$columns[12], |
|
$columns[13], |
|
$columns[14], |
|
$columns[15], |
|
$columns[16], |
|
$columns[17], |
|
$columns[18], |
|
); |
|
|
|
$columnInsert = array( |
|
"accountcode" => $columns[0], |
|
"src" => $columns[1], |
|
"dst" => $columns[2], |
|
"dcontext" => $columns[3], |
|
"clid" => $columns[4], |
|
"channel" => $columns[5], |
|
"dstchannel" => $columns[6], |
|
"lastapp" => $columns[7], |
|
"lastdata" => implode(",", $lastdata), |
|
"calldate" => $columns[19], |
|
"answerdate" => $columns[20], |
|
"hangupdate" => $columns[21], |
|
"duration" => $columns[22], |
|
"billsec" => $columns[23], |
|
"disposition" => $columns[24], |
|
"amaflags" => $columns[25], |
|
"uniqueid" => $columns[26], |
|
"userfield" => $columns[27] |
|
); |
|
} |
|
|
|
if(count($columns) == 29){ |
|
|
|
$lastdata = array( |
|
$columns[8], |
|
$columns[9], |
|
$columns[10], |
|
$columns[10], |
|
$columns[11], |
|
$columns[12], |
|
$columns[13], |
|
$columns[14], |
|
$columns[15], |
|
$columns[16], |
|
$columns[17], |
|
$columns[18], |
|
$columns[19], |
|
); |
|
|
|
$columnInsert = array( |
|
"accountcode" => $columns[0], |
|
"src" => $columns[1], |
|
"dst" => $columns[2], |
|
"dcontext" => $columns[3], |
|
"clid" => $columns[4], |
|
"channel" => $columns[5], |
|
"dstchannel" => $columns[6], |
|
"lastapp" => $columns[7], |
|
"lastdata" => implode(",", $lastdata), |
|
"calldate" => $columns[20], |
|
"answerdate" => $columns[21], |
|
"hangupdate" => $columns[22], |
|
"duration" => $columns[23], |
|
"billsec" => $columns[24], |
|
"disposition" => $columns[25], |
|
"amaflags" => $columns[26], |
|
"uniqueid" => $columns[27], |
|
"userfield" => $columns[28] |
|
); |
|
} |
|
|
|
$query = "insert into cdr(accountcode, src, dst, dcontext, clid, " |
|
. "channel, dstchannel, lastapp, lastdata, calldate," |
|
. "answerdate,hangupdate, duration, " |
|
. "billsec, disposition, amaflags, uniqueid, userfield)" |
|
. "values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);\n"; |
|
$query = sprintf($query, NullDb($columnInsert['accountcode']), |
|
NullDb($columnInsert['src']), |
|
NullDb($columnInsert['dst']), |
|
NullDb($columnInsert['dcontext']), |
|
NullDb($columnInsert['clid']), |
|
NullDb($columnInsert['channel']), |
|
NullDb($columnInsert['dstchannel']), |
|
NullDb($columnInsert['lastapp']), |
|
NullDb($columnInsert['lastdata']), |
|
NullDb($columnInsert['calldate']), |
|
NullDb($columnInsert['answerdate']), |
|
NullDb($columnInsert['calldate']), |
|
sprintf("strtoint('%s')", $columnInsert['duration']), |
|
sprintf("strtoint('%s')", $columnInsert['billsec']), |
|
NullDb($columnInsert['disposition']), |
|
sprintf("strtoint('%s')", $columnInsert['amaflags']), |
|
NullDb($columnInsert['uniqueid']), |
|
NullDb($columnInsert['userfield']) |
|
); |
|
|
|
if (!pg_query($query)) { |
|
$lineErro .= sprintf("Num. Erro: %s %s\nErro Sys: %s\n\nErro DB: %s\n\nQuery: %s\n%s\n", |
|
++$numErro, date("d-m-Y H:i:s"), GetLasterror(), pg_errormessage(), $query, str_repeat('-', 80)); |
|
} else { |
|
$lineOk++; |
|
} |
|
$lines++; |
|
} |
|
} |
|
|
|
$res = sprintf("Resumo da Importacao, Linhas: %s Importadas: %s Erro: %s\n", $lines, $lineOk, $numErro); |
|
file_put_contents($pathLog, $lineErro); |
|
return $res; |
|
} catch (Exception $ex) { |
|
return $ex->getMessage(); |
|
} |
|
} |