From e31e693ee7fa6448032d7d769c89e95b70d0a2d6 Mon Sep 17 00:00:00 2001 From: Guilherme Andrade Del Cantoni Date: Thu, 25 Apr 2019 12:37:56 -0300 Subject: [PATCH] Ajustes em correções de erros após merge --- dto/ProcessoExpedidoDTO.php | 14 ++++++-------- rn/ExpedirProcedimentoRN.php | 7 +++---- rn/PendenciasTramiteRN.php | 7 ------- rn/ProcessoEletronicoRN.php | 13 +++---------- rn/ReceberProcedimentoRN.php | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------ 5 files changed, 75 insertions(+), 71 deletions(-) diff --git a/dto/ProcessoExpedidoDTO.php b/dto/ProcessoExpedidoDTO.php index 93f781b..514040a 100644 --- a/dto/ProcessoExpedidoDTO.php +++ b/dto/ProcessoExpedidoDTO.php @@ -10,24 +10,24 @@ class ProcessoExpedidoDTO extends InfraDTO { // Força o JOIN com todas as tabelas parent::__construct(true); } - + public function getStrNomeTabela() { return 'protocolo'; } public function montar() { - + // Protocolo $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_DBL, 'IdProtocolo', 'id_protocolo'); $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_STR, 'StaEstado', 'sta_estado'); $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_STR, 'ProtocoloFormatado', 'protocolo_formatado'); - + // Atividade $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_NUM, 'IdAtividade', 'id_atividade', 'atividade'); $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_NUM, 'Tarefa', 'id_tarefa', 'atividade'); $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_DTH, 'Expedido', 'dth_conclusao', 'atividade'); $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_NUM, 'IdUsuario', 'id_usuario_origem', 'atividade'); - + // Usuário $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_STR, 'NomeUsuario', 'nome', 'usuario'); @@ -35,13 +35,11 @@ class ProcessoExpedidoDTO extends InfraDTO { $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_STR, 'Destino', 'valor', 'atributo_andamento'); $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_STR, 'AtribNome', 'nome', 'atributo_andamento'); $this->setStrAtribNome('UNIDADE_DESTINO'); - + $this->configurarFK('IdProtocolo', 'atividade', 'id_protocolo'); $this->configurarFK('IdUsuario', 'usuario', 'id_usuario'); $this->configurarFK('IdAtividade', 'atributo_andamento', 'id_atividade'); - - //$this->setStrStaEstado(ProtocoloRN::$TE_PROCEDIMENTO_BLOQUEADO); - //$this->setNumTarefa(ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO)); + $this->setOrd('Expedido', InfraDTO::$TIPO_ORDENACAO_DESC); } } diff --git a/rn/ExpedirProcedimentoRN.php b/rn/ExpedirProcedimentoRN.php index 5961514..8ad6a0f 100644 --- a/rn/ExpedirProcedimentoRN.php +++ b/rn/ExpedirProcedimentoRN.php @@ -333,7 +333,6 @@ class ExpedirProcedimentoRN extends InfraRN { $objAtributoAndamentoDTO->setStrIdOrigem(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO; - //TODO: Avaliar qual o usurio que deveria ser registrado no atributo andamento abaixo $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); $objAtributoAndamentoDTO->setStrNome('USUARIO'); $objAtributoAndamentoDTO->setStrValor(SessaoSEI::getInstance()->getStrSiglaUsuario() . '' . SessaoSEI::getInstance()->getStrNomeUsuario()); @@ -2230,7 +2229,7 @@ class ExpedirProcedimentoRN extends InfraRN { $objTramiteDTO = new TramiteDTO(); $objTramiteDTO->setNumIdProcedimento($objDtoProtocolo->getDblIdProtocolo()); - $objTramiteDTO->setStrStaTipoTramite(ProcessoEletronicoRN::$STA_TIPO_TRAMITE_ENVIO); + $objTramiteDTO->setStrStaTipoTramite(ProcessoEletronicoRN::$STA_TIPO_TRAMITE_ENVIO); $objTramiteDTO->setOrd('Registro', InfraDTO::$TIPO_ORDENACAO_DESC); $objTramiteDTO->setNumMaxRegistrosRetorno(1); $objTramiteDTO->retNumIdTramite(); @@ -2290,9 +2289,9 @@ class ExpedirProcedimentoRN extends InfraRN { //Somente solicita cancelamento ao PEN se processo ainda não estiver cancelado if(!in_array($numSituacaoAtual, array(ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO_AUTOMATICAMENTE, ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO))) { - $this->objProcessoEletronicoRN->cancelarTramite($tramite->IDT); + $this->objProcessoEletronicoRN->cancelarTramite($tramite->IDT); } - + //Desbloqueia o processo $objEntradaDesbloquearProcessoAPI = new EntradaDesbloquearProcessoAPI(); $objEntradaDesbloquearProcessoAPI->setIdProcedimento($dblIdProcedimento); diff --git a/rn/PendenciasTramiteRN.php b/rn/PendenciasTramiteRN.php index 9c47c68..f003e8a 100644 --- a/rn/PendenciasTramiteRN.php +++ b/rn/PendenciasTramiteRN.php @@ -222,7 +222,6 @@ class PendenciasTramiteRN extends InfraRN { $client->addServer("127.0.0.1", 4730); $numIDT = strval($objPendencia->getNumIdentificacaoTramite()); - switch ($objPendencia->getStrStatus()) { case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_INICIADO: @@ -239,12 +238,6 @@ class PendenciasTramiteRN extends InfraRN { $client->addTaskBackground('receberReciboTramite', $numIDT, null, $numIDT); break; - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE: - break; - - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO: - break; - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO: $client->addTaskBackground("receberTramitesRecusados", $numIDT, null, $numIDT); break; diff --git a/rn/ProcessoEletronicoRN.php b/rn/ProcessoEletronicoRN.php index ef21cf2..e999610 100644 --- a/rn/ProcessoEletronicoRN.php +++ b/rn/ProcessoEletronicoRN.php @@ -690,7 +690,7 @@ class ProcessoEletronicoRN extends InfraRN { if($parObjProcessoEletronicoDTO->isSetArrObjRelProcessoEletronicoApensado()) { $objRelProcessoEletronicoApensadoBD = new RelProcessoEletronicoApensadoBD($this->getObjInfraIBanco()); foreach ($parObjProcessoEletronicoDTO->getArrObjRelProcessoEletronicoApensado() as $objRelProcessoEletronicoApensadoDTOFiltro) { - if($objRelProcessoEletronicoApensadoBD->contar($objRelProcessoEletronicoApensadoDTOFiltro) < 1){ + if($objRelProcessoEletronicoApensadoBD->contar($objRelProcessoEletronicoApensadoDTOFiltro) == 0){ $objRelProcessoEletronicoApensadoBD->cadastrar($objRelProcessoEletronicoApensadoDTOFiltro); } } @@ -708,7 +708,7 @@ class ProcessoEletronicoRN extends InfraRN { $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); $objTramiteDTO = $objTramiteBD->consultar($objTramiteDTO); - if($objTramiteDTO == null) { + if(empty($objTramiteDTO)) { $objTramiteDTO = $objTramiteBD->cadastrar($parObjTramiteDTO); } @@ -720,9 +720,7 @@ class ProcessoEletronicoRN extends InfraRN { $numOrdem = 1; foreach ($parObjTramiteDTO->getArrObjComponenteDigitalDTO() as $objComponenteDigitalDTO) { - $objComponenteDigitalDTOFiltro = new ComponenteDigitalDTO(); - $objComponenteDigitalDTOFiltro->setStrNumeroRegistro($objComponenteDigitalDTO->getStrNumeroRegistro()); $objComponenteDigitalDTOFiltro->setDblIdProcedimento($objComponenteDigitalDTO->getDblIdProcedimento()); $objComponenteDigitalDTOFiltro->setDblIdDocumento($objComponenteDigitalDTO->getDblIdDocumento()); @@ -730,31 +728,26 @@ class ProcessoEletronicoRN extends InfraRN { if($objComponenteDigitalBD->contar($objComponenteDigitalDTOFiltro) > 0){ $numOrdem++; } - } foreach ($parObjTramiteDTO->getArrObjComponenteDigitalDTO() as $objComponenteDigitalDTO) { //Verifica se o documento foi inserido pelo trâmite atual if($objComponenteDigitalDTO->getDblIdDocumento() != null){ - $objComponenteDigitalDTO->setDblIdProcedimento($idProcedimento); $objComponenteDigitalDTOFiltro = new ComponenteDigitalDTO(); - $objComponenteDigitalDTOFiltro->setStrNumeroRegistro($objComponenteDigitalDTO->getStrNumeroRegistro()); $objComponenteDigitalDTOFiltro->setDblIdProcedimento($objComponenteDigitalDTO->getDblIdProcedimento()); $objComponenteDigitalDTOFiltro->setDblIdDocumento($objComponenteDigitalDTO->getDblIdDocumento()); - if($objComponenteDigitalBD->contar($objComponenteDigitalDTOFiltro) < 1){ - + if($objComponenteDigitalBD->contar($objComponenteDigitalDTOFiltro) == 0){ $objComponenteDigitalDTO->setNumOrdem($numOrdem); $objComponenteDigitalDTO->unSetStrDadosComplementares(); $objComponenteDigitalDTO = $objComponenteDigitalBD->cadastrar($objComponenteDigitalDTO); $numOrdem++; } else { - //Verifica se foi setado o envio if(!$objComponenteDigitalDTO->isSetStrSinEnviar()){ $objComponenteDigitalDTO->setStrSinEnviar('N'); diff --git a/rn/ReceberProcedimentoRN.php b/rn/ReceberProcedimentoRN.php index a6c9e02..7d63009 100644 --- a/rn/ReceberProcedimentoRN.php +++ b/rn/ReceberProcedimentoRN.php @@ -1,9 +1,6 @@ objProcedimentoAndamentoRN->setOpts($strNumeroRegistro, $parNumIdentificacaoTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO)); $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Iniciando recebimento de processo externo', 'S')); + //Verifica se processo já foi registrado para esse trâmite //Tratamento para evitar o recebimento simultâneo do mesmo procedimento em serviços/processos concorrentes $this->sincronizarRecebimentoProcessos($strNumeroRegistro, $parNumIdentificacaoTramite); - - //Verifica se processo já foi registrado para esse trâmite if($this->tramiteRecebimentoRegistrado($strNumeroRegistro, $parNumIdentificacaoTramite)) { $this->gravarLogDebug("Trâmite de recebimento $parNumIdentificacaoTramite já registrado para o processo " . $objProcesso->protocolo, 4); return; @@ -108,14 +103,18 @@ class ReceberProcedimentoRN extends InfraRN // pendentes de recebimento informado pelo PEN não está de acordo com a lista atual de arquivos // mantida pela aplicação. $arrHashComponentesProtocolo = $this->listarHashDosComponentesMetadado($objProcesso); + $arrHashPendentesDownload = $objTramite->componenteDigitalPendenteDeRecebimento; + + $numQtdComponentes = count($arrHashComponentesProtocolo); + $this->gravarLogDebug("$numQtdComponentes componentes digitais identificados no protocolo {$objProcesso->protocolo}", 6); - $this->gravarLogDebug("{count($arrHashComponentesProtocolo)} componentes digitais identificados no protocolo {$objProcesso->protocolo}", 6); //Percorre os componentes que precisam ser recebidos foreach($arrHashComponentesProtocolo as $key => $componentePendente){ $numOrdemComponente = $key + 1; if(!is_null($componentePendente)){ + //Verifica se o componente já foi recebido $bolComponenteDigitalRegistrado = $this->documentoJaRegistrado($strNumeroRegistro, $parNumIdentificacaoTramite, $componentePendente); if(!$bolComponenteDigitalRegistrado){ $arrayHashPendentes[] = $componentePendente; @@ -125,7 +124,7 @@ class ReceberProcedimentoRN extends InfraRN //Ajuste deverá ser feito em versões futuas $arrayHash[] = $componentePendente; - if(!$bolComponenteDigitalRegistrado) { + if(!$bolComponenteDigitalRegistrado || in_array($componentePendente, $arrHashPendentesDownload)) { //Obter os dados do componente digital $this->gravarLogDebug("Baixando componente digital $numOrdemComponente", 6); $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital($parNumIdentificacaoTramite, $componentePendente, $objTramite->protocolo); @@ -136,7 +135,7 @@ class ReceberProcedimentoRN extends InfraRN $this->gravarLogDebug("Validando integridade de componente digital $numOrdemComponente", 6); $receberComponenteDigitalRN->validarIntegridadeDoComponenteDigital($arrAnexosComponentes[$key][$componentePendente], $componentePendente, $parNumIdentificacaoTramite); } else { - $this->gravarLogDebug("Componente digital desconsiderado por já fazer parte do processo", 6); + $this->gravarLogDebug("Componente digital $numOrdemComponente desconsiderado por já fazer parte do processo", 6); } } } @@ -151,9 +150,9 @@ class ReceberProcedimentoRN extends InfraRN $objTramite = $arrObjTramite[0]; //Verifica se o trâmite está recusado + //TODO: Testar o erro de interrupção forçado para certificar que o rollback está sendo realizado da forma correta if($objTramite->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO) { - $this->gravarLogDebug("Trâmite $parNumIdentificacaoTramite já se encontra recusado. Cancelando o recebimento do processo", 4); - return; + throw new InfraException("Trâmite $parNumIdentificacaoTramite já se encontra recusado. Cancelando o recebimento do processo"); } $this->gravarLogDebug("Persistindo/atualizando dados do processo com NRE " . $strNumeroRegistro, 4); @@ -184,8 +183,7 @@ class ReceberProcedimentoRN extends InfraRN $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; + throw new InfraException("Desconsiderando recebimento do processo devido a situação de trâmite inconsistente: " . $objTramite->situacaoAtual); } if(count($arrayHashPendentes) > 0){ @@ -211,19 +209,30 @@ class ReceberProcedimentoRN extends InfraRN 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(ProcedimentoAndamentoDTO::criarAndamento($strMensagemRecebimento, 'S')); - $this->gravarLogDebug($strMensagemRecebimento, 6); + + //Esta unidade deverá ser considerada para posterior desbloqueio do processo e reabertura + $numIdUnidade = $this->obterUnidadeParaRegistroDocumento($objProcedimentoDTO->getDblIdProcedimento()); + SessaoSEI::getInstance()->setNumIdUnidadeAtual($numIdUnidade); + + try{ + 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); + + $strMensagemRecebimento = sprintf('Recebendo %s %s', $strNomeDocumento, $objComponenteDigitalDTOEnviado->getStrProtocoloDocumentoFormatado()); + $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento($strMensagemRecebimento, 'S')); + $this->gravarLogDebug($strMensagemRecebimento, 6); + } } + } finally { + $objPenParametroRN = new PenParametroRN(); + $numUnidadeReceptora = $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO'); + SessaoSEI::getInstance()->setNumIdUnidadeAtual($numUnidadeReceptora); } - // @join_tec US008.10 (#23092) + + // @join_tec US008.10 (#23092) $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Todos os componentes digitais foram recebidos', 'S')); }else{ $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Nenhum componente digital para receber', 'S')); @@ -463,7 +472,6 @@ class ReceberProcedimentoRN extends InfraRN //Verifica se componente digital já está registrado para o documento $objComponenteDigitalDTO = new ComponenteDigitalDTO(); $objComponenteDigitalDTO->setStrNumeroRegistro($parStrNumeroRegistro); - $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite); $objComponenteDigitalDTO->setStrHashConteudo($parStrHashComponenteDigital); $objComponenteDigitalDTO->setNumIdAnexo(null, InfraDTO::$OPER_DIFERENTE); @@ -509,23 +517,7 @@ class ReceberProcedimentoRN extends InfraRN //Busca a unidade em ao qual o processo foi anteriormente expedido //Esta unidade deverá ser considerada para posterior desbloqueio do processo e reabertura - $objAtividadeDTO = new AtividadeDTO(); - $objAtividadeDTO->setStrIdTarefaModuloTarefa(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO); - $objAtividadeDTO->setDblIdProcedimentoProtocolo($parDblIdProcedimento); - $objAtividadeDTO->setOrd('Conclusao', InfraDTO::$TIPO_ORDENACAO_DESC); - $objAtividadeDTO->setNumMaxRegistrosRetorno(1); - $objAtividadeDTO->retNumIdUnidade(); - - $objAtividadeRN = new AtividadeRN(); - $arrObjAtividadeDTO = $objAtividadeRN->listarRN0036($objAtividadeDTO); - $numIdUnidade = SessaoSEI::getInstance()->getNumIdUnidadeAtual(); - - if($arrObjAtividadeDTO){ - $objAtividadeDTO = $arrObjAtividadeDTO[0]; - $numIdUnidade = $objAtividadeDTO->getNumIdUnidade(); - } - - //Esta unidade deverá ser considerada para posterior desbloqueio do processo e reabertura + $numIdUnidade = $this->obterUnidadeParaRegistroDocumento($parDblIdProcedimento); SessaoSEI::getInstance()->setNumIdUnidadeAtual($numIdUnidade); try { @@ -535,6 +527,7 @@ class ReceberProcedimentoRN extends InfraRN $objAtividadeDTO->setDblIdProtocolo($parDblIdProcedimento); $objAtividadeDTO->setNumIdUnidade($numIdUnidade); + $objAtividadeRN = new AtividadeRN(); $arrObjAtividadeDTO = $objAtividadeRN->listarRN0036($objAtividadeDTO); $flgReabrir = true; @@ -595,6 +588,34 @@ class ReceberProcedimentoRN extends InfraRN } } + + /** + * Busca a unidade ao qual o processo foi anteriormente expedido. + * Caso seja o primeiro trâmite, considera a unidade atual + * + * @return integer Id da unidade + */ + private function obterUnidadeParaRegistroDocumento($parDblIdProcedimento) + { + $objAtividadeDTO = new AtividadeDTO(); + $objAtividadeDTO->setStrIdTarefaModuloTarefa(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO); + $objAtividadeDTO->setDblIdProcedimentoProtocolo($parDblIdProcedimento); + $objAtividadeDTO->setOrd('Conclusao', InfraDTO::$TIPO_ORDENACAO_DESC); + $objAtividadeDTO->setNumMaxRegistrosRetorno(1); + $objAtividadeDTO->retNumIdUnidade(); + + $objAtividadeRN = new AtividadeRN(); + $arrObjAtividadeDTO = $objAtividadeRN->listarRN0036($objAtividadeDTO); + $numIdUnidade = SessaoSEI::getInstance()->getNumIdUnidadeAtual(); + + if(!empty($arrObjAtividadeDTO)){ + $objAtividadeDTO = $arrObjAtividadeDTO[0]; + $numIdUnidade = $objAtividadeDTO->getNumIdUnidade(); + } + + return $numIdUnidade; + } + private function gerarAndamentoUnidadeReceptora($parNumIdProcedimento) { $objUnidadeDTO = new PenUnidadeDTO(); -- libgit2 0.21.2