Commit 96599235b2ec06b4c0c9f075949f37279f8feb16

Authored by Eduardo Heinske
2 parents 2defe5d0 513534cc

Merge de uma correção não comitada da branch 87_OS026

rn/PENAgendamentoRN.php
1   -<?php
2   -
3   -require_once dirname(__FILE__) . '/../../../SEI.php';
4   -
5   -class PENAgendamentoRN extends InfraRN {
6   -
7   - public function __construct() {
8   - parent::__construct();
9   - }
10   -
11   - protected function inicializarObjInfraIBanco() {
12   - return BancoSEI::getInstance();
13   - }
14   -
15   - public function processarPendencias() {
16   - try {
17   -
18   - ini_set('max_execution_time', '0');
19   - ini_set('memory_limit', '-1');
20   -
21   - InfraDebug::getInstance()->setBolLigado(true);
22   - InfraDebug::getInstance()->setBolDebugInfra(false);
23   - InfraDebug::getInstance()->setBolEcho(false);
24   - InfraDebug::getInstance()->limpar();
25   -
26   - SessaoSEI::getInstance(false)->simularLogin(SessaoSEI::$USUARIO_SEI, SessaoSEI::$UNIDADE_TESTE);
27   -
28   - $numSeg = InfraUtil::verificarTempoProcessamento();
29   -
30   - InfraDebug::getInstance()->gravar('ANALISANDO OS TRÂMITES PENDENTES ENVIADOS PARA O ÓRGÃO (PEN)');
31   -
32   - // Verifica todas as pendências de trâmite para o órgão atual
33   - $objReceberProcedimentoRN = new ReceberProcedimentoRN();
34   - $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN();
35   - $objReceberReciboTramiteRN = new ReceberReciboTramiteRN();
36   -
37   - $result = $objReceberProcedimentoRN->listarPendencias();
38   -
39   - if (isset($result) && count($result) > 0) {
40   -
41   - //Identificar à natureza da pendência
42   - foreach ($result as $pendencia) {
43   -
44   - try {
45   -
46   - switch ($pendencia->getStrStatus()) {
47   - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_INICIADO:
48   - ;
49   - break;
50   -
51   - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE:
52   - $objReceberProcedimentoRN->receberProcedimento($pendencia->getNumIdentificacaoTramite());
53   - $objEnviarReciboTramiteRN->enviarReciboTramiteProcesso($pendencia->getNumIdentificacaoTramite());
54   - break;
55   -
56   - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO:
57   - $objReceberProcedimentoRN->receberProcedimento($pendencia->getNumIdentificacaoTramite());
58   - $objEnviarReciboTramiteRN->enviarReciboTramiteProcesso($pendencia->getNumIdentificacaoTramite());
59   - break;
60   -
61   - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO:
62   - $objReceberProcedimentoRN->receberProcedimento($pendencia->getNumIdentificacaoTramite());
63   - $objEnviarReciboTramiteRN->enviarReciboTramiteProcesso($pendencia->getNumIdentificacaoTramite());
64   - break;
65   -
66   - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_ENVIADO_DESTINATARIO:
67   - $objReceberReciboTramiteRN->receberReciboDeTramite($pendencia->getNumIdentificacaoTramite());
68   - break;
69   -
70   - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE:
71   - ;
72   - break;
73   -
74   - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO:
75   - ;
76   - break;
77   -
78   - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO:
79   - ;
80   - break;
81   -
82   - default:
83   - //TODO: Alterar lógica para não deixar de processar demais pendências retornadas pelo PEN
84   - throw new Exception('Situação do trâmite não pode ser identificada.');
85   - break;
86   - }
87   - } catch (InfraException $e) {
88   - $strAssunto = 'Erro executando agendamentos.';
89   - $strErro = InfraException::inspecionar($e);
90   - LogSEI::getInstance()->gravar($strAssunto . "\n\n" . $strErro);
91   - }
92   - }
93   - }
94   -
95   - $numSeg = InfraUtil::verificarTempoProcessamento($numSeg);
96   - InfraDebug::getInstance()->gravar('TEMPO TOTAL DE EXECUCAO: ' . $numSeg . ' s');
97   - InfraDebug::getInstance()->gravar('FIM');
98   -
99   - LogSEI::getInstance()->gravar(InfraDebug::getInstance()->getStrDebug());
100   - } catch (Exception $e) {
101   - InfraDebug::getInstance()->setBolLigado(false);
102   - InfraDebug::getInstance()->setBolDebugInfra(false);
103   - InfraDebug::getInstance()->setBolEcho(false);
104   -
105   - throw new InfraException('Erro processando pendências de integração com o PEN - Processo Eletrônico Nacional.', $e);
106   - }
107   - }
108   -
109   - public function verificarTramitesRecusados() {
110   -
111   - try {
112   -
113   - ini_set('max_execution_time', '0');
114   - ini_set('memory_limit', '-1');
115   -
116   - InfraDebug::getInstance()->setBolLigado(true);
117   - InfraDebug::getInstance()->setBolDebugInfra(false);
118   - InfraDebug::getInstance()->setBolEcho(false);
119   - InfraDebug::getInstance()->limpar();
120   -
121   - SessaoSEI::getInstance(false)->simularLogin(SessaoSEI::$USUARIO_SEI, SessaoSEI::$UNIDADE_TESTE);
122   -
123   - //BUSCA OS TRÂMITES PENDENTES
124   - $tramitePendenteDTO = new TramitePendenteDTO();
125   - $tramitePendenteDTO->retNumIdTramite();
126   - $tramitePendenteDTO->retNumIdAtividade();
127   - $tramitePendenteDTO->retNumIdTabela();
128   - $tramitePendenteDTO->setOrd('IdTabela', InfraDTO::$TIPO_ORDENACAO_ASC);
129   -
130   - $tramitePendenteBD = new TramiteBD($this->getObjInfraIBanco());
131   - $pendentes = $tramitePendenteBD->listar($tramitePendenteDTO);
132   -
133   -
134   - if ($pendentes) {
135   -
136   - //Instancia a RN de ProcessoEletronico
137   - $processoEletronicoRN = new ProcessoEletronicoRN();
138   - $arrProtocolos = array();
139   -
140   - foreach ($pendentes as $tramite) {
141   - $objTramite = $processoEletronicoRN->consultarTramites($tramite->getNumIdTramite());
142   - $objTramite = $objTramite[0];
143   -
144   - if (isset($arrProtocolos[$objTramite->protocolo])) {
145   - if ($arrProtocolos[$objTramite->protocolo]['objTramite']->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE || $arrProtocolos[$objTramite->protocolo]['objTramite']->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO) {
146   - $tramitePendenteBD->excluir($arrProtocolos[$objTramite->protocolo]['tramitePendente']);
147   - }
148   - }
149   -
150   - $arrProtocolos[$objTramite->protocolo]['objTramite'] = $objTramite;
151   - $arrProtocolos[$objTramite->protocolo]['tramitePendente'] = $tramite;
152   - }
153   -
154   -
155   -
156   - //Percorre as pendências
157   - foreach ($arrProtocolos as $protocolo) {
158   -
159   - //Busca o status do trâmite
160   - $tramite = $protocolo['tramitePendente'];
161   - $objTramite = $protocolo['objTramite'];
162   - $status = $objTramite->situacaoAtual;
163   -
164   - if ($status == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO) {
165   -
166   - //Verifica se o processo do trâmite se encontra de fato recusado
167   - //Busca os dados do procedimento
168   - $processoEletronicoDTO = new ProcessoEletronicoDTO();
169   - $processoEletronicoDTO->setStrNumeroRegistro($objTramite->NRE);
170   - $processoEletronicoDTO->retDblIdProcedimento();
171   -
172   - $processoEletronicoBD = new ProcessoEletronicoBD($this->getObjInfraIBanco());
173   - $objProcessoEletronico = $processoEletronicoBD->consultar($processoEletronicoDTO);
174   -
175   - if ($objProcessoEletronico) {
176   -
177   - //Busca o processo
178   - $objProtocolo = new PenProtocoloDTO();
179   - $objProtocolo->setDblIdProtocolo($objProcessoEletronico->getDblIdProcedimento());
180   -
181   - $protocoloBD = new ProtocoloBD($this->getObjInfraIBanco());
182   -
183   - //Verifica se o protocolo foi encontrado nessa tabela
184   - if ($protocoloBD->contar($objProtocolo) > 0) {
185   -
186   - //Altera o registro
187   - $objProtocolo->setStrSinObteveRecusa('S');
188   - $protocoloBD->alterar($objProtocolo);
189   -
190   - //Busca a unidade de destino
191   - $atributoAndamentoDTO = new AtributoAndamentoDTO();
192   - $atributoAndamentoDTO->setNumIdAtividade($tramite->getNumIdAtividade());
193   - $atributoAndamentoDTO->setStrNome('UNIDADE_DESTINO');
194   - $atributoAndamentoDTO->retStrValor();
195   -
196   - $atributoAndamentoBD = new AtributoAndamentoBD($this->getObjInfraIBanco());
197   - $atributoAndamento = $atributoAndamentoBD->consultar($atributoAndamentoDTO);
198   -
199   - $motivo = $objTramite->motivoDaRecusa;
200   - $unidadeDestino = $atributoAndamento->getStrValor();
201   -
202   - //Realiza o registro da recusa
203   - ExpedirProcedimentoRN::receberRecusaProcedimento(ProcessoEletronicoRN::$MOTIVOS_RECUSA[$motivo], $unidadeDestino, null, $objProcessoEletronico->getDblIdProcedimento());
204   -
205   - $tramitePendenteBD->excluir($tramite);
206   - }
207   - }
208   - } else if ($status == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE || $status == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO) {
209   -
210   - $tramitePendenteBD->excluir($tramite);
211   - }
212   - }
213   - }
214   - } catch (Exception $e) {
215   - InfraDebug::getInstance()->setBolLigado(false);
216   - InfraDebug::getInstance()->setBolDebugInfra(false);
217   - InfraDebug::getInstance()->setBolEcho(false);
218   -
219   - throw new InfraException('Erro na Verificação de Processos Recusados.', $e);
220   - }
221   - }
222   -
223   - public function seiVerificarServicosBarramento() {
224   - try {
225   -
226   - $cont = 0;
227   - $servico = array();
228   - $exec = shell_exec('ps -ef');
229   - if (strpos($exec, '/usr/bin/supervisord') == false) {
230   - $cont++;
231   - $servico[] = 'supervisord';
232   - }
233   - if (strpos($exec, '/usr/sbin/gearmand') == false) {
234   - $cont++;
235   - $servico[] = ' gearmand';
236   - }
237   - if (strpos($exec, 'PendenciasTramiteRN.php') == false) {
238   - $cont++;
239   - $servico[] = ' PendenciasTramiteRN.php';
240   - }
241   - if (strpos($exec, 'ProcessarPendenciasRN.php') == false) {
242   - $cont++;
243   - $servico[] = 'ProcessarPendenciasRN.php';
244   - }
245   -
246   - $servicos = implode("\n", $servico);
247   -
248   -
249   -
250   - if ($cont > 0) {
251   - $msg = "Falha na execução. \n Os seguintes serviços não estão rodando: \n $servicos";
252   -// LogSEI::getInstance()->gravar();
253   - throw new InfraException($msg, $e);
254   - } else {
255   - LogSEI::getInstance()->gravar("Todos os serviços estão rodando.");
256   - }
257   -// $objInfraParametro = new InfraParametro(BancoSEI::getInstance());
258   -// InfraMail::enviarConfigurado(ConfiguracaoSEI::getInstance(), $objInfraParametro->getValor('SEI_EMAIL_SISTEMA'), $objInfraParametro->getValor('SEI_EMAIL_ADMINISTRADOR'), null, null, 'Teste Agendamento SEI', 'Agendamento SEI executado com sucesso.');
259   - } catch (Exception $e) {
260   - throw new InfraException('Erro ao rodar verificação de status do serviços Gearmand e Supervisord', $e);
261   - }
262   - }
263   -
264   - /**
265   - * Atualiza??o das hip?teses legais vindas do barramento
266   - * @throws InfraException
267   - */
268   - public function atualizarHipotesesLegais() {
269   - try {
270   - $objBD = new PenHipoteseLegalBD($this->inicializarObjInfraIBanco());
271   - $processoEletronicoRN = new ProcessoEletronicoRN();
272   - $hipotesesPen = $processoEletronicoRN->consultarHipotesesLegais();
273   -
274   - if(empty($hipotesesPen)){
275   - throw new InfraException('Não foi possível obter as hipóteses legais dos serviços de integração');
276   - }
277   -
278   - //Para cada hipótese vinda do PEN será verificado a existencia.
279   - foreach ($hipotesesPen->hipotesesLegais->hipotese as $hipotese) {
280   -
281   - $objDTO = new PenHipoteseLegalDTO();
282   - $objDTO->setNumIdentificacao($hipotese->identificacao);
283   - $objDTO->setNumMaxRegistrosRetorno(1);
284   - $objDTO->retStrNome();
285   - $objDTO->retNumIdHipoteseLegal();
286   - $objConsulta = $objBD->consultar($objDTO);
287   -
288   - //Caso não haja um nome para a hipótese legal, ele pula para a próxima.
289   - if (empty($hipotese->nome)) {
290   - continue;
291   - }
292   -
293   - $objDTO->setStrNome($hipotese->nome);
294   -
295   - if ($hipotese->status) {
296   - $objDTO->setStrAtivo('S');
297   - } else {
298   - $objDTO->setStrAtivo('N');
299   - }
300   -
301   - //Caso n?o exista a hip?tese ir? cadastra-la no sei.
302   - if (empty($objConsulta)) {
303   -
304   - $objBD->cadastrar($objDTO);
305   - } else {
306   - //Caso contr?rio apenas ir? atualizar os dados.
307   - $objDTO->setNumIdHipoteseLegal($objConsulta->getNumIdHipoteseLegal());
308   - $objBD->alterar($objDTO);
309   - }
310   - }
311   -
312   -
313   - LogSEI::getInstance()->gravar("Hipóteses Legais atualizadas.");
314   - } catch (Exception $e) {
315   - throw new InfraException('Erro no agendamento das Hipóteses Legais', $e);
316   - }
317   - }
318   -
319   -}
320   -
321   -// $client = new GearmanClient();
322   -// $client->addServer('localhost', 4730);
323   -// $client->setCreatedCallback("create_change");
324   -// $client->setDataCallback("data_change");
325   -// $client->setStatusCallback("status_change");
326   -// $client->setCompleteCallback("complete_change");
327   -// $client->setFailCallback("fail_change");
328   -// $data_array =array('mydata'=>'task');
329   -// $task= $client->addTask("reverse", "mydata", $data_array);
330   -// $task2= $client->addTaskLow("reverse", "task", NULL);
331   -// //$result = $client->do("reverse", "teste");
332   -// $client->runTasks();
333   -// echo "DONE\n" . $result;
334   -// function create_change($task)
335   -// {
336   -// echo "CREATED: " . $task->jobHandle() . "\n";
337   -// }
338   -// function status_change($task)
339   -// {
340   -// echo "STATUS: " . $task->jobHandle() . " - " . $task->taskNumerator() .
341   -// "/" . $task->taskDenominator() . "\n";
342   -// }
343   -// function complete_change($task)
344   -// {
345   -// echo "COMPLETE: " . $task->jobHandle() . ", " . $task->data() . "\n";
346   -// }
347   -// function fail_change($task)
348   -// {
349   -// echo "FAILED: " . $task->jobHandle() . "\n";
350   -// }
351   -// function data_change($task)
352   -// {
353   -// echo "DATA: " . $task->data() . "\n";
354   -// }
355   -// Function Client_error()
356   -// {
357   -// if (! $client->runTasks())
358   -// return $client->error() ;
  1 +<?php
  2 +
  3 +require_once dirname(__FILE__) . '/../../../SEI.php';
  4 +
  5 +class PENAgendamentoRN extends InfraRN {
  6 +
  7 + public function __construct() {
  8 + parent::__construct();
  9 + }
  10 +
  11 + protected function inicializarObjInfraIBanco() {
  12 + return BancoSEI::getInstance();
  13 + }
  14 +
  15 + public function processarPendencias() {
  16 + try {
  17 +
  18 + ini_set('max_execution_time', '0');
  19 + ini_set('memory_limit', '-1');
  20 +
  21 + InfraDebug::getInstance()->setBolLigado(true);
  22 + InfraDebug::getInstance()->setBolDebugInfra(false);
  23 + InfraDebug::getInstance()->setBolEcho(false);
  24 + InfraDebug::getInstance()->limpar();
  25 +
  26 + SessaoSEI::getInstance(false)->simularLogin(SessaoSEI::$USUARIO_SEI, SessaoSEI::$UNIDADE_TESTE);
  27 +
  28 + $numSeg = InfraUtil::verificarTempoProcessamento();
  29 +
  30 + InfraDebug::getInstance()->gravar('ANALISANDO OS TRÂMITES PENDENTES ENVIADOS PARA O ÓRGÃO (PEN)');
  31 +
  32 + // Verifica todas as pendências de trâmite para o órgão atual
  33 + $objReceberProcedimentoRN = new ReceberProcedimentoRN();
  34 + $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN();
  35 + $objReceberReciboTramiteRN = new ReceberReciboTramiteRN();
  36 +
  37 + $result = $objReceberProcedimentoRN->listarPendencias();
  38 +
  39 + if (isset($result) && count($result) > 0) {
  40 +
  41 + //Identificar à natureza da pendência
  42 + foreach ($result as $pendencia) {
  43 +
  44 + try {
  45 +
  46 + switch ($pendencia->getStrStatus()) {
  47 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_INICIADO:
  48 + ;
  49 + break;
  50 +
  51 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE:
  52 + $objReceberProcedimentoRN->receberProcedimento($pendencia->getNumIdentificacaoTramite());
  53 + $objEnviarReciboTramiteRN->enviarReciboTramiteProcesso($pendencia->getNumIdentificacaoTramite());
  54 + break;
  55 +
  56 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO:
  57 + $objReceberProcedimentoRN->receberProcedimento($pendencia->getNumIdentificacaoTramite());
  58 + $objEnviarReciboTramiteRN->enviarReciboTramiteProcesso($pendencia->getNumIdentificacaoTramite());
  59 + break;
  60 +
  61 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO:
  62 + $objReceberProcedimentoRN->receberProcedimento($pendencia->getNumIdentificacaoTramite());
  63 + $objEnviarReciboTramiteRN->enviarReciboTramiteProcesso($pendencia->getNumIdentificacaoTramite());
  64 + break;
  65 +
  66 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_ENVIADO_DESTINATARIO:
  67 + $objReceberReciboTramiteRN->receberReciboDeTramite($pendencia->getNumIdentificacaoTramite());
  68 + break;
  69 +
  70 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE:
  71 + ;
  72 + break;
  73 +
  74 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO:
  75 + ;
  76 + break;
  77 +
  78 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO:
  79 + ;
  80 + break;
  81 +
  82 + default:
  83 + //TODO: Alterar lógica para não deixar de processar demais pendências retornadas pelo PEN
  84 + throw new Exception('Situação do trâmite não pode ser identificada.');
  85 + break;
  86 + }
  87 + } catch (InfraException $e) {
  88 + $strAssunto = 'Erro executando agendamentos.';
  89 + $strErro = InfraException::inspecionar($e);
  90 + LogSEI::getInstance()->gravar($strAssunto . "\n\n" . $strErro);
  91 + }
  92 + }
  93 + }
  94 +
  95 + $numSeg = InfraUtil::verificarTempoProcessamento($numSeg);
  96 + InfraDebug::getInstance()->gravar('TEMPO TOTAL DE EXECUCAO: ' . $numSeg . ' s');
  97 + InfraDebug::getInstance()->gravar('FIM');
  98 +
  99 + LogSEI::getInstance()->gravar(InfraDebug::getInstance()->getStrDebug());
  100 + } catch (Exception $e) {
  101 + InfraDebug::getInstance()->setBolLigado(false);
  102 + InfraDebug::getInstance()->setBolDebugInfra(false);
  103 + InfraDebug::getInstance()->setBolEcho(false);
  104 +
  105 + throw new InfraException('Erro processando pendências de integração com o PEN - Processo Eletrônico Nacional.', $e);
  106 + }
  107 + }
  108 +
  109 + public function verificarTramitesRecusados() {
  110 +
  111 + try {
  112 +
  113 + ini_set('max_execution_time', '0');
  114 + ini_set('memory_limit', '-1');
  115 +
  116 + InfraDebug::getInstance()->setBolLigado(true);
  117 + InfraDebug::getInstance()->setBolDebugInfra(false);
  118 + InfraDebug::getInstance()->setBolEcho(false);
  119 + InfraDebug::getInstance()->limpar();
  120 +
  121 + SessaoSEI::getInstance(false)->simularLogin(SessaoSEI::$USUARIO_SEI, SessaoSEI::$UNIDADE_TESTE);
  122 +
  123 + //BUSCA OS TRÂMITES PENDENTES
  124 + $tramitePendenteDTO = new TramitePendenteDTO();
  125 + $tramitePendenteDTO->retNumIdTramite();
  126 + $tramitePendenteDTO->retNumIdAtividade();
  127 + $tramitePendenteDTO->retNumIdTabela();
  128 + $tramitePendenteDTO->setOrd('IdTabela', InfraDTO::$TIPO_ORDENACAO_ASC);
  129 +
  130 + $tramitePendenteBD = new TramiteBD($this->getObjInfraIBanco());
  131 + $pendentes = $tramitePendenteBD->listar($tramitePendenteDTO);
  132 +
  133 +
  134 + if ($pendentes) {
  135 +
  136 + //Instancia a RN de ProcessoEletronico
  137 + $processoEletronicoRN = new ProcessoEletronicoRN();
  138 + $arrProtocolos = array();
  139 +
  140 + foreach ($pendentes as $tramite) {
  141 + $objTramite = $processoEletronicoRN->consultarTramites($tramite->getNumIdTramite());
  142 + $objTramite = $objTramite[0];
  143 +
  144 + if (isset($arrProtocolos[$objTramite->protocolo])) {
  145 + if ($arrProtocolos[$objTramite->protocolo]['objTramite']->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE || $arrProtocolos[$objTramite->protocolo]['objTramite']->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO) {
  146 + $tramitePendenteBD->excluir($arrProtocolos[$objTramite->protocolo]['tramitePendente']);
  147 + }
  148 + }
  149 +
  150 + $arrProtocolos[$objTramite->protocolo]['objTramite'] = $objTramite;
  151 + $arrProtocolos[$objTramite->protocolo]['tramitePendente'] = $tramite;
  152 + }
  153 +
  154 +
  155 +
  156 + //Percorre as pendências
  157 + foreach ($arrProtocolos as $protocolo) {
  158 +
  159 + //Busca o status do trâmite
  160 + $tramite = $protocolo['tramitePendente'];
  161 + $objTramite = $protocolo['objTramite'];
  162 + $status = $objTramite->situacaoAtual;
  163 +
  164 + if ($status == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO) {
  165 +
  166 + //Verifica se o processo do trâmite se encontra de fato recusado
  167 + //Busca os dados do procedimento
  168 + $processoEletronicoDTO = new ProcessoEletronicoDTO();
  169 + $processoEletronicoDTO->setStrNumeroRegistro($objTramite->NRE);
  170 + $processoEletronicoDTO->retDblIdProcedimento();
  171 +
  172 + $processoEletronicoBD = new ProcessoEletronicoBD($this->getObjInfraIBanco());
  173 + $objProcessoEletronico = $processoEletronicoBD->consultar($processoEletronicoDTO);
  174 +
  175 + if ($objProcessoEletronico) {
  176 +
  177 + //Busca o processo
  178 + $objProtocolo = new PenProtocoloDTO();
  179 + $objProtocolo->setDblIdProtocolo($objProcessoEletronico->getDblIdProcedimento());
  180 +
  181 + $protocoloBD = new ProtocoloBD($this->getObjInfraIBanco());
  182 +
  183 + //Verifica se o protocolo foi encontrado nessa tabela
  184 + if ($protocoloBD->contar($objProtocolo) > 0) {
  185 +
  186 + //Altera o registro
  187 + $objProtocolo->setStrSinObteveRecusa('S');
  188 + $protocoloBD->alterar($objProtocolo);
  189 +
  190 + //Busca a unidade de destino
  191 + $atributoAndamentoDTO = new AtributoAndamentoDTO();
  192 + $atributoAndamentoDTO->setNumIdAtividade($tramite->getNumIdAtividade());
  193 + $atributoAndamentoDTO->setStrNome('UNIDADE_DESTINO');
  194 + $atributoAndamentoDTO->retStrValor();
  195 +
  196 + $atributoAndamentoBD = new AtributoAndamentoBD($this->getObjInfraIBanco());
  197 + $atributoAndamento = $atributoAndamentoBD->consultar($atributoAndamentoDTO);
  198 +
  199 + $motivo = $objTramite->motivoDaRecusa;
  200 + $unidadeDestino = $atributoAndamento->getStrValor();
  201 +
  202 + //Realiza o registro da recusa
  203 + ExpedirProcedimentoRN::receberRecusaProcedimento(ProcessoEletronicoRN::$MOTIVOS_RECUSA[$motivo], $unidadeDestino, null, $objProcessoEletronico->getDblIdProcedimento());
  204 +
  205 + $tramitePendenteBD->excluir($tramite);
  206 + }
  207 + }
  208 + } else if ($status == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE || $status == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO) {
  209 +
  210 + $tramitePendenteBD->excluir($tramite);
  211 + }
  212 + }
  213 + }
  214 + } catch (Exception $e) {
  215 + InfraDebug::getInstance()->setBolLigado(false);
  216 + InfraDebug::getInstance()->setBolDebugInfra(false);
  217 + InfraDebug::getInstance()->setBolEcho(false);
  218 +
  219 + throw new InfraException('Erro na Verificação de Processos Recusados.', $e);
  220 + }
  221 + }
  222 +
  223 + public function seiVerificarServicosBarramento() {
  224 + try {
  225 +
  226 + $cont = 0;
  227 + $servico = array();
  228 + $exec = shell_exec('ps -ef');
  229 + if (strpos($exec, '/usr/bin/supervisord') == false) {
  230 + $cont++;
  231 + $servico[] = 'supervisord';
  232 + }
  233 + if (strpos($exec, '/usr/sbin/gearmand') == false) {
  234 + $cont++;
  235 + $servico[] = ' gearmand';
  236 + }
  237 + if (strpos($exec, 'PendenciasTramiteRN.php') == false) {
  238 + $cont++;
  239 + $servico[] = ' PendenciasTramiteRN.php';
  240 + }
  241 + if (strpos($exec, 'ProcessarPendenciasRN.php') == false) {
  242 + $cont++;
  243 + $servico[] = 'ProcessarPendenciasRN.php';
  244 + }
  245 +
  246 + $servicos = implode("\n", $servico);
  247 +
  248 +
  249 +
  250 + if ($cont > 0) {
  251 + $msg = "Falha na execução. \n Os seguintes serviços não estão rodando: \n $servicos";
  252 +// LogSEI::getInstance()->gravar();
  253 + throw new InfraException($msg, $e);
  254 + } else {
  255 + LogSEI::getInstance()->gravar("Todos os serviços estão rodando.");
  256 + }
  257 +// $objInfraParametro = new InfraParametro(BancoSEI::getInstance());
  258 +// InfraMail::enviarConfigurado(ConfiguracaoSEI::getInstance(), $objInfraParametro->getValor('SEI_EMAIL_SISTEMA'), $objInfraParametro->getValor('SEI_EMAIL_ADMINISTRADOR'), null, null, 'Teste Agendamento SEI', 'Agendamento SEI executado com sucesso.');
  259 + } catch (Exception $e) {
  260 + throw new InfraException('Erro ao rodar verificação de status do serviços Gearmand e Supervisord', $e);
  261 + }
  262 + }
  263 +
  264 + /**
  265 + * Atualiza??o das hip?teses legais vindas do barramento
  266 + * @throws InfraException
  267 + */
  268 + public function atualizarHipotesesLegais() {
  269 + try {
  270 + $objBD = new PenHipoteseLegalBD($this->inicializarObjInfraIBanco());
  271 + $processoEletronicoRN = new ProcessoEletronicoRN();
  272 + $hipotesesPen = $processoEletronicoRN->consultarHipotesesLegais();
  273 +
  274 + if(empty($hipotesesPen)){
  275 + throw new InfraException('Não foi possível obter as hipóteses legais dos serviços de integração');
  276 + }
  277 +
  278 + //Para cada hipótese vinda do PEN será verificado a existencia.
  279 + foreach ($hipotesesPen->hipotesesLegais->hipotese as $hipotese) {
  280 +
  281 + $objDTO = new PenHipoteseLegalDTO();
  282 + $objDTO->setNumIdentificacao($hipotese->identificacao);
  283 + $objDTO->setNumMaxRegistrosRetorno(1);
  284 + $objDTO->retStrNome();
  285 + $objDTO->retNumIdHipoteseLegal();
  286 + $objConsulta = $objBD->consultar($objDTO);
  287 +
  288 + //Caso não haja um nome para a hipótese legal, ele pula para a próxima.
  289 + if (empty($hipotese->nome)) {
  290 + continue;
  291 + }
  292 +
  293 + $objDTO->setStrNome($hipotese->nome);
  294 +
  295 + if ($hipotese->status) {
  296 + $objDTO->setStrAtivo('S');
  297 + } else {
  298 + $objDTO->setStrAtivo('N');
  299 + }
  300 +
  301 + //Caso n?o exista a hip?tese ir? cadastra-la no sei.
  302 + if (empty($objConsulta)) {
  303 +
  304 + $objBD->cadastrar($objDTO);
  305 + } else {
  306 + //Caso contr?rio apenas ir? atualizar os dados.
  307 + $objDTO->setNumIdHipoteseLegal($objConsulta->getNumIdHipoteseLegal());
  308 + $objBD->alterar($objDTO);
  309 + }
  310 + }
  311 +
  312 +
  313 + LogSEI::getInstance()->gravar("Hipóteses Legais atualizadas.");
  314 + } catch (Exception $e) {
  315 + throw new InfraException('Erro no agendamento das Hipóteses Legais', $e);
  316 + }
  317 + }
  318 +
  319 +}
  320 +
  321 +// $client = new GearmanClient();
  322 +// $client->addServer('localhost', 4730);
  323 +// $client->setCreatedCallback("create_change");
  324 +// $client->setDataCallback("data_change");
  325 +// $client->setStatusCallback("status_change");
  326 +// $client->setCompleteCallback("complete_change");
  327 +// $client->setFailCallback("fail_change");
  328 +// $data_array =array('mydata'=>'task');
  329 +// $task= $client->addTask("reverse", "mydata", $data_array);
  330 +// $task2= $client->addTaskLow("reverse", "task", NULL);
  331 +// //$result = $client->do("reverse", "teste");
  332 +// $client->runTasks();
  333 +// echo "DONE\n" . $result;
  334 +// function create_change($task)
  335 +// {
  336 +// echo "CREATED: " . $task->jobHandle() . "\n";
  337 +// }
  338 +// function status_change($task)
  339 +// {
  340 +// echo "STATUS: " . $task->jobHandle() . " - " . $task->taskNumerator() .
  341 +// "/" . $task->taskDenominator() . "\n";
  342 +// }
  343 +// function complete_change($task)
  344 +// {
  345 +// echo "COMPLETE: " . $task->jobHandle() . ", " . $task->data() . "\n";
  346 +// }
  347 +// function fail_change($task)
  348 +// {
  349 +// echo "FAILED: " . $task->jobHandle() . "\n";
  350 +// }
  351 +// function data_change($task)
  352 +// {
  353 +// echo "DATA: " . $task->data() . "\n";
  354 +// }
  355 +// Function Client_error()
  356 +// {
  357 +// if (! $client->runTasks())
  358 +// return $client->error() ;
359 359 // }
360 360 \ No newline at end of file
... ...
rn/PendenciasTramiteRN.php
1   -<?php
2   -
3   -require_once dirname(__FILE__) . '/../../../SEI.php';
4   -
5   -error_reporting(E_ALL);
6   -
7   -//TODO: Modificar nome da classe e mtodo para outro mais apropriado
8   -class PendenciasTramiteRN extends InfraRN {
9   -
10   - private static $instance = null;
11   - private $strEnderecoServicoPendencias = null;
12   - private $strLocalizacaoCertificadoDigital = null;
13   - private $strSenhaCertificadoDigital = null;
14   -
15   - protected function inicializarObjInfraIBanco(){
16   - return BancoSEI::getInstance();
17   - }
18   -
19   - public static function getInstance() {
20   - if (self::$instance == null) {
21   - self::$instance = new PendenciasTramiteRN(ConfiguracaoSEI::getInstance(), SessaoSEI::getInstance(), BancoSEI::getInstance(), LogSEI::getInstance());
22   - }
23   -
24   - return self::$instance;
25   - }
26   -
27   - public function __construct() {
28   - $objPenParametroRN = new PenParametroRN();
29   -
30   - $this->strLocalizacaoCertificadoDigital = $objPenParametroRN->getParametro('PEN_LOCALIZACAO_CERTIFICADO_DIGITAL');
31   - $this->strEnderecoServicoPendencias = $objPenParametroRN->getParametro('PEN_ENDERECO_WEBSERVICE_PENDENCIAS');
32   - //TODO: Urgente - Remover senha do certificado de autenticao dos servios do PEN da tabela de parâmetros
33   - $this->strSenhaCertificadoDigital = $objPenParametroRN->getParametro('PEN_SENHA_CERTIFICADO_DIGITAL');
34   -
35   - if (InfraString::isBolVazia($this->strEnderecoServicoPendencias)) {
36   - throw new InfraException('Endereço do serviço de pendências de trâmite do Processo Eletrônico Nacional (PEN) não informado.');
37   - }
38   -
39   - if (!@file_get_contents($this->strLocalizacaoCertificadoDigital)) {
40   - throw new InfraException("Certificado digital de autenticação do serviço de integração do Processo Eletrônico Nacional(PEN) não encontrado.");
41   - }
42   -
43   - if (InfraString::isBolVazia($this->strSenhaCertificadoDigital)) {
44   - throw new InfraException('Dados de autenticação do serviço de integração do Processo Eletrónico Nacional(PEN) não informados.');
45   - }
46   - }
47   -
48   - public function monitorarPendencias() {
49   - try{
50   - ini_set('max_execution_time','0');
51   - ini_set('memory_limit','-1');
52   -
53   - InfraDebug::getInstance()->setBolLigado(true);
54   - InfraDebug::getInstance()->setBolDebugInfra(false);
55   - InfraDebug::getInstance()->setBolEcho(false);
56   - InfraDebug::getInstance()->limpar();
57   -
58   - $objPenParametroRN = new PenParametroRN();
59   - SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO'));
60   -
61   - $numSeg = InfraUtil::verificarTempoProcessamento();
62   - InfraDebug::getInstance()->gravar('MONITORANDO OS TRÂMITES PENDENTES ENVIADOS PARA O RGO (PEN)');
63   - echo "[".date("d/m/Y H:i:s")."] Iniciando serviço de monitoramento de pendências de trâmites de processos...\n";
64   -
65   - try{
66   - $numIdTramiteRecebido = 0;
67   - $strStatusTramiteRecebido = '';
68   - $numQuantidadeErroTramite = 0;
69   - $arrQuantidadeErrosTramite = array();
70   -
71   - //TODO: Tratar quantidade de erros o sistema consecutivos para um tramite de processo
72   - //Alcanado est quantidade, uma pendncia posterior dever ser obtida do barramento
73   - while (true) {
74   - $objPendenciaDTO = $this->obterPendenciasTramite($numIdTramiteRecebido);
75   - if(isset($objPendenciaDTO)) {
76   - if($numIdTramiteRecebido != $objPendenciaDTO->getNumIdentificacaoTramite() ||
77   - $strStatusTramiteRecebido != $objPendenciaDTO->getStrStatus()) {
78   - $numIdTramiteRecebido = $objPendenciaDTO->getNumIdentificacaoTramite();
79   - $strStatusTramiteRecebido = $objPendenciaDTO->getStrStatus();
80   - $this->enviarPendenciaFilaProcessamento($objPendenciaDTO);
81   - }
82   - }
83   - sleep(5);
84   - }
85   - }
86   - //TODO: Urgente: Tratar erro especfico de timeout e refazer a requisio
87   - catch(Exception $e) {
88   - $strAssunto = 'Erro monitorando pendências.';
89   - $strErro = InfraException::inspecionar($e);
90   - LogSEI::getInstance()->gravar($strAssunto."\n\n".$strErro);
91   - }
92   -
93   - $numSeg = InfraUtil::verificarTempoProcessamento($numSeg);
94   - InfraDebug::getInstance()->gravar('TEMPO TOTAL DE EXECUCAO: '.$numSeg.' s');
95   - InfraDebug::getInstance()->gravar('FIM');
96   - LogSEI::getInstance()->gravar(InfraDebug::getInstance()->getStrDebug());
97   -
98   - }
99   - catch(Exception $e) {
100   - InfraDebug::getInstance()->setBolLigado(false);
101   - InfraDebug::getInstance()->setBolDebugInfra(false);
102   - InfraDebug::getInstance()->setBolEcho(false);
103   - throw new InfraException('Erro processando pendências de integração com o PEN - Processo Eletrônico Nacional.',$e);
104   - }
105   - }
106   -
107   - private function configurarRequisicao()
108   - {
109   - $curl = curl_init($this->strEnderecoServicoPendencias);
110   - curl_setopt($curl, CURLOPT_URL, $this->strEnderecoServicoPendencias);
111   - curl_setopt($curl, CURLOPT_HEADER, 0);
112   - curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
113   - curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
114   - curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
115   - curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
116   - curl_setopt($curl, CURLOPT_SSLCERT, $this->strLocalizacaoCertificadoDigital);
117   - curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $this->strSenhaCertificadoDigital);
118   - curl_setopt($curl, CURLOPT_TIMEOUT, 60); //timeout in seconds
119   - return $curl;
120   - }
121   -
122   - private function obterPendenciasTramite($parNumIdTramiteRecebido)
123   - {
124   - $resultado = null;
125   - $curl = $this->configurarRequisicao();
126   -
127   - try{
128   - if(isset($parNumIdTramiteRecebido)) {
129   - curl_setopt($curl, CURLOPT_URL, $this->strEnderecoServicoPendencias . "?idTramiteDaPendenciaRecebida=" . $parNumIdTramiteRecebido);
130   - }
131   -
132   - //A seguinte requisio ir aguardar a notificao do PEN sobre uma nova pendncia
133   - //ou at o lanamento da exceo de timeout definido pela infraestrutura da soluo
134   - //Ambos os comportamentos so esperados para a requisio abaixo.
135   - $strResultadoJSON = curl_exec($curl);
136   -
137   - if(curl_errno($curl)) {
138   - if (curl_errno($curl) != 28)
139   - throw new InfraException("Erro na requisição do serviço de monitoramento de pendências. Curl: " . curl_errno($curl));
140   - }
141   -
142   - if(!InfraString::isBolVazia($strResultadoJSON)) {
143   - $strResultadoJSON = json_decode($strResultadoJSON);
144   -
145   - if(isset($strResultadoJSON) && $strResultadoJSON->encontrou) {
146   - $objPendenciaDTO = new PendenciaDTO();
147   - $objPendenciaDTO->setNumIdentificacaoTramite($strResultadoJSON->IDT);
148   - $objPendenciaDTO->setStrStatus($strResultadoJSON->status);
149   - $resultado = $objPendenciaDTO;
150   - }
151   - }
152   - }
153   - catch(Exception $e){
154   - curl_close($curl);
155   - throw $e;
156   - }
157   -
158   - curl_close($curl);
159   - return $resultado;
160   - }
161   -
162   - private function enviarPendenciaFilaProcessamento($objPendencia)
163   - {
164   - if(isset($objPendencia)) {
165   -
166   - $client = new GearmanClient();
167   - $client->addServer('localhost', 4730);
168   - //$client->setCreatedCallback("create_change");
169   - //$client->setDataCallback("data_change");
170   - //$client->setStatusCallback("status_change");
171   - //$client->setCompleteCallback("complete_change");
172   - //$client->setFailCallback("fail_change");
173   -
174   - $strWorkload = strval($objPendencia->getNumIdentificacaoTramite());
175   -
176   - switch ($objPendencia->getStrStatus()) {
177   -
178   - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_INICIADO:
179   - $client->addTaskBackground('enviarComponenteDigital', $strWorkload, null);
180   - break;
181   -
182   - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE:
183   - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO:
184   - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO:
185   - $objPenParametroRN = new PenParametroRN();
186   - $numTentativas = $objPenParametroRN->getParametro(PenTramiteProcessadoRN::PARAM_NUMERO_TENTATIVAS, false);
187   - $numCont = 0;
188   - // Executa sempre + 1 alm do configurado no parâmetro para executar a recusa
189   - while($numCont <= $numTentativas) {
190   - $client->addTaskBackground('receberProcedimento', $strWorkload, null);
191   - $numCont++;
192   - }
193   - break;
194   -
195   - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_ENVIADO_DESTINATARIO:
196   - $objPenParametroRN = new PenParametroRN();
197   - $numTentativas = $objPenParametroRN->getParametro(PenTramiteProcessadoRN::PARAM_NUMERO_TENTATIVAS, false);
198   - $numCont = 0;
199   -
200   - while($numCont < $numTentativas) {
201   - $client->addTaskBackground('receberReciboTramite', $strWorkload, null);
202   - $numCont++;
203   - }
204   - break;
205   -
206   - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE:
207   - break;
208   -
209   - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO:
210   - break;
211   -
212   - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO:
213   - $client->addTaskBackground("receberTramitesRecusados", $strWorkload, null);;
214   - break;
215   -
216   - default:
217   - //TODO: Alterar lgica para no deixar de processar demais pendncias retornadas pelo PEN
218   - throw new Exception('Situação do trâmite não pode ser identificada.');
219   - break;
220   - }
221   -
222   - $client->runTasks();
223   - }
224   - }
225   -}
226   -
227   -SessaoSEI::getInstance(false);
228   -PendenciasTramiteRN::getInstance()->monitorarPendencias();
  1 +<?php
  2 +
  3 +require_once dirname(__FILE__) . '/../../../SEI.php';
  4 +
  5 +error_reporting(E_ALL);
  6 +
  7 +//TODO: Modificar nome da classe e mtodo para outro mais apropriado
  8 +class PendenciasTramiteRN extends InfraRN {
  9 +
  10 + private static $instance = null;
  11 + private $strEnderecoServicoPendencias = null;
  12 + private $strLocalizacaoCertificadoDigital = null;
  13 + private $strSenhaCertificadoDigital = null;
  14 +
  15 + protected function inicializarObjInfraIBanco(){
  16 + return BancoSEI::getInstance();
  17 + }
  18 +
  19 + public static function getInstance() {
  20 + if (self::$instance == null) {
  21 + self::$instance = new PendenciasTramiteRN(ConfiguracaoSEI::getInstance(), SessaoSEI::getInstance(), BancoSEI::getInstance(), LogSEI::getInstance());
  22 + }
  23 +
  24 + return self::$instance;
  25 + }
  26 +
  27 + public function __construct() {
  28 + $objPenParametroRN = new PenParametroRN();
  29 +
  30 + $this->strLocalizacaoCertificadoDigital = $objPenParametroRN->getParametro('PEN_LOCALIZACAO_CERTIFICADO_DIGITAL');
  31 + $this->strEnderecoServicoPendencias = $objPenParametroRN->getParametro('PEN_ENDERECO_WEBSERVICE_PENDENCIAS');
  32 + //TODO: Urgente - Remover senha do certificado de autenticao dos servios do PEN da tabela de parâmetros
  33 + $this->strSenhaCertificadoDigital = $objPenParametroRN->getParametro('PEN_SENHA_CERTIFICADO_DIGITAL');
  34 +
  35 + if (InfraString::isBolVazia($this->strEnderecoServicoPendencias)) {
  36 + throw new InfraException('Endereço do serviço de pendências de trâmite do Processo Eletrônico Nacional (PEN) não informado.');
  37 + }
  38 +
  39 + if (!@file_get_contents($this->strLocalizacaoCertificadoDigital)) {
  40 + throw new InfraException("Certificado digital de autenticação do serviço de integração do Processo Eletrônico Nacional(PEN) não encontrado.");
  41 + }
  42 +
  43 + if (InfraString::isBolVazia($this->strSenhaCertificadoDigital)) {
  44 + throw new InfraException('Dados de autenticação do serviço de integração do Processo Eletrónico Nacional(PEN) não informados.');
  45 + }
  46 + }
  47 +
  48 + public function monitorarPendencias() {
  49 + try{
  50 + ini_set('max_execution_time','0');
  51 + ini_set('memory_limit','-1');
  52 +
  53 + InfraDebug::getInstance()->setBolLigado(true);
  54 + InfraDebug::getInstance()->setBolDebugInfra(false);
  55 + InfraDebug::getInstance()->setBolEcho(false);
  56 + InfraDebug::getInstance()->limpar();
  57 +
  58 + $objPenParametroRN = new PenParametroRN();
  59 + SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO'));
  60 +
  61 + $numSeg = InfraUtil::verificarTempoProcessamento();
  62 + InfraDebug::getInstance()->gravar('MONITORANDO OS TRÂMITES PENDENTES ENVIADOS PARA O RGO (PEN)');
  63 + echo "[".date("d/m/Y H:i:s")."] Iniciando serviço de monitoramento de pendências de trâmites de processos...\n";
  64 +
  65 + try{
  66 + $numIdTramiteRecebido = 0;
  67 + $strStatusTramiteRecebido = '';
  68 + $numQuantidadeErroTramite = 0;
  69 + $arrQuantidadeErrosTramite = array();
  70 +
  71 + //TODO: Tratar quantidade de erros o sistema consecutivos para um tramite de processo
  72 + //Alcanado est quantidade, uma pendncia posterior dever ser obtida do barramento
  73 + while (true) {
  74 + $objPendenciaDTO = $this->obterPendenciasTramite($numIdTramiteRecebido);
  75 + if(isset($objPendenciaDTO)) {
  76 + if($numIdTramiteRecebido != $objPendenciaDTO->getNumIdentificacaoTramite() ||
  77 + $strStatusTramiteRecebido != $objPendenciaDTO->getStrStatus()) {
  78 + $numIdTramiteRecebido = $objPendenciaDTO->getNumIdentificacaoTramite();
  79 + $strStatusTramiteRecebido = $objPendenciaDTO->getStrStatus();
  80 + $this->enviarPendenciaFilaProcessamento($objPendenciaDTO);
  81 + }
  82 + }
  83 + sleep(5);
  84 + }
  85 + }
  86 + //TODO: Urgente: Tratar erro especfico de timeout e refazer a requisio
  87 + catch(Exception $e) {
  88 + $strAssunto = 'Erro monitorando pendências.';
  89 + $strErro = InfraException::inspecionar($e);
  90 + LogSEI::getInstance()->gravar($strAssunto."\n\n".$strErro);
  91 + }
  92 +
  93 + $numSeg = InfraUtil::verificarTempoProcessamento($numSeg);
  94 + InfraDebug::getInstance()->gravar('TEMPO TOTAL DE EXECUCAO: '.$numSeg.' s');
  95 + InfraDebug::getInstance()->gravar('FIM');
  96 + LogSEI::getInstance()->gravar(InfraDebug::getInstance()->getStrDebug());
  97 +
  98 + }
  99 + catch(Exception $e) {
  100 + InfraDebug::getInstance()->setBolLigado(false);
  101 + InfraDebug::getInstance()->setBolDebugInfra(false);
  102 + InfraDebug::getInstance()->setBolEcho(false);
  103 + throw new InfraException('Erro processando pendências de integração com o PEN - Processo Eletrônico Nacional.',$e);
  104 + }
  105 + }
  106 +
  107 + private function configurarRequisicao()
  108 + {
  109 + $curl = curl_init($this->strEnderecoServicoPendencias);
  110 + curl_setopt($curl, CURLOPT_URL, $this->strEnderecoServicoPendencias);
  111 + curl_setopt($curl, CURLOPT_HEADER, 0);
  112 + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  113 + curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
  114 + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
  115 + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  116 + curl_setopt($curl, CURLOPT_SSLCERT, $this->strLocalizacaoCertificadoDigital);
  117 + curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $this->strSenhaCertificadoDigital);
  118 + curl_setopt($curl, CURLOPT_TIMEOUT, 60); //timeout in seconds
  119 + return $curl;
  120 + }
  121 +
  122 + private function obterPendenciasTramite($parNumIdTramiteRecebido)
  123 + {
  124 + $resultado = null;
  125 + $curl = $this->configurarRequisicao();
  126 +
  127 + try{
  128 + if(isset($parNumIdTramiteRecebido)) {
  129 + curl_setopt($curl, CURLOPT_URL, $this->strEnderecoServicoPendencias . "?idTramiteDaPendenciaRecebida=" . $parNumIdTramiteRecebido);
  130 + }
  131 +
  132 + //A seguinte requisio ir aguardar a notificao do PEN sobre uma nova pendncia
  133 + //ou at o lanamento da exceo de timeout definido pela infraestrutura da soluo
  134 + //Ambos os comportamentos so esperados para a requisio abaixo.
  135 + $strResultadoJSON = curl_exec($curl);
  136 +
  137 + if(curl_errno($curl)) {
  138 + if (curl_errno($curl) != 28)
  139 + throw new InfraException("Erro na requisição do serviço de monitoramento de pendências. Curl: " . curl_errno($curl));
  140 + }
  141 +
  142 + if(!InfraString::isBolVazia($strResultadoJSON)) {
  143 + $strResultadoJSON = json_decode($strResultadoJSON);
  144 +
  145 + if(isset($strResultadoJSON) && $strResultadoJSON->encontrou) {
  146 + $objPendenciaDTO = new PendenciaDTO();
  147 + $objPendenciaDTO->setNumIdentificacaoTramite($strResultadoJSON->IDT);
  148 + $objPendenciaDTO->setStrStatus($strResultadoJSON->status);
  149 + $resultado = $objPendenciaDTO;
  150 + }
  151 + }
  152 + }
  153 + catch(Exception $e){
  154 + curl_close($curl);
  155 + throw $e;
  156 + }
  157 +
  158 + curl_close($curl);
  159 + return $resultado;
  160 + }
  161 +
  162 + private function enviarPendenciaFilaProcessamento($objPendencia)
  163 + {
  164 + if(isset($objPendencia)) {
  165 +
  166 + $client = new GearmanClient();
  167 + $client->addServer('localhost', 4730);
  168 + //$client->setCreatedCallback("create_change");
  169 + //$client->setDataCallback("data_change");
  170 + //$client->setStatusCallback("status_change");
  171 + //$client->setCompleteCallback("complete_change");
  172 + //$client->setFailCallback("fail_change");
  173 +
  174 + $strWorkload = strval($objPendencia->getNumIdentificacaoTramite());
  175 +
  176 + switch ($objPendencia->getStrStatus()) {
  177 +
  178 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_INICIADO:
  179 + $client->addTaskBackground('enviarComponenteDigital', $strWorkload, null);
  180 + break;
  181 +
  182 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE:
  183 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO:
  184 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO:
  185 + $objPenParametroRN = new PenParametroRN();
  186 + $numTentativas = $objPenParametroRN->getParametro(PenTramiteProcessadoRN::PARAM_NUMERO_TENTATIVAS, false);
  187 + $numCont = 0;
  188 + // Executa sempre + 1 alm do configurado no parâmetro para executar a recusa
  189 + while($numCont <= $numTentativas) {
  190 + $client->addTaskBackground('receberProcedimento', $strWorkload, null);
  191 + $numCont++;
  192 + }
  193 + break;
  194 +
  195 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_ENVIADO_DESTINATARIO:
  196 + $objPenParametroRN = new PenParametroRN();
  197 + $numTentativas = $objPenParametroRN->getParametro(PenTramiteProcessadoRN::PARAM_NUMERO_TENTATIVAS, false);
  198 + $numCont = 0;
  199 +
  200 + while($numCont < $numTentativas) {
  201 + $client->addTaskBackground('receberReciboTramite', $strWorkload, null);
  202 + $numCont++;
  203 + }
  204 + break;
  205 +
  206 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE:
  207 + break;
  208 +
  209 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO:
  210 + break;
  211 +
  212 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO:
  213 + $client->addTaskBackground("receberTramitesRecusados", $strWorkload, null);;
  214 + break;
  215 +
  216 + default:
  217 + //TODO: Alterar lgica para no deixar de processar demais pendncias retornadas pelo PEN
  218 + throw new Exception('Situação do trâmite não pode ser identificada.');
  219 + break;
  220 + }
  221 +
  222 + $client->runTasks();
  223 + }
  224 + }
  225 +}
  226 +
  227 +SessaoSEI::getInstance(false);
  228 +PendenciasTramiteRN::getInstance()->monitorarPendencias();
... ...
rn/ReceberProcedimentoRN.php
... ... @@ -353,8 +353,10 @@ class ReceberProcedimentoRN extends InfraRN
353 353 }
354 354  
355 355  
356   - $objInfraParametro = new InfraParametro(BancoSEI::getInstance());
357   - $numTamDocExterno = $objInfraParametro->getValor('SEI_TAM_MB_DOC_EXTERNO');
  356 +// $objInfraParametro = new InfraParametro(BancoSEI::getInstance());
  357 +// $numTamDocExterno = $objInfraParametro->getValor('SEI_TAM_MB_DOC_EXTERNO');
  358 + $objPenParametroRN = new PenParametroRN();
  359 + $numTamDocExterno = $objPenParametroRN->getParametro('PEN_TAMANHO_MAXIMO_DOCUMENTO_EXPEDIDO');
358 360  
359 361  
360 362 foreach($arrObjDocumentos as $objDocument) {
... ... @@ -463,8 +465,13 @@ class ReceberProcedimentoRN extends InfraRN
463 465 throw new InfraException('Parâmetro $objMetadadosProcedimento não informado.');
464 466 }
465 467  
466   - $objDestinatario = $objMetadadosProcedimento->metadados->destinatario;
467   -
  468 +
  469 + if ($this->destinatarioReal) {
  470 + $objDestinatario = $this->destinatarioReal;
  471 + } else {
  472 + $objDestinatario = $objMetadadosProcedimento->metadados->destinatario;
  473 + }
  474 +
468 475 //TODO: Refatorar código para criar método de pesquisa do procedimento e reutilizá-la
469 476  
470 477 //$objProcedimentoDTO = new ProcedimentoDTO();
... ...