Commit 0c1930b6230645d05433f4176dcd6be413af0d4d

Authored by Guilherme Andrade Del Cantoni
1 parent f431b6b9
Exists in feature-050

Refatoração de método de recebimento de processos/documentos

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