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