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) ; |