|
|
#!/usr/bin/php -q |
|
|
<?php |
|
|
error_reporting(E_ERROR); |
|
|
ini_set('display_errors', 0); |
|
|
include("util/util.php"); |
|
|
include("funcoes/shared.php"); |
|
|
include("util/Pid.php"); |
|
|
|
|
|
/* |
|
|
* Inicio da busca. |
|
|
*/ |
|
|
$dataInicio = isset($argv[1]) ? isset($argv[1]) : date("Y-m-d"); |
|
|
|
|
|
/* |
|
|
* Realiza a conexao com o banco de dados. |
|
|
*/ |
|
|
$dbcon = impGetConnection(); |
|
|
|
|
|
/* |
|
|
* Variavel indica uma transacao em curso. |
|
|
*/ |
|
|
$inTran = 0; |
|
|
$numDacs = 0; |
|
|
$numBilhetes = 0; |
|
|
$numDuplic = 0; |
|
|
|
|
|
/* |
|
|
* Log do sistema |
|
|
*/ |
|
|
$pathLog = "/var/log/asterisk/importa_bilhetes_dacs.log"; |
|
|
|
|
|
/* |
|
|
* Garante apenas uma instancia do script. |
|
|
*/ |
|
|
$pid = new Pid(); |
|
|
|
|
|
try { |
|
|
/* |
|
|
* verifica se a conexao foi criada com sucesso. |
|
|
*/ |
|
|
if (pg_connection_status($dbcon) === PGSQL_CONNECTION_BAD) { |
|
|
ibRaiseExcept("Nao foi possivel conectar com o banco de dados!"); |
|
|
} |
|
|
|
|
|
/* |
|
|
* Importa os registros da tabela ast_eveentos_dacs para a tabela ast_bilhetes. |
|
|
*/ |
|
|
if (!pg_query($dbcon, ImportaReg($dataInicio))) { |
|
|
ibRaiseExcept("Nao foi possivel importar os registros para o banco de dados!"); |
|
|
} |
|
|
|
|
|
$dataLog = date("d-m-Y"); |
|
|
|
|
|
while (true) { |
|
|
//$query = "select distinct id_bilhetes, calldate, uniqueid, userfield, billsec from pbx_bilhetes a, pbx_eventos_dacs b where b.uid2 = a.uniqueid and trim(coalesce(userfield, '')) = '' and amaflags <> 777999 order by a.calldate limit 100;"; |
|
|
$query = "select distinct id_bilhetes, calldate, uniqueid, userfield, billsec from pbx_bilhetes a where trim(coalesce(userfield, '')) = '' and amaflags <> 777999 and a.calldate::date >= '$dataInicio' order by a.calldate limit 100;"; |
|
|
$result = pg_query($query); |
|
|
if (!pg_num_rows($result)) { |
|
|
break; |
|
|
} |
|
|
|
|
|
while ($dados = pg_fetch_array($result)) { |
|
|
$uid = $dados["uniqueid"]; |
|
|
$billsec = $dados["billsec"]; |
|
|
|
|
|
// |
|
|
// Procura o arquivo. |
|
|
$infoFile = GetFileAudio($uid); |
|
|
|
|
|
if (!$infoFile) { |
|
|
$query = "update pbx_bilhetes set amaflags = 777999 where uniqueid = '{$uid}'"; |
|
|
if (!pg_query($query)) { |
|
|
WriteLog($log, $query . " $dataLog \n"); |
|
|
} |
|
|
} else if ($billsec < 3) { |
|
|
$query = sprintf("update pbx_bilhetes set amaflags = 777999, userfield = '%s', billsec = '%s', duration = '%s' where uniqueid = '%s'", $infoFile[0], $infoFile[1], $infoFile[1], $uid); |
|
|
if (!pg_query($query)) { |
|
|
WriteLog($log, $query . " $dataLog \n"); |
|
|
} |
|
|
} else { |
|
|
$query = sprintf("update pbx_bilhetes set amaflags = 777999, userfield = '%s' where uniqueid = '%s'", $infoFile[0], $uid); |
|
|
if (!pg_query($query)) { |
|
|
WriteLog($log, $query . " $dataLog \n"); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
WriteLog("Registros importados com sucesso.", $pathLog); |
|
|
} catch (Exception $ex) { |
|
|
$log = sprintf("Erro: %s Data %s\n", $ex->getMessage(), date('Y-m-d H:i:s')); |
|
|
WriteLog($log, $pathLog); |
|
|
} |
|
|
|
|
|
$pid->PidRemove(); |
|
|
|
|
|
function ibRaiseExcept($msg, $dbError = true) { |
|
|
if ($dbError) { |
|
|
$msg .= " DB: " . pg_last_error(); |
|
|
} |
|
|
GeraExcept($msg); |
|
|
} |
|
|
|
|
|
function impGetConnection($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_connect($connStr); |
|
|
if (!$conn) { |
|
|
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel estabelecer uma conex<EFBFBD>o com o banco de dados!"); |
|
|
} |
|
|
|
|
|
return $conn; |
|
|
} |
|
|
|
|
|
function ImportaReg($dataInicio) { |
|
|
return " |
|
|
-- Seleciona os registros a serem restaurados. |
|
|
drop table if exists pbx_eventos_dacs_perdidos; |
|
|
select * into pbx_eventos_dacs_perdidos from pbx_eventos_dacs a where to_timestamp(uid1::numeric)::date >= '$dataInicio' and not exists(select '' from pbx_bilhetes where uniqueid = a.uid2) |
|
|
and evento in( |
|
|
'COMPLETACALLERRAMAL','COMPLETAAGENT','COMPLETACALLER','COMPLETAAGENTRAMAL', 'TRANSFERORIG','COMPLETECALLERRAMAL','COMPLETEAGENT','COMPLETEAGENTRAMAL','COMPLETECALLER', 'TRANSFER', 'ABANDON'); |
|
|
|
|
|
-- select count(*) from pbx_eventos_dacs_perdidos; |
|
|
-- select * from pbx_eventos_dacs_perdidos; |
|
|
--Adiciona um campo para indexar os registros. |
|
|
alter table pbx_eventos_dacs_perdidos add iddpl serial not null; |
|
|
|
|
|
--Seleciono os registro que irao permanecer para serem restaurados |
|
|
drop table if exists pbx_eventos_dacs_perdidos_dupl; |
|
|
select uid2, min(iddpl) as iddpl into pbx_eventos_dacs_perdidos_dupl from pbx_eventos_dacs_perdidos group by uid2 having count(*) > 1; |
|
|
-- select count(*) from pbx_eventos_dacs_perdidos_dupl; |
|
|
|
|
|
|
|
|
--Apaga os registros duplicados com base na tabela pbx_eventos_dacs_perdidos_dupl, qualquer registro duplicado que o id nao esteja neta tabela sera apagado. |
|
|
delete |
|
|
from pbx_eventos_dacs_perdidos a |
|
|
using pbx_eventos_dacs_perdidos_dupl b |
|
|
where a.uid2 = b.uid2 |
|
|
and not exists(select '' from pbx_eventos_dacs_perdidos_dupl where iddpl = a.iddpl); |
|
|
|
|
|
|
|
|
--select '' from pbx_eventos_dacs_perdidos group by uid2 having count(*) > 1; |
|
|
--select count(*) from pbx_eventos_dacs_perdidos; |
|
|
|
|
|
|
|
|
-- IMPORTA CHAMADAS ABANDONADAS - |
|
|
insert into ast_bilhetes(calldate,clid, src,dst,duration, billsec, disposition, uniqueid, data_bilhete) |
|
|
select distinct to_timestamp(a.uid2::numeric::bigint), b.param2, b.param2, (select numero from pbx_dacs where nome = a.fila), strtoint(a.param3), strtoint(a.param3),'ANSWERED', a.uid2, to_timestamp(a.uid2::numeric::bigint)::date |
|
|
from pbx_eventos_dacs_perdidos a, pbx_eventos_dacs b |
|
|
where b.uid2 = a.uid2 |
|
|
and A.evento = 'ABANDON' |
|
|
and b.evento = 'ENTERQUEUE' |
|
|
and coalesce(trim(b.param2), '') <> ''; |
|
|
|
|
|
-- IMPORTA CHAMADAS ATENDIDAS - |
|
|
insert into ast_bilhetes(calldate,clid, src,dst,duration, billsec, disposition, uniqueid, data_bilhete) |
|
|
select to_timestamp(a.uid2::numeric::bigint), |
|
|
b.param2 as clid, |
|
|
b.param2 as src, |
|
|
(select numero from pbx_dacs where nome = a.fila) as dst, |
|
|
strtoint(a.param2) as billsec, |
|
|
strtoint(a.param2) as duration, |
|
|
'ANSWERED' as disposition, |
|
|
a.uid2 as uniqueid, |
|
|
to_timestamp(a.uid2::numeric::bigint)::date as data_bilhete |
|
|
from pbx_eventos_dacs_perdidos a, pbx_eventos_dacs b |
|
|
where b.uid2 = a.uid2 |
|
|
and A.evento in('COMPLETECALLERRAMAL','COMPLETEAGENT','COMPLETEAGENTRAMAL','COMPLETECALLER', 'TRANSFER') |
|
|
and b.evento = 'ENTERQUEUE' |
|
|
and coalesce(trim(b.param2), '') <> ''; |
|
|
|
|
|
|
|
|
-- IMPORTA CHAMADAS EFETUADAS NA FILA - |
|
|
insert into ast_bilhetes(calldate,clid, src,dst,duration, billsec, disposition, uniqueid, data_bilhete) |
|
|
select to_timestamp(a.uid2::numeric::bigint), |
|
|
b.agente as clid, |
|
|
b.agente as src, |
|
|
b.destino as dst, |
|
|
strtoint(a.param2) as billsec, |
|
|
strtoint(a.param2) as duration, |
|
|
case when(strtoint(a.param2) > 0)then 'ANSWERED' else 'NO ANSWER' end as disposition, |
|
|
a.uid2 as uniqueid, |
|
|
to_timestamp(a.uid2::numeric::bigint)::date as data_bilhete |
|
|
from pbx_eventos_dacs_perdidos a, pbx_bilhetes_complemento b |
|
|
where b.uniqueid2 = a.uid2 |
|
|
and a.evento in('COMPLETACALLERRAMAL','COMPLETAAGENT','COMPLETACALLER','COMPLETAAGENTRAMAL', 'TRANSFERORIG') |
|
|
and b.direcao = 'saida-pstn' |
|
|
and coalesce(trim(b.agente), '') <> '';; |
|
|
"; |
|
|
} |
|
|
|
|
|
function GetFileAudio($uid) { |
|
|
$file = glob("/var/spool/asterisk/monitor/*{$uid}.WAV"); |
|
|
|
|
|
if (!$file) { |
|
|
return false; |
|
|
} |
|
|
|
|
|
$fileName = basename($file[0]); |
|
|
$size = filesize($fileName) / 1024; |
|
|
$billsec = $size * 0.6276; |
|
|
|
|
|
return array($fileName, (int) $billsec); |
|
|
}
|
|
|
|