Commit 6a36ffe7b9aa51f99530e540cabf122fc13804eb
1 parent
c71465bc
Exists in
feature-76
Implementação parcial do recebimento de mais de um componente digital
Showing
2 changed files
with
116 additions
and
89 deletions
Show diff stats
rn/ProcessoEletronicoRN.php
| ... | ... | @@ -782,72 +782,77 @@ class ProcessoEletronicoRN extends InfraRN { |
| 782 | 782 | return $strHashConteudo; |
| 783 | 783 | } |
| 784 | 784 | |
| 785 | - private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjComponentesDigitaisSolicitados) | |
| 786 | - { | |
| 787 | - //Monta dados dos componentes digitais | |
| 788 | - $arrObjComponenteDigitalDTO = array(); | |
| 789 | - if(!is_array($parObjProcesso->documento)) { | |
| 790 | - $parObjProcesso->documento = array($parObjProcesso->documento); | |
| 791 | - } | |
| 792 | - | |
| 793 | - foreach ($parObjProcesso->documento as $objDocumento) { | |
| 794 | - $objComponenteDigitalDTO = new ComponenteDigitalDTO(); | |
| 795 | - $objComponenteDigitalDTO->setStrNumeroRegistro($parStrNumeroRegistro); | |
| 796 | - $objComponenteDigitalDTO->setDblIdProcedimento($parObjProcesso->idProcedimentoSEI); //TODO: Error utilizar idProcedimentoSEI devido processos apensados | |
| 797 | - $objComponenteDigitalDTO->setDblIdDocumento($objDocumento->idDocumentoSEI); | |
| 798 | - $objComponenteDigitalDTO->setNumOrdem($objDocumento->ordem); | |
| 799 | - $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite); | |
| 800 | - $objComponenteDigitalDTO->setStrProtocolo($parObjProcesso->protocolo); | |
| 801 | - | |
| 802 | - //Por enquanto, considera que o documento possui apenas um componente digital | |
| 803 | - if(is_array($objDocumento->componenteDigital) && count($objDocumento->componenteDigital) != 1) { | |
| 804 | - throw new InfraException("Erro processando componentes digitais do processo " . $parObjProcesso->protocolo . "\n Somente é permitido o recebimento de documentos com apenas um Componente Digital."); | |
| 805 | - } | |
| 806 | - | |
| 807 | - $objComponenteDigital = $objDocumento->componenteDigital; | |
| 808 | - $objComponenteDigitalDTO->setStrNome($objComponenteDigital->nome); | |
| 809 | - | |
| 810 | - $strHashConteudo = static::getHashFromMetaDados($objComponenteDigital->hash); | |
| 811 | - | |
| 812 | - $objComponenteDigitalDTO->setStrHashConteudo($strHashConteudo); | |
| 813 | - $objComponenteDigitalDTO->setStrAlgoritmoHash(self::ALGORITMO_HASH_DOCUMENTO); | |
| 814 | - $objComponenteDigitalDTO->setStrTipoConteudo($objComponenteDigital->tipoDeConteudo); | |
| 815 | - $objComponenteDigitalDTO->setStrMimeType($objComponenteDigital->mimeType); | |
| 816 | - $objComponenteDigitalDTO->setStrDadosComplementares($objComponenteDigital->dadosComplementaresDoTipoDeArquivo); | |
| 785 | + private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjComponentesDigitaisSolicitados) | |
| 786 | + { | |
| 787 | + //Monta dados dos componentes digitais | |
| 788 | + $arrObjComponenteDigitalDTO = array(); | |
| 789 | + if(!is_array($parObjProcesso->documento)) { | |
| 790 | + $parObjProcesso->documento = array($parObjProcesso->documento); | |
| 791 | + } | |
| 817 | 792 | |
| 818 | - //Registrar componente digital necessita ser enviado pelo trâmite espefífico //TODO: Teste $parObjComponentesDigitaisSolicitados aqui | |
| 819 | - if(isset($parObjComponentesDigitaisSolicitados)){ | |
| 820 | - $arrObjItensSolicitados = is_array($parObjComponentesDigitaisSolicitados->processo) ? $parObjComponentesDigitaisSolicitados->processo : array($parObjComponentesDigitaisSolicitados->processo); | |
| 793 | + foreach ($parObjProcesso->documento as $objDocumento) | |
| 794 | + { | |
| 795 | + $objComponenteDigitalDTO = new ComponenteDigitalDTO(); | |
| 796 | + $objComponenteDigitalDTO->setStrNumeroRegistro($parStrNumeroRegistro); | |
| 797 | + $objComponenteDigitalDTO->setDblIdProcedimento($parObjProcesso->idProcedimentoSEI); //TODO: Error utilizar idProcedimentoSEI devido processos apensados | |
| 798 | + $objComponenteDigitalDTO->setDblIdDocumento($objDocumento->idDocumentoSEI); | |
| 799 | + $objComponenteDigitalDTO->setNumOrdem($objDocumento->ordem); | |
| 800 | + $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite); | |
| 801 | + $objComponenteDigitalDTO->setStrProtocolo($parObjProcesso->protocolo); | |
| 802 | + | |
| 803 | + //Por enquanto, considera que o documento possui apenas um componente digital | |
| 804 | + // if(is_array($objDocumento->componenteDigital) && count($objDocumento->componenteDigital) != 1) { | |
| 805 | + // throw new InfraException("Erro processando componentes digitais do processo " . $parObjProcesso->protocolo . "\n Somente é permitido o recebimento de documentos com apenas um Componente Digital."); | |
| 806 | + // } | |
| 807 | + | |
| 808 | + $arrObjComponenteDigital = is_array($objDocumento->componenteDigital) ? $objDocumento->componenteDigital : array($objDocumento->componenteDigital); | |
| 809 | + | |
| 810 | + foreach ($arrObjComponenteDigital as $objComponenteDigital) | |
| 811 | + { | |
| 812 | + $objComponenteDigitalDTO->setStrNome($objComponenteDigital->nome); | |
| 813 | + | |
| 814 | + $strHashConteudo = static::getHashFromMetaDados($objComponenteDigital->hash); | |
| 815 | + | |
| 816 | + $objComponenteDigitalDTO->setStrHashConteudo($strHashConteudo); | |
| 817 | + $objComponenteDigitalDTO->setStrAlgoritmoHash(self::ALGORITMO_HASH_DOCUMENTO); | |
| 818 | + $objComponenteDigitalDTO->setStrTipoConteudo($objComponenteDigital->tipoDeConteudo); | |
| 819 | + $objComponenteDigitalDTO->setStrMimeType($objComponenteDigital->mimeType); | |
| 820 | + $objComponenteDigitalDTO->setStrDadosComplementares($objComponenteDigital->dadosComplementaresDoTipoDeArquivo); | |
| 821 | + | |
| 822 | + //Registrar componente digital necessita ser enviado pelo trâmite espefífico //TODO: Teste $parObjComponentesDigitaisSolicitados aqui | |
| 823 | + if (isset($parObjComponentesDigitaisSolicitados)) { | |
| 824 | + $arrObjItensSolicitados = is_array($parObjComponentesDigitaisSolicitados->processo) ? $parObjComponentesDigitaisSolicitados->processo : array($parObjComponentesDigitaisSolicitados->processo); | |
| 825 | + | |
| 826 | + foreach ($arrObjItensSolicitados as $objItemSolicitado) { | |
| 827 | + if (!is_null($objItemSolicitado)) { | |
| 828 | + $objItemSolicitado->hash = is_array($objItemSolicitado->hash) ? $objItemSolicitado->hash : array($objItemSolicitado->hash); | |
| 829 | + | |
| 830 | + if ($objItemSolicitado->protocolo == $objComponenteDigitalDTO->getStrProtocolo() && in_array($strHashConteudo, $objItemSolicitado->hash) && !$objDocumento->retirado) { | |
| 831 | + $objComponenteDigitalDTO->setStrSinEnviar("S"); | |
| 832 | + } | |
| 833 | + } | |
| 834 | + } | |
| 835 | + } | |
| 821 | 836 | |
| 822 | - foreach ($arrObjItensSolicitados as $objItemSolicitado) { | |
| 823 | - if(!is_null($objItemSolicitado)){ | |
| 824 | - $objItemSolicitado->hash = is_array($objItemSolicitado->hash) ? $objItemSolicitado->hash : array($objItemSolicitado->hash); | |
| 837 | + //TODO: Avaliar dados do tamanho do documento em bytes salvo na base de dados | |
| 838 | + $objComponenteDigitalDTO->setNumTamanho($objComponenteDigital->tamanhoEmBytes); | |
| 825 | 839 | |
| 826 | - if($objItemSolicitado->protocolo == $objComponenteDigitalDTO->getStrProtocolo() && in_array($strHashConteudo, $objItemSolicitado->hash) && !$objDocumento->retirado) { | |
| 827 | - $objComponenteDigitalDTO->setStrSinEnviar("S"); | |
| 828 | - } | |
| 840 | + $objComponenteDigitalDTO->setNumIdAnexo($objComponenteDigital->idAnexo); | |
| 841 | + $arrObjComponenteDigitalDTO[] = $objComponenteDigitalDTO; | |
| 829 | 842 | } |
| 830 | 843 | } |
| 831 | - } | |
| 832 | - | |
| 833 | - //TODO: Avaliar dados do tamanho do documento em bytes salvo na base de dados | |
| 834 | - $objComponenteDigitalDTO->setNumTamanho($objComponenteDigital->tamanhoEmBytes); | |
| 835 | 844 | |
| 836 | - $objComponenteDigitalDTO->setNumIdAnexo($objComponenteDigital->idAnexo); | |
| 837 | - $arrObjComponenteDigitalDTO[] = $objComponenteDigitalDTO; | |
| 838 | - } | |
| 845 | + //Chamada recursiva sobre os documentos dos processos apensados | |
| 846 | + if(isset($parObjProcesso->processoApensado) && count($parObjProcesso->processoApensado)) { | |
| 847 | + foreach ($parObjProcesso->processoApensado as $objProcessoApensado) { | |
| 848 | + $arrObj = $this->montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $objProcessoApensado, $parObjComponentesDigitaisSolicitados); | |
| 849 | + $arrObjComponenteDigitalDTO = array_merge($arrObjComponenteDigitalDTO, $arrObj); | |
| 850 | + } | |
| 851 | + } | |
| 839 | 852 | |
| 840 | - //Chamada recursiva sobre os documentos dos processos apensados | |
| 841 | - if(isset($parObjProcesso->processoApensado) && count($parObjProcesso->processoApensado)) { | |
| 842 | - foreach ($parObjProcesso->processoApensado as $objProcessoApensado) { | |
| 843 | - $arrObj = $this->montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $objProcessoApensado, $parObjComponentesDigitaisSolicitados); | |
| 844 | - $arrObjComponenteDigitalDTO = array_merge($arrObjComponenteDigitalDTO, $arrObj); | |
| 845 | - } | |
| 853 | + return $arrObjComponenteDigitalDTO; | |
| 846 | 854 | } |
| 847 | 855 | |
| 848 | - return $arrObjComponenteDigitalDTO; | |
| 849 | - } | |
| 850 | - | |
| 851 | 856 | |
| 852 | 857 | public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo) |
| 853 | 858 | { | ... | ... |
rn/ReceberProcedimentoRN.php
| ... | ... | @@ -87,9 +87,11 @@ class ReceberProcedimentoRN extends InfraRN |
| 87 | 87 | |
| 88 | 88 | #############################INICIA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################ |
| 89 | 89 | |
| 90 | - //Obtém lista de componentes digitais que precisam ser obtidos | |
| 90 | + //Realiza as validações nos componentes digitais dos documentos | |
| 91 | 91 | $this->validarComponentesDigitais($objProtocolo, $parNumIdentificacaoTramite); |
| 92 | 92 | $this->validarExtensaoComponentesDigitais($parNumIdentificacaoTramite, $objProtocolo); |
| 93 | + | |
| 94 | + //Verifica a permissão de escrita nos diretórios de arquivos externos | |
| 93 | 95 | $this->verificarPermissoesDiretorios($parNumIdentificacaoTramite); |
| 94 | 96 | |
| 95 | 97 | $this->gravarLogDebug("Obtém lista de componentes digitais que precisam ser obtidos", 4); |
| ... | ... | @@ -120,7 +122,9 @@ class ReceberProcedimentoRN extends InfraRN |
| 120 | 122 | |
| 121 | 123 | //Obter os dados do componente digital |
| 122 | 124 | $this->gravarLogDebug("Baixando componente digital $key", 6); |
| 125 | + | |
| 123 | 126 | $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital($parNumIdentificacaoTramite, $componentePendente, $objTramite->protocolo); |
| 127 | + | |
| 124 | 128 | $arrAnexosComponentes[$key][$componentePendente] = $receberComponenteDigitalRN->copiarComponenteDigitalPastaTemporaria($objComponenteDigital); |
| 125 | 129 | $arrAnexosComponentes[$key]['recebido'] = false; |
| 126 | 130 | |
| ... | ... | @@ -177,6 +181,7 @@ class ReceberProcedimentoRN extends InfraRN |
| 177 | 181 | } |
| 178 | 182 | |
| 179 | 183 | if(count($arrComponentesPendentesRecebimento) > 0){ |
| 184 | + | |
| 180 | 185 | //Obter dados dos componetes digitais |
| 181 | 186 | $this->gravarLogDebug("Iniciando o recebimento dos componentes digitais pendentes", 4); |
| 182 | 187 | $objComponenteDigitalDTO = new ComponenteDigitalDTO(); |
| ... | ... | @@ -329,7 +334,7 @@ class ReceberProcedimentoRN extends InfraRN |
| 329 | 334 | } |
| 330 | 335 | |
| 331 | 336 | /** |
| 332 | - * Valida cada componente digital, se não algum não for aceito recusa o tramite | |
| 337 | + * Valida cada componente digital, se algum não for aceito recusa o tramite | |
| 333 | 338 | * do procedimento para esta unidade |
| 334 | 339 | */ |
| 335 | 340 | private function validarComponentesDigitais($parObjProtocolo, $parNumIdentificacaoTramite) |
| ... | ... | @@ -356,18 +361,24 @@ class ReceberProcedimentoRN extends InfraRN |
| 356 | 361 | $objPenParametroRN = new PenParametroRN(); |
| 357 | 362 | $numTamDocExterno = $objPenParametroRN->getParametro('PEN_TAMANHO_MAXIMO_DOCUMENTO_EXPEDIDO'); |
| 358 | 363 | |
| 359 | - foreach($arrObjDocumentos as $objDocument) { | |
| 360 | - | |
| 361 | - //Não valida informações do componente digital caso o documento esteja cancelado | |
| 362 | - if(isset($objDocumento->retirado) && $objDocumento->retirado === true){ | |
| 363 | - if (is_null($objDocument->componenteDigital->tamanhoEmBytes) || $objDocument->componenteDigital->tamanhoEmBytes == 0){ | |
| 364 | - throw new InfraException('Tamanho de componente digital não informado.', null, 'RECUSA: '.ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); | |
| 365 | - } | |
| 364 | + foreach($arrObjDocumentos as $objDocumento) | |
| 365 | + { | |
| 366 | + $arrObjComponenteDigital = $this->obterComponentesDigitaisDocumento($objDocumento); | |
| 367 | + | |
| 368 | + //Valida o tamnho dos compoenentes digitais | |
| 369 | + foreach ($arrObjComponenteDigital as $objComponenteDigital) | |
| 370 | + { | |
| 371 | + //Não valida informações do componente digital caso o documento esteja cancelado | |
| 372 | + if(isset($objDocumento->retirado) && $objDocumento->retirado === true){ | |
| 373 | + if (is_null($objComponenteDigital->tamanhoEmBytes) || $objComponenteDigital->tamanhoEmBytes == 0){ | |
| 374 | + throw new InfraException('Tamanho de componente digital não informado.', null, 'RECUSA: '.ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); | |
| 375 | + } | |
| 366 | 376 | |
| 367 | - if($objDocument->componenteDigital->tamanhoEmBytes > ($numTamDocExterno * 1024 * 1024)){ | |
| 368 | - $numTamanhoMb = $objDocument->componenteDigital->tamanhoEmBytes / ( 1024 * 1024); | |
| 369 | - $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, 'Componente digital não pode ultrapassar '.round($numTamDocExterno, 2).'MBs, o tamanho do anexo é '.round($numTamanhoMb, 2).'MBs .', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); | |
| 370 | - throw new InfraException('Componente digital não pode ultrapassar '.round($numTamDocExterno, 2).'MBs, o tamanho do anexo é '.round($numTamanhoMb).'MBs'); | |
| 377 | + if($objComponenteDigital->tamanhoEmBytes > ($numTamDocExterno * 1024 * 1024)){ | |
| 378 | + $numTamanhoMb = $objComponenteDigital->tamanhoEmBytes / ( 1024 * 1024); | |
| 379 | + $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, 'Componente digital não pode ultrapassar '.round($numTamDocExterno, 2).'MBs, o tamanho do anexo é '.round($numTamanhoMb, 2).'MBs .', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); | |
| 380 | + throw new InfraException('Componente digital não pode ultrapassar '.round($numTamDocExterno, 2).'MBs, o tamanho do anexo é '.round($numTamanhoMb).'MBs'); | |
| 381 | + } | |
| 371 | 382 | } |
| 372 | 383 | } |
| 373 | 384 | } |
| ... | ... | @@ -385,6 +396,11 @@ class ReceberProcedimentoRN extends InfraRN |
| 385 | 396 | return $arrObjDocumento; |
| 386 | 397 | } |
| 387 | 398 | |
| 399 | + private function obterComponentesDigitaisDocumento($parObjDocumento) | |
| 400 | + { | |
| 401 | + return $arrObjComponenteDigital = is_array($parObjDocumento->componenteDigital) ? $parObjDocumento->componenteDigital : array($parObjDocumento->componenteDigital); | |
| 402 | + } | |
| 403 | + | |
| 388 | 404 | private function registrarProcesso($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProtocolo, $parObjMetadadosProcedimento) |
| 389 | 405 | { |
| 390 | 406 | // Validação dos dados do processo recebido |
| ... | ... | @@ -1790,25 +1806,31 @@ class ReceberProcedimentoRN extends InfraRN |
| 1790 | 1806 | //Instancia o bd do arquivoExtensão |
| 1791 | 1807 | $arquivoExtensaoBD = new ArquivoExtensaoBD($this->getObjInfraIBanco()); |
| 1792 | 1808 | |
| 1793 | - //Percorre os documentos | |
| 1794 | - foreach($arrDocumentos as $documento){ | |
| 1795 | - | |
| 1796 | - //Busca o nome do documento | |
| 1797 | - $nomeDocumento = $documento->componenteDigital->nome; | |
| 1798 | - | |
| 1799 | - //Busca pela extensão do documento | |
| 1800 | - $arrNomeDocumento = explode('.', $nomeDocumento); | |
| 1801 | - $extDocumento = $arrNomeDocumento[count($arrNomeDocumento) - 1]; | |
| 1802 | - | |
| 1803 | - //Verifica se a extensão do arquivo está cadastrada e ativa | |
| 1804 | - $arquivoExtensaoDTO = new ArquivoExtensaoDTO(); | |
| 1805 | - $arquivoExtensaoDTO->setStrSinAtivo('S'); | |
| 1806 | - $arquivoExtensaoDTO->setStrExtensao($extDocumento); | |
| 1807 | - $arquivoExtensaoDTO->retStrExtensao(); | |
| 1808 | - | |
| 1809 | - if($arquivoExtensaoBD->contar($arquivoExtensaoDTO) == 0){ | |
| 1810 | - $this->objProcessoEletronicoRN->recusarTramite($parIdTramite, 'Componentes digitais com formato inválido no destinatário. ', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_FORMATO); | |
| 1811 | - throw new InfraException("Processo recusado devido a existência de documento em formato {$extDocumento} não permitido pelo sistema. "); | |
| 1809 | + //Percorre os documentos para validar a extensão dos componentes digitais | |
| 1810 | + foreach($arrDocumentos as $documento) | |
| 1811 | + { | |
| 1812 | + $arrObjComponenteDigital = $this->obterComponentesDigitaisDocumento($documento); | |
| 1813 | + | |
| 1814 | + //Valida a extensão dos componentes digitais | |
| 1815 | + foreach ($arrObjComponenteDigital as $objComponenteDigital) | |
| 1816 | + { | |
| 1817 | + //Busca o nome do documento | |
| 1818 | + $nomeDocumento = $objComponenteDigital->nome; | |
| 1819 | + | |
| 1820 | + //Busca pela extensão do documento | |
| 1821 | + $arrNomeDocumento = explode('.', $nomeDocumento); | |
| 1822 | + $extDocumento = $arrNomeDocumento[count($arrNomeDocumento) - 1]; | |
| 1823 | + | |
| 1824 | + //Verifica se a extensão do arquivo está cadastrada e ativa | |
| 1825 | + $arquivoExtensaoDTO = new ArquivoExtensaoDTO(); | |
| 1826 | + $arquivoExtensaoDTO->setStrSinAtivo('S'); | |
| 1827 | + $arquivoExtensaoDTO->setStrExtensao($extDocumento); | |
| 1828 | + $arquivoExtensaoDTO->retStrExtensao(); | |
| 1829 | + | |
| 1830 | + if ($arquivoExtensaoBD->contar($arquivoExtensaoDTO) == 0) { | |
| 1831 | + $this->objProcessoEletronicoRN->recusarTramite($parIdTramite, 'Componentes digitais com formato inválido no destinatário. ', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_FORMATO); | |
| 1832 | + throw new InfraException("Processo recusado devido a existência de documento em formato {$extDocumento} não permitido pelo sistema. "); | |
| 1833 | + } | |
| 1812 | 1834 | } |
| 1813 | 1835 | } |
| 1814 | 1836 | } | ... | ... |