From f4c68f7ed46966ad9860031e4bd03974072b8d8d Mon Sep 17 00:00:00 2001 From: Guilherme Andrade Del Cantoni Date: Tue, 27 Nov 2018 16:25:31 -0200 Subject: [PATCH] Correção de recebimento de processos por 2 unidades do mesmo sistema --- PENIntegracao.php | 4 ++-- bd/PenMetaBD.php | 10 ++++------ dto/PenTramiteProcessadoDTO.php | 13 +++++++------ rn/EnviarReciboTramiteRN.php | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------- rn/PenTramiteProcessadoRN.php | 67 +++++++++++++++++++++++++++++++------------------------------------ rn/ProcessarPendenciasRN.php | 8 ++++++-- rn/ProcessoEletronicoRN.php | 2 +- rn/ProcessoExpedidoRN.php | 6 +++--- rn/ReceberComponenteDigitalRN.php | 59 ++++++++++++++++++++--------------------------------------- rn/ReceberProcedimentoRN.php | 528 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- rn/ReceberReciboTramiteRN.php | 27 +++++++++++++++------------ 11 files changed, 430 insertions(+), 426 deletions(-) diff --git a/PENIntegracao.php b/PENIntegracao.php index 8129df1..5005564 100644 --- a/PENIntegracao.php +++ b/PENIntegracao.php @@ -2,7 +2,7 @@ class PENIntegracao extends SeiIntegracao { - const COMPATIBILIDADE_MODULO_SEI = array('3.0.5', '3.0.6', '3.0.7', '3.0.8', '3.0.9', '3.0.11', '3.0.12', '3.0.13'); + const COMPATIBILIDADE_MODULO_SEI = array('3.0.5', '3.0.6', '3.0.7', '3.0.8', '3.0.9', '3.0.11', '3.0.12', '3.0.13', '3.0.14', '3.0.15'); private static $strDiretorio; @@ -11,7 +11,7 @@ class PENIntegracao extends SeiIntegracao { } public function getVersao() { - return '1.1.5'; + return '1.1.7'; } diff --git a/bd/PenMetaBD.php b/bd/PenMetaBD.php index a099f78..7589b09 100644 --- a/bd/PenMetaBD.php +++ b/bd/PenMetaBD.php @@ -19,7 +19,6 @@ class PenMetaBD extends InfraMetaBD { public function adicionarValorPadraoParaColuna($strNomeTabela, $strNomeColuna, $strValorPadrao, $bolRetornarQuery = false){ $objInfraBanco = $this->getObjInfraIBanco(); - $strTableDrive = get_parent_class($objInfraBanco); $strQuery = ''; @@ -30,18 +29,18 @@ class PenMetaBD extends InfraMetaBD { break; case 'InfraSqlServer': - $strQuery = sprintf("ALTER TABLE [%s] ADD DEFAULT('%s') FOR [%s]", $strNomeTabela, $strValorPadrao, $strNomeColuna); + $strQuery = sprintf("ALTER TABLE [%s] ADD DEFAULT('%s') FOR [%s]", $strNomeTabela, $strValorPadrao, $strNomeColuna); + break; case 'InfraOracle': + $strQuery = sprintf("ALTER TABLE %s MODIFY %s DEFAULT '%s'", $strNomeTabela, $strNomeColuna, $strValorPadrao); break; } if($bolRetornarQuery === false) { - $objInfraBanco->executarSql($strQuery); } else { - return $strQuery; } } @@ -139,6 +138,7 @@ class PenMetaBD extends InfraMetaBD { break; case 'InfraOracle': + $this->getObjInfraIBanco()->executarSql('ALTER TABLE '.$strNomeTabela.' DROP CONSTRAINT '.$strNomeChave); break; } } @@ -156,12 +156,10 @@ class PenMetaBD extends InfraMetaBD { if($this->isTabelaExiste($strNomeTabelaAtual)) { $objInfraBanco = $this->getObjInfraIBanco(); - $strTableDrive = get_parent_class($objInfraBanco); $strQuery = ''; switch ($strTableDrive) { - case 'InfraMySqli': $strQuery = sprintf("ALTER TABLE `%s` RENAME TO `%s`", $strNomeTabelaAtual, $strNomeTabelaNovo); break; diff --git a/dto/PenTramiteProcessadoDTO.php b/dto/PenTramiteProcessadoDTO.php index d42bfa4..f71690c 100644 --- a/dto/PenTramiteProcessadoDTO.php +++ b/dto/PenTramiteProcessadoDTO.php @@ -3,23 +3,24 @@ require_once dirname(__FILE__) . '/../../../SEI.php'; /** - * + * * @author Join Tecnologia */ class PenTramiteProcessadoDTO extends InfraDTO { - + public function getStrNomeTabela() { - return 'md_pen_tramite_processado'; + return 'md_pen_tramite_processado'; } - + public function montar() { - + $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_DBL, 'IdTramite', 'id_tramite'); $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_DTH, 'Ultimo', 'dth_ultimo_processamento'); - $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'Tentativas', 'numero_tentativas'); + $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'Tentativas', 'numero_tentativas'); $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_STR, 'Recebido', 'sin_recebimento_concluido'); $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_STR, 'Tipo', 'tipo_tramite_processo'); $this->configurarPK('IdTramite', InfraDTO::$TIPO_PK_INFORMADO); + $this->configurarPK('Tipo', InfraDTO::$TIPO_PK_INFORMADO); } } diff --git a/rn/EnviarReciboTramiteRN.php b/rn/EnviarReciboTramiteRN.php index d222ba5..eaa6c2c 100644 --- a/rn/EnviarReciboTramiteRN.php +++ b/rn/EnviarReciboTramiteRN.php @@ -1,4 +1,5 @@ -objProcessoEletronicoRN->solicitarMetadados($numIdTramite); - + $objMetaProcesso = $objMetaRetorno->metadados->processo; $arrObjMetaDocumento = is_array($objMetaProcesso->documento) ? $objMetaProcesso->documento : array($objMetaProcesso->documento); - + $objDTO = new ComponenteDigitalDTO(); $objBD = new ComponenteDigitalBD($this->inicializarObjInfraIBanco()); - + foreach($arrObjMetaDocumento as $objMetaDocumento) { - + $strHashConteudo = ProcessoEletronicoRN::getHashFromMetaDados($objMetaDocumento->componenteDigital->hash); - + $objDTO->setStrHashConteudo($strHashConteudo); - + if($objBD->contar($objDTO) > 0) { - + $arrStrHashConteudo[] = $strHashConteudo; } } - + return $arrStrHashConteudo; } - + protected function cadastrarReciboTramiteRecebimento($strNumeroRegistro = '', $parNumIdTramite = 0, $strHashConteudo = '', $parArrayHash = array()){ - + $objBD = new ReciboTramiteRecebidoBD($this->inicializarObjInfraIBanco()); - + $objDTO = new ReciboTramiteRecebidoDTO(); $objDTO->setStrNumeroRegistro($strNumeroRegistro); $objDTO->setNumIdTramite($parNumIdTramite); - - if(!empty($strHashConteudo)) $objDTO->setStrHashAssinatura($strHashConteudo); + + if(!empty($strHashConteudo)) $objDTO->setStrHashAssinatura($strHashConteudo); if(intval($objBD->contar($objDTO)) == 0) { - + $objDTO->setDthRecebimento(date('d/m/Y H:i:s')); $objBD->cadastrar($objDTO); } - + foreach($parArrayHash as $strHashComponenteDigital){ - + $objReciboTramiteHashDTO = new ReciboTramiteHashDTO(); $objReciboTramiteHashDTO->setStrNumeroRegistro($strNumeroRegistro); $objReciboTramiteHashDTO->setNumIdTramite($parNumIdTramite); @@ -80,33 +81,33 @@ class EnviarReciboTramiteRN extends InfraRN $objBD->cadastrar($objReciboTramiteHashDTO); } - - + + } public function enviarReciboTramiteProcesso($parNumIdTramite, $parArrayHash = null, $parDthRecebimento = null) - { + { date_default_timezone_set('America/Sao_Paulo'); if(!isset($parNumIdTramite) || $parNumIdTramite == 0) { - throw new InfraException('Parâmetro $parNumIdTramite não informado.'); - } + throw new InfraException('Parâmetro $parNumIdTramite não informado.'); + } - //Verifica se todos os componentes digitais já foram devidamente recebido + //Verifica se todos os componentes digitais já foram devidamente recebido $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdTramite); if(!isset($arrObjTramite) || count($arrObjTramite) != 1) { - throw new InfraException("Trâmite não pode ser localizado pelo identificador $parNumIdTramite."); + throw new InfraException("Trâmite não pode ser localizado pelo identificador $parNumIdTramite."); } $objTramite = $arrObjTramite[0]; $strNumeroRegistro = $objTramite->NRE; if($objTramite->situacaoAtual != ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) { - throw new InfraException('Situação do Trâmite diferente da permitida para o envio do recibo de conclusão de trâmite.'); + throw new InfraException('Situação do Trâmite diferente da permitida para o envio do recibo de conclusão de trâmite.'); } - $dthRecebimentoComponentesDigitais = $this->obterDataRecebimentoComponentesDigitais($objTramite); + $dthRecebimentoComponentesDigitais = $this->obterDataRecebimentoComponentesDigitais($objTramite); $dthRecebimentoComponentesDigitais = $dthRecebimentoComponentesDigitais ?: date(); $dthRecebimento = gmdate("Y-m-d\TH:i:s.000\Z", InfraData::getTimestamp($dthRecebimentoComponentesDigitais)); @@ -115,23 +116,23 @@ class EnviarReciboTramiteRN extends InfraRN $strReciboTramite .= "$strNumeroRegistro"; $strReciboTramite .= "$dthRecebimento"; sort($parArrayHash); - + foreach ($parArrayHash as $strHashConteudo) { if(!empty($strHashConteudo)){ $strReciboTramite .= "$strHashConteudo"; } - } + } $strReciboTramite .= ""; - + //Envia o Recibo de salva no banco $hashAssinatura = $this->objProcessoEletronicoRN->enviarReciboDeTramite($parNumIdTramite, $dthRecebimento, $strReciboTramite); $this->cadastrarReciboTramiteRecebimento($strNumeroRegistro, $parNumIdTramite, $hashAssinatura, $parArrayHash); - } + } private function obterDataRecebimentoComponentesDigitais($parObjTramite){ - + if(!isset($parObjTramite)) { - throw new InfraException('Parâmetro $parObjTramite não informado.'); + throw new InfraException('Parâmetro $parObjTramite não informado.'); } if(!is_array($parObjTramite->historico->operacao)) { @@ -140,7 +141,7 @@ class EnviarReciboTramiteRN extends InfraRN foreach ($parObjTramite->historico->operacao as $operacao) { if($operacao->situacao == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) { - return ProcessoEletronicoRN::converterDataSEI($operacao->dataHora); + return ProcessoEletronicoRN::converterDataSEI($operacao->dataHora); } } @@ -148,17 +149,17 @@ class EnviarReciboTramiteRN extends InfraRN } /** - * Consulta o componente digital no barramento. Utilizado para casos de retrasmissão, - * onde esta unidade esta recebendo um componente digital que pertence à ela - * própria, então o id_tramite de envio, que foi gravado, é diferente do de recebimento - * + * Consulta o componente digital no barramento. Utilizado para casos de retrasmissão, + * onde esta unidade esta recebendo um componente digital que pertence à ela + * própria, então o id_tramite de envio, que foi gravado, é diferente do de recebimento + * * @param int $numIdTramite * @return array[ComponenteDigitalDTO] */ private function recarregarComponenteDigitalDTO($numIdTramite){ - + $arrObjComponenteDigitalDTO = array(); - + $objMetaRetorno = $this->objProcessoEletronicoRN->solicitarMetadados($numIdTramite); if(!empty($objMetaRetorno)) { @@ -166,43 +167,44 @@ class EnviarReciboTramiteRN extends InfraRN $objMetaProcesso = $objMetaRetorno->metadados->processo; $arrObjMetaDocumento = is_array($objMetaProcesso->documento) ? $objMetaProcesso->documento : array($objMetaProcesso->documento); - + foreach($arrObjMetaDocumento as $objMetaDocumento) { $dblIdProcedimento = null; $dblIdDocumento = null; - + $objProcessoEletronicoDTO = new ProcessoEletronicoDTO(); $objProcessoEletronicoDTO->setStrNumeroRegistro($objMetaRetorno->metadados->NRE); $objProcessoEletronicoDTO->retDblIdProcedimento(); - + $objProcessoEletronicoBD = new ProcessoEletronicoBD($this->getObjInfraIBanco()); $objProcessoEletronicoDTO = $objProcessoEletronicoBD->consultar($objProcessoEletronicoDTO); - + if(empty($objProcessoEletronicoDTO)) { - + $dblIdProcedimento = $objProcessoEletronicoDTO->getDblIdProcedimento(); - + $objDocumentoDTO = new DocumentoDTO(); $objDocumentoDTO->setDblIdProcedimento($dblIdProcedimento); $objDocumentoDTO->retDblIdDocumento(); - + $objDocumentoBD = new DocumentoBD(); $objDocumentoDTO = $objDocumentoBD->consultar($objDocumentoDTO); - + if(empty($objDocumentoDTO)) { - + $dblIdDocumento = $objDocumentoDTO->getDblIdDocumento(); - } + } } $objMetaComponenteDigital = $objMetaDocumento->componenteDigital; - + $objComponenteDigitalDTO = new ComponenteDigitalDTO(); $objComponenteDigitalDTO->setStrNumeroRegistro($objMetaRetorno->metadados->NRE); $objComponenteDigitalDTO->setDblIdProcedimento($dblIdProcedimento); $objComponenteDigitalDTO->setDblIdDocumento($dblIdDocumento); $objComponenteDigitalDTO->setNumIdTramite($numIdTramite); + $objComponenteDigitalDTO->setNumIdAnexo($objMetaComponenteDigital->idAnexo); $objComponenteDigitalDTO->setStrNome($objMetaComponenteDigital->nome); $objComponenteDigitalDTO->setStrHashConteudo(ProcessoEletronicoRN::getHashFromMetaDados($objMetaComponenteDigital->hash)); @@ -214,30 +216,30 @@ class EnviarReciboTramiteRN extends InfraRN $objComponenteDigitalDTO->setNumTamanho($objMetaComponenteDigital->tamanhoEmBytes); $objComponenteDigitalDTO->setNumOrdem($objMetaDocumento->ordem); $objComponenteDigitalDTO->setStrSinEnviar('S'); - + $arrObjComponenteDigitalDTO[] = $objComponenteDigitalDTO; - } - } - + } + } + return $arrObjComponenteDigitalDTO; } - + /** */ private function listarComponenteDigitalDTO($parNumIdTramite) { - + $objComponenteDigitalDTO = new ComponenteDigitalDTO(); $objComponenteDigitalDTO->retTodos(); $objComponenteDigitalDTO->setNumIdTramite($parNumIdTramite); - + $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco()); $arrObjComponenteDigitalDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO); if (empty($arrObjComponenteDigitalDTO)) { - - //$arrObjComponenteDigitalDTO = $this->recarregarComponenteDigitalDTO($parNumIdTramite); + + //$arrObjComponenteDigitalDTO = $this->recarregarComponenteDigitalDTO($parNumIdTramite); } return $arrObjComponenteDigitalDTO; } -} \ No newline at end of file +} diff --git a/rn/PenTramiteProcessadoRN.php b/rn/PenTramiteProcessadoRN.php index 3f20ece..c285043 100644 --- a/rn/PenTramiteProcessadoRN.php +++ b/rn/PenTramiteProcessadoRN.php @@ -4,12 +4,12 @@ * @author Join Tecnologia */ class PenTramiteProcessadoRN extends InfraRN { - + const STR_TIPO_PROCESSO = 'RP'; const STR_TIPO_RECIBO = 'RR'; - + const PARAM_NUMERO_TENTATIVAS = 'PEN_NUMERO_TENTATIVAS_TRAMITE_RECEBIMENTO'; - + protected $objInfraBanco; private $strTipo; @@ -17,64 +17,63 @@ class PenTramiteProcessadoRN extends InfraRN { parent::__construct(); $this->strTipo = $strTipo; } - + /** - * + * * @return BancoSEI */ protected function inicializarObjInfraIBanco() { - + if(empty($this->objInfraBanco)) { - + $this->objInfraBanco = BancoSEI::getInstance(); } - + return $this->objInfraBanco; } - + /** - * + * * @return bool */ protected function isProcedimentoRecebidoControlado($dblIdTramite = 0){ - + //Verifica se o trâmite não foi cancelado ou recusado if($this->isTramiteRecusadoCancelado($dblIdTramite)){ return true; } - + $objFilDTO = new PenTramiteProcessadoDTO(); $objFilDTO->setDblIdTramite($dblIdTramite); $objFilDTO->setStrTipo($this->strTipo); $objFilDTO->setNumMaxRegistrosRetorno(1); $objFilDTO->retTodos(); - - $objBD = new GenericoBD($this->inicializarObjInfraIBanco()); + + $objBD = new GenericoBD($this->inicializarObjInfraIBanco()); $objDTO = $objBD->consultar($objFilDTO); if(empty($objDTO)) { - $objFilDTO->setDthUltimo(InfraData::getStrDataHoraAtual()); $objFilDTO->setNumTentativas(0); $objFilDTO->setStrRecebido('N'); $objFilDTO->setStrTipo($this->strTipo); - $objDTO = $objBD->cadastrar($objFilDTO); + return false; } - - if($objDTO->getStrRecebido() == 'S') { + + + if($objDTO->getStrRecebido() == 'S') { return true; + } else { - $objPenParametroRN = new PenParametroRN(); $numTentativas = $objPenParametroRN->getParametro(self::PARAM_NUMERO_TENTATIVAS); - + // Verifica o número de tentativas já realizadas é igual ao configurado // no parâmetro if($objDTO->getNumTentativas() >= $numTentativas) { - // Somente faz a recusa se estiver recebendo o procedimento, pois // ao receber o recibo não pode mais recursar if($objDTO->getStrTipo() == self::STR_TIPO_PROCESSO) { @@ -85,59 +84,55 @@ class PenTramiteProcessadoRN extends InfraRN { return true;// Mente que já foi recebido para não executar novamente } else { - // Incrementa o contador pois após sair desse método com false // ira executar o recebimento novamente $objDTO->setDthUltimo(InfraData::getStrDataHoraAtual()); $objDTO->setNumTentativas($objDTO->getNumTentativas() + 1); + $objDTO->setStrTipo($this->strTipo); $objBD->alterar($objDTO); return false; - } + } } } - + public function setRecebido($dblIdTramite = 0){ - + $objDTO = new PenTramiteProcessadoDTO(); $objDTO->setDblIdTramite($dblIdTramite); $objDTO->setStrTipo($this->strTipo); $objDTO->setNumMaxRegistrosRetorno(1); $objDTO->retTodos(); - $objBD = new GenericoBD($this->inicializarObjInfraIBanco()); $objDTO = $objBD->consultar($objDTO); - if(empty($objDTO)) { throw new InfraException(sprintf('ID do tramite %s não foi localizado', $dblIdTramite)); } - $objDTO->setDthUltimo(InfraData::getStrDataHoraAtual()); $objDTO->setStrRecebido('S'); - - $objBD->alterar($objDTO); + $objBD->alterar($objDTO); } - + /** * Método que verifica se o trâmite em questão foi cancelado ou recusado - * + * * @param integer $parNumIdTramite * @return boolean */ public function isTramiteRecusadoCancelado($parNumIdTramite){ - + //Instancia a classe processo eletrônico $processoEletronicoRN = new ProcessoEletronicoRN(); - + //Busca os dados do trâmite $arrObjTramite = $processoEletronicoRN->consultarTramites($parNumIdTramite); $objTramite = $arrObjTramite[0]; - + //Verifica se o trâmite em questão. foi recusado o cancelado if($objTramite->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO || $objTramite->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO){ return true; }else{ return false; } - + } } diff --git a/rn/ProcessarPendenciasRN.php b/rn/ProcessarPendenciasRN.php index dc0fb58..df3d12c 100644 --- a/rn/ProcessarPendenciasRN.php +++ b/rn/ProcessarPendenciasRN.php @@ -86,8 +86,10 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa $objReceberReciboTramiteRN = new ReceberReciboTramiteRN(); $objReceberReciboTramiteRN->receberReciboDeTramite($numIdentificacaoTramite); } + } catch(Exception $e){ + $this->gravarLogDebug(InfraException::inspecionar($e), 0, true); LogSEI::getInstance()->gravar(InfraException::inspecionar($e)); } }); @@ -105,6 +107,7 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa } } catch(Exception $e){ + $this->gravarLogDebug(InfraException::inspecionar($e), 0, true); LogSEI::getInstance()->gravar(InfraException::inspecionar($e)); $objProcessoEletronicoRN = new ProcessoEletronicoRN(); $strMensagem = ($e instanceof InfraException) ? $e->__toString() : $e->getMessage(); @@ -120,9 +123,9 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa $objReceberProcedimentoRN = new ReceberProcedimentoRN(); $objReceberProcedimentoRN->receberTramitesRecusados($numIdentificacaoTramite); } catch (Exception $e) { + $this->gravarLogDebug(InfraException::inspecionar($e), 0, true); LogSEI::getInstance()->gravar(InfraException::inspecionar($e)); } - }); //Processamento de pendências de recebimento dos componentes digitais do processo @@ -139,6 +142,7 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN(); $objEnviarReciboTramiteRN->enviarReciboTramiteProcesso($numIdentificacaoTramite); } catch (Exception $e) { + $this->gravarLogDebug(InfraException::inspecionar($e), 0, true); LogSEI::getInstance()->gravar(InfraException::inspecionar($e)); } }); @@ -147,7 +151,7 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa private function gravarLogDebug($strMensagem, $numIdentacao=0, $bolEcho=false) { $strDataLog = date("d/m/Y H:i:s"); - $strLog = sprintf("[%s] [PROCESSAMENTO] %s %s", $strDataLog, str_repeat("\t", $numIdentacao), $strMensagem); + $strLog = sprintf("[%s] [PROCESSAMENTO] %s %s", $strDataLog, str_repeat(" ", $numIdentacao * 4), $strMensagem); InfraDebug::getInstance()->gravar($strLog); if(!InfraDebug::getInstance()->isBolEcho() && $bolEcho) echo sprintf("\n[%s] [PROCESSAMENTO] %s", $strDataLog, $strMensagem); } diff --git a/rn/ProcessoEletronicoRN.php b/rn/ProcessoEletronicoRN.php index e87ff26..7ee3e7b 100644 --- a/rn/ProcessoEletronicoRN.php +++ b/rn/ProcessoEletronicoRN.php @@ -818,8 +818,8 @@ class ProcessoEletronicoRN extends InfraRN { //TODO: Avaliar dados do tamanho do documento em bytes salvo na base de dados $objComponenteDigitalDTO->setNumTamanho($objComponenteDigital->tamanhoEmBytes); - $objComponenteDigitalDTO->setNumIdAnexo($objComponenteDigital->idAnexo); + $objComponenteDigitalDTO->setNumIdAnexo($objComponenteDigital->idAnexo); $arrObjComponenteDigitalDTO[] = $objComponenteDigitalDTO; } diff --git a/rn/ProcessoExpedidoRN.php b/rn/ProcessoExpedidoRN.php index 956e5b3..7a8e453 100644 --- a/rn/ProcessoExpedidoRN.php +++ b/rn/ProcessoExpedidoRN.php @@ -77,7 +77,7 @@ class ProcessoExpedidoRN extends InfraRN { AND at2.id_tarefa = ". ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO) ." AND at2.dth_abertura > a.dth_abertura ) "; -//die($sql); + //die($sql); $pag = $this->getObjInfraIBanco()->consultarSql($sql); $count = $this->getObjInfraIBanco()->consultarSql($sqlCount); $total = $count ? $count[0]['total'] : 0; @@ -88,12 +88,12 @@ class ProcessoExpedidoRN extends InfraRN { $objProtocoloDTO->setNumRegistrosPaginaAtual(count($pag)); foreach ($pag as $res) { - $data = new \DateTime($res['dth_abertura']); + $data = BancoSEI::getInstance()->formatarLeituraDth($res['dth_abertura']); $objProcessoExpedidoDTO = new ProcessoExpedidoDTO(); $objProcessoExpedidoDTO->setDblIdProtocolo($res['id_protocolo']); $objProcessoExpedidoDTO->setStrProtocoloFormatado($res['protocolo_formatado']); $objProcessoExpedidoDTO->setStrNomeUsuario($res['nome_usuario']); - $objProcessoExpedidoDTO->setDthExpedido($data->format('d/m/Y H:i:s')); + $objProcessoExpedidoDTO->setDthExpedido($data); $objProcessoExpedidoDTO->setStrDestino($res['unidade_destino']); $arrProcessosExpedidos[] = $objProcessoExpedidoDTO; diff --git a/rn/ReceberComponenteDigitalRN.php b/rn/ReceberComponenteDigitalRN.php index ca47f14..f2f1478 100644 --- a/rn/ReceberComponenteDigitalRN.php +++ b/rn/ReceberComponenteDigitalRN.php @@ -6,7 +6,7 @@ class ReceberComponenteDigitalRN extends InfraRN private $objProcessoEletronicoRN; private $objInfraParametro; private $arrAnexos = array(); - + public function __construct() { parent::__construct(); @@ -18,40 +18,24 @@ class ReceberComponenteDigitalRN extends InfraRN public function setArrAnexos($arrAnexos){ $this->arrAnexos = $arrAnexos; } - + public function getArrAnexos(){ return $this->arrAnexos; } - + protected function inicializarObjInfraIBanco() { return BancoSEI::getInstance(); } - //TODO: Implementar o recebimento fracionado dos componentes digitais protected function receberComponenteDigitalConectado(ComponenteDigitalDTO $parObjComponenteDigitalDTO) { + if(!isset($parObjComponenteDigitalDTO) || !isset($parObjComponenteDigitalDTO)) { throw new InfraException('Parâmetro $parObjComponenteDigitalDTO não informado.'); } - //Obter os dados do componente digital -// $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital( -// $parObjComponenteDigitalDTO->getNumIdTramite(), -// $parObjComponenteDigitalDTO->getStrHashConteudo(), -// $parObjComponenteDigitalDTO->getStrProtocolo()); - -// if(!isset($objComponenteDigital) || InfraString::isBolVazia($objComponenteDigital->conteudoDoComponenteDigital)) { -// throw new InfraException("Não foi possível obter informações do componente digital identificado (".$parObjComponenteDigitalDTO->getStrHashConteudo().")"); -// } - - //Copiar dados dos componentes digitais para o diretório de upload -// $objAnexoDTO = $this->copiarComponenteDigitalPastaTemporaria($objComponenteDigital); - - - $objAnexoDTO = null; - foreach($this->arrAnexos as $key => $objAnexo){ if(array_key_exists($parObjComponenteDigitalDTO->getStrHashConteudo(), $objAnexo) && $objAnexo['recebido'] == false){ $objAnexoDTO = $objAnexo[$parObjComponenteDigitalDTO->getStrHashConteudo()]; @@ -59,15 +43,15 @@ class ReceberComponenteDigitalRN extends InfraRN break; } } - + if(is_null($objAnexoDTO)){ - throw new InfraException('Anexo '.$parObjComponenteDigitalDTO->getStrHashConteudo().' não encontrado'.var_export($this->arrAnexos, true)); + throw new InfraException('Anexo '.$parObjComponenteDigitalDTO->getStrHashConteudo().' não encontrado '.var_export($this->arrAnexos, true)); } - + //Validar o hash do documento recebido com os dados informados pelo remetente //$this->validarIntegridadeDoComponenteDigital($objAnexoDTO, $parObjComponenteDigitalDTO); - //Transaferir documentos validados para o repositório final de arquivos + //Transferir documentos validados para o repositório final de arquivos $this->cadastrarComponenteDigital($parObjComponenteDigitalDTO, $objAnexoDTO); //Registrar anexo relacionado com o componente digital @@ -80,9 +64,7 @@ class ReceberComponenteDigitalRN extends InfraRN $objComponenteDigitalDTO->setNumIdTramite($parObjComponenteDigitalDTO->getNumIdTramite()); $objComponenteDigitalDTO->setStrNumeroRegistro($parObjComponenteDigitalDTO->getStrNumeroRegistro()); $objComponenteDigitalDTO->setDblIdDocumento($parObjComponenteDigitalDTO->getDblIdDocumento()); - $objComponenteDigitalDTO->setNumIdAnexo($parObjAnexoDTO->getNumIdAnexo()); - $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco()); $objComponenteDigitalDTO = $objComponenteDigitalBD->alterar($objComponenteDigitalDTO); } @@ -93,12 +75,11 @@ class ReceberComponenteDigitalRN extends InfraRN $strNomeArquivoUpload = $objAnexoRN->gerarNomeArquivoTemporario(); $strConteudoCodificado = $objComponenteDigital->conteudoDoComponenteDigital; $strNome = $objComponenteDigital->nome; - - + $fp = fopen(DIR_SEI_TEMP.'/'.$strNomeArquivoUpload,'w'); fwrite($fp,$strConteudoCodificado); fclose($fp); - + //Atribui informações do arquivo anexo $objAnexoDTO = new AnexoDTO(); $objAnexoDTO->setNumIdAnexo($strNomeArquivoUpload); @@ -119,11 +100,11 @@ class ReceberComponenteDigitalRN extends InfraRN $strHashDoArquivo = hash_file("sha256", $strCaminhoAnexo, true); if(strcmp($strHashInformado, $strHashDoArquivo) != 0) { - + $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, "Hash do componente digital não confere com o valor informado pelo remetente.", ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_CORROMPIDO); // Adiciono nos detalhes o nome do método para poder manipular o cache - throw new InfraException("Hash do componente digital não confere com o valor informado pelo remetente.", null, __METHOD__); + throw new InfraException("Hash do componente digital não confere com o valor informado pelo remetente.", null, __METHOD__); } } @@ -134,10 +115,10 @@ class ReceberComponenteDigitalRN extends InfraRN $objDocumentoDTO->retDblIdDocumento(); $objDocumentoDTO->retDblIdProcedimento(); $objDocumentoDTO->setDblIdDocumento($parObjComponenteDigitalDTO->getDblIdDocumento()); - + $objDocumentoRN = new DocumentoRN(); $objDocumentoDTO = $objDocumentoRN->consultarRN0005($objDocumentoDTO); - + if ($objDocumentoDTO==null){ throw new InfraException("Registro não encontrado."); } @@ -149,24 +130,24 @@ class ReceberComponenteDigitalRN extends InfraRN $objProtocoloRN = new ProtocoloRN(); $objProtocoloDTO = $objProtocoloRN->consultarRN0186($objProtocoloDTO); - + //Complementa informações do componente digital $parObjAnexoDTO->setStrNome($parObjComponenteDigitalDTO->getStrNome()); - + $arrStrNome = explode('.',$parObjComponenteDigitalDTO->getStrNome()); $strProtocoloFormatado = current($arrStrNome); - + $objDocumentoDTO->setObjProtocoloDTO($objProtocoloDTO); $objProtocoloDTO->setArrObjAnexoDTO(array($parObjAnexoDTO)); $objDocumentoDTO = $objDocumentoRN->alterarRN0004($objDocumentoDTO); - + // @join_tec US029 (#3790) /*$objObservacaoDTO = new ObservacaoDTO(); $objObservacaoDTO->setDblIdProtocolo($objProtocoloDTO->getDblIdProtocolo()); $objObservacaoDTO->setStrDescricao(sprintf('Número SEI do Documento na Origem: %s', $strProtocoloFormatado)); $objObservacaoDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); - + $objObservacaoBD = new ObservacaoRN(); $objObservacaoBD->cadastrarRN0222($objObservacaoDTO);*/ } -} \ No newline at end of file +} diff --git a/rn/ReceberProcedimentoRN.php b/rn/ReceberProcedimentoRN.php index 7bbec2c..952b025 100644 --- a/rn/ReceberProcedimentoRN.php +++ b/rn/ReceberProcedimentoRN.php @@ -80,209 +80,193 @@ class ReceberProcedimentoRN extends InfraRN $objInfraSessao->trocarUnidadeAtual(); } - // TODO: Adicionar comandos de debug. Vide SeiWs.php gerarProcedimento - protected function receberProcedimentoControlado($parNumIdentificacaoTramite) - { - - $objPenParametroRN = new PenParametroRN(); - SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO')); - - $objSeiRN = new SeiRN(); - - if (!isset($parNumIdentificacaoTramite)) { - throw new InfraException('Parâmetro $parNumIdentificacaoTramite não informado.'); - } - - //TODO: Urgente: Verificar o status do trâmite e verificar se ele já foi salvo na base de dados - $objMetadadosProcedimento = $this->objProcessoEletronicoRN->solicitarMetadados($parNumIdentificacaoTramite); - - //!Substituir a unidade destinatária para a receptora (!1!) - if (isset($objMetadadosProcedimento->metadados->unidadeReceptora)) { - $this->destinatarioReal = $objMetadadosProcedimento->metadados->destinatario; - $objMetadadosProcedimento->metadados->destinatario = $objMetadadosProcedimento->metadados->unidadeReceptora; - } - - if (isset($objMetadadosProcedimento)) { - - $strNumeroRegistro = $objMetadadosProcedimento->metadados->NRE; - $objProcesso = $objMetadadosProcedimento->metadados->processo; - - //Verifica se processo já foi registrado para esse trâmite - //TODO: Ajuste para receber corretamente processo em outra unidade do mesmo sistema passando pelo Barramento - //Comentando o trecho abaixo funciona, mas o processo fica aberto na unidade de destino - if($this->tramiteRegistrado($strNumeroRegistro, $parNumIdentificacaoTramite)) { - InfraDebug::getInstance()->gravar("Trâmite $parNumIdentificacaoTramite desconsiderado por já ter sido processado para o processo" . $objProcesso->protocolo); - // return ; - } - - // Validação dos dados do processo recebido - $objInfraException = new InfraException(); - $this->validarDadosDestinatario($objInfraException, $objMetadadosProcedimento); - $objInfraException->lancarValidacoes(); - - #############################INICIA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################ - $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); - $objTramite = $arrObjTramite[0]; - - //Obtém lista de componentes digitais que precisam ser obtidos - if(!is_array($objTramite->componenteDigitalPendenteDeRecebimento)){ - $objTramite->componenteDigitalPendenteDeRecebimento = array($objTramite->componenteDigitalPendenteDeRecebimento); - } - - //Faz a validação do tamanho e espécie dos componentes digitais - $this->validarComponentesDigitais($objProcesso, $parNumIdentificacaoTramite); - - //Faz a validação da extensão dos componentes digitais a serem recebidos - $this->validarExtensaoComponentesDigitais($parNumIdentificacaoTramite, $objProcesso); - //Faz a validação das permissões de leitura e escrita - $this->verificarPermissoesDiretorios($parNumIdentificacaoTramite); - - $arrStrNomeDocumento = $this->listarMetaDadosComponentesDigitais($objProcesso); - - //Instancia a RN que faz o recebimento dos componentes digitais - $receberComponenteDigitalRN = new ReceberComponenteDigitalRN(); - - //Cria o array que receberá os anexos após os arquivos físicos serem salvos - $arrAnexosComponentes = array(); - - //Cria o array com a lista de hash - $arrayHash = array(); - - //Percorre os componentes que precisam ser recebidos - foreach($objTramite->componenteDigitalPendenteDeRecebimento as $key => $componentePendente){ - - if(!is_null($componentePendente)){ - - //Adiciona o hash do componente digital ao array - $arrayHash[] = $componentePendente; - - //Obter os dados do componente digital - $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital($parNumIdentificacaoTramite, $componentePendente, $objTramite->protocolo); - //Copia o componente para a pasta temporária - $arrAnexosComponentes[$key][$componentePendente] = $receberComponenteDigitalRN->copiarComponenteDigitalPastaTemporaria($objComponenteDigital); - $arrAnexosComponentes[$key]['recebido'] = false; - //Valida a integridade do hash - $receberComponenteDigitalRN->validarIntegridadeDoComponenteDigital($arrAnexosComponentes[$key][$componentePendente], $componentePendente, $parNumIdentificacaoTramite); - } - } - if(count($arrAnexosComponentes) > 0){ - - $receberComponenteDigitalRN->setArrAnexos($arrAnexosComponentes); - } - #############################TERMINA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################ + protected function receberProcedimentoControlado($parNumIdentificacaoTramite) + { + try { + $objPenParametroRN = new PenParametroRN(); + SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO')); - $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); - $objTramite = $arrObjTramite[0]; + $objSeiRN = new SeiRN(); - //Verifica se o trâmite está recusado - if($objTramite->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO) { - return; - } + if (!isset($parNumIdentificacaoTramite)) { + throw new InfraException('Parâmetro $parNumIdentificacaoTramite não informado.'); + } - $objProcedimentoDTO = $this->registrarProcesso($strNumeroRegistro, $parNumIdentificacaoTramite, $objProcesso, $objMetadadosProcedimento); + //TODO: Urgente: Verificar o status do trâmite e verificar se ele já foi salvo na base de dados + $this->gravarLogDebug("Solicitando metadados do trâmite " . $parNumIdentificacaoTramite, 4); + $objMetadadosProcedimento = $this->objProcessoEletronicoRN->solicitarMetadados($parNumIdentificacaoTramite); + //Substituir a unidade destinatária para a receptora (!1!) + if (isset($objMetadadosProcedimento->metadados->unidadeReceptora)) { + $numUnidadeReceptora = $objMetadadosProcedimento->metadados->unidadeReceptora; + $this->destinatarioReal = $objMetadadosProcedimento->metadados->destinatario; + $objMetadadosProcedimento->metadados->destinatario = $numUnidadeReceptora; + $this->gravarLogDebug("Atribuindo unidade receptora $numUnidadeReceptora para o trâmite $parNumIdentificacaoTramite", 4); + } + if (isset($objMetadadosProcedimento)) { + $strNumeroRegistro = $objMetadadosProcedimento->metadados->NRE; + $objProcesso = $objMetadadosProcedimento->metadados->processo; + //Verifica se processo já foi registrado para esse trâmite + //TODO: Ajuste para receber corretamente processo em outra unidade do mesmo sistema passando pelo Barramento + //Comentando o trecho abaixo funciona, mas o processo fica aberto na unidade de destino + if($this->tramiteRegistrado($strNumeroRegistro, $parNumIdentificacaoTramite)) { + $this->gravarLogDebug("Trâmite $parNumIdentificacaoTramite já para o processo " . $objProcesso->protocolo, 4); + // return ; + } - // @join_tec US008.08 (#23092) - $this->objProcedimentoAndamentoRN->setOpts($objProcedimentoDTO->getDblIdProcedimento(), $parNumIdentificacaoTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO)); - $this->objProcedimentoAndamentoRN->cadastrar('Obtendo metadados do processo', 'S'); + // Validação dos dados do processo recebido + $objInfraException = new InfraException(); + $this->validarDadosDestinatario($objInfraException, $objMetadadosProcedimento); + $objInfraException->lancarValidacoes(); - //Verificar se procedimento já existia na base de dados do sistema - //$dblIdProcedimento = $this->consultarProcedimentoExistente($strNumeroRegistro, $strProtocolo); + #############################INICIA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################ + $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); + $objTramite = $arrObjTramite[0]; - //if(isset($dblIdProcedimento)){ - //TODO: Tratar situação em que o processo (NUP) já existia na base do sistema mas não havia nenhum NRE registrado para ele - // $objProcedimentoDTO = $this->atualizarProcedimento($dblIdProcedimento, $objMetadadosProcedimento, $objProcesso); - //} - //else { - //TODO: Gerar Procedimento com status BLOQUEADO, aguardando o recebimento dos componentes digitais - // $objProcedimentoDTO = $this->gerarProcedimento($objMetadadosProcedimento, $objProcesso); - //} + //Obtém lista de componentes digitais que precisam ser obtidos + $this->gravarLogDebug("Obtém lista de componentes digitais que precisam ser obtidos", 4); + if(!is_array($objTramite->componenteDigitalPendenteDeRecebimento)){ + $objTramite->componenteDigitalPendenteDeRecebimento = array($objTramite->componenteDigitalPendenteDeRecebimento); + } - //TODO: Fazer o envio de cada um dos procedimentos apensados (Processo principal e seus apensados, caso exista) - //... - //TODO: Parei aqui!!! Recebimento de processos apensados + $this->validarComponentesDigitais($objProcesso, $parNumIdentificacaoTramite); + $this->validarExtensaoComponentesDigitais($parNumIdentificacaoTramite, $objProcesso); + $this->verificarPermissoesDiretorios($parNumIdentificacaoTramite); - $objProcessoEletronicoDTO = $this->objProcessoEletronicoRN->cadastrarTramiteDeProcesso($objProcedimentoDTO->getDblIdProcedimento(), - $strNumeroRegistro, $parNumIdentificacaoTramite, null, $objProcesso); + $this->gravarLogDebug("Obtendo metadados dos componentes digitais do processo", 4); + $arrStrNomeDocumento = $this->listarMetaDadosComponentesDigitais($objProcesso); + $receberComponenteDigitalRN = new ReceberComponenteDigitalRN(); + $arrAnexosComponentes = array(); + $arrayHash = array(); + $arrayHashPendentes = array(); + //Percorre os componentes que precisam ser recebidos + foreach($objTramite->componenteDigitalPendenteDeRecebimento as $key => $componentePendente){ + if(!is_null($componentePendente)){ - //TODO: Passar implementação para outra classe de negócio - //Verifica se o tramite se encontra na situação correta - $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); - if(!isset($arrObjTramite) || count($arrObjTramite) != 1) { - throw new InfraException("Trâmite não pode ser localizado pelo identificado $parNumIdentificacaoTramite."); - } + if(!$this->documentoJaRegistrado($strNumeroRegistro, $parNumIdentificacaoTramite, $componentePendente)){ + $arrayHashPendentes[] = $componentePendente; + } + //TODO: Download do componente digital é realizado, mesmo já existindo na base de dados, devido a comportamento obrigatório do Barramento para mudança de status + //Ajuste deverá ser feito em versões futuas + $arrayHash[] = $componentePendente; - $objTramite = $arrObjTramite[0]; + //Obter os dados do componente digital + $this->gravarLogDebug("Baixando componente digital $key", 6); + $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital($parNumIdentificacaoTramite, $componentePendente, $objTramite->protocolo); + $arrAnexosComponentes[$key][$componentePendente] = $receberComponenteDigitalRN->copiarComponenteDigitalPastaTemporaria($objComponenteDigital); + $arrAnexosComponentes[$key]['recebido'] = false; + //Valida a integridade do hash + $this->gravarLogDebug("Validando integridade de componente digital $key", 6); + $receberComponenteDigitalRN->validarIntegridadeDoComponenteDigital($arrAnexosComponentes[$key][$componentePendente], $componentePendente, $parNumIdentificacaoTramite); + } + } - if($objTramite->situacaoAtual != ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) { - return; - } + if(count($arrAnexosComponentes) > 0){ + $receberComponenteDigitalRN->setArrAnexos($arrAnexosComponentes); + } + #############################TERMINA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################ + $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); + $objTramite = $arrObjTramite[0]; - // throw new InfraException("COMPONENTES DIGITAIS A SEREM ANEXADOS: ".var_export($arrayHash, true)); - if(count($arrayHash) > 0){ + //Verifica se o trâmite está recusado + if($objTramite->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO) { + $this->gravarLogDebug("Trâmite $parNumIdentificacaoTramite já se encontra recusado. Cancelando o recebimento do processo", 4); + return; + } - //Obter dados dos componetes digitais - $objComponenteDigitalDTO = new ComponenteDigitalDTO(); - $objComponenteDigitalDTO->setStrNumeroRegistro($strNumeroRegistro); - $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite); - $objComponenteDigitalDTO->setStrHashConteudo($arrayHash, InfraDTO::$OPER_IN); - $objComponenteDigitalDTO->setOrdNumOrdem(InfraDTO::$TIPO_ORDENACAO_ASC); - $objComponenteDigitalDTO->retDblIdDocumento(); - $objComponenteDigitalDTO->retNumTicketEnvioComponentes(); - // $objComponenteDigitalDTO->retStrConteudoAssinaturaDocumento(); - $objComponenteDigitalDTO->retStrProtocoloDocumentoFormatado(); - $objComponenteDigitalDTO->retStrHashConteudo(); - $objComponenteDigitalDTO->retStrProtocolo(); - $objComponenteDigitalDTO->retStrNumeroRegistro(); - $objComponenteDigitalDTO->retNumIdTramite(); - $objComponenteDigitalDTO->retStrNome(); - $objComponenteDigitalDTO->retStrStaEstadoProtocolo(); + $this->gravarLogDebug("Persistindo/atualizando dados do processo com NRE " . $strNumeroRegistro, 4); + $objProcedimentoDTO = $this->registrarProcesso($strNumeroRegistro, $parNumIdentificacaoTramite, $objProcesso, $objMetadadosProcedimento); - $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco()); - $arrObjComponentesDigitaisDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO); - // throw new InfraException('Componentes encontrados: '.var_export($arrObjComponentesDigitaisDTO, true)); + // @join_tec US008.08 (#23092) + $this->objProcedimentoAndamentoRN->setOpts($objProcedimentoDTO->getDblIdProcedimento(), $parNumIdentificacaoTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO)); + $this->objProcedimentoAndamentoRN->cadastrar('Obtendo metadados do processo', 'S'); - if ($objComponenteDigitalBD->contar($objComponenteDigitalDTO) > 0) { - $objReceberComponenteDigitalRN = $receberComponenteDigitalRN; + $this->gravarLogDebug("Registrando trâmite externo do processo", 4); + $objProcessoEletronicoDTO = $this->objProcessoEletronicoRN->cadastrarTramiteDeProcesso($objProcedimentoDTO->getDblIdProcedimento(), + $strNumeroRegistro, $parNumIdentificacaoTramite, null, $objProcesso); - foreach($arrObjComponentesDigitaisDTO as $objComponenteDigitalDTOEnviado) { - if($objComponenteDigitalDTOEnviado->getStrStaEstadoProtocolo() != ProtocoloRN::$TE_DOCUMENTO_CANCELADO){ - $strHash = $objComponenteDigitalDTOEnviado->getStrHashConteudo(); - $strNomeDocumento = (array_key_exists($strHash, $arrStrNomeDocumento)) ? $arrStrNomeDocumento[$strHash]['especieNome'] : '[Desconhecido]'; + //Verifica se o tramite se encontra na situação correta + $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); + if(!isset($arrObjTramite) || count($arrObjTramite) != 1) { + throw new InfraException("Trâmite não pode ser localizado pelo identificado $parNumIdentificacaoTramite."); + } - $objReceberComponenteDigitalRN->receberComponenteDigital($objComponenteDigitalDTOEnviado); - // @join_tec US008.09 (#23092) - $this->objProcedimentoAndamentoRN->cadastrar(sprintf('Recebendo %s %s', $strNomeDocumento, $objComponenteDigitalDTOEnviado->getStrProtocoloDocumentoFormatado()), 'S'); - } + $objTramite = $arrObjTramite[0]; + if($objTramite->situacaoAtual != ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) { + $this->gravarLogDebug("Desconsiderando recebimento do processo devido a situação de trâmite inconsistente: " . $objTramite->situacaoAtual, 4); + return; + } + if(count($arrayHashPendentes) > 0){ + //Obter dados dos componetes digitais + $this->gravarLogDebug("Iniciando o recebimento dos componentes digitais pendentes", 4); + $objComponenteDigitalDTO = new ComponenteDigitalDTO(); + $objComponenteDigitalDTO->setStrNumeroRegistro($strNumeroRegistro); + $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite); + $objComponenteDigitalDTO->setStrHashConteudo($arrayHash, InfraDTO::$OPER_IN); + $objComponenteDigitalDTO->setOrdNumOrdem(InfraDTO::$TIPO_ORDENACAO_ASC); + $objComponenteDigitalDTO->retDblIdDocumento(); + $objComponenteDigitalDTO->retNumTicketEnvioComponentes(); + $objComponenteDigitalDTO->retStrProtocoloDocumentoFormatado(); + $objComponenteDigitalDTO->retStrHashConteudo(); + $objComponenteDigitalDTO->retStrProtocolo(); + $objComponenteDigitalDTO->retStrNumeroRegistro(); + $objComponenteDigitalDTO->retNumIdTramite(); + $objComponenteDigitalDTO->retStrNome(); + $objComponenteDigitalDTO->retStrStaEstadoProtocolo(); + + $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco()); + $arrObjComponentesDigitaisDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO); + + if ($objComponenteDigitalBD->contar($objComponenteDigitalDTO) > 0) { + $objReceberComponenteDigitalRN = $receberComponenteDigitalRN; + foreach($arrObjComponentesDigitaisDTO as $objComponenteDigitalDTOEnviado) { + if($objComponenteDigitalDTOEnviado->getStrStaEstadoProtocolo() != ProtocoloRN::$TE_DOCUMENTO_CANCELADO){ + $strHash = $objComponenteDigitalDTOEnviado->getStrHashConteudo(); + $strNomeDocumento = (array_key_exists($strHash, $arrStrNomeDocumento)) ? $arrStrNomeDocumento[$strHash]['especieNome'] : '[Desconhecido]'; + $objReceberComponenteDigitalRN->receberComponenteDigital($objComponenteDigitalDTOEnviado); + + // @join_tec US008.09 (#23092) + $strMensagemRecebimento = sprintf('Recebendo %s %s', $strNomeDocumento, $objComponenteDigitalDTOEnviado->getStrProtocoloDocumentoFormatado()); + $this->objProcedimentoAndamentoRN->cadastrar($strMensagemRecebimento, 'S'); + $this->gravarLogDebug($strMensagemRecebimento, 6); + } + } + // @join_tec US008.10 (#23092) + $this->objProcedimentoAndamentoRN->cadastrar('Todos os componentes digitais foram recebidos', 'S'); + + }else{ + $this->objProcedimentoAndamentoRN->cadastrar('Nenhum componente digital para receber', 'S'); + } } - // @join_tec US008.10 (#23092) - $this->objProcedimentoAndamentoRN->cadastrar('Todos os componentes digitais foram recebidos', 'S'); - - }else{ - $this->objProcedimentoAndamentoRN->cadastrar('Nenhum componente digital para receber', 'S'); } - } + //$this->fecharProcedimentoEmOutraUnidades($objProcedimentoDTO, $objMetadadosProcedimento); + $this->gravarLogDebug("Enviando recibo de conclusão do trâmite $parNumIdentificacaoTramite", 6); + $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN(); + $objEnviarReciboTramiteRN->enviarReciboTramiteProcesso($parNumIdentificacaoTramite, $arrayHash); + + $this->gravarLogDebug("Registrando a conclusão do recebimento do trâmite $parNumIdentificacaoTramite", 6); + $objPenTramiteProcessadoRN = new PenTramiteProcessadoRN(PenTramiteProcessadoRN::STR_TIPO_PROCESSO); + $objPenTramiteProcessadoRN->setRecebido($parNumIdentificacaoTramite); + + } catch (Exception $e) { + $mensagemErro = InfraException::inspecionar($e); + $this->gravarLogDebug($mensagemErro); + LogSEI::getInstance()->gravar($mensagemErro); + throw $e; + } } - //$this->fecharProcedimentoEmOutraUnidades($objProcedimentoDTO, $objMetadadosProcedimento); - - $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN(); - $objEnviarReciboTramiteRN->enviarReciboTramiteProcesso($parNumIdentificacaoTramite, $arrayHash); - - $objPenTramiteProcessadoRN = new PenTramiteProcessadoRN(PenTramiteProcessadoRN::STR_TIPO_PROCESSO); - $objPenTramiteProcessadoRN->setRecebido($parNumIdentificacaoTramite); - } /** * Retorna um array com alguns metadados, onde o indice de é o hash do arquivo @@ -376,8 +360,6 @@ class ReceberProcedimentoRN extends InfraRN private function registrarProcesso($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjMetadadosProcedimento) { - - // Validação dos dados do processo recebido $objInfraException = new InfraException(); $this->validarDadosProcesso($objInfraException, $parObjProcesso); @@ -392,13 +374,9 @@ class ReceberProcedimentoRN extends InfraRN $dblIdProcedimento = $this->consultarProcedimentoExistente($parStrNumeroRegistro, $parObjProcesso->protocolo); if(isset($dblIdProcedimento)){ - - //TODO: Tratar situação em que o processo (NUP) já existia na base do sistema mas não havia nenhum NRE registrado para ele $objProcedimentoDTO = $this->atualizarProcedimento($dblIdProcedimento, $parObjMetadadosProcedimento, $parObjProcesso); } else { - - //TODO: Gerar Procedimento com status BLOQUEADO, aguardando o recebimento dos componentes digitais $objProcedimentoDTO = $this->gerarProcedimento($parObjMetadadosProcedimento, $parObjProcesso); } @@ -419,7 +397,8 @@ class ReceberProcedimentoRN extends InfraRN return $objProcedimentoDTO; } - private function tramiteRegistrado($parStrNumeroRegistro, $parNumIdentificacaoTramite) { + private function tramiteRegistrado($parStrNumeroRegistro, $parNumIdentificacaoTramite) + { $objTramiteDTO = new TramiteDTO(); $objTramiteDTO->setStrNumeroRegistro($parStrNumeroRegistro); @@ -429,6 +408,29 @@ class ReceberProcedimentoRN extends InfraRN return $objTramiteBD->contar($objTramiteDTO) > 0; } + + private function documentoJaRegistrado($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parStrHashComponenteDigital) + { + //Verifica se componente digital já está registrado para o documento + $objComponenteDigitalDTO = new ComponenteDigitalDTO(); + $objComponenteDigitalDTO->setStrNumeroRegistro($parStrNumeroRegistro); + $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite); + $objComponenteDigitalDTO->setStrHashConteudo($parStrHashComponenteDigital); + // $objComponenteDigitalDTO->retDblIdDocumento(); + // $objComponenteDigitalDTO->retNumTicketEnvioComponentes(); + // $objComponenteDigitalDTO->retStrProtocoloDocumentoFormatado(); + // $objComponenteDigitalDTO->retStrHashConteudo(); + // $objComponenteDigitalDTO->retStrProtocolo(); + // $objComponenteDigitalDTO->retStrNumeroRegistro(); + // $objComponenteDigitalDTO->retNumIdTramite(); + // $objComponenteDigitalDTO->retStrNome(); + // $objComponenteDigitalDTO->retStrStaEstadoProtocolo(); + + $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco()); + return $objComponenteDigitalBD->contar($objComponenteDigitalDTO) > 0; + } + + private function consultarProcedimentoExistente($parStrNumeroRegistro, $parStrProtocolo = null) { $dblIdProcedimento = null; @@ -448,8 +450,8 @@ class ReceberProcedimentoRN extends InfraRN return $dblIdProcedimento; } - private function atualizarProcedimento($parDblIdProcedimento, $objMetadadosProcedimento, $objProcesso){ - + private function atualizarProcedimento($parDblIdProcedimento, $objMetadadosProcedimento, $objProcesso) + { if(!isset($parDblIdProcedimento)){ throw new InfraException('Parâmetro $parDblIdProcedimento não informado.'); @@ -1683,102 +1685,117 @@ class ReceberProcedimentoRN extends InfraRN } - public function receberTramitesRecusados($parNumIdentificacaoTramite) { - - if (empty($parNumIdentificacaoTramite)) { - throw new InfraException('Parâmetro $parNumIdentificacaoTramite não informado.'); - } - - //Busca os dados do trâmite no barramento - $tramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); - - if(!isset($tramite[0])){ - throw new InfraException("Não foi encontrado no PEN o trâmite de número {$parNumIdentificacaoTramite} para realizar a ciência da recusa"); - } + public function receberTramitesRecusados($parNumIdentificacaoTramite) + { + try { + if (empty($parNumIdentificacaoTramite)) { + throw new InfraException('Parâmetro $parNumIdentificacaoTramite não informado.'); + } - $tramite = $tramite[0]; + //Busca os dados do trâmite no barramento + $tramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); - $objTramiteDTO = new TramiteDTO(); - $objTramiteDTO->setNumIdTramite($parNumIdentificacaoTramite); - $objTramiteDTO->retNumIdUnidade(); + if(!isset($tramite[0])){ + throw new InfraException("Não foi encontrado no PEN o trâmite de número {$parNumIdentificacaoTramite} para realizar a ciência da recusa"); + } - $objTramiteBD = new TramiteBD(BancoSEI::getInstance()); - $objTramiteDTO = $objTramiteBD->consultar($objTramiteDTO); + $tramite = $tramite[0]; - if(!isset($objTramiteDTO)){ - throw new InfraException("Não foi encontrado no sistema o trâmite de número {$parNumIdentificacaoTramite} para realizar a ciência da recusa"); - } + $objTramiteDTO = new TramiteDTO(); + $objTramiteDTO->setNumIdTramite($parNumIdentificacaoTramite); + $objTramiteDTO->retNumIdUnidade(); - SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objTramiteDTO->getNumIdUnidade()); + $objTramiteBD = new TramiteBD(BancoSEI::getInstance()); + $objTramiteDTO = $objTramiteBD->consultar($objTramiteDTO); - //Busca os dados do procedimento - $objProcessoEletronicoDTO = new ProcessoEletronicoDTO(); - $objProcessoEletronicoDTO->setStrNumeroRegistro($tramite->NRE); - $objProcessoEletronicoDTO->retDblIdProcedimento(); + if(!isset($objTramiteDTO)){ + throw new InfraException("Não foi encontrado no sistema o trâmite de número {$parNumIdentificacaoTramite} para realizar a ciência da recusa"); + } - $objProcessoEletronicoBD = new ProcessoEletronicoBD($this->getObjInfraIBanco()); - $objProcessoEletronicoDTO = $objProcessoEletronicoBD->consultar($objProcessoEletronicoDTO); + SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objTramiteDTO->getNumIdUnidade()); - //Busca a última atividade de trâmite externo - $objAtividadeDTO = new AtividadeDTO(); - $objAtividadeDTO->setDblIdProtocolo($objProcessoEletronicoDTO->getDblIdProcedimento()); - $objAtividadeDTO->setNumIdTarefa(ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO)); - $objAtividadeDTO->setNumMaxRegistrosRetorno(1); - $objAtividadeDTO->setOrdDthAbertura(InfraDTO::$TIPO_ORDENACAO_DESC); - $objAtividadeDTO->retNumIdAtividade(); + //Busca os dados do procedimento + $this->gravarLogDebug("Buscando os dados de procedimento com NRE " . $tramite->NRE, 2); + $objProcessoEletronicoDTO = new ProcessoEletronicoDTO(); + $objProcessoEletronicoDTO->setStrNumeroRegistro($tramite->NRE); + $objProcessoEletronicoDTO->retDblIdProcedimento(); + $objProcessoEletronicoBD = new ProcessoEletronicoBD($this->getObjInfraIBanco()); + $objProcessoEletronicoDTO = $objProcessoEletronicoBD->consultar($objProcessoEletronicoDTO); - //TODO: Necessário refatoração para chamada da casse AtividadeRN, e não a classe AtividadeBD com risco de quebra de regas internas do sistema - $objAtividadeBD = new AtividadeBD($this->getObjInfraIBanco()); - $objAtividadeDTO = $objAtividadeBD->consultar($objAtividadeDTO); - - //Busca a unidade de destino - $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); - $objAtributoAndamentoDTO->setNumIdAtividade($objAtividadeDTO->getNumIdAtividade()); - $objAtributoAndamentoDTO->setStrNome('UNIDADE_DESTINO'); - $objAtributoAndamentoDTO->retStrValor(); - - $objAtributoAndamentoBD = new AtributoAndamentoBD($this->getObjInfraIBanco()); - $objAtributoAndamentoDTO = $objAtributoAndamentoBD->consultar($objAtributoAndamentoDTO); - - //Monta o DTO de receber tramite recusado - $objReceberTramiteRecusadoDTO = new ReceberTramiteRecusadoDTO(); - $objReceberTramiteRecusadoDTO->setNumIdTramite($parNumIdentificacaoTramite); - $objReceberTramiteRecusadoDTO->setNumIdProtocolo($objProcessoEletronicoDTO->getDblIdProcedimento()); - $objReceberTramiteRecusadoDTO->setNumIdUnidadeOrigem(null); - $objReceberTramiteRecusadoDTO->setNumIdTarefa(ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_RECUSADO)); - $objReceberTramiteRecusadoDTO->setStrMotivoRecusa(utf8_decode($tramite->justificativaDaRecusa)); - $objReceberTramiteRecusadoDTO->setStrNomeUnidadeDestino($objAtributoAndamentoDTO->getStrValor()); - - //Faz o tratamento do processo e do trâmite recusado - $this->receberTramiteRecusadoInterno($objReceberTramiteRecusadoDTO); + //Busca a última atividade de trâmite externo + $this->gravarLogDebug("Buscando última atividade de trâmite externo do processo " . $objProcessoEletronicoDTO->getDblIdProcedimento(), 2); + $objAtividadeDTO = new AtividadeDTO(); + $objAtividadeDTO->setDblIdProtocolo($objProcessoEletronicoDTO->getDblIdProcedimento()); + $objAtividadeDTO->setNumIdTarefa(ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO)); + $objAtividadeDTO->setNumMaxRegistrosRetorno(1); + $objAtividadeDTO->setOrdDthAbertura(InfraDTO::$TIPO_ORDENACAO_DESC); + $objAtividadeDTO->retNumIdAtividade(); + $objAtividadeBD = new AtividadeBD($this->getObjInfraIBanco()); + $objAtividadeDTO = $objAtividadeBD->consultar($objAtividadeDTO); + + //Busca a unidade de destino + $this->gravarLogDebug("Buscando informações sobre a unidade de destino", 2); + $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); + $objAtributoAndamentoDTO->setNumIdAtividade($objAtividadeDTO->getNumIdAtividade()); + $objAtributoAndamentoDTO->setStrNome('UNIDADE_DESTINO'); + $objAtributoAndamentoDTO->retStrValor(); + $objAtributoAndamentoBD = new AtributoAndamentoBD($this->getObjInfraIBanco()); + $objAtributoAndamentoDTO = $objAtributoAndamentoBD->consultar($objAtributoAndamentoDTO); + + //Monta o DTO de receber tramite recusado + $this->gravarLogDebug("Preparando recebimento de trâmite " . $parNumIdentificacaoTramite . " recusado", 2); + $objReceberTramiteRecusadoDTO = new ReceberTramiteRecusadoDTO(); + $objReceberTramiteRecusadoDTO->setNumIdTramite($parNumIdentificacaoTramite); + $objReceberTramiteRecusadoDTO->setNumIdProtocolo($objProcessoEletronicoDTO->getDblIdProcedimento()); + $objReceberTramiteRecusadoDTO->setNumIdUnidadeOrigem(null); + $objReceberTramiteRecusadoDTO->setNumIdTarefa(ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_RECUSADO)); + $objReceberTramiteRecusadoDTO->setStrMotivoRecusa(utf8_decode($tramite->justificativaDaRecusa)); + $objReceberTramiteRecusadoDTO->setStrNomeUnidadeDestino($objAtributoAndamentoDTO->getStrValor()); + + //Faz o tratamento do processo e do trâmite recusado + $this->gravarLogDebug("Atualizando dados do processo " . $objProcessoEletronicoDTO->getDblIdProcedimento() ." e do trâmite recusado " . $parNumIdentificacaoTramite, 2); + $this->receberTramiteRecusadoInterno($objReceberTramiteRecusadoDTO); + + } catch (Exception $e) { + $mensagemErro = InfraException::inspecionar($e); + $this->gravarLogDebug($mensagemErro); + LogSEI::getInstance()->gravar($mensagemErro); + throw $e; + } } - protected function receberTramiteRecusadoInternoControlado(ReceberTramiteRecusadoDTO $objReceberTramiteRecusadoDTO){ - + protected function receberTramiteRecusadoInternoControlado(ReceberTramiteRecusadoDTO $objReceberTramiteRecusadoDTO) + { //Realiza o desbloqueio do processo - $objEntradaDesbloquearProcessoAPI = new EntradaDesbloquearProcessoAPI(); - $objEntradaDesbloquearProcessoAPI->setIdProcedimento($objReceberTramiteRecusadoDTO->getNumIdProtocolo()); - - $objSeiRN = new SeiRN(); - $objSeiRN->desbloquearProcesso($objEntradaDesbloquearProcessoAPI); + $this->gravarLogDebug("Realizando o desbloqueio do processo", 4); + $objProtocoloDTO = new ProtocoloDTO(); + $objProtocoloDTO->setDblIdProtocolo($objReceberTramiteRecusadoDTO->getNumIdProtocolo()); + $objProtocoloDTO->setStrStaEstado(ProtocoloRN::$TE_PROCEDIMENTO_BLOQUEADO); + $objProtocoloRN = new ProtocoloRN(); + if($objProtocoloRN->contarRN0667($objProtocoloDTO) != 0) { + $objEntradaDesbloquearProcessoAPI = new EntradaDesbloquearProcessoAPI(); + $objEntradaDesbloquearProcessoAPI->setIdProcedimento($objReceberTramiteRecusadoDTO->getNumIdProtocolo()); + $objSeiRN = new SeiRN(); + $objSeiRN->desbloquearProcesso($objEntradaDesbloquearProcessoAPI); + } else { + $this->gravarLogDebug("Processo " . $objReceberTramiteRecusadoDTO->getNumIdProtocolo() . " já se encontra desbloqueado!", 6); + } //Adiciona um andamento para o trâmite recusado + $this->gravarLogDebug("Adicionando andamento para registro da recusa do trâmite", 4); $arrObjAtributoAndamentoDTO = array(); - $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); $objAtributoAndamentoDTO->setStrNome('MOTIVO'); $objAtributoAndamentoDTO->setStrValor($objReceberTramiteRecusadoDTO->getStrMotivoRecusa()); $objAtributoAndamentoDTO->setStrIdOrigem($objReceberTramiteRecusadoDTO->getNumIdUnidadeOrigem()); $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO; - $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); $objAtributoAndamentoDTO->setStrNome('UNIDADE_DESTINO'); $objAtributoAndamentoDTO->setStrValor($objReceberTramiteRecusadoDTO->getStrNomeUnidadeDestino()); $objAtributoAndamentoDTO->setStrIdOrigem($objReceberTramiteRecusadoDTO->getNumIdUnidadeOrigem()); $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO; - $objAtividadeDTO = new AtividadeDTO(); $objAtividadeDTO->setDblIdProtocolo($objReceberTramiteRecusadoDTO->getNumIdProtocolo()); $objAtividadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); @@ -1789,21 +1806,18 @@ class ReceberProcedimentoRN extends InfraRN $objAtividadeRN->gerarInternaRN0727($objAtividadeDTO); //Sinaliza na PenProtocolo que o processo obteve recusa + $this->gravarLogDebug("Atualizando protocolo sobre obtenção da ciência de recusa", 4); $objProtocolo = new PenProtocoloDTO(); $objProtocolo->setDblIdProtocolo($objReceberTramiteRecusadoDTO->getNumIdProtocolo()); $objProtocolo->setStrSinObteveRecusa('S'); - $objProtocoloBD = new ProtocoloBD($this->getObjInfraIBanco()); $objProtocoloBD->alterar($objProtocolo); - + $this->gravarLogDebug("Notificando serviços do PEN sobre ciência da recusa do trâmite " . $objReceberTramiteRecusadoDTO->getNumIdTramite(), 4); $this->objProcessoEletronicoRN->cienciaRecusa($objReceberTramiteRecusadoDTO->getNumIdTramite()); - - } - /** * Método que realiza a validação da extensão dos componentes digitais a serem recebidos * @@ -1867,7 +1881,13 @@ class ReceberProcedimentoRN extends InfraRN throw new InfraException('O sistema não possui permissão de escrita no diretório de armazenamento de arquivos temporários do sistema.'); } + } - + private function gravarLogDebug($strMensagem, $numIdentacao=0) + { + $strDataLog = date("d/m/Y H:i:s"); + $strLog = sprintf("[%s] [PROCESSAMENTO] %s %s", $strDataLog, str_repeat(" ", $numIdentacao * 4), $strMensagem); + InfraDebug::getInstance()->gravar($strLog); } + } diff --git a/rn/ReceberReciboTramiteRN.php b/rn/ReceberReciboTramiteRN.php index b9dfd5e..3b44bdd 100644 --- a/rn/ReceberReciboTramiteRN.php +++ b/rn/ReceberReciboTramiteRN.php @@ -20,14 +20,21 @@ class ReceberReciboTramiteRN extends InfraRN return BancoSEI::getInstance(); } - protected function registrarRecebimentoRecibo($numIdProcedimento, $strProtocoloFormatado, $numIdTramite) { - + protected function registrarRecebimentoRecibo($numIdProcedimento, $strProtocoloFormatado, $numIdTramite) + { //REALIZA A CONCLUSÃO DO PROCESSO $objEntradaConcluirProcessoAPI = new EntradaConcluirProcessoAPI(); $objEntradaConcluirProcessoAPI->setIdProcedimento($numIdProcedimento); $objSeiRN = new SeiRN(); - $objSeiRN->concluirProcesso($objEntradaConcluirProcessoAPI); + try { + $objSeiRN->concluirProcesso($objEntradaConcluirProcessoAPI); + } catch (Exception $e) { + //Registra falha em log de debug mas não gera rollback na transação. + //O rollback da transação poderia deixar a situação do processo inconsistênte já que o Barramento registrou anteriormente que o + //recibo já havia sido obtido. O erro no fechamento não provoca impacto no andamento do processo + InfraDebug::getInstance()->gravar("Processo $strProtocoloFormatado não está aberto na unidade."); + } $arrObjAtributoAndamentoDTO = array(); @@ -90,6 +97,7 @@ class ReceberReciboTramiteRN extends InfraRN } $objRepositorioDTO = $this->objProcessoEletronicoRN->consultarRepositoriosDeEstruturas($objTramite->destinatario->identificacaoDoRepositorioDeEstruturas); + if(!empty($objRepositorioDTO)) { $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); @@ -108,11 +116,11 @@ class ReceberReciboTramiteRN extends InfraRN $objAtividadeRN = new AtividadeRN(); $objAtividadeRN->gerarInternaRN0727($objAtividadeDTO); - } - - protected function receberReciboDeTramiteConectado($parNumIdTramite) { + } + protected function receberReciboDeTramiteControlado($parNumIdTramite) + { if (!isset($parNumIdTramite)) { throw new InfraException('Parâmetro $parNumIdTramite não informado.'); } @@ -142,6 +150,7 @@ class ReceberReciboTramiteRN extends InfraRN if ($objTramiteBD->contar($objTramiteDTO) > 0) { + $objTramiteDTO = $objTramiteBD->consultar($objTramiteDTO); SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objTramiteDTO->getNumIdUnidade()); @@ -151,13 +160,10 @@ class ReceberReciboTramiteRN extends InfraRN $objReciboTramiteBD = new ReciboTramiteBD(BancoSEI::getInstance()); if ($objReciboTramiteBD->contar($objReciboTramiteDTOExistente) == 0) { - //Armazenar dados do recibo de conclusão do trãmite $objReciboTramiteBD->cadastrar($objReciboTramiteDTO); - if ($objReciboTramite->recibo->hashDoComponenteDigital && is_array($objReciboTramite->recibo->hashDoComponenteDigital)) { foreach ($objReciboTramite->recibo->hashDoComponenteDigital as $strHashComponenteDigital) { - $objReciboTramiteHashDTO = new ReciboTramiteHashDTO(); $objReciboTramiteHashDTO->setStrNumeroRegistro($objReciboTramite->recibo->NRE); $objReciboTramiteHashDTO->setNumIdTramite($objReciboTramite->recibo->IDT); @@ -168,7 +174,6 @@ class ReceberReciboTramiteRN extends InfraRN $objGenericoBD->cadastrar($objReciboTramiteHashDTO); } } - //ALTERA O ESTADO DO PROCEDIMENTO try { @@ -198,10 +203,8 @@ class ReceberReciboTramiteRN extends InfraRN $this->objProcedimentoAndamentoRN->setOpts($objProcessoEletronicoDTO->getDblIdProcedimento(), $parNumIdTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO)); $this->objProcedimentoAndamentoRN->cadastrar(sprintf('Trâmite do processo %s foi concluído', $objProtocoloDTO->getStrProtocoloFormatado()), 'S'); - //Registra o recbimento do recibo no histórico e realiza a conclusão do processo $this->registrarRecebimentoRecibo($objProtocoloDTO->getDblIdProtocolo(), $objProtocoloDTO->getStrProtocoloFormatado(), $parNumIdTramite); - $objPenTramiteProcessadoRN = new PenTramiteProcessadoRN(PenTramiteProcessadoRN::STR_TIPO_RECIBO); $objPenTramiteProcessadoRN->setRecebido($parNumIdTramite); -- libgit2 0.21.2