Commit 0c1930b6230645d05433f4176dcd6be413af0d4d
1 parent
f431b6b9
Exists in
feature-050
Refatoração de método de recebimento de processos/documentos
Showing
5 changed files
with
201 additions
and
171 deletions
Show diff stats
rn/PendenciasTramiteRN.php
| @@ -51,9 +51,9 @@ class PendenciasTramiteRN extends InfraRN { | @@ -51,9 +51,9 @@ class PendenciasTramiteRN extends InfraRN { | ||
| 51 | ini_set('max_execution_time','0'); | 51 | ini_set('max_execution_time','0'); |
| 52 | ini_set('memory_limit','-1'); | 52 | ini_set('memory_limit','-1'); |
| 53 | 53 | ||
| 54 | - InfraDebug::getInstance()->setBolLigado(false); | 54 | + InfraDebug::getInstance()->setBolLigado(true); |
| 55 | InfraDebug::getInstance()->setBolDebugInfra(false); | 55 | InfraDebug::getInstance()->setBolDebugInfra(false); |
| 56 | - InfraDebug::getInstance()->setBolEcho(false); | 56 | + InfraDebug::getInstance()->setBolEcho(true); |
| 57 | InfraDebug::getInstance()->limpar(); | 57 | InfraDebug::getInstance()->limpar(); |
| 58 | 58 | ||
| 59 | PENIntegracao::validarCompatibilidadeModulo(); | 59 | PENIntegracao::validarCompatibilidadeModulo(); |
rn/ProcessarPendenciasRN.php
| @@ -33,9 +33,9 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa | @@ -33,9 +33,9 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa | ||
| 33 | ini_set('max_execution_time','0'); | 33 | ini_set('max_execution_time','0'); |
| 34 | ini_set('memory_limit','-1'); | 34 | ini_set('memory_limit','-1'); |
| 35 | 35 | ||
| 36 | - InfraDebug::getInstance()->setBolLigado(false); | 36 | + InfraDebug::getInstance()->setBolLigado(true); |
| 37 | InfraDebug::getInstance()->setBolDebugInfra(false); | 37 | InfraDebug::getInstance()->setBolDebugInfra(false); |
| 38 | - InfraDebug::getInstance()->setBolEcho(false); | 38 | + InfraDebug::getInstance()->setBolEcho(true); |
| 39 | InfraDebug::getInstance()->limpar(); | 39 | InfraDebug::getInstance()->limpar(); |
| 40 | 40 | ||
| 41 | PENIntegracao::validarCompatibilidadeModulo(); | 41 | PENIntegracao::validarCompatibilidadeModulo(); |
rn/ProcessoEletronicoRN.php
| @@ -60,7 +60,7 @@ class ProcessoEletronicoRN extends InfraRN { | @@ -60,7 +60,7 @@ class ProcessoEletronicoRN extends InfraRN { | ||
| 60 | /** | 60 | /** |
| 61 | * Espécie documentoal não mapeada | 61 | * Espécie documentoal não mapeada |
| 62 | */ | 62 | */ |
| 63 | - const MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA = '03'; | 63 | + const MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA = '04'; |
| 64 | 64 | ||
| 65 | /** | 65 | /** |
| 66 | * Motivo para recusar de tramite de componente digital | 66 | * Motivo para recusar de tramite de componente digital |
rn/ReceberComponenteDigitalRN.php
| @@ -28,9 +28,8 @@ class ReceberComponenteDigitalRN extends InfraRN | @@ -28,9 +28,8 @@ class ReceberComponenteDigitalRN extends InfraRN | ||
| 28 | return BancoSEI::getInstance(); | 28 | return BancoSEI::getInstance(); |
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | - protected function receberComponenteDigitalConectado(ComponenteDigitalDTO $parObjComponenteDigitalDTO) | 31 | + protected function receberComponenteDigitalControlado(ComponenteDigitalDTO $parObjComponenteDigitalDTO) |
| 32 | { | 32 | { |
| 33 | - | ||
| 34 | if(!isset($parObjComponenteDigitalDTO) || !isset($parObjComponenteDigitalDTO)) { | 33 | if(!isset($parObjComponenteDigitalDTO) || !isset($parObjComponenteDigitalDTO)) { |
| 35 | throw new InfraException('Parâmetro $parObjComponenteDigitalDTO não informado.'); | 34 | throw new InfraException('Parâmetro $parObjComponenteDigitalDTO não informado.'); |
| 36 | } | 35 | } |
| @@ -48,9 +47,6 @@ class ReceberComponenteDigitalRN extends InfraRN | @@ -48,9 +47,6 @@ class ReceberComponenteDigitalRN extends InfraRN | ||
| 48 | throw new InfraException('Anexo '.$parObjComponenteDigitalDTO->getStrHashConteudo().' não encontrado '.var_export($this->arrAnexos, true)); | 47 | throw new InfraException('Anexo '.$parObjComponenteDigitalDTO->getStrHashConteudo().' não encontrado '.var_export($this->arrAnexos, true)); |
| 49 | } | 48 | } |
| 50 | 49 | ||
| 51 | - //Validar o hash do documento recebido com os dados informados pelo remetente | ||
| 52 | - //$this->validarIntegridadeDoComponenteDigital($objAnexoDTO, $parObjComponenteDigitalDTO); | ||
| 53 | - | ||
| 54 | //Transferir documentos validados para o repositório final de arquivos | 50 | //Transferir documentos validados para o repositório final de arquivos |
| 55 | $this->cadastrarComponenteDigital($parObjComponenteDigitalDTO, $objAnexoDTO); | 51 | $this->cadastrarComponenteDigital($parObjComponenteDigitalDTO, $objAnexoDTO); |
| 56 | 52 | ||
| @@ -99,13 +95,7 @@ class ReceberComponenteDigitalRN extends InfraRN | @@ -99,13 +95,7 @@ class ReceberComponenteDigitalRN extends InfraRN | ||
| 99 | $strCaminhoAnexo = DIR_SEI_TEMP.'/'.$objAnexoDTO->getNumIdAnexo(); | 95 | $strCaminhoAnexo = DIR_SEI_TEMP.'/'.$objAnexoDTO->getNumIdAnexo(); |
| 100 | $strHashDoArquivo = hash_file("sha256", $strCaminhoAnexo, true); | 96 | $strHashDoArquivo = hash_file("sha256", $strCaminhoAnexo, true); |
| 101 | 97 | ||
| 102 | - if(strcmp($strHashInformado, $strHashDoArquivo) != 0) { | ||
| 103 | - | ||
| 104 | - $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, "Hash do componente digital não confere com o valor informado pelo remetente.", ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_CORROMPIDO); | ||
| 105 | - | ||
| 106 | - // Adiciono nos detalhes o nome do método para poder manipular o cache | ||
| 107 | - throw new InfraException("Hash do componente digital não confere com o valor informado pelo remetente.", null, __METHOD__); | ||
| 108 | - } | 98 | + return strcmp($strHashInformado, $strHashDoArquivo) == 0; |
| 109 | } | 99 | } |
| 110 | 100 | ||
| 111 | public function cadastrarComponenteDigital(ComponenteDigitalDTO $parObjComponenteDigitalDTO, AnexoDTO $parObjAnexoDTO) | 101 | public function cadastrarComponenteDigital(ComponenteDigitalDTO $parObjComponenteDigitalDTO, AnexoDTO $parObjAnexoDTO) |
rn/ReceberProcedimentoRN.php
| @@ -35,188 +35,150 @@ class ReceberProcedimentoRN extends InfraRN | @@ -35,188 +35,150 @@ class ReceberProcedimentoRN extends InfraRN | ||
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | 37 | ||
| 38 | + //TODO: Renomear para receberProtocoloControlado | ||
| 38 | protected function receberProcedimentoControlado($parNumIdentificacaoTramite) | 39 | protected function receberProcedimentoControlado($parNumIdentificacaoTramite) |
| 39 | { | 40 | { |
| 40 | try { | 41 | try { |
| 41 | - $objPenParametroRN = new PenParametroRN(); | ||
| 42 | - SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO')); | ||
| 43 | - | ||
| 44 | - $objSeiRN = new SeiRN(); | ||
| 45 | - | ||
| 46 | if (!isset($parNumIdentificacaoTramite)) { | 42 | if (!isset($parNumIdentificacaoTramite)) { |
| 47 | throw new InfraException('Parâmetro $parNumIdentificacaoTramite não informado.'); | 43 | throw new InfraException('Parâmetro $parNumIdentificacaoTramite não informado.'); |
| 48 | } | 44 | } |
| 49 | 45 | ||
| 50 | - //TODO: Urgente: Verificar o status do trâmite e verificar se ele já foi salvo na base de dados | ||
| 51 | - $this->gravarLogDebug("Solicitando metadados do trâmite " . $parNumIdentificacaoTramite, 4); | ||
| 52 | - $objMetadadosProcedimento = $this->objProcessoEletronicoRN->solicitarMetadados($parNumIdentificacaoTramite); | ||
| 53 | - | ||
| 54 | - if (isset($objMetadadosProcedimento)) { | ||
| 55 | - $strNumeroRegistro = $objMetadadosProcedimento->metadados->NRE; | ||
| 56 | - $objProcesso = $objMetadadosProcedimento->metadados->processo; | ||
| 57 | - | ||
| 58 | - $this->objProcedimentoAndamentoRN->setOpts($strNumeroRegistro, $parNumIdentificacaoTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO)); | ||
| 59 | - $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Iniciando recebimento de processo externo', 'S')); | ||
| 60 | - | ||
| 61 | - //Tratamento para evitar o recebimento simultâneo do mesmo procedimento em serviços/processos concorrentes | ||
| 62 | - $this->sincronizarRecebimentoProcessos($strNumeroRegistro, $parNumIdentificacaoTramite); | ||
| 63 | - | ||
| 64 | - //Verifica se processo já foi registrado para esse trâmite | ||
| 65 | - if($this->tramiteRecebimentoRegistrado($strNumeroRegistro, $parNumIdentificacaoTramite)) { | ||
| 66 | - $this->gravarLogDebug("Trâmite de recebimento $parNumIdentificacaoTramite já registrado para o processo " . $objProcesso->protocolo, 4); | ||
| 67 | - return; | ||
| 68 | - } | 46 | + $objSeiRN = new SeiRN(); |
| 47 | + $objPenParametroRN = new PenParametroRN(); | ||
| 69 | 48 | ||
| 70 | - //Substituir a unidade destinatária para a receptora | ||
| 71 | - if (isset($objMetadadosProcedimento->metadados->unidadeReceptora)) { | ||
| 72 | - $unidadeReceptora = $objMetadadosProcedimento->metadados->unidadeReceptora; | ||
| 73 | - $this->destinatarioReal = $objMetadadosProcedimento->metadados->destinatario; | ||
| 74 | - $objMetadadosProcedimento->metadados->destinatario->identificacaoDoRepositorioDeEstruturas = $unidadeReceptora->identificacaoDoRepositorioDeEstruturas; | ||
| 75 | - $objMetadadosProcedimento->metadados->destinatario->numeroDeIdentificacaoDaEstrutura = $unidadeReceptora->numeroDeIdentificacaoDaEstrutura; | ||
| 76 | - $numUnidadeReceptora = $unidadeReceptora->numeroDeIdentificacaoDaEstrutura; | ||
| 77 | - $this->gravarLogDebug("Atribuindo unidade receptora $numUnidadeReceptora para o trâmite $parNumIdentificacaoTramite", 4); | ||
| 78 | - } | 49 | + // O recebimento do processo deve ser realizado na unidade definida em [UNIDADE_GERADORA_DOCUMENTO_RECEBIDO] que não deverá possuir usuários |
| 50 | + // habilitados, funcionando como uma área dedicada unicamente para o recebimento de processos e documentos. | ||
| 51 | + // Isto é necessário para que o processo recebido não seja criado diretamente dentro da unidade de destino, o que permitiria a alteração de | ||
| 52 | + // todos os metadados do processo, comportamento não permitido pelas regras de negócio do PEN. | ||
| 53 | + SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO')); | ||
| 79 | 54 | ||
| 80 | - // Validação dos dados do processo recebido | ||
| 81 | - $objInfraException = new InfraException(); | ||
| 82 | - $this->validarDadosDestinatario($objInfraException, $objMetadadosProcedimento); | ||
| 83 | - $objInfraException->lancarValidacoes(); | 55 | + $this->gravarLogDebug("Solicitando metadados do trâmite " . $parNumIdentificacaoTramite, 4); |
| 56 | + $objMetadadosProcedimento = $this->objProcessoEletronicoRN->solicitarMetadados($parNumIdentificacaoTramite); | ||
| 84 | 57 | ||
| 85 | - #############################INICIA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################ | ||
| 86 | - $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); | ||
| 87 | - $objTramite = $arrObjTramite[0]; | 58 | + $objInfraException = new InfraException(); |
| 59 | + $this->validarMetadados($objInfraException, $objMetadadosProcedimento); | ||
| 88 | 60 | ||
| 89 | - //Obtém lista de componentes digitais que precisam ser obtidos | ||
| 90 | - $this->gravarLogDebug("Obtém lista de componentes digitais que precisam ser obtidos", 4); | ||
| 91 | - if(!is_array($objTramite->componenteDigitalPendenteDeRecebimento)){ | ||
| 92 | - $objTramite->componenteDigitalPendenteDeRecebimento = array($objTramite->componenteDigitalPendenteDeRecebimento); | ||
| 93 | - } | 61 | + $strNumeroRegistro = $objMetadadosProcedimento->metadados->NRE; |
| 62 | + $objProcesso = $objMetadadosProcedimento->metadados->processo; | ||
| 63 | + $objDocumento = $objMetadadosProcedimento->metadados->documento; | ||
| 94 | 64 | ||
| 95 | - $this->validarComponentesDigitais($objProcesso, $parNumIdentificacaoTramite); | ||
| 96 | - $this->validarExtensaoComponentesDigitais($parNumIdentificacaoTramite, $objProcesso); | ||
| 97 | - $this->verificarPermissoesDiretorios($parNumIdentificacaoTramite); | 65 | + $this->objProcedimentoAndamentoRN->setOpts($strNumeroRegistro, $parNumIdentificacaoTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO)); |
| 66 | + $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Iniciando recebimento de processo externo', 'S')); | ||
| 98 | 67 | ||
| 99 | - $this->gravarLogDebug("Obtendo metadados dos componentes digitais do processo", 4); | ||
| 100 | - $arrStrNomeDocumento = $this->listarMetaDadosComponentesDigitais($objProcesso); | ||
| 101 | - $receberComponenteDigitalRN = new ReceberComponenteDigitalRN(); | ||
| 102 | - $arrAnexosComponentes = array(); | ||
| 103 | - $arrayHash = array(); | ||
| 104 | - $arrayHashPendentes = array(); | 68 | + //Tratamento para evitar o recebimento simultâneo do mesmo procedimento em serviços/processos concorrentes |
| 69 | + $this->sincronizarRecebimentoProcessos($strNumeroRegistro, $parNumIdentificacaoTramite); | ||
| 105 | 70 | ||
| 106 | - //Percorre os componentes que precisam ser recebidos | ||
| 107 | - foreach($objTramite->componenteDigitalPendenteDeRecebimento as $key => $componentePendente){ | 71 | + //Verifica se processo já foi registrado para esse trâmite |
| 72 | + if($this->tramiteRecebimentoRegistrado($strNumeroRegistro, $parNumIdentificacaoTramite)) { | ||
| 73 | + $this->gravarLogDebug("Trâmite de recebimento $parNumIdentificacaoTramite já registrado para o processo " . $objProcesso->protocolo, 4); | ||
| 74 | + return; | ||
| 75 | + } | ||
| 108 | 76 | ||
| 109 | - if(!is_null($componentePendente)){ | 77 | + $this->substituirDestinoParaUnidadeReceptora($objMetadadosProcedimento); |
| 110 | 78 | ||
| 111 | - if(!$this->documentoJaRegistrado($strNumeroRegistro, $parNumIdentificacaoTramite, $componentePendente)){ | ||
| 112 | - $arrayHashPendentes[] = $componentePendente; | ||
| 113 | - } | 79 | + $this->validarDadosDestinatario($objInfraException, $objMetadadosProcedimento); |
| 80 | + $objInfraException->lancarValidacoes(); | ||
| 114 | 81 | ||
| 115 | - //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 | ||
| 116 | - //Ajuste deverá ser feito em versões futuas | ||
| 117 | - $arrayHash[] = $componentePendente; | 82 | + #############################INICIA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################ |
| 83 | + $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); | ||
| 84 | + $objTramite = $arrObjTramite[0]; | ||
| 118 | 85 | ||
| 119 | - //Obter os dados do componente digital | ||
| 120 | - $this->gravarLogDebug("Baixando componente digital $key", 6); | ||
| 121 | - $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital($parNumIdentificacaoTramite, $componentePendente, $objTramite->protocolo); | ||
| 122 | - $arrAnexosComponentes[$key][$componentePendente] = $receberComponenteDigitalRN->copiarComponenteDigitalPastaTemporaria($objComponenteDigital); | ||
| 123 | - $arrAnexosComponentes[$key]['recebido'] = false; | 86 | + $this->gravarLogDebug("Obtendo metadados dos componentes digitais do processo", 4); |
| 87 | + $arrStrNomeDocumento = $this->listarMetaDadosComponentesDigitais($objProcesso); | ||
| 124 | 88 | ||
| 125 | - //Valida a integridade do hash | ||
| 126 | - $this->gravarLogDebug("Validando integridade de componente digital $key", 6); | ||
| 127 | - $receberComponenteDigitalRN->validarIntegridadeDoComponenteDigital($arrAnexosComponentes[$key][$componentePendente], $componentePendente, $parNumIdentificacaoTramite); | ||
| 128 | - } | ||
| 129 | - } | 89 | + //Antes de iniciar o recebimento e criação dos dados do processo, os componentes digitais são baixados para validação de integridade |
| 90 | + //Este procedimento é realizado antes pois o download pode demorar consideravelmente e travar transações no banco de forma desnecessária | ||
| 91 | + $arrAnexosComponentes = $this->fazerDownloadComponentesDigitais($objTramite, $objProcesso); | ||
| 130 | 92 | ||
| 131 | - if(count($arrAnexosComponentes) > 0){ | ||
| 132 | - $receberComponenteDigitalRN->setArrAnexos($arrAnexosComponentes); | ||
| 133 | - } | 93 | + if(count($arrAnexosComponentes) > 0){ |
| 94 | + $receberComponenteDigitalRN->setArrAnexos($arrAnexosComponentes); | ||
| 95 | + } | ||
| 134 | 96 | ||
| 135 | - #############################TERMINA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################ | 97 | + #############################TERMINA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################ |
| 136 | 98 | ||
| 137 | - $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); | ||
| 138 | - $objTramite = $arrObjTramite[0]; | 99 | + $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); |
| 100 | + $objTramite = $arrObjTramite[0]; | ||
| 139 | 101 | ||
| 140 | - //Verifica se o trâmite está recusado | ||
| 141 | - if($objTramite->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO) { | ||
| 142 | - $this->gravarLogDebug("Trâmite $parNumIdentificacaoTramite já se encontra recusado. Cancelando o recebimento do processo", 4); | ||
| 143 | - return; | ||
| 144 | - } | 102 | + //Verifica se o trâmite está recusado |
| 103 | + if($objTramite->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO) { | ||
| 104 | + $this->gravarLogDebug("Trâmite $parNumIdentificacaoTramite já se encontra recusado. Cancelando o recebimento do processo", 4); | ||
| 105 | + return; | ||
| 106 | + } | ||
| 145 | 107 | ||
| 146 | - $this->gravarLogDebug("Persistindo/atualizando dados do processo com NRE " . $strNumeroRegistro, 4); | ||
| 147 | - $objProcedimentoDTO = $this->registrarProcesso($strNumeroRegistro, $parNumIdentificacaoTramite, $objProcesso, $objMetadadosProcedimento); | ||
| 148 | - | ||
| 149 | - // @join_tec US008.08 (#23092) | ||
| 150 | - $this->objProcedimentoAndamentoRN->setOpts($strNumeroRegistro, $parNumIdentificacaoTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO), $objProcedimentoDTO->getDblIdProcedimento()); | ||
| 151 | - $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Obtendo metadados do processo', 'S')); | ||
| 152 | - | ||
| 153 | - $this->gravarLogDebug("Registrando trâmite externo do processo", 4); | ||
| 154 | - $objProcessoEletronicoDTO = $this->objProcessoEletronicoRN->cadastrarTramiteDeProcesso( | ||
| 155 | - $objProcedimentoDTO->getDblIdProcedimento(), | ||
| 156 | - $strNumeroRegistro, | ||
| 157 | - $parNumIdentificacaoTramite, | ||
| 158 | - ProcessoEletronicoRN::$STA_TIPO_TRAMITE_RECEBIMENTO, | ||
| 159 | - null, | ||
| 160 | - $objMetadadosProcedimento->metadados->remetente->identificacaoDoRepositorioDeEstruturas, | ||
| 161 | - $objMetadadosProcedimento->metadados->remetente->numeroDeIdentificacaoDaEstrutura, | ||
| 162 | - $objMetadadosProcedimento->metadados->destinatario->identificacaoDoRepositorioDeEstruturas, | ||
| 163 | - $objMetadadosProcedimento->metadados->destinatario->numeroDeIdentificacaoDaEstrutura, | ||
| 164 | - $objProcesso); | ||
| 165 | - | ||
| 166 | - //Verifica se o tramite se encontra na situação correta | ||
| 167 | - $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); | ||
| 168 | - if(!isset($arrObjTramite) || count($arrObjTramite) != 1) { | ||
| 169 | - throw new InfraException("Trâmite não pode ser localizado pelo identificado $parNumIdentificacaoTramite."); | ||
| 170 | - } | 108 | + $this->gravarLogDebug("Persistindo/atualizando dados do processo com NRE " . $strNumeroRegistro, 4); |
| 109 | + $objProcedimentoDTO = $this->registrarProcesso($strNumeroRegistro, $parNumIdentificacaoTramite, $objProcesso, $objMetadadosProcedimento); | ||
| 110 | + | ||
| 111 | + // @join_tec US008.08 (#23092) | ||
| 112 | + $this->objProcedimentoAndamentoRN->setOpts($strNumeroRegistro, $parNumIdentificacaoTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO), $objProcedimentoDTO->getDblIdProcedimento()); | ||
| 113 | + $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Obtendo metadados do processo', 'S')); | ||
| 114 | + | ||
| 115 | + $this->gravarLogDebug("Registrando trâmite externo do processo", 4); | ||
| 116 | + $objProcessoEletronicoDTO = $this->objProcessoEletronicoRN->cadastrarTramiteDeProcesso( | ||
| 117 | + $objProcedimentoDTO->getDblIdProcedimento(), | ||
| 118 | + $strNumeroRegistro, | ||
| 119 | + $parNumIdentificacaoTramite, | ||
| 120 | + ProcessoEletronicoRN::$STA_TIPO_TRAMITE_RECEBIMENTO, | ||
| 121 | + null, | ||
| 122 | + $objMetadadosProcedimento->metadados->remetente->identificacaoDoRepositorioDeEstruturas, | ||
| 123 | + $objMetadadosProcedimento->metadados->remetente->numeroDeIdentificacaoDaEstrutura, | ||
| 124 | + $objMetadadosProcedimento->metadados->destinatario->identificacaoDoRepositorioDeEstruturas, | ||
| 125 | + $objMetadadosProcedimento->metadados->destinatario->numeroDeIdentificacaoDaEstrutura, | ||
| 126 | + $objProcesso); | ||
| 127 | + | ||
| 128 | + //Verifica se o tramite se encontra na situação correta | ||
| 129 | + $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); | ||
| 130 | + if(!isset($arrObjTramite) || count($arrObjTramite) != 1) { | ||
| 131 | + throw new InfraException("Trâmite não pode ser localizado pelo identificado $parNumIdentificacaoTramite."); | ||
| 132 | + } | ||
| 171 | 133 | ||
| 172 | - $objTramite = $arrObjTramite[0]; | ||
| 173 | - if($objTramite->situacaoAtual != ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) { | ||
| 174 | - $this->gravarLogDebug("Desconsiderando recebimento do processo devido a situação de trâmite inconsistente: " . $objTramite->situacaoAtual, 4); | ||
| 175 | - return; | ||
| 176 | - } | 134 | + $objTramite = $arrObjTramite[0]; |
| 135 | + if($objTramite->situacaoAtual != ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) { | ||
| 136 | + $this->gravarLogDebug("Desconsiderando recebimento do processo devido a situação de trâmite inconsistente: " . $objTramite->situacaoAtual, 4); | ||
| 137 | + return; | ||
| 138 | + } | ||
| 177 | 139 | ||
| 178 | - if(count($arrayHashPendentes) > 0){ | ||
| 179 | - //Obter dados dos componetes digitais | ||
| 180 | - $this->gravarLogDebug("Iniciando o recebimento dos componentes digitais pendentes", 4); | ||
| 181 | - $objComponenteDigitalDTO = new ComponenteDigitalDTO(); | ||
| 182 | - $objComponenteDigitalDTO->setStrNumeroRegistro($strNumeroRegistro); | ||
| 183 | - $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite); | ||
| 184 | - $objComponenteDigitalDTO->setStrHashConteudo($arrayHash, InfraDTO::$OPER_IN); | ||
| 185 | - $objComponenteDigitalDTO->setOrdNumOrdem(InfraDTO::$TIPO_ORDENACAO_ASC); | ||
| 186 | - $objComponenteDigitalDTO->retDblIdDocumento(); | ||
| 187 | - $objComponenteDigitalDTO->retNumTicketEnvioComponentes(); | ||
| 188 | - $objComponenteDigitalDTO->retStrProtocoloDocumentoFormatado(); | ||
| 189 | - $objComponenteDigitalDTO->retStrHashConteudo(); | ||
| 190 | - $objComponenteDigitalDTO->retStrProtocolo(); | ||
| 191 | - $objComponenteDigitalDTO->retStrNumeroRegistro(); | ||
| 192 | - $objComponenteDigitalDTO->retNumIdTramite(); | ||
| 193 | - $objComponenteDigitalDTO->retStrNome(); | ||
| 194 | - $objComponenteDigitalDTO->retStrStaEstadoProtocolo(); | ||
| 195 | - | ||
| 196 | - $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco()); | ||
| 197 | - $arrObjComponentesDigitaisDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO); | ||
| 198 | - | ||
| 199 | - if ($objComponenteDigitalBD->contar($objComponenteDigitalDTO) > 0) { | ||
| 200 | - $objReceberComponenteDigitalRN = $receberComponenteDigitalRN; | ||
| 201 | - foreach($arrObjComponentesDigitaisDTO as $objComponenteDigitalDTOEnviado) { | ||
| 202 | - if($objComponenteDigitalDTOEnviado->getStrStaEstadoProtocolo() != ProtocoloRN::$TE_DOCUMENTO_CANCELADO){ | ||
| 203 | - $strHash = $objComponenteDigitalDTOEnviado->getStrHashConteudo(); | ||
| 204 | - $strNomeDocumento = (array_key_exists($strHash, $arrStrNomeDocumento)) ? $arrStrNomeDocumento[$strHash]['especieNome'] : '[Desconhecido]'; | ||
| 205 | - $objReceberComponenteDigitalRN->receberComponenteDigital($objComponenteDigitalDTOEnviado); | ||
| 206 | - | ||
| 207 | - // @join_tec US008.09 (#23092) | ||
| 208 | - $strMensagemRecebimento = sprintf('Recebendo %s %s', $strNomeDocumento, $objComponenteDigitalDTOEnviado->getStrProtocoloDocumentoFormatado()); | ||
| 209 | - $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento($strMensagemRecebimento, 'S')); | ||
| 210 | - $this->gravarLogDebug($strMensagemRecebimento, 6); | ||
| 211 | - } | 140 | + if(count($arrComponentesPendentesRecebimento) > 0){ |
| 141 | + //Obter dados dos componetes digitais | ||
| 142 | + $this->gravarLogDebug("Iniciando o recebimento dos componentes digitais pendentes", 4); | ||
| 143 | + $objComponenteDigitalDTO = new ComponenteDigitalDTO(); | ||
| 144 | + $objComponenteDigitalDTO->setStrNumeroRegistro($strNumeroRegistro); | ||
| 145 | + $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite); | ||
| 146 | + $objComponenteDigitalDTO->setStrHashConteudo($arrayHash, InfraDTO::$OPER_IN); | ||
| 147 | + $objComponenteDigitalDTO->setOrdNumOrdem(InfraDTO::$TIPO_ORDENACAO_ASC); | ||
| 148 | + $objComponenteDigitalDTO->retDblIdDocumento(); | ||
| 149 | + $objComponenteDigitalDTO->retNumTicketEnvioComponentes(); | ||
| 150 | + $objComponenteDigitalDTO->retStrProtocoloDocumentoFormatado(); | ||
| 151 | + $objComponenteDigitalDTO->retStrHashConteudo(); | ||
| 152 | + $objComponenteDigitalDTO->retStrProtocolo(); | ||
| 153 | + $objComponenteDigitalDTO->retStrNumeroRegistro(); | ||
| 154 | + $objComponenteDigitalDTO->retNumIdTramite(); | ||
| 155 | + $objComponenteDigitalDTO->retStrNome(); | ||
| 156 | + $objComponenteDigitalDTO->retStrStaEstadoProtocolo(); | ||
| 157 | + | ||
| 158 | + $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco()); | ||
| 159 | + $arrObjComponentesDigitaisDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO); | ||
| 160 | + | ||
| 161 | + if (count($arrObjComponentesDigitaisDTO) > 0) { | ||
| 162 | + $objReceberComponenteDigitalRN = $receberComponenteDigitalRN; | ||
| 163 | + foreach($arrObjComponentesDigitaisDTO as $objComponenteDigitalDTOEnviado) { | ||
| 164 | + if($objComponenteDigitalDTOEnviado->getStrStaEstadoProtocolo() != ProtocoloRN::$TE_DOCUMENTO_CANCELADO){ | ||
| 165 | + $strHash = $objComponenteDigitalDTOEnviado->getStrHashConteudo(); | ||
| 166 | + $strNomeDocumento = (array_key_exists($strHash, $arrStrNomeDocumento)) ? $arrStrNomeDocumento[$strHash]['especieNome'] : '[Desconhecido]'; | ||
| 167 | + $objReceberComponenteDigitalRN->receberComponenteDigital($objComponenteDigitalDTOEnviado); | ||
| 168 | + | ||
| 169 | + // @join_tec US008.09 (#23092) | ||
| 170 | + $strMensagemRecebimento = sprintf('Recebendo %s %s', $strNomeDocumento, $objComponenteDigitalDTOEnviado->getStrProtocoloDocumentoFormatado()); | ||
| 171 | + $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento($strMensagemRecebimento, 'S')); | ||
| 172 | + $this->gravarLogDebug($strMensagemRecebimento, 6); | ||
| 212 | } | 173 | } |
| 213 | - // @join_tec US008.10 (#23092) | ||
| 214 | - $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Todos os componentes digitais foram recebidos', 'S')); | ||
| 215 | - }else{ | ||
| 216 | - $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Nenhum componente digital para receber', 'S')); | ||
| 217 | } | 174 | } |
| 175 | + // @join_tec US008.10 (#23092) | ||
| 176 | + $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Todos os componentes digitais foram recebidos', 'S')); | ||
| 177 | + }else{ | ||
| 178 | + $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Nenhum componente digital para receber', 'S')); | ||
| 218 | } | 179 | } |
| 219 | } | 180 | } |
| 181 | + | ||
| 220 | //$this->fecharProcedimentoEmOutraUnidades($objProcedimentoDTO, $objMetadadosProcedimento); | 182 | //$this->fecharProcedimentoEmOutraUnidades($objProcedimentoDTO, $objMetadadosProcedimento); |
| 221 | $this->gravarLogDebug("Enviando recibo de conclusão do trâmite $parNumIdentificacaoTramite", 6); | 183 | $this->gravarLogDebug("Enviando recibo de conclusão do trâmite $parNumIdentificacaoTramite", 6); |
| 222 | $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN(); | 184 | $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN(); |
| @@ -234,6 +196,84 @@ class ReceberProcedimentoRN extends InfraRN | @@ -234,6 +196,84 @@ class ReceberProcedimentoRN extends InfraRN | ||
| 234 | } | 196 | } |
| 235 | } | 197 | } |
| 236 | 198 | ||
| 199 | + | ||
| 200 | + private function validarMetadados($parObjInfraException, $parObjMetadadosTramite) | ||
| 201 | + { | ||
| 202 | + if (!isset($parObjMetadadosTramite)) { | ||
| 203 | + $parObjInfraException->adicionarValidacao("Metadados do trâmite %s não pode ser obtido dos serviços do PEN."); | ||
| 204 | + } | ||
| 205 | + } | ||
| 206 | + | ||
| 207 | + private function substituirDestinoParaUnidadeReceptora($parObjMetadadosTramite) | ||
| 208 | + { | ||
| 209 | + if (isset($parObjMetadadosTramite->metadados->unidadeReceptora)) { | ||
| 210 | + $unidadeReceptora = $parObjMetadadosTramite->metadados->unidadeReceptora; | ||
| 211 | + $this->destinatarioReal = $parObjMetadadosTramite->metadados->destinatario; | ||
| 212 | + $parObjMetadadosTramite->metadados->destinatario->identificacaoDoRepositorioDeEstruturas = $unidadeReceptora->identificacaoDoRepositorioDeEstruturas; | ||
| 213 | + $parObjMetadadosTramite->metadados->destinatario->numeroDeIdentificacaoDaEstrutura = $unidadeReceptora->numeroDeIdentificacaoDaEstrutura; | ||
| 214 | + $numUnidadeReceptora = $unidadeReceptora->numeroDeIdentificacaoDaEstrutura; | ||
| 215 | + $this->gravarLogDebug("Atribuindo unidade receptora $numUnidadeReceptora para o trâmite $parNumIdentificacaoTramite", 4); | ||
| 216 | + } | ||
| 217 | + } | ||
| 218 | + | ||
| 219 | + | ||
| 220 | + private function fazerDownloadComponentesDigitais($parObjTramite, $parObjProcesso) | ||
| 221 | + { | ||
| 222 | + if(!is_array($objTramite->componenteDigitalPendenteDeRecebimento)){ | ||
| 223 | + $parObjTramite->componenteDigitalPendenteDeRecebimento = array($parObjTramite->componenteDigitalPendenteDeRecebimento); | ||
| 224 | + } | ||
| 225 | + | ||
| 226 | + $numIdentificacaoTramite = $parObjTramite->IDT; | ||
| 227 | + $arrComponentesDigitaisPendentes = $parObjTramite->componenteDigitalPendenteDeRecebimento; | ||
| 228 | + | ||
| 229 | + //Obtém lista de componentes digitais que precisam ser obtidos | ||
| 230 | + $this->gravarLogDebug("Obtém lista de componentes digitais que precisam ser obtidos", 4); | ||
| 231 | + //if(!is_array($objTramite->componenteDigitalPendenteDeRecebimento)){ | ||
| 232 | + // $objTramite->componenteDigitalPendenteDeRecebimento = array($objTramite->componenteDigitalPendenteDeRecebimento); | ||
| 233 | + //} | ||
| 234 | + | ||
| 235 | + $this->validarComponentesDigitais($parObjProcesso, $numIdentificacaoTramite); | ||
| 236 | + $this->validarExtensaoComponentesDigitais($parObjProcesso, $numIdentificacaoTramite); | ||
| 237 | + $this->verificarPermissoesDiretorios($numIdentificacaoTramite); | ||
| 238 | + | ||
| 239 | + $arrayHash = array(); | ||
| 240 | + $arrAnexosComponentes = array(); | ||
| 241 | + $arrComponentesPendentesRecebimento = array(); | ||
| 242 | + $receberComponenteDigitalRN = new ReceberComponenteDigitalRN(); | ||
| 243 | + | ||
| 244 | + //Percorre os componentes que precisam ser recebidos | ||
| 245 | + foreach($arrComponentesDigitaisPendentes as $numOrdem => $componentePendente){ | ||
| 246 | + | ||
| 247 | + if(!is_null($componentePendente)) { | ||
| 248 | + | ||
| 249 | + if(!$this->verificarSeDocumentoJaRegistrado($strNumeroRegistro, $numIdentificacaoTramite, $componentePendente)){ | ||
| 250 | + $arrComponentesPendentesRecebimento[] = $componentePendente; | ||
| 251 | + } | ||
| 252 | + | ||
| 253 | + //Download do componente digital é realizado, mesmo já existindo na base de dados, devido a comportamento obrigatório do Barramento para mudança de status | ||
| 254 | + //Ajuste deverá ser feito no Barramento em versões futuras | ||
| 255 | + $arrayHash[] = $componentePendente; | ||
| 256 | + | ||
| 257 | + //Obter os dados do componente digital | ||
| 258 | + $this->gravarLogDebug("Baixando componente digital $numOrdem", 6); | ||
| 259 | + $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital($numIdentificacaoTramite, $componentePendente, $objTramite->protocolo); | ||
| 260 | + $arrAnexosComponentes[$numOrdem][$componentePendente] = $receberComponenteDigitalRN->copiarComponenteDigitalPastaTemporaria($objComponenteDigital); | ||
| 261 | + $arrAnexosComponentes[$numOrdem]['recebido'] = false; | ||
| 262 | + | ||
| 263 | + //Valida a integridade do hash | ||
| 264 | + $this->gravarLogDebug("Validando integridade de componente digital $numOrdem", 6); | ||
| 265 | + $bolEhValido = $receberComponenteDigitalRN->validarIntegridadeDoComponenteDigital($arrAnexosComponentes[$numOrdem][$componentePendente], $componentePendente); | ||
| 266 | + | ||
| 267 | + if(!$bolEhValido) { | ||
| 268 | + $this->objProcessoEletronicoRN->recusarTramite($numIdentificacaoTramite, "Hash do componente digital não confere com o valor informado pelo remetente.", ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_CORROMPIDO); | ||
| 269 | + throw new InfraException("Hash do componente digital não confere com o valor informado pelo remetente.", null, __METHOD__); | ||
| 270 | + } | ||
| 271 | + } | ||
| 272 | + } | ||
| 273 | + | ||
| 274 | + return $arrAnexosComponentes; | ||
| 275 | + } | ||
| 276 | + | ||
| 237 | public function fecharProcedimentoEmOutraUnidades(ProcedimentoDTO $objProcedimentoDTO, $parObjMetadadosProcedimento){ | 277 | public function fecharProcedimentoEmOutraUnidades(ProcedimentoDTO $objProcedimentoDTO, $parObjMetadadosProcedimento){ |
| 238 | 278 | ||
| 239 | $objPenUnidadeDTO = new PenUnidadeDTO(); | 279 | $objPenUnidadeDTO = new PenUnidadeDTO(); |
| @@ -414,7 +454,7 @@ class ReceberProcedimentoRN extends InfraRN | @@ -414,7 +454,7 @@ class ReceberProcedimentoRN extends InfraRN | ||
| 414 | } | 454 | } |
| 415 | 455 | ||
| 416 | 456 | ||
| 417 | - private function documentoJaRegistrado($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parStrHashComponenteDigital) | 457 | + private function verificarSeDocumentoJaRegistrado($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parStrHashComponenteDigital) |
| 418 | { | 458 | { |
| 419 | //Verifica se componente digital já está registrado para o documento | 459 | //Verifica se componente digital já está registrado para o documento |
| 420 | $objComponenteDigitalDTO = new ComponenteDigitalDTO(); | 460 | $objComponenteDigitalDTO = new ComponenteDigitalDTO(); |
| @@ -1785,7 +1825,7 @@ protected function receberTramiteRecusadoInternoControlado(ReceberTramiteRecusad | @@ -1785,7 +1825,7 @@ protected function receberTramiteRecusadoInternoControlado(ReceberTramiteRecusad | ||
| 1785 | * @param object $parObjProcesso | 1825 | * @param object $parObjProcesso |
| 1786 | * @throws InfraException | 1826 | * @throws InfraException |
| 1787 | */ | 1827 | */ |
| 1788 | - public function validarExtensaoComponentesDigitais($parIdTramite, $parObjProcesso){ | 1828 | + public function validarExtensaoComponentesDigitais($parObjProcesso, $parIdTramite){ |
| 1789 | 1829 | ||
| 1790 | //Armazena o array de documentos | 1830 | //Armazena o array de documentos |
| 1791 | $arrDocumentos = is_array($parObjProcesso->documento) ? $parObjProcesso->documento : array($parObjProcesso->documento) ; | 1831 | $arrDocumentos = is_array($parObjProcesso->documento) ? $parObjProcesso->documento : array($parObjProcesso->documento) ; |