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