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 | 51 | ini_set('max_execution_time','0'); |
| 52 | 52 | ini_set('memory_limit','-1'); |
| 53 | 53 | |
| 54 | - InfraDebug::getInstance()->setBolLigado(false); | |
| 54 | + InfraDebug::getInstance()->setBolLigado(true); | |
| 55 | 55 | InfraDebug::getInstance()->setBolDebugInfra(false); |
| 56 | - InfraDebug::getInstance()->setBolEcho(false); | |
| 56 | + InfraDebug::getInstance()->setBolEcho(true); | |
| 57 | 57 | InfraDebug::getInstance()->limpar(); |
| 58 | 58 | |
| 59 | 59 | PENIntegracao::validarCompatibilidadeModulo(); | ... | ... |
rn/ProcessarPendenciasRN.php
| ... | ... | @@ -33,9 +33,9 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa |
| 33 | 33 | ini_set('max_execution_time','0'); |
| 34 | 34 | ini_set('memory_limit','-1'); |
| 35 | 35 | |
| 36 | - InfraDebug::getInstance()->setBolLigado(false); | |
| 36 | + InfraDebug::getInstance()->setBolLigado(true); | |
| 37 | 37 | InfraDebug::getInstance()->setBolDebugInfra(false); |
| 38 | - InfraDebug::getInstance()->setBolEcho(false); | |
| 38 | + InfraDebug::getInstance()->setBolEcho(true); | |
| 39 | 39 | InfraDebug::getInstance()->limpar(); |
| 40 | 40 | |
| 41 | 41 | PENIntegracao::validarCompatibilidadeModulo(); | ... | ... |
rn/ProcessoEletronicoRN.php
| ... | ... | @@ -60,7 +60,7 @@ class ProcessoEletronicoRN extends InfraRN { |
| 60 | 60 | /** |
| 61 | 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 | 66 | * Motivo para recusar de tramite de componente digital | ... | ... |
rn/ReceberComponenteDigitalRN.php
| ... | ... | @@ -28,9 +28,8 @@ class ReceberComponenteDigitalRN extends InfraRN |
| 28 | 28 | return BancoSEI::getInstance(); |
| 29 | 29 | } |
| 30 | 30 | |
| 31 | - protected function receberComponenteDigitalConectado(ComponenteDigitalDTO $parObjComponenteDigitalDTO) | |
| 31 | + protected function receberComponenteDigitalControlado(ComponenteDigitalDTO $parObjComponenteDigitalDTO) | |
| 32 | 32 | { |
| 33 | - | |
| 34 | 33 | if(!isset($parObjComponenteDigitalDTO) || !isset($parObjComponenteDigitalDTO)) { |
| 35 | 34 | throw new InfraException('Parâmetro $parObjComponenteDigitalDTO não informado.'); |
| 36 | 35 | } |
| ... | ... | @@ -48,9 +47,6 @@ class ReceberComponenteDigitalRN extends InfraRN |
| 48 | 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 | 50 | //Transferir documentos validados para o repositório final de arquivos |
| 55 | 51 | $this->cadastrarComponenteDigital($parObjComponenteDigitalDTO, $objAnexoDTO); |
| 56 | 52 | |
| ... | ... | @@ -99,13 +95,7 @@ class ReceberComponenteDigitalRN extends InfraRN |
| 99 | 95 | $strCaminhoAnexo = DIR_SEI_TEMP.'/'.$objAnexoDTO->getNumIdAnexo(); |
| 100 | 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 | 101 | public function cadastrarComponenteDigital(ComponenteDigitalDTO $parObjComponenteDigitalDTO, AnexoDTO $parObjAnexoDTO) | ... | ... |
rn/ReceberProcedimentoRN.php
| ... | ... | @@ -35,188 +35,150 @@ class ReceberProcedimentoRN extends InfraRN |
| 35 | 35 | } |
| 36 | 36 | |
| 37 | 37 | |
| 38 | + //TODO: Renomear para receberProtocoloControlado | |
| 38 | 39 | protected function receberProcedimentoControlado($parNumIdentificacaoTramite) |
| 39 | 40 | { |
| 40 | 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 | 42 | if (!isset($parNumIdentificacaoTramite)) { |
| 47 | 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 | 182 | //$this->fecharProcedimentoEmOutraUnidades($objProcedimentoDTO, $objMetadadosProcedimento); |
| 221 | 183 | $this->gravarLogDebug("Enviando recibo de conclusão do trâmite $parNumIdentificacaoTramite", 6); |
| 222 | 184 | $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN(); |
| ... | ... | @@ -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 | 277 | public function fecharProcedimentoEmOutraUnidades(ProcedimentoDTO $objProcedimentoDTO, $parObjMetadadosProcedimento){ |
| 238 | 278 | |
| 239 | 279 | $objPenUnidadeDTO = new PenUnidadeDTO(); |
| ... | ... | @@ -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 | 459 | //Verifica se componente digital já está registrado para o documento |
| 420 | 460 | $objComponenteDigitalDTO = new ComponenteDigitalDTO(); |
| ... | ... | @@ -1785,7 +1825,7 @@ protected function receberTramiteRecusadoInternoControlado(ReceberTramiteRecusad |
| 1785 | 1825 | * @param object $parObjProcesso |
| 1786 | 1826 | * @throws InfraException |
| 1787 | 1827 | */ |
| 1788 | - public function validarExtensaoComponentesDigitais($parIdTramite, $parObjProcesso){ | |
| 1828 | + public function validarExtensaoComponentesDigitais($parObjProcesso, $parIdTramite){ | |
| 1789 | 1829 | |
| 1790 | 1830 | //Armazena o array de documentos |
| 1791 | 1831 | $arrDocumentos = is_array($parObjProcesso->documento) ? $parObjProcesso->documento : array($parObjProcesso->documento) ; | ... | ... |