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

#!/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();
}
}