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 | \ No newline at end of file | 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,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 | foreach($arrObjDocumentos as $objDocument) { | 362 | foreach($arrObjDocumentos as $objDocument) { |
@@ -463,8 +465,13 @@ class ReceberProcedimentoRN extends InfraRN | @@ -463,8 +465,13 @@ class ReceberProcedimentoRN extends InfraRN | ||
463 | throw new InfraException('Parâmetro $objMetadadosProcedimento não informado.'); | 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 | //TODO: Refatorar código para criar método de pesquisa do procedimento e reutilizá-la | 475 | //TODO: Refatorar código para criar método de pesquisa do procedimento e reutilizá-la |
469 | 476 | ||
470 | //$objProcedimentoDTO = new ProcedimentoDTO(); | 477 | //$objProcedimentoDTO = new ProcedimentoDTO(); |