Commit 96599235b2ec06b4c0c9f075949f37279f8feb16
Exists in
master
and in
21 other branches
Merge de uma correção não comitada da branch 87_OS026
Showing
3 changed files
with
597 additions
and
590 deletions
Show diff stats
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(); | ... | ... |