Commit 96599235b2ec06b4c0c9f075949f37279f8feb16
Exists in
master
and in
19 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(); | ... | ... |