Commit f4c68f7ed46966ad9860031e4bd03974072b8d8d

Authored by Guilherme Andrade Del Cantoni
1 parent 62add16d

Correção de recebimento de processos por 2 unidades do mesmo sistema

PENIntegracao.php
... ... @@ -2,7 +2,7 @@
2 2  
3 3 class PENIntegracao extends SeiIntegracao {
4 4  
5   - const COMPATIBILIDADE_MODULO_SEI = array('3.0.5', '3.0.6', '3.0.7', '3.0.8', '3.0.9', '3.0.11', '3.0.12', '3.0.13');
  5 + const COMPATIBILIDADE_MODULO_SEI = array('3.0.5', '3.0.6', '3.0.7', '3.0.8', '3.0.9', '3.0.11', '3.0.12', '3.0.13', '3.0.14', '3.0.15');
6 6  
7 7 private static $strDiretorio;
8 8  
... ... @@ -11,7 +11,7 @@ class PENIntegracao extends SeiIntegracao {
11 11 }
12 12  
13 13 public function getVersao() {
14   - return '1.1.5';
  14 + return '1.1.7';
15 15 }
16 16  
17 17  
... ...
bd/PenMetaBD.php
... ... @@ -19,7 +19,6 @@ class PenMetaBD extends InfraMetaBD {
19 19 public function adicionarValorPadraoParaColuna($strNomeTabela, $strNomeColuna, $strValorPadrao, $bolRetornarQuery = false){
20 20  
21 21 $objInfraBanco = $this->getObjInfraIBanco();
22   -
23 22 $strTableDrive = get_parent_class($objInfraBanco);
24 23 $strQuery = '';
25 24  
... ... @@ -30,18 +29,18 @@ class PenMetaBD extends InfraMetaBD {
30 29 break;
31 30  
32 31 case 'InfraSqlServer':
33   - $strQuery = sprintf("ALTER TABLE [%s] ADD DEFAULT('%s') FOR [%s]", $strNomeTabela, $strValorPadrao, $strNomeColuna);
  32 + $strQuery = sprintf("ALTER TABLE [%s] ADD DEFAULT('%s') FOR [%s]", $strNomeTabela, $strValorPadrao, $strNomeColuna);
  33 + break;
34 34  
35 35 case 'InfraOracle':
  36 + $strQuery = sprintf("ALTER TABLE %s MODIFY %s DEFAULT '%s'", $strNomeTabela, $strNomeColuna, $strValorPadrao);
36 37 break;
37 38 }
38 39  
39 40 if($bolRetornarQuery === false) {
40   -
41 41 $objInfraBanco->executarSql($strQuery);
42 42 }
43 43 else {
44   -
45 44 return $strQuery;
46 45 }
47 46 }
... ... @@ -139,6 +138,7 @@ class PenMetaBD extends InfraMetaBD {
139 138 break;
140 139  
141 140 case 'InfraOracle':
  141 + $this->getObjInfraIBanco()->executarSql('ALTER TABLE '.$strNomeTabela.' DROP CONSTRAINT '.$strNomeChave);
142 142 break;
143 143 }
144 144 }
... ... @@ -156,12 +156,10 @@ class PenMetaBD extends InfraMetaBD {
156 156 if($this->isTabelaExiste($strNomeTabelaAtual)) {
157 157  
158 158 $objInfraBanco = $this->getObjInfraIBanco();
159   -
160 159 $strTableDrive = get_parent_class($objInfraBanco);
161 160 $strQuery = '';
162 161  
163 162 switch ($strTableDrive) {
164   -
165 163 case 'InfraMySqli':
166 164 $strQuery = sprintf("ALTER TABLE `%s` RENAME TO `%s`", $strNomeTabelaAtual, $strNomeTabelaNovo);
167 165 break;
... ...
dto/PenTramiteProcessadoDTO.php
... ... @@ -3,23 +3,24 @@
3 3 require_once dirname(__FILE__) . '/../../../SEI.php';
4 4  
5 5 /**
6   - *
  6 + *
7 7 * @author Join Tecnologia
8 8 */
9 9 class PenTramiteProcessadoDTO extends InfraDTO {
10   -
  10 +
11 11 public function getStrNomeTabela() {
12   - return 'md_pen_tramite_processado';
  12 + return 'md_pen_tramite_processado';
13 13 }
14   -
  14 +
15 15 public function montar() {
16   -
  16 +
17 17 $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_DBL, 'IdTramite', 'id_tramite');
18 18 $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_DTH, 'Ultimo', 'dth_ultimo_processamento');
19   - $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'Tentativas', 'numero_tentativas');
  19 + $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'Tentativas', 'numero_tentativas');
20 20 $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_STR, 'Recebido', 'sin_recebimento_concluido');
21 21 $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_STR, 'Tipo', 'tipo_tramite_processo');
22 22  
23 23 $this->configurarPK('IdTramite', InfraDTO::$TIPO_PK_INFORMADO);
  24 + $this->configurarPK('Tipo', InfraDTO::$TIPO_PK_INFORMADO);
24 25 }
25 26 }
... ...
rn/EnviarReciboTramiteRN.php
1   -<?php
  1 +<?php
  2 +
2 3 require_once dirname(__FILE__) . '/../../../SEI.php';
3 4  
4 5 class EnviarReciboTramiteRN extends InfraRN
... ... @@ -18,60 +19,60 @@ class EnviarReciboTramiteRN extends InfraRN
18 19 {
19 20 return BancoSEI::getInstance();
20 21 }
21   -
  22 +
22 23 /**
23   - * Gera o recibo do tramite para o destinário informando o recebimento
  24 + * Gera o recibo do tramite para o destinário informando o recebimento
24 25 * do procedimento.
25   - *
  26 + *
26 27 * @param int $numIdTramite
27 28 * @return array
28 29 */
29 30 protected function gerarReciboTramite($numIdTramite){
30   -
  31 +
31 32 $arrStrHashConteudo = array();
32   -
  33 +
33 34 $objMetaRetorno = $this->objProcessoEletronicoRN->solicitarMetadados($numIdTramite);
34   -
  35 +
35 36 $objMetaProcesso = $objMetaRetorno->metadados->processo;
36 37  
37 38 $arrObjMetaDocumento = is_array($objMetaProcesso->documento) ? $objMetaProcesso->documento : array($objMetaProcesso->documento);
38   -
  39 +
39 40 $objDTO = new ComponenteDigitalDTO();
40 41 $objBD = new ComponenteDigitalBD($this->inicializarObjInfraIBanco());
41   -
  42 +
42 43 foreach($arrObjMetaDocumento as $objMetaDocumento) {
43   -
  44 +
44 45 $strHashConteudo = ProcessoEletronicoRN::getHashFromMetaDados($objMetaDocumento->componenteDigital->hash);
45   -
  46 +
46 47 $objDTO->setStrHashConteudo($strHashConteudo);
47   -
  48 +
48 49 if($objBD->contar($objDTO) > 0) {
49   -
  50 +
50 51 $arrStrHashConteudo[] = $strHashConteudo;
51 52 }
52 53 }
53   -
  54 +
54 55 return $arrStrHashConteudo;
55 56 }
56   -
  57 +
57 58 protected function cadastrarReciboTramiteRecebimento($strNumeroRegistro = '', $parNumIdTramite = 0, $strHashConteudo = '', $parArrayHash = array()){
58   -
  59 +
59 60 $objBD = new ReciboTramiteRecebidoBD($this->inicializarObjInfraIBanco());
60   -
  61 +
61 62 $objDTO = new ReciboTramiteRecebidoDTO();
62 63 $objDTO->setStrNumeroRegistro($strNumeroRegistro);
63 64 $objDTO->setNumIdTramite($parNumIdTramite);
64   -
65   - if(!empty($strHashConteudo)) $objDTO->setStrHashAssinatura($strHashConteudo);
  65 +
  66 + if(!empty($strHashConteudo)) $objDTO->setStrHashAssinatura($strHashConteudo);
66 67  
67 68 if(intval($objBD->contar($objDTO)) == 0) {
68   -
  69 +
69 70 $objDTO->setDthRecebimento(date('d/m/Y H:i:s'));
70 71 $objBD->cadastrar($objDTO);
71 72 }
72   -
  73 +
73 74 foreach($parArrayHash as $strHashComponenteDigital){
74   -
  75 +
75 76 $objReciboTramiteHashDTO = new ReciboTramiteHashDTO();
76 77 $objReciboTramiteHashDTO->setStrNumeroRegistro($strNumeroRegistro);
77 78 $objReciboTramiteHashDTO->setNumIdTramite($parNumIdTramite);
... ... @@ -80,33 +81,33 @@ class EnviarReciboTramiteRN extends InfraRN
80 81  
81 82 $objBD->cadastrar($objReciboTramiteHashDTO);
82 83 }
83   -
84   -
  84 +
  85 +
85 86 }
86 87  
87 88 public function enviarReciboTramiteProcesso($parNumIdTramite, $parArrayHash = null, $parDthRecebimento = null)
88   - {
  89 + {
89 90  
90 91 date_default_timezone_set('America/Sao_Paulo');
91 92  
92 93 if(!isset($parNumIdTramite) || $parNumIdTramite == 0) {
93   - throw new InfraException('Parâmetro $parNumIdTramite não informado.');
94   - }
  94 + throw new InfraException('Parâmetro $parNumIdTramite não informado.');
  95 + }
95 96  
96   - //Verifica se todos os componentes digitais já foram devidamente recebido
  97 + //Verifica se todos os componentes digitais já foram devidamente recebido
97 98 $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdTramite);
98 99 if(!isset($arrObjTramite) || count($arrObjTramite) != 1) {
99   - throw new InfraException("Trâmite não pode ser localizado pelo identificador $parNumIdTramite.");
  100 + throw new InfraException("Trâmite não pode ser localizado pelo identificador $parNumIdTramite.");
100 101 }
101 102  
102 103 $objTramite = $arrObjTramite[0];
103 104 $strNumeroRegistro = $objTramite->NRE;
104 105  
105 106 if($objTramite->situacaoAtual != ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) {
106   - throw new InfraException('Situação do Trâmite diferente da permitida para o envio do recibo de conclusão de trâmite.');
  107 + throw new InfraException('Situação do Trâmite diferente da permitida para o envio do recibo de conclusão de trâmite.');
107 108 }
108 109  
109   - $dthRecebimentoComponentesDigitais = $this->obterDataRecebimentoComponentesDigitais($objTramite);
  110 + $dthRecebimentoComponentesDigitais = $this->obterDataRecebimentoComponentesDigitais($objTramite);
110 111 $dthRecebimentoComponentesDigitais = $dthRecebimentoComponentesDigitais ?: date();
111 112 $dthRecebimento = gmdate("Y-m-d\TH:i:s.000\Z", InfraData::getTimestamp($dthRecebimentoComponentesDigitais));
112 113  
... ... @@ -115,23 +116,23 @@ class EnviarReciboTramiteRN extends InfraRN
115 116 $strReciboTramite .= "<NRE>$strNumeroRegistro</NRE>";
116 117 $strReciboTramite .= "<dataDeRecebimento>$dthRecebimento</dataDeRecebimento>";
117 118 sort($parArrayHash);
118   -
  119 +
119 120 foreach ($parArrayHash as $strHashConteudo) {
120 121 if(!empty($strHashConteudo)){
121 122 $strReciboTramite .= "<hashDoComponenteDigital>$strHashConteudo</hashDoComponenteDigital>";
122 123 }
123   - }
  124 + }
124 125 $strReciboTramite .= "</recibo>";
125   -
  126 +
126 127 //Envia o Recibo de salva no banco
127 128 $hashAssinatura = $this->objProcessoEletronicoRN->enviarReciboDeTramite($parNumIdTramite, $dthRecebimento, $strReciboTramite);
128 129 $this->cadastrarReciboTramiteRecebimento($strNumeroRegistro, $parNumIdTramite, $hashAssinatura, $parArrayHash);
129   - }
  130 + }
130 131  
131 132 private function obterDataRecebimentoComponentesDigitais($parObjTramite){
132   -
  133 +
133 134 if(!isset($parObjTramite)) {
134   - throw new InfraException('Parâmetro $parObjTramite não informado.');
  135 + throw new InfraException('Parâmetro $parObjTramite não informado.');
135 136 }
136 137  
137 138 if(!is_array($parObjTramite->historico->operacao)) {
... ... @@ -140,7 +141,7 @@ class EnviarReciboTramiteRN extends InfraRN
140 141  
141 142 foreach ($parObjTramite->historico->operacao as $operacao) {
142 143 if($operacao->situacao == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) {
143   - return ProcessoEletronicoRN::converterDataSEI($operacao->dataHora);
  144 + return ProcessoEletronicoRN::converterDataSEI($operacao->dataHora);
144 145 }
145 146 }
146 147  
... ... @@ -148,17 +149,17 @@ class EnviarReciboTramiteRN extends InfraRN
148 149 }
149 150  
150 151 /**
151   - * Consulta o componente digital no barramento. Utilizado para casos de retrasmissão,
152   - * onde esta unidade esta recebendo um componente digital que pertence à ela
153   - * própria, então o id_tramite de envio, que foi gravado, é diferente do de recebimento
154   - *
  152 + * Consulta o componente digital no barramento. Utilizado para casos de retrasmissão,
  153 + * onde esta unidade esta recebendo um componente digital que pertence à ela
  154 + * própria, então o id_tramite de envio, que foi gravado, é diferente do de recebimento
  155 + *
155 156 * @param int $numIdTramite
156 157 * @return array[ComponenteDigitalDTO]
157 158 */
158 159 private function recarregarComponenteDigitalDTO($numIdTramite){
159   -
  160 +
160 161 $arrObjComponenteDigitalDTO = array();
161   -
  162 +
162 163 $objMetaRetorno = $this->objProcessoEletronicoRN->solicitarMetadados($numIdTramite);
163 164  
164 165 if(!empty($objMetaRetorno)) {
... ... @@ -166,43 +167,44 @@ class EnviarReciboTramiteRN extends InfraRN
166 167 $objMetaProcesso = $objMetaRetorno->metadados->processo;
167 168  
168 169 $arrObjMetaDocumento = is_array($objMetaProcesso->documento) ? $objMetaProcesso->documento : array($objMetaProcesso->documento);
169   -
  170 +
170 171 foreach($arrObjMetaDocumento as $objMetaDocumento) {
171 172  
172 173 $dblIdProcedimento = null;
173 174 $dblIdDocumento = null;
174   -
  175 +
175 176 $objProcessoEletronicoDTO = new ProcessoEletronicoDTO();
176 177 $objProcessoEletronicoDTO->setStrNumeroRegistro($objMetaRetorno->metadados->NRE);
177 178 $objProcessoEletronicoDTO->retDblIdProcedimento();
178   -
  179 +
179 180 $objProcessoEletronicoBD = new ProcessoEletronicoBD($this->getObjInfraIBanco());
180 181 $objProcessoEletronicoDTO = $objProcessoEletronicoBD->consultar($objProcessoEletronicoDTO);
181   -
  182 +
182 183 if(empty($objProcessoEletronicoDTO)) {
183   -
  184 +
184 185 $dblIdProcedimento = $objProcessoEletronicoDTO->getDblIdProcedimento();
185   -
  186 +
186 187 $objDocumentoDTO = new DocumentoDTO();
187 188 $objDocumentoDTO->setDblIdProcedimento($dblIdProcedimento);
188 189 $objDocumentoDTO->retDblIdDocumento();
189   -
  190 +
190 191 $objDocumentoBD = new DocumentoBD();
191 192 $objDocumentoDTO = $objDocumentoBD->consultar($objDocumentoDTO);
192   -
  193 +
193 194 if(empty($objDocumentoDTO)) {
194   -
  195 +
195 196 $dblIdDocumento = $objDocumentoDTO->getDblIdDocumento();
196   - }
  197 + }
197 198 }
198 199  
199 200 $objMetaComponenteDigital = $objMetaDocumento->componenteDigital;
200   -
  201 +
201 202 $objComponenteDigitalDTO = new ComponenteDigitalDTO();
202 203 $objComponenteDigitalDTO->setStrNumeroRegistro($objMetaRetorno->metadados->NRE);
203 204 $objComponenteDigitalDTO->setDblIdProcedimento($dblIdProcedimento);
204 205 $objComponenteDigitalDTO->setDblIdDocumento($dblIdDocumento);
205 206 $objComponenteDigitalDTO->setNumIdTramite($numIdTramite);
  207 +
206 208 $objComponenteDigitalDTO->setNumIdAnexo($objMetaComponenteDigital->idAnexo);
207 209 $objComponenteDigitalDTO->setStrNome($objMetaComponenteDigital->nome);
208 210 $objComponenteDigitalDTO->setStrHashConteudo(ProcessoEletronicoRN::getHashFromMetaDados($objMetaComponenteDigital->hash));
... ... @@ -214,30 +216,30 @@ class EnviarReciboTramiteRN extends InfraRN
214 216 $objComponenteDigitalDTO->setNumTamanho($objMetaComponenteDigital->tamanhoEmBytes);
215 217 $objComponenteDigitalDTO->setNumOrdem($objMetaDocumento->ordem);
216 218 $objComponenteDigitalDTO->setStrSinEnviar('S');
217   -
  219 +
218 220 $arrObjComponenteDigitalDTO[] = $objComponenteDigitalDTO;
219   - }
220   - }
221   -
  221 + }
  222 + }
  223 +
222 224 return $arrObjComponenteDigitalDTO;
223 225 }
224   -
  226 +
225 227 /**
226 228 */
227 229 private function listarComponenteDigitalDTO($parNumIdTramite) {
228   -
  230 +
229 231 $objComponenteDigitalDTO = new ComponenteDigitalDTO();
230 232 $objComponenteDigitalDTO->retTodos();
231 233 $objComponenteDigitalDTO->setNumIdTramite($parNumIdTramite);
232   -
  234 +
233 235 $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco());
234 236 $arrObjComponenteDigitalDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO);
235 237  
236 238 if (empty($arrObjComponenteDigitalDTO)) {
237   -
238   - //$arrObjComponenteDigitalDTO = $this->recarregarComponenteDigitalDTO($parNumIdTramite);
  239 +
  240 + //$arrObjComponenteDigitalDTO = $this->recarregarComponenteDigitalDTO($parNumIdTramite);
239 241 }
240 242  
241 243 return $arrObjComponenteDigitalDTO;
242 244 }
243   -}
244 245 \ No newline at end of file
  246 +}
... ...
rn/PenTramiteProcessadoRN.php
... ... @@ -4,12 +4,12 @@
4 4 * @author Join Tecnologia
5 5 */
6 6 class PenTramiteProcessadoRN extends InfraRN {
7   -
  7 +
8 8 const STR_TIPO_PROCESSO = 'RP';
9 9 const STR_TIPO_RECIBO = 'RR';
10   -
  10 +
11 11 const PARAM_NUMERO_TENTATIVAS = 'PEN_NUMERO_TENTATIVAS_TRAMITE_RECEBIMENTO';
12   -
  12 +
13 13 protected $objInfraBanco;
14 14 private $strTipo;
15 15  
... ... @@ -17,64 +17,63 @@ class PenTramiteProcessadoRN extends InfraRN {
17 17 parent::__construct();
18 18 $this->strTipo = $strTipo;
19 19 }
20   -
  20 +
21 21 /**
22   - *
  22 + *
23 23 * @return BancoSEI
24 24 */
25 25 protected function inicializarObjInfraIBanco() {
26   -
  26 +
27 27 if(empty($this->objInfraBanco)) {
28   -
  28 +
29 29 $this->objInfraBanco = BancoSEI::getInstance();
30 30 }
31   -
  31 +
32 32 return $this->objInfraBanco;
33 33 }
34   -
  34 +
35 35 /**
36   - *
  36 + *
37 37 * @return bool
38 38 */
39 39 protected function isProcedimentoRecebidoControlado($dblIdTramite = 0){
40   -
  40 +
41 41 //Verifica se o trâmite não foi cancelado ou recusado
42 42 if($this->isTramiteRecusadoCancelado($dblIdTramite)){
43 43 return true;
44 44 }
45   -
  45 +
46 46 $objFilDTO = new PenTramiteProcessadoDTO();
47 47 $objFilDTO->setDblIdTramite($dblIdTramite);
48 48 $objFilDTO->setStrTipo($this->strTipo);
49 49 $objFilDTO->setNumMaxRegistrosRetorno(1);
50 50 $objFilDTO->retTodos();
51   -
52   - $objBD = new GenericoBD($this->inicializarObjInfraIBanco());
  51 +
  52 + $objBD = new GenericoBD($this->inicializarObjInfraIBanco());
53 53 $objDTO = $objBD->consultar($objFilDTO);
54 54  
55 55 if(empty($objDTO)) {
56   -
57 56 $objFilDTO->setDthUltimo(InfraData::getStrDataHoraAtual());
58 57 $objFilDTO->setNumTentativas(0);
59 58 $objFilDTO->setStrRecebido('N');
60 59 $objFilDTO->setStrTipo($this->strTipo);
61   -
62 60 $objDTO = $objBD->cadastrar($objFilDTO);
  61 + return false;
63 62 }
64   -
65   - if($objDTO->getStrRecebido() == 'S') {
66 63  
  64 +
  65 +
  66 + if($objDTO->getStrRecebido() == 'S') {
67 67 return true;
  68 +
68 69 }
69 70 else {
70   -
71 71 $objPenParametroRN = new PenParametroRN();
72 72 $numTentativas = $objPenParametroRN->getParametro(self::PARAM_NUMERO_TENTATIVAS);
73   -
  73 +
74 74 // Verifica o número de tentativas já realizadas é igual ao configurado
75 75 // no parâmetro
76 76 if($objDTO->getNumTentativas() >= $numTentativas) {
77   -
78 77 // Somente faz a recusa se estiver recebendo o procedimento, pois
79 78 // ao receber o recibo não pode mais recursar
80 79 if($objDTO->getStrTipo() == self::STR_TIPO_PROCESSO) {
... ... @@ -85,59 +84,55 @@ class PenTramiteProcessadoRN extends InfraRN {
85 84 return true;// Mente que já foi recebido para não executar novamente
86 85 }
87 86 else {
88   -
89 87 // Incrementa o contador pois após sair desse método com false
90 88 // ira executar o recebimento novamente
91 89 $objDTO->setDthUltimo(InfraData::getStrDataHoraAtual());
92 90 $objDTO->setNumTentativas($objDTO->getNumTentativas() + 1);
  91 + $objDTO->setStrTipo($this->strTipo);
93 92 $objBD->alterar($objDTO);
94 93 return false;
95   - }
  94 + }
96 95 }
97 96 }
98   -
  97 +
99 98 public function setRecebido($dblIdTramite = 0){
100   -
  99 +
101 100 $objDTO = new PenTramiteProcessadoDTO();
102 101 $objDTO->setDblIdTramite($dblIdTramite);
103 102 $objDTO->setStrTipo($this->strTipo);
104 103 $objDTO->setNumMaxRegistrosRetorno(1);
105 104 $objDTO->retTodos();
106   -
107 105 $objBD = new GenericoBD($this->inicializarObjInfraIBanco());
108 106 $objDTO = $objBD->consultar($objDTO);
109   -
110 107 if(empty($objDTO)) {
111 108 throw new InfraException(sprintf('ID do tramite %s não foi localizado', $dblIdTramite));
112 109 }
113   -
114 110 $objDTO->setDthUltimo(InfraData::getStrDataHoraAtual());
115 111 $objDTO->setStrRecebido('S');
116   -
117   - $objBD->alterar($objDTO);
  112 + $objBD->alterar($objDTO);
118 113 }
119   -
  114 +
120 115 /**
121 116 * Método que verifica se o trâmite em questão foi cancelado ou recusado
122   - *
  117 + *
123 118 * @param integer $parNumIdTramite
124 119 * @return boolean
125 120 */
126 121 public function isTramiteRecusadoCancelado($parNumIdTramite){
127   -
  122 +
128 123 //Instancia a classe processo eletrônico
129 124 $processoEletronicoRN = new ProcessoEletronicoRN();
130   -
  125 +
131 126 //Busca os dados do trâmite
132 127 $arrObjTramite = $processoEletronicoRN->consultarTramites($parNumIdTramite);
133 128 $objTramite = $arrObjTramite[0];
134   -
  129 +
135 130 //Verifica se o trâmite em questão. foi recusado o cancelado
136 131 if($objTramite->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO || $objTramite->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO){
137 132 return true;
138 133 }else{
139 134 return false;
140 135 }
141   -
  136 +
142 137 }
143 138 }
... ...
rn/ProcessarPendenciasRN.php
... ... @@ -86,8 +86,10 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa
86 86 $objReceberReciboTramiteRN = new ReceberReciboTramiteRN();
87 87 $objReceberReciboTramiteRN->receberReciboDeTramite($numIdentificacaoTramite);
88 88 }
  89 +
89 90 }
90 91 catch(Exception $e){
  92 + $this->gravarLogDebug(InfraException::inspecionar($e), 0, true);
91 93 LogSEI::getInstance()->gravar(InfraException::inspecionar($e));
92 94 }
93 95 });
... ... @@ -105,6 +107,7 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa
105 107 }
106 108 }
107 109 catch(Exception $e){
  110 + $this->gravarLogDebug(InfraException::inspecionar($e), 0, true);
108 111 LogSEI::getInstance()->gravar(InfraException::inspecionar($e));
109 112 $objProcessoEletronicoRN = new ProcessoEletronicoRN();
110 113 $strMensagem = ($e instanceof InfraException) ? $e->__toString() : $e->getMessage();
... ... @@ -120,9 +123,9 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa
120 123 $objReceberProcedimentoRN = new ReceberProcedimentoRN();
121 124 $objReceberProcedimentoRN->receberTramitesRecusados($numIdentificacaoTramite);
122 125 } catch (Exception $e) {
  126 + $this->gravarLogDebug(InfraException::inspecionar($e), 0, true);
123 127 LogSEI::getInstance()->gravar(InfraException::inspecionar($e));
124 128 }
125   -
126 129 });
127 130  
128 131 //Processamento de pendências de recebimento dos componentes digitais do processo
... ... @@ -139,6 +142,7 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa
139 142 $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN();
140 143 $objEnviarReciboTramiteRN->enviarReciboTramiteProcesso($numIdentificacaoTramite);
141 144 } catch (Exception $e) {
  145 + $this->gravarLogDebug(InfraException::inspecionar($e), 0, true);
142 146 LogSEI::getInstance()->gravar(InfraException::inspecionar($e));
143 147 }
144 148 });
... ... @@ -147,7 +151,7 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa
147 151 private function gravarLogDebug($strMensagem, $numIdentacao=0, $bolEcho=false)
148 152 {
149 153 $strDataLog = date("d/m/Y H:i:s");
150   - $strLog = sprintf("[%s] [PROCESSAMENTO] %s %s", $strDataLog, str_repeat("\t", $numIdentacao), $strMensagem);
  154 + $strLog = sprintf("[%s] [PROCESSAMENTO] %s %s", $strDataLog, str_repeat(" ", $numIdentacao * 4), $strMensagem);
151 155 InfraDebug::getInstance()->gravar($strLog);
152 156 if(!InfraDebug::getInstance()->isBolEcho() && $bolEcho) echo sprintf("\n[%s] [PROCESSAMENTO] %s", $strDataLog, $strMensagem);
153 157 }
... ...
rn/ProcessoEletronicoRN.php
... ... @@ -818,8 +818,8 @@ class ProcessoEletronicoRN extends InfraRN {
818 818  
819 819 //TODO: Avaliar dados do tamanho do documento em bytes salvo na base de dados
820 820 $objComponenteDigitalDTO->setNumTamanho($objComponenteDigital->tamanhoEmBytes);
821   - $objComponenteDigitalDTO->setNumIdAnexo($objComponenteDigital->idAnexo);
822 821  
  822 + $objComponenteDigitalDTO->setNumIdAnexo($objComponenteDigital->idAnexo);
823 823 $arrObjComponenteDigitalDTO[] = $objComponenteDigitalDTO;
824 824 }
825 825  
... ...
rn/ProcessoExpedidoRN.php
... ... @@ -77,7 +77,7 @@ class ProcessoExpedidoRN extends InfraRN {
77 77 AND at2.id_tarefa = ". ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO) ."
78 78 AND at2.dth_abertura > a.dth_abertura ) ";
79 79  
80   -//die($sql);
  80 + //die($sql);
81 81 $pag = $this->getObjInfraIBanco()->consultarSql($sql);
82 82 $count = $this->getObjInfraIBanco()->consultarSql($sqlCount);
83 83 $total = $count ? $count[0]['total'] : 0;
... ... @@ -88,12 +88,12 @@ class ProcessoExpedidoRN extends InfraRN {
88 88 $objProtocoloDTO->setNumRegistrosPaginaAtual(count($pag));
89 89  
90 90 foreach ($pag as $res) {
91   - $data = new \DateTime($res['dth_abertura']);
  91 + $data = BancoSEI::getInstance()->formatarLeituraDth($res['dth_abertura']);
92 92 $objProcessoExpedidoDTO = new ProcessoExpedidoDTO();
93 93 $objProcessoExpedidoDTO->setDblIdProtocolo($res['id_protocolo']);
94 94 $objProcessoExpedidoDTO->setStrProtocoloFormatado($res['protocolo_formatado']);
95 95 $objProcessoExpedidoDTO->setStrNomeUsuario($res['nome_usuario']);
96   - $objProcessoExpedidoDTO->setDthExpedido($data->format('d/m/Y H:i:s'));
  96 + $objProcessoExpedidoDTO->setDthExpedido($data);
97 97 $objProcessoExpedidoDTO->setStrDestino($res['unidade_destino']);
98 98  
99 99 $arrProcessosExpedidos[] = $objProcessoExpedidoDTO;
... ...
rn/ReceberComponenteDigitalRN.php
... ... @@ -6,7 +6,7 @@ class ReceberComponenteDigitalRN extends InfraRN
6 6 private $objProcessoEletronicoRN;
7 7 private $objInfraParametro;
8 8 private $arrAnexos = array();
9   -
  9 +
10 10 public function __construct()
11 11 {
12 12 parent::__construct();
... ... @@ -18,40 +18,24 @@ class ReceberComponenteDigitalRN extends InfraRN
18 18 public function setArrAnexos($arrAnexos){
19 19 $this->arrAnexos = $arrAnexos;
20 20 }
21   -
  21 +
22 22 public function getArrAnexos(){
23 23 return $this->arrAnexos;
24 24 }
25   -
  25 +
26 26 protected function inicializarObjInfraIBanco()
27 27 {
28 28 return BancoSEI::getInstance();
29 29 }
30 30  
31   - //TODO: Implementar o recebimento fracionado dos componentes digitais
32 31 protected function receberComponenteDigitalConectado(ComponenteDigitalDTO $parObjComponenteDigitalDTO)
33 32 {
  33 +
34 34 if(!isset($parObjComponenteDigitalDTO) || !isset($parObjComponenteDigitalDTO)) {
35 35 throw new InfraException('Parâmetro $parObjComponenteDigitalDTO não informado.');
36 36 }
37 37  
38   - //Obter os dados do componente digital
39   -// $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital(
40   -// $parObjComponenteDigitalDTO->getNumIdTramite(),
41   -// $parObjComponenteDigitalDTO->getStrHashConteudo(),
42   -// $parObjComponenteDigitalDTO->getStrProtocolo());
43   -
44   -// if(!isset($objComponenteDigital) || InfraString::isBolVazia($objComponenteDigital->conteudoDoComponenteDigital)) {
45   -// throw new InfraException("Não foi possível obter informações do componente digital identificado (".$parObjComponenteDigitalDTO->getStrHashConteudo().")");
46   -// }
47   -
48   - //Copiar dados dos componentes digitais para o diretório de upload
49   -// $objAnexoDTO = $this->copiarComponenteDigitalPastaTemporaria($objComponenteDigital);
50   -
51   -
52   -
53 38 $objAnexoDTO = null;
54   -
55 39 foreach($this->arrAnexos as $key => $objAnexo){
56 40 if(array_key_exists($parObjComponenteDigitalDTO->getStrHashConteudo(), $objAnexo) && $objAnexo['recebido'] == false){
57 41 $objAnexoDTO = $objAnexo[$parObjComponenteDigitalDTO->getStrHashConteudo()];
... ... @@ -59,15 +43,15 @@ class ReceberComponenteDigitalRN extends InfraRN
59 43 break;
60 44 }
61 45 }
62   -
  46 +
63 47 if(is_null($objAnexoDTO)){
64   - throw new InfraException('Anexo '.$parObjComponenteDigitalDTO->getStrHashConteudo().' não encontrado'.var_export($this->arrAnexos, true));
  48 + throw new InfraException('Anexo '.$parObjComponenteDigitalDTO->getStrHashConteudo().' não encontrado '.var_export($this->arrAnexos, true));
65 49 }
66   -
  50 +
67 51 //Validar o hash do documento recebido com os dados informados pelo remetente
68 52 //$this->validarIntegridadeDoComponenteDigital($objAnexoDTO, $parObjComponenteDigitalDTO);
69 53  
70   - //Transaferir documentos validados para o repositório final de arquivos
  54 + //Transferir documentos validados para o repositório final de arquivos
71 55 $this->cadastrarComponenteDigital($parObjComponenteDigitalDTO, $objAnexoDTO);
72 56  
73 57 //Registrar anexo relacionado com o componente digital
... ... @@ -80,9 +64,7 @@ class ReceberComponenteDigitalRN extends InfraRN
80 64 $objComponenteDigitalDTO->setNumIdTramite($parObjComponenteDigitalDTO->getNumIdTramite());
81 65 $objComponenteDigitalDTO->setStrNumeroRegistro($parObjComponenteDigitalDTO->getStrNumeroRegistro());
82 66 $objComponenteDigitalDTO->setDblIdDocumento($parObjComponenteDigitalDTO->getDblIdDocumento());
83   -
84 67 $objComponenteDigitalDTO->setNumIdAnexo($parObjAnexoDTO->getNumIdAnexo());
85   -
86 68 $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco());
87 69 $objComponenteDigitalDTO = $objComponenteDigitalBD->alterar($objComponenteDigitalDTO);
88 70 }
... ... @@ -93,12 +75,11 @@ class ReceberComponenteDigitalRN extends InfraRN
93 75 $strNomeArquivoUpload = $objAnexoRN->gerarNomeArquivoTemporario();
94 76 $strConteudoCodificado = $objComponenteDigital->conteudoDoComponenteDigital;
95 77 $strNome = $objComponenteDigital->nome;
96   -
97   -
  78 +
98 79 $fp = fopen(DIR_SEI_TEMP.'/'.$strNomeArquivoUpload,'w');
99 80 fwrite($fp,$strConteudoCodificado);
100 81 fclose($fp);
101   -
  82 +
102 83 //Atribui informações do arquivo anexo
103 84 $objAnexoDTO = new AnexoDTO();
104 85 $objAnexoDTO->setNumIdAnexo($strNomeArquivoUpload);
... ... @@ -119,11 +100,11 @@ class ReceberComponenteDigitalRN extends InfraRN
119 100 $strHashDoArquivo = hash_file("sha256", $strCaminhoAnexo, true);
120 101  
121 102 if(strcmp($strHashInformado, $strHashDoArquivo) != 0) {
122   -
  103 +
123 104 $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, "Hash do componente digital não confere com o valor informado pelo remetente.", ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_CORROMPIDO);
124 105  
125 106 // Adiciono nos detalhes o nome do método para poder manipular o cache
126   - throw new InfraException("Hash do componente digital não confere com o valor informado pelo remetente.", null, __METHOD__);
  107 + throw new InfraException("Hash do componente digital não confere com o valor informado pelo remetente.", null, __METHOD__);
127 108 }
128 109 }
129 110  
... ... @@ -134,10 +115,10 @@ class ReceberComponenteDigitalRN extends InfraRN
134 115 $objDocumentoDTO->retDblIdDocumento();
135 116 $objDocumentoDTO->retDblIdProcedimento();
136 117 $objDocumentoDTO->setDblIdDocumento($parObjComponenteDigitalDTO->getDblIdDocumento());
137   -
  118 +
138 119 $objDocumentoRN = new DocumentoRN();
139 120 $objDocumentoDTO = $objDocumentoRN->consultarRN0005($objDocumentoDTO);
140   -
  121 +
141 122 if ($objDocumentoDTO==null){
142 123 throw new InfraException("Registro não encontrado.");
143 124 }
... ... @@ -149,24 +130,24 @@ class ReceberComponenteDigitalRN extends InfraRN
149 130  
150 131 $objProtocoloRN = new ProtocoloRN();
151 132 $objProtocoloDTO = $objProtocoloRN->consultarRN0186($objProtocoloDTO);
152   -
  133 +
153 134 //Complementa informações do componente digital
154 135 $parObjAnexoDTO->setStrNome($parObjComponenteDigitalDTO->getStrNome());
155   -
  136 +
156 137 $arrStrNome = explode('.',$parObjComponenteDigitalDTO->getStrNome());
157 138 $strProtocoloFormatado = current($arrStrNome);
158   -
  139 +
159 140 $objDocumentoDTO->setObjProtocoloDTO($objProtocoloDTO);
160 141 $objProtocoloDTO->setArrObjAnexoDTO(array($parObjAnexoDTO));
161 142 $objDocumentoDTO = $objDocumentoRN->alterarRN0004($objDocumentoDTO);
162   -
  143 +
163 144 // @join_tec US029 (#3790)
164 145 /*$objObservacaoDTO = new ObservacaoDTO();
165 146 $objObservacaoDTO->setDblIdProtocolo($objProtocoloDTO->getDblIdProtocolo());
166 147 $objObservacaoDTO->setStrDescricao(sprintf('Número SEI do Documento na Origem: %s', $strProtocoloFormatado));
167 148 $objObservacaoDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual());
168   -
  149 +
169 150 $objObservacaoBD = new ObservacaoRN();
170 151 $objObservacaoBD->cadastrarRN0222($objObservacaoDTO);*/
171 152 }
172   -}
173 153 \ No newline at end of file
  154 +}
... ...
rn/ReceberProcedimentoRN.php
... ... @@ -80,209 +80,193 @@ class ReceberProcedimentoRN extends InfraRN
80 80 $objInfraSessao->trocarUnidadeAtual();
81 81 }
82 82  
83   - // TODO: Adicionar comandos de debug. Vide SeiWs.php gerarProcedimento
84   - protected function receberProcedimentoControlado($parNumIdentificacaoTramite)
85   - {
86   -
87   - $objPenParametroRN = new PenParametroRN();
88   - SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO'));
89   -
90   - $objSeiRN = new SeiRN();
91   -
92   - if (!isset($parNumIdentificacaoTramite)) {
93   - throw new InfraException('Parâmetro $parNumIdentificacaoTramite não informado.');
94   - }
95   -
96   - //TODO: Urgente: Verificar o status do trâmite e verificar se ele já foi salvo na base de dados
97   - $objMetadadosProcedimento = $this->objProcessoEletronicoRN->solicitarMetadados($parNumIdentificacaoTramite);
98   -
99   - //!Substituir a unidade destinatária para a receptora (!1!)
100   - if (isset($objMetadadosProcedimento->metadados->unidadeReceptora)) {
101   - $this->destinatarioReal = $objMetadadosProcedimento->metadados->destinatario;
102   - $objMetadadosProcedimento->metadados->destinatario = $objMetadadosProcedimento->metadados->unidadeReceptora;
103   - }
104   -
105   - if (isset($objMetadadosProcedimento)) {
106   -
107   - $strNumeroRegistro = $objMetadadosProcedimento->metadados->NRE;
108   - $objProcesso = $objMetadadosProcedimento->metadados->processo;
109   -
110   - //Verifica se processo já foi registrado para esse trâmite
111   - //TODO: Ajuste para receber corretamente processo em outra unidade do mesmo sistema passando pelo Barramento
112   - //Comentando o trecho abaixo funciona, mas o processo fica aberto na unidade de destino
113   - if($this->tramiteRegistrado($strNumeroRegistro, $parNumIdentificacaoTramite)) {
114   - InfraDebug::getInstance()->gravar("Trâmite $parNumIdentificacaoTramite desconsiderado por já ter sido processado para o processo" . $objProcesso->protocolo);
115   - // return ;
116   - }
117   -
118   - // Validação dos dados do processo recebido
119   - $objInfraException = new InfraException();
120   - $this->validarDadosDestinatario($objInfraException, $objMetadadosProcedimento);
121   - $objInfraException->lancarValidacoes();
122   -
123   - #############################INICIA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################
124   - $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite);
125   - $objTramite = $arrObjTramite[0];
126   -
127   - //Obtém lista de componentes digitais que precisam ser obtidos
128   - if(!is_array($objTramite->componenteDigitalPendenteDeRecebimento)){
129   - $objTramite->componenteDigitalPendenteDeRecebimento = array($objTramite->componenteDigitalPendenteDeRecebimento);
130   - }
131   -
132   - //Faz a validação do tamanho e espécie dos componentes digitais
133   - $this->validarComponentesDigitais($objProcesso, $parNumIdentificacaoTramite);
134   -
135   - //Faz a validação da extensão dos componentes digitais a serem recebidos
136   - $this->validarExtensaoComponentesDigitais($parNumIdentificacaoTramite, $objProcesso);
137   - //Faz a validação das permissões de leitura e escrita
138   - $this->verificarPermissoesDiretorios($parNumIdentificacaoTramite);
139   -
140   - $arrStrNomeDocumento = $this->listarMetaDadosComponentesDigitais($objProcesso);
141   -
142   - //Instancia a RN que faz o recebimento dos componentes digitais
143   - $receberComponenteDigitalRN = new ReceberComponenteDigitalRN();
144   -
145   - //Cria o array que receberá os anexos após os arquivos físicos serem salvos
146   - $arrAnexosComponentes = array();
147   -
148   - //Cria o array com a lista de hash
149   - $arrayHash = array();
150   -
151   - //Percorre os componentes que precisam ser recebidos
152   - foreach($objTramite->componenteDigitalPendenteDeRecebimento as $key => $componentePendente){
153   -
154   - if(!is_null($componentePendente)){
155   -
156   - //Adiciona o hash do componente digital ao array
157   - $arrayHash[] = $componentePendente;
158   -
159   - //Obter os dados do componente digital
160   - $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital($parNumIdentificacaoTramite, $componentePendente, $objTramite->protocolo);
161   - //Copia o componente para a pasta temporária
162   - $arrAnexosComponentes[$key][$componentePendente] = $receberComponenteDigitalRN->copiarComponenteDigitalPastaTemporaria($objComponenteDigital);
163   - $arrAnexosComponentes[$key]['recebido'] = false;
164 83  
165   - //Valida a integridade do hash
166   - $receberComponenteDigitalRN->validarIntegridadeDoComponenteDigital($arrAnexosComponentes[$key][$componentePendente], $componentePendente, $parNumIdentificacaoTramite);
167   - }
168   - }
169   - if(count($arrAnexosComponentes) > 0){
170   -
171   - $receberComponenteDigitalRN->setArrAnexos($arrAnexosComponentes);
172   - }
173   - #############################TERMINA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################
  84 + protected function receberProcedimentoControlado($parNumIdentificacaoTramite)
  85 + {
  86 + try {
  87 + $objPenParametroRN = new PenParametroRN();
  88 + SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO'));
174 89  
175   - $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite);
176   - $objTramite = $arrObjTramite[0];
  90 + $objSeiRN = new SeiRN();
177 91  
178   - //Verifica se o trâmite está recusado
179   - if($objTramite->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO) {
180   - return;
181   - }
  92 + if (!isset($parNumIdentificacaoTramite)) {
  93 + throw new InfraException('Parâmetro $parNumIdentificacaoTramite não informado.');
  94 + }
182 95  
183   - $objProcedimentoDTO = $this->registrarProcesso($strNumeroRegistro, $parNumIdentificacaoTramite, $objProcesso, $objMetadadosProcedimento);
  96 + //TODO: Urgente: Verificar o status do trâmite e verificar se ele já foi salvo na base de dados
  97 + $this->gravarLogDebug("Solicitando metadados do trâmite " . $parNumIdentificacaoTramite, 4);
  98 + $objMetadadosProcedimento = $this->objProcessoEletronicoRN->solicitarMetadados($parNumIdentificacaoTramite);
184 99  
  100 + //Substituir a unidade destinatária para a receptora (!1!)
  101 + if (isset($objMetadadosProcedimento->metadados->unidadeReceptora)) {
  102 + $numUnidadeReceptora = $objMetadadosProcedimento->metadados->unidadeReceptora;
  103 + $this->destinatarioReal = $objMetadadosProcedimento->metadados->destinatario;
  104 + $objMetadadosProcedimento->metadados->destinatario = $numUnidadeReceptora;
  105 + $this->gravarLogDebug("Atribuindo unidade receptora $numUnidadeReceptora para o trâmite $parNumIdentificacaoTramite", 4);
  106 + }
185 107  
  108 + if (isset($objMetadadosProcedimento)) {
  109 + $strNumeroRegistro = $objMetadadosProcedimento->metadados->NRE;
  110 + $objProcesso = $objMetadadosProcedimento->metadados->processo;
186 111  
  112 + //Verifica se processo já foi registrado para esse trâmite
  113 + //TODO: Ajuste para receber corretamente processo em outra unidade do mesmo sistema passando pelo Barramento
  114 + //Comentando o trecho abaixo funciona, mas o processo fica aberto na unidade de destino
  115 + if($this->tramiteRegistrado($strNumeroRegistro, $parNumIdentificacaoTramite)) {
  116 + $this->gravarLogDebug("Trâmite $parNumIdentificacaoTramite já para o processo " . $objProcesso->protocolo, 4);
  117 + // return ;
  118 + }
187 119  
188   - // @join_tec US008.08 (#23092)
189   - $this->objProcedimentoAndamentoRN->setOpts($objProcedimentoDTO->getDblIdProcedimento(), $parNumIdentificacaoTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO));
190   - $this->objProcedimentoAndamentoRN->cadastrar('Obtendo metadados do processo', 'S');
  120 + // Validação dos dados do processo recebido
  121 + $objInfraException = new InfraException();
  122 + $this->validarDadosDestinatario($objInfraException, $objMetadadosProcedimento);
  123 + $objInfraException->lancarValidacoes();
191 124  
192   - //Verificar se procedimento já existia na base de dados do sistema
193   - //$dblIdProcedimento = $this->consultarProcedimentoExistente($strNumeroRegistro, $strProtocolo);
  125 + #############################INICIA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################
  126 + $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite);
  127 + $objTramite = $arrObjTramite[0];
194 128  
195   - //if(isset($dblIdProcedimento)){
196   - //TODO: Tratar situação em que o processo (NUP) já existia na base do sistema mas não havia nenhum NRE registrado para ele
197   - // $objProcedimentoDTO = $this->atualizarProcedimento($dblIdProcedimento, $objMetadadosProcedimento, $objProcesso);
198   - //}
199   - //else {
200   - //TODO: Gerar Procedimento com status BLOQUEADO, aguardando o recebimento dos componentes digitais
201   - // $objProcedimentoDTO = $this->gerarProcedimento($objMetadadosProcedimento, $objProcesso);
202   - //}
  129 + //Obtém lista de componentes digitais que precisam ser obtidos
  130 + $this->gravarLogDebug("Obtém lista de componentes digitais que precisam ser obtidos", 4);
  131 + if(!is_array($objTramite->componenteDigitalPendenteDeRecebimento)){
  132 + $objTramite->componenteDigitalPendenteDeRecebimento = array($objTramite->componenteDigitalPendenteDeRecebimento);
  133 + }
203 134  
204   - //TODO: Fazer o envio de cada um dos procedimentos apensados (Processo principal e seus apensados, caso exista)
205   - //...
206   - //TODO: Parei aqui!!! Recebimento de processos apensados
  135 + $this->validarComponentesDigitais($objProcesso, $parNumIdentificacaoTramite);
  136 + $this->validarExtensaoComponentesDigitais($parNumIdentificacaoTramite, $objProcesso);
  137 + $this->verificarPermissoesDiretorios($parNumIdentificacaoTramite);
207 138  
208   - $objProcessoEletronicoDTO = $this->objProcessoEletronicoRN->cadastrarTramiteDeProcesso($objProcedimentoDTO->getDblIdProcedimento(),
209   - $strNumeroRegistro, $parNumIdentificacaoTramite, null, $objProcesso);
  139 + $this->gravarLogDebug("Obtendo metadados dos componentes digitais do processo", 4);
  140 + $arrStrNomeDocumento = $this->listarMetaDadosComponentesDigitais($objProcesso);
  141 + $receberComponenteDigitalRN = new ReceberComponenteDigitalRN();
  142 + $arrAnexosComponentes = array();
  143 + $arrayHash = array();
  144 + $arrayHashPendentes = array();
210 145  
  146 + //Percorre os componentes que precisam ser recebidos
  147 + foreach($objTramite->componenteDigitalPendenteDeRecebimento as $key => $componentePendente){
211 148  
  149 + if(!is_null($componentePendente)){
212 150  
213   - //TODO: Passar implementação para outra classe de negócio
214   - //Verifica se o tramite se encontra na situação correta
215   - $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite);
216   - if(!isset($arrObjTramite) || count($arrObjTramite) != 1) {
217   - throw new InfraException("Trâmite não pode ser localizado pelo identificado $parNumIdentificacaoTramite.");
218   - }
  151 + if(!$this->documentoJaRegistrado($strNumeroRegistro, $parNumIdentificacaoTramite, $componentePendente)){
  152 + $arrayHashPendentes[] = $componentePendente;
  153 + }
219 154  
  155 + //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
  156 + //Ajuste deverá ser feito em versões futuas
  157 + $arrayHash[] = $componentePendente;
220 158  
221   - $objTramite = $arrObjTramite[0];
  159 + //Obter os dados do componente digital
  160 + $this->gravarLogDebug("Baixando componente digital $key", 6);
  161 + $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital($parNumIdentificacaoTramite, $componentePendente, $objTramite->protocolo);
  162 + $arrAnexosComponentes[$key][$componentePendente] = $receberComponenteDigitalRN->copiarComponenteDigitalPastaTemporaria($objComponenteDigital);
  163 + $arrAnexosComponentes[$key]['recebido'] = false;
222 164  
  165 + //Valida a integridade do hash
  166 + $this->gravarLogDebug("Validando integridade de componente digital $key", 6);
  167 + $receberComponenteDigitalRN->validarIntegridadeDoComponenteDigital($arrAnexosComponentes[$key][$componentePendente], $componentePendente, $parNumIdentificacaoTramite);
  168 + }
  169 + }
223 170  
224   - if($objTramite->situacaoAtual != ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) {
225   - return;
226   - }
  171 + if(count($arrAnexosComponentes) > 0){
  172 + $receberComponenteDigitalRN->setArrAnexos($arrAnexosComponentes);
  173 + }
  174 + #############################TERMINA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################
227 175  
  176 + $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite);
  177 + $objTramite = $arrObjTramite[0];
228 178  
229   - // throw new InfraException("COMPONENTES DIGITAIS A SEREM ANEXADOS: ".var_export($arrayHash, true));
230   - if(count($arrayHash) > 0){
  179 + //Verifica se o trâmite está recusado
  180 + if($objTramite->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO) {
  181 + $this->gravarLogDebug("Trâmite $parNumIdentificacaoTramite já se encontra recusado. Cancelando o recebimento do processo", 4);
  182 + return;
  183 + }
231 184  
232   - //Obter dados dos componetes digitais
233   - $objComponenteDigitalDTO = new ComponenteDigitalDTO();
234   - $objComponenteDigitalDTO->setStrNumeroRegistro($strNumeroRegistro);
235   - $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite);
236   - $objComponenteDigitalDTO->setStrHashConteudo($arrayHash, InfraDTO::$OPER_IN);
237   - $objComponenteDigitalDTO->setOrdNumOrdem(InfraDTO::$TIPO_ORDENACAO_ASC);
238   - $objComponenteDigitalDTO->retDblIdDocumento();
239   - $objComponenteDigitalDTO->retNumTicketEnvioComponentes();
240   - // $objComponenteDigitalDTO->retStrConteudoAssinaturaDocumento();
241   - $objComponenteDigitalDTO->retStrProtocoloDocumentoFormatado();
242   - $objComponenteDigitalDTO->retStrHashConteudo();
243   - $objComponenteDigitalDTO->retStrProtocolo();
244   - $objComponenteDigitalDTO->retStrNumeroRegistro();
245   - $objComponenteDigitalDTO->retNumIdTramite();
246   - $objComponenteDigitalDTO->retStrNome();
247   - $objComponenteDigitalDTO->retStrStaEstadoProtocolo();
  185 + $this->gravarLogDebug("Persistindo/atualizando dados do processo com NRE " . $strNumeroRegistro, 4);
  186 + $objProcedimentoDTO = $this->registrarProcesso($strNumeroRegistro, $parNumIdentificacaoTramite, $objProcesso, $objMetadadosProcedimento);
248 187  
249   - $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco());
250   - $arrObjComponentesDigitaisDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO);
251 188  
252   - // throw new InfraException('Componentes encontrados: '.var_export($arrObjComponentesDigitaisDTO, true));
  189 + // @join_tec US008.08 (#23092)
  190 + $this->objProcedimentoAndamentoRN->setOpts($objProcedimentoDTO->getDblIdProcedimento(), $parNumIdentificacaoTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO));
  191 + $this->objProcedimentoAndamentoRN->cadastrar('Obtendo metadados do processo', 'S');
253 192  
254   - if ($objComponenteDigitalBD->contar($objComponenteDigitalDTO) > 0) {
255 193  
256   - $objReceberComponenteDigitalRN = $receberComponenteDigitalRN;
  194 + $this->gravarLogDebug("Registrando trâmite externo do processo", 4);
  195 + $objProcessoEletronicoDTO = $this->objProcessoEletronicoRN->cadastrarTramiteDeProcesso($objProcedimentoDTO->getDblIdProcedimento(),
  196 + $strNumeroRegistro, $parNumIdentificacaoTramite, null, $objProcesso);
257 197  
258   - foreach($arrObjComponentesDigitaisDTO as $objComponenteDigitalDTOEnviado) {
259   - if($objComponenteDigitalDTOEnviado->getStrStaEstadoProtocolo() != ProtocoloRN::$TE_DOCUMENTO_CANCELADO){
260   - $strHash = $objComponenteDigitalDTOEnviado->getStrHashConteudo();
261   - $strNomeDocumento = (array_key_exists($strHash, $arrStrNomeDocumento)) ? $arrStrNomeDocumento[$strHash]['especieNome'] : '[Desconhecido]';
  198 + //Verifica se o tramite se encontra na situação correta
  199 + $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite);
  200 + if(!isset($arrObjTramite) || count($arrObjTramite) != 1) {
  201 + throw new InfraException("Trâmite não pode ser localizado pelo identificado $parNumIdentificacaoTramite.");
  202 + }
262 203  
263   - $objReceberComponenteDigitalRN->receberComponenteDigital($objComponenteDigitalDTOEnviado);
264 204  
265   - // @join_tec US008.09 (#23092)
266   - $this->objProcedimentoAndamentoRN->cadastrar(sprintf('Recebendo %s %s', $strNomeDocumento, $objComponenteDigitalDTOEnviado->getStrProtocoloDocumentoFormatado()), 'S');
267   - }
  205 + $objTramite = $arrObjTramite[0];
  206 + if($objTramite->situacaoAtual != ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) {
  207 + $this->gravarLogDebug("Desconsiderando recebimento do processo devido a situação de trâmite inconsistente: " . $objTramite->situacaoAtual, 4);
  208 + return;
  209 + }
268 210  
  211 + if(count($arrayHashPendentes) > 0){
  212 + //Obter dados dos componetes digitais
  213 + $this->gravarLogDebug("Iniciando o recebimento dos componentes digitais pendentes", 4);
  214 + $objComponenteDigitalDTO = new ComponenteDigitalDTO();
  215 + $objComponenteDigitalDTO->setStrNumeroRegistro($strNumeroRegistro);
  216 + $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite);
  217 + $objComponenteDigitalDTO->setStrHashConteudo($arrayHash, InfraDTO::$OPER_IN);
  218 + $objComponenteDigitalDTO->setOrdNumOrdem(InfraDTO::$TIPO_ORDENACAO_ASC);
  219 + $objComponenteDigitalDTO->retDblIdDocumento();
  220 + $objComponenteDigitalDTO->retNumTicketEnvioComponentes();
  221 + $objComponenteDigitalDTO->retStrProtocoloDocumentoFormatado();
  222 + $objComponenteDigitalDTO->retStrHashConteudo();
  223 + $objComponenteDigitalDTO->retStrProtocolo();
  224 + $objComponenteDigitalDTO->retStrNumeroRegistro();
  225 + $objComponenteDigitalDTO->retNumIdTramite();
  226 + $objComponenteDigitalDTO->retStrNome();
  227 + $objComponenteDigitalDTO->retStrStaEstadoProtocolo();
  228 +
  229 + $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco());
  230 + $arrObjComponentesDigitaisDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO);
  231 +
  232 + if ($objComponenteDigitalBD->contar($objComponenteDigitalDTO) > 0) {
  233 + $objReceberComponenteDigitalRN = $receberComponenteDigitalRN;
  234 + foreach($arrObjComponentesDigitaisDTO as $objComponenteDigitalDTOEnviado) {
  235 + if($objComponenteDigitalDTOEnviado->getStrStaEstadoProtocolo() != ProtocoloRN::$TE_DOCUMENTO_CANCELADO){
  236 + $strHash = $objComponenteDigitalDTOEnviado->getStrHashConteudo();
  237 + $strNomeDocumento = (array_key_exists($strHash, $arrStrNomeDocumento)) ? $arrStrNomeDocumento[$strHash]['especieNome'] : '[Desconhecido]';
  238 + $objReceberComponenteDigitalRN->receberComponenteDigital($objComponenteDigitalDTOEnviado);
  239 +
  240 + // @join_tec US008.09 (#23092)
  241 + $strMensagemRecebimento = sprintf('Recebendo %s %s', $strNomeDocumento, $objComponenteDigitalDTOEnviado->getStrProtocoloDocumentoFormatado());
  242 + $this->objProcedimentoAndamentoRN->cadastrar($strMensagemRecebimento, 'S');
  243 + $this->gravarLogDebug($strMensagemRecebimento, 6);
  244 + }
  245 + }
  246 + // @join_tec US008.10 (#23092)
  247 + $this->objProcedimentoAndamentoRN->cadastrar('Todos os componentes digitais foram recebidos', 'S');
  248 +
  249 + }else{
  250 + $this->objProcedimentoAndamentoRN->cadastrar('Nenhum componente digital para receber', 'S');
  251 + }
269 252 }
270   - // @join_tec US008.10 (#23092)
271   - $this->objProcedimentoAndamentoRN->cadastrar('Todos os componentes digitais foram recebidos', 'S');
272   -
273   - }else{
274   - $this->objProcedimentoAndamentoRN->cadastrar('Nenhum componente digital para receber', 'S');
275 253 }
276   - }
  254 + //$this->fecharProcedimentoEmOutraUnidades($objProcedimentoDTO, $objMetadadosProcedimento);
  255 + $this->gravarLogDebug("Enviando recibo de conclusão do trâmite $parNumIdentificacaoTramite", 6);
  256 + $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN();
  257 + $objEnviarReciboTramiteRN->enviarReciboTramiteProcesso($parNumIdentificacaoTramite, $arrayHash);
  258 +
  259 + $this->gravarLogDebug("Registrando a conclusão do recebimento do trâmite $parNumIdentificacaoTramite", 6);
  260 + $objPenTramiteProcessadoRN = new PenTramiteProcessadoRN(PenTramiteProcessadoRN::STR_TIPO_PROCESSO);
  261 + $objPenTramiteProcessadoRN->setRecebido($parNumIdentificacaoTramite);
  262 +
  263 + } catch (Exception $e) {
  264 + $mensagemErro = InfraException::inspecionar($e);
  265 + $this->gravarLogDebug($mensagemErro);
  266 + LogSEI::getInstance()->gravar($mensagemErro);
  267 + throw $e;
  268 + }
277 269 }
278   - //$this->fecharProcedimentoEmOutraUnidades($objProcedimentoDTO, $objMetadadosProcedimento);
279   -
280   - $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN();
281   - $objEnviarReciboTramiteRN->enviarReciboTramiteProcesso($parNumIdentificacaoTramite, $arrayHash);
282   -
283   - $objPenTramiteProcessadoRN = new PenTramiteProcessadoRN(PenTramiteProcessadoRN::STR_TIPO_PROCESSO);
284   - $objPenTramiteProcessadoRN->setRecebido($parNumIdentificacaoTramite);
285   - }
286 270  
287 271 /**
288 272 * Retorna um array com alguns metadados, onde o indice de é o hash do arquivo
... ... @@ -376,8 +360,6 @@ class ReceberProcedimentoRN extends InfraRN
376 360  
377 361 private function registrarProcesso($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjMetadadosProcedimento)
378 362 {
379   -
380   -
381 363 // Validação dos dados do processo recebido
382 364 $objInfraException = new InfraException();
383 365 $this->validarDadosProcesso($objInfraException, $parObjProcesso);
... ... @@ -392,13 +374,9 @@ class ReceberProcedimentoRN extends InfraRN
392 374 $dblIdProcedimento = $this->consultarProcedimentoExistente($parStrNumeroRegistro, $parObjProcesso->protocolo);
393 375  
394 376 if(isset($dblIdProcedimento)){
395   -
396   - //TODO: Tratar situação em que o processo (NUP) já existia na base do sistema mas não havia nenhum NRE registrado para ele
397 377 $objProcedimentoDTO = $this->atualizarProcedimento($dblIdProcedimento, $parObjMetadadosProcedimento, $parObjProcesso);
398 378 }
399 379 else {
400   -
401   - //TODO: Gerar Procedimento com status BLOQUEADO, aguardando o recebimento dos componentes digitais
402 380 $objProcedimentoDTO = $this->gerarProcedimento($parObjMetadadosProcedimento, $parObjProcesso);
403 381 }
404 382  
... ... @@ -419,7 +397,8 @@ class ReceberProcedimentoRN extends InfraRN
419 397 return $objProcedimentoDTO;
420 398 }
421 399  
422   - private function tramiteRegistrado($parStrNumeroRegistro, $parNumIdentificacaoTramite) {
  400 + private function tramiteRegistrado($parStrNumeroRegistro, $parNumIdentificacaoTramite)
  401 + {
423 402  
424 403 $objTramiteDTO = new TramiteDTO();
425 404 $objTramiteDTO->setStrNumeroRegistro($parStrNumeroRegistro);
... ... @@ -429,6 +408,29 @@ class ReceberProcedimentoRN extends InfraRN
429 408 return $objTramiteBD->contar($objTramiteDTO) > 0;
430 409 }
431 410  
  411 +
  412 + private function documentoJaRegistrado($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parStrHashComponenteDigital)
  413 + {
  414 + //Verifica se componente digital já está registrado para o documento
  415 + $objComponenteDigitalDTO = new ComponenteDigitalDTO();
  416 + $objComponenteDigitalDTO->setStrNumeroRegistro($parStrNumeroRegistro);
  417 + $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite);
  418 + $objComponenteDigitalDTO->setStrHashConteudo($parStrHashComponenteDigital);
  419 + // $objComponenteDigitalDTO->retDblIdDocumento();
  420 + // $objComponenteDigitalDTO->retNumTicketEnvioComponentes();
  421 + // $objComponenteDigitalDTO->retStrProtocoloDocumentoFormatado();
  422 + // $objComponenteDigitalDTO->retStrHashConteudo();
  423 + // $objComponenteDigitalDTO->retStrProtocolo();
  424 + // $objComponenteDigitalDTO->retStrNumeroRegistro();
  425 + // $objComponenteDigitalDTO->retNumIdTramite();
  426 + // $objComponenteDigitalDTO->retStrNome();
  427 + // $objComponenteDigitalDTO->retStrStaEstadoProtocolo();
  428 +
  429 + $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco());
  430 + return $objComponenteDigitalBD->contar($objComponenteDigitalDTO) > 0;
  431 + }
  432 +
  433 +
432 434 private function consultarProcedimentoExistente($parStrNumeroRegistro, $parStrProtocolo = null) {
433 435  
434 436 $dblIdProcedimento = null;
... ... @@ -448,8 +450,8 @@ class ReceberProcedimentoRN extends InfraRN
448 450 return $dblIdProcedimento;
449 451 }
450 452  
451   - private function atualizarProcedimento($parDblIdProcedimento, $objMetadadosProcedimento, $objProcesso){
452   -
  453 + private function atualizarProcedimento($parDblIdProcedimento, $objMetadadosProcedimento, $objProcesso)
  454 + {
453 455  
454 456 if(!isset($parDblIdProcedimento)){
455 457 throw new InfraException('Parâmetro $parDblIdProcedimento não informado.');
... ... @@ -1683,102 +1685,117 @@ class ReceberProcedimentoRN extends InfraRN
1683 1685 }
1684 1686  
1685 1687  
1686   - public function receberTramitesRecusados($parNumIdentificacaoTramite) {
1687   -
1688   - if (empty($parNumIdentificacaoTramite)) {
1689   - throw new InfraException('Parâmetro $parNumIdentificacaoTramite não informado.');
1690   - }
1691   -
1692   - //Busca os dados do trâmite no barramento
1693   - $tramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite);
1694   -
1695   - if(!isset($tramite[0])){
1696   - throw new InfraException("Não foi encontrado no PEN o trâmite de número {$parNumIdentificacaoTramite} para realizar a ciência da recusa");
1697   - }
  1688 + public function receberTramitesRecusados($parNumIdentificacaoTramite)
  1689 + {
  1690 + try {
  1691 + if (empty($parNumIdentificacaoTramite)) {
  1692 + throw new InfraException('Parâmetro $parNumIdentificacaoTramite não informado.');
  1693 + }
1698 1694  
1699   - $tramite = $tramite[0];
  1695 + //Busca os dados do trâmite no barramento
  1696 + $tramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite);
1700 1697  
1701   - $objTramiteDTO = new TramiteDTO();
1702   - $objTramiteDTO->setNumIdTramite($parNumIdentificacaoTramite);
1703   - $objTramiteDTO->retNumIdUnidade();
  1698 + if(!isset($tramite[0])){
  1699 + throw new InfraException("Não foi encontrado no PEN o trâmite de número {$parNumIdentificacaoTramite} para realizar a ciência da recusa");
  1700 + }
1704 1701  
1705   - $objTramiteBD = new TramiteBD(BancoSEI::getInstance());
1706   - $objTramiteDTO = $objTramiteBD->consultar($objTramiteDTO);
  1702 + $tramite = $tramite[0];
1707 1703  
1708   - if(!isset($objTramiteDTO)){
1709   - throw new InfraException("Não foi encontrado no sistema o trâmite de número {$parNumIdentificacaoTramite} para realizar a ciência da recusa");
1710   - }
  1704 + $objTramiteDTO = new TramiteDTO();
  1705 + $objTramiteDTO->setNumIdTramite($parNumIdentificacaoTramite);
  1706 + $objTramiteDTO->retNumIdUnidade();
1711 1707  
1712   - SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objTramiteDTO->getNumIdUnidade());
  1708 + $objTramiteBD = new TramiteBD(BancoSEI::getInstance());
  1709 + $objTramiteDTO = $objTramiteBD->consultar($objTramiteDTO);
1713 1710  
1714   - //Busca os dados do procedimento
1715   - $objProcessoEletronicoDTO = new ProcessoEletronicoDTO();
1716   - $objProcessoEletronicoDTO->setStrNumeroRegistro($tramite->NRE);
1717   - $objProcessoEletronicoDTO->retDblIdProcedimento();
  1711 + if(!isset($objTramiteDTO)){
  1712 + throw new InfraException("Não foi encontrado no sistema o trâmite de número {$parNumIdentificacaoTramite} para realizar a ciência da recusa");
  1713 + }
1718 1714  
1719   - $objProcessoEletronicoBD = new ProcessoEletronicoBD($this->getObjInfraIBanco());
1720   - $objProcessoEletronicoDTO = $objProcessoEletronicoBD->consultar($objProcessoEletronicoDTO);
  1715 + SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objTramiteDTO->getNumIdUnidade());
1721 1716  
1722   - //Busca a última atividade de trâmite externo
1723   - $objAtividadeDTO = new AtividadeDTO();
1724   - $objAtividadeDTO->setDblIdProtocolo($objProcessoEletronicoDTO->getDblIdProcedimento());
1725   - $objAtividadeDTO->setNumIdTarefa(ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO));
1726   - $objAtividadeDTO->setNumMaxRegistrosRetorno(1);
1727   - $objAtividadeDTO->setOrdDthAbertura(InfraDTO::$TIPO_ORDENACAO_DESC);
1728   - $objAtividadeDTO->retNumIdAtividade();
  1717 + //Busca os dados do procedimento
  1718 + $this->gravarLogDebug("Buscando os dados de procedimento com NRE " . $tramite->NRE, 2);
  1719 + $objProcessoEletronicoDTO = new ProcessoEletronicoDTO();
  1720 + $objProcessoEletronicoDTO->setStrNumeroRegistro($tramite->NRE);
  1721 + $objProcessoEletronicoDTO->retDblIdProcedimento();
  1722 + $objProcessoEletronicoBD = new ProcessoEletronicoBD($this->getObjInfraIBanco());
  1723 + $objProcessoEletronicoDTO = $objProcessoEletronicoBD->consultar($objProcessoEletronicoDTO);
1729 1724  
1730   - //TODO: Necessário refatoração para chamada da casse AtividadeRN, e não a classe AtividadeBD com risco de quebra de regas internas do sistema
1731   - $objAtividadeBD = new AtividadeBD($this->getObjInfraIBanco());
1732   - $objAtividadeDTO = $objAtividadeBD->consultar($objAtividadeDTO);
1733   -
1734   - //Busca a unidade de destino
1735   - $objAtributoAndamentoDTO = new AtributoAndamentoDTO();
1736   - $objAtributoAndamentoDTO->setNumIdAtividade($objAtividadeDTO->getNumIdAtividade());
1737   - $objAtributoAndamentoDTO->setStrNome('UNIDADE_DESTINO');
1738   - $objAtributoAndamentoDTO->retStrValor();
1739   -
1740   - $objAtributoAndamentoBD = new AtributoAndamentoBD($this->getObjInfraIBanco());
1741   - $objAtributoAndamentoDTO = $objAtributoAndamentoBD->consultar($objAtributoAndamentoDTO);
1742   -
1743   - //Monta o DTO de receber tramite recusado
1744   - $objReceberTramiteRecusadoDTO = new ReceberTramiteRecusadoDTO();
1745   - $objReceberTramiteRecusadoDTO->setNumIdTramite($parNumIdentificacaoTramite);
1746   - $objReceberTramiteRecusadoDTO->setNumIdProtocolo($objProcessoEletronicoDTO->getDblIdProcedimento());
1747   - $objReceberTramiteRecusadoDTO->setNumIdUnidadeOrigem(null);
1748   - $objReceberTramiteRecusadoDTO->setNumIdTarefa(ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_RECUSADO));
1749   - $objReceberTramiteRecusadoDTO->setStrMotivoRecusa(utf8_decode($tramite->justificativaDaRecusa));
1750   - $objReceberTramiteRecusadoDTO->setStrNomeUnidadeDestino($objAtributoAndamentoDTO->getStrValor());
1751   -
1752   - //Faz o tratamento do processo e do trâmite recusado
1753   - $this->receberTramiteRecusadoInterno($objReceberTramiteRecusadoDTO);
  1725 + //Busca a última atividade de trâmite externo
  1726 + $this->gravarLogDebug("Buscando última atividade de trâmite externo do processo " . $objProcessoEletronicoDTO->getDblIdProcedimento(), 2);
  1727 + $objAtividadeDTO = new AtividadeDTO();
  1728 + $objAtividadeDTO->setDblIdProtocolo($objProcessoEletronicoDTO->getDblIdProcedimento());
  1729 + $objAtividadeDTO->setNumIdTarefa(ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO));
  1730 + $objAtividadeDTO->setNumMaxRegistrosRetorno(1);
  1731 + $objAtividadeDTO->setOrdDthAbertura(InfraDTO::$TIPO_ORDENACAO_DESC);
  1732 + $objAtividadeDTO->retNumIdAtividade();
  1733 + $objAtividadeBD = new AtividadeBD($this->getObjInfraIBanco());
  1734 + $objAtividadeDTO = $objAtividadeBD->consultar($objAtividadeDTO);
  1735 +
  1736 + //Busca a unidade de destino
  1737 + $this->gravarLogDebug("Buscando informações sobre a unidade de destino", 2);
  1738 + $objAtributoAndamentoDTO = new AtributoAndamentoDTO();
  1739 + $objAtributoAndamentoDTO->setNumIdAtividade($objAtividadeDTO->getNumIdAtividade());
  1740 + $objAtributoAndamentoDTO->setStrNome('UNIDADE_DESTINO');
  1741 + $objAtributoAndamentoDTO->retStrValor();
  1742 + $objAtributoAndamentoBD = new AtributoAndamentoBD($this->getObjInfraIBanco());
  1743 + $objAtributoAndamentoDTO = $objAtributoAndamentoBD->consultar($objAtributoAndamentoDTO);
  1744 +
  1745 + //Monta o DTO de receber tramite recusado
  1746 + $this->gravarLogDebug("Preparando recebimento de trâmite " . $parNumIdentificacaoTramite . " recusado", 2);
  1747 + $objReceberTramiteRecusadoDTO = new ReceberTramiteRecusadoDTO();
  1748 + $objReceberTramiteRecusadoDTO->setNumIdTramite($parNumIdentificacaoTramite);
  1749 + $objReceberTramiteRecusadoDTO->setNumIdProtocolo($objProcessoEletronicoDTO->getDblIdProcedimento());
  1750 + $objReceberTramiteRecusadoDTO->setNumIdUnidadeOrigem(null);
  1751 + $objReceberTramiteRecusadoDTO->setNumIdTarefa(ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_RECUSADO));
  1752 + $objReceberTramiteRecusadoDTO->setStrMotivoRecusa(utf8_decode($tramite->justificativaDaRecusa));
  1753 + $objReceberTramiteRecusadoDTO->setStrNomeUnidadeDestino($objAtributoAndamentoDTO->getStrValor());
  1754 +
  1755 + //Faz o tratamento do processo e do trâmite recusado
  1756 + $this->gravarLogDebug("Atualizando dados do processo " . $objProcessoEletronicoDTO->getDblIdProcedimento() ." e do trâmite recusado " . $parNumIdentificacaoTramite, 2);
  1757 + $this->receberTramiteRecusadoInterno($objReceberTramiteRecusadoDTO);
  1758 +
  1759 + } catch (Exception $e) {
  1760 + $mensagemErro = InfraException::inspecionar($e);
  1761 + $this->gravarLogDebug($mensagemErro);
  1762 + LogSEI::getInstance()->gravar($mensagemErro);
  1763 + throw $e;
  1764 + }
1754 1765 }
1755 1766  
1756   - protected function receberTramiteRecusadoInternoControlado(ReceberTramiteRecusadoDTO $objReceberTramiteRecusadoDTO){
1757   -
  1767 + protected function receberTramiteRecusadoInternoControlado(ReceberTramiteRecusadoDTO $objReceberTramiteRecusadoDTO)
  1768 + {
1758 1769 //Realiza o desbloqueio do processo
1759   - $objEntradaDesbloquearProcessoAPI = new EntradaDesbloquearProcessoAPI();
1760   - $objEntradaDesbloquearProcessoAPI->setIdProcedimento($objReceberTramiteRecusadoDTO->getNumIdProtocolo());
1761   -
1762   - $objSeiRN = new SeiRN();
1763   - $objSeiRN->desbloquearProcesso($objEntradaDesbloquearProcessoAPI);
  1770 + $this->gravarLogDebug("Realizando o desbloqueio do processo", 4);
  1771 + $objProtocoloDTO = new ProtocoloDTO();
  1772 + $objProtocoloDTO->setDblIdProtocolo($objReceberTramiteRecusadoDTO->getNumIdProtocolo());
  1773 + $objProtocoloDTO->setStrStaEstado(ProtocoloRN::$TE_PROCEDIMENTO_BLOQUEADO);
  1774 + $objProtocoloRN = new ProtocoloRN();
  1775 + if($objProtocoloRN->contarRN0667($objProtocoloDTO) != 0) {
  1776 + $objEntradaDesbloquearProcessoAPI = new EntradaDesbloquearProcessoAPI();
  1777 + $objEntradaDesbloquearProcessoAPI->setIdProcedimento($objReceberTramiteRecusadoDTO->getNumIdProtocolo());
  1778 + $objSeiRN = new SeiRN();
  1779 + $objSeiRN->desbloquearProcesso($objEntradaDesbloquearProcessoAPI);
  1780 + } else {
  1781 + $this->gravarLogDebug("Processo " . $objReceberTramiteRecusadoDTO->getNumIdProtocolo() . " já se encontra desbloqueado!", 6);
  1782 + }
1764 1783  
1765 1784 //Adiciona um andamento para o trâmite recusado
  1785 + $this->gravarLogDebug("Adicionando andamento para registro da recusa do trâmite", 4);
1766 1786 $arrObjAtributoAndamentoDTO = array();
1767   -
1768 1787 $objAtributoAndamentoDTO = new AtributoAndamentoDTO();
1769 1788 $objAtributoAndamentoDTO->setStrNome('MOTIVO');
1770 1789 $objAtributoAndamentoDTO->setStrValor($objReceberTramiteRecusadoDTO->getStrMotivoRecusa());
1771 1790 $objAtributoAndamentoDTO->setStrIdOrigem($objReceberTramiteRecusadoDTO->getNumIdUnidadeOrigem());
1772 1791 $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO;
1773 1792  
1774   -
1775 1793 $objAtributoAndamentoDTO = new AtributoAndamentoDTO();
1776 1794 $objAtributoAndamentoDTO->setStrNome('UNIDADE_DESTINO');
1777 1795 $objAtributoAndamentoDTO->setStrValor($objReceberTramiteRecusadoDTO->getStrNomeUnidadeDestino());
1778 1796 $objAtributoAndamentoDTO->setStrIdOrigem($objReceberTramiteRecusadoDTO->getNumIdUnidadeOrigem());
1779 1797 $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO;
1780 1798  
1781   -
1782 1799 $objAtividadeDTO = new AtividadeDTO();
1783 1800 $objAtividadeDTO->setDblIdProtocolo($objReceberTramiteRecusadoDTO->getNumIdProtocolo());
1784 1801 $objAtividadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual());
... ... @@ -1789,21 +1806,18 @@ class ReceberProcedimentoRN extends InfraRN
1789 1806 $objAtividadeRN->gerarInternaRN0727($objAtividadeDTO);
1790 1807  
1791 1808 //Sinaliza na PenProtocolo que o processo obteve recusa
  1809 + $this->gravarLogDebug("Atualizando protocolo sobre obtenção da ciência de recusa", 4);
1792 1810 $objProtocolo = new PenProtocoloDTO();
1793 1811 $objProtocolo->setDblIdProtocolo($objReceberTramiteRecusadoDTO->getNumIdProtocolo());
1794 1812 $objProtocolo->setStrSinObteveRecusa('S');
1795   -
1796 1813 $objProtocoloBD = new ProtocoloBD($this->getObjInfraIBanco());
1797 1814 $objProtocoloBD->alterar($objProtocolo);
1798 1815  
1799   -
  1816 + $this->gravarLogDebug("Notificando serviços do PEN sobre ciência da recusa do trâmite " . $objReceberTramiteRecusadoDTO->getNumIdTramite(), 4);
1800 1817 $this->objProcessoEletronicoRN->cienciaRecusa($objReceberTramiteRecusadoDTO->getNumIdTramite());
1801   -
1802   -
1803 1818 }
1804 1819  
1805 1820  
1806   -
1807 1821 /**
1808 1822 * Método que realiza a validação da extensão dos componentes digitais a serem recebidos
1809 1823 *
... ... @@ -1867,7 +1881,13 @@ class ReceberProcedimentoRN extends InfraRN
1867 1881 throw new InfraException('O sistema não possui permissão de escrita no diretório de armazenamento de arquivos temporários do sistema.');
1868 1882  
1869 1883 }
  1884 + }
1870 1885  
1871   -
  1886 + private function gravarLogDebug($strMensagem, $numIdentacao=0)
  1887 + {
  1888 + $strDataLog = date("d/m/Y H:i:s");
  1889 + $strLog = sprintf("[%s] [PROCESSAMENTO] %s %s", $strDataLog, str_repeat(" ", $numIdentacao * 4), $strMensagem);
  1890 + InfraDebug::getInstance()->gravar($strLog);
1872 1891 }
  1892 +
1873 1893 }
... ...
rn/ReceberReciboTramiteRN.php
... ... @@ -20,14 +20,21 @@ class ReceberReciboTramiteRN extends InfraRN
20 20 return BancoSEI::getInstance();
21 21 }
22 22  
23   - protected function registrarRecebimentoRecibo($numIdProcedimento, $strProtocoloFormatado, $numIdTramite) {
24   -
  23 + protected function registrarRecebimentoRecibo($numIdProcedimento, $strProtocoloFormatado, $numIdTramite)
  24 + {
25 25 //REALIZA A CONCLUSÃO DO PROCESSO
26 26 $objEntradaConcluirProcessoAPI = new EntradaConcluirProcessoAPI();
27 27 $objEntradaConcluirProcessoAPI->setIdProcedimento($numIdProcedimento);
28 28  
29 29 $objSeiRN = new SeiRN();
30   - $objSeiRN->concluirProcesso($objEntradaConcluirProcessoAPI);
  30 + try {
  31 + $objSeiRN->concluirProcesso($objEntradaConcluirProcessoAPI);
  32 + } catch (Exception $e) {
  33 + //Registra falha em log de debug mas não gera rollback na transação.
  34 + //O rollback da transação poderia deixar a situação do processo inconsistênte já que o Barramento registrou anteriormente que o
  35 + //recibo já havia sido obtido. O erro no fechamento não provoca impacto no andamento do processo
  36 + InfraDebug::getInstance()->gravar("Processo $strProtocoloFormatado não está aberto na unidade.");
  37 + }
31 38  
32 39 $arrObjAtributoAndamentoDTO = array();
33 40  
... ... @@ -90,6 +97,7 @@ class ReceberReciboTramiteRN extends InfraRN
90 97 }
91 98  
92 99 $objRepositorioDTO = $this->objProcessoEletronicoRN->consultarRepositoriosDeEstruturas($objTramite->destinatario->identificacaoDoRepositorioDeEstruturas);
  100 +
93 101 if(!empty($objRepositorioDTO)) {
94 102  
95 103 $objAtributoAndamentoDTO = new AtributoAndamentoDTO();
... ... @@ -108,11 +116,11 @@ class ReceberReciboTramiteRN extends InfraRN
108 116  
109 117 $objAtividadeRN = new AtividadeRN();
110 118 $objAtividadeRN->gerarInternaRN0727($objAtividadeDTO);
111   - }
112   -
113   - protected function receberReciboDeTramiteConectado($parNumIdTramite) {
114 119  
  120 + }
115 121  
  122 + protected function receberReciboDeTramiteControlado($parNumIdTramite)
  123 + {
116 124 if (!isset($parNumIdTramite)) {
117 125 throw new InfraException('Parâmetro $parNumIdTramite não informado.');
118 126 }
... ... @@ -142,6 +150,7 @@ class ReceberReciboTramiteRN extends InfraRN
142 150  
143 151 if ($objTramiteBD->contar($objTramiteDTO) > 0) {
144 152  
  153 +
145 154 $objTramiteDTO = $objTramiteBD->consultar($objTramiteDTO);
146 155 SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objTramiteDTO->getNumIdUnidade());
147 156  
... ... @@ -151,13 +160,10 @@ class ReceberReciboTramiteRN extends InfraRN
151 160  
152 161 $objReciboTramiteBD = new ReciboTramiteBD(BancoSEI::getInstance());
153 162 if ($objReciboTramiteBD->contar($objReciboTramiteDTOExistente) == 0) {
154   -
155 163 //Armazenar dados do recibo de conclusão do trãmite
156 164 $objReciboTramiteBD->cadastrar($objReciboTramiteDTO);
157   -
158 165 if ($objReciboTramite->recibo->hashDoComponenteDigital && is_array($objReciboTramite->recibo->hashDoComponenteDigital)) {
159 166 foreach ($objReciboTramite->recibo->hashDoComponenteDigital as $strHashComponenteDigital) {
160   -
161 167 $objReciboTramiteHashDTO = new ReciboTramiteHashDTO();
162 168 $objReciboTramiteHashDTO->setStrNumeroRegistro($objReciboTramite->recibo->NRE);
163 169 $objReciboTramiteHashDTO->setNumIdTramite($objReciboTramite->recibo->IDT);
... ... @@ -168,7 +174,6 @@ class ReceberReciboTramiteRN extends InfraRN
168 174 $objGenericoBD->cadastrar($objReciboTramiteHashDTO);
169 175 }
170 176 }
171   -
172 177 //ALTERA O ESTADO DO PROCEDIMENTO
173 178 try {
174 179  
... ... @@ -198,10 +203,8 @@ class ReceberReciboTramiteRN extends InfraRN
198 203  
199 204 $this->objProcedimentoAndamentoRN->setOpts($objProcessoEletronicoDTO->getDblIdProcedimento(), $parNumIdTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO));
200 205 $this->objProcedimentoAndamentoRN->cadastrar(sprintf('Trâmite do processo %s foi concluído', $objProtocoloDTO->getStrProtocoloFormatado()), 'S');
201   -
202 206 //Registra o recbimento do recibo no histórico e realiza a conclusão do processo
203 207 $this->registrarRecebimentoRecibo($objProtocoloDTO->getDblIdProtocolo(), $objProtocoloDTO->getStrProtocoloFormatado(), $parNumIdTramite);
204   -
205 208 $objPenTramiteProcessadoRN = new PenTramiteProcessadoRN(PenTramiteProcessadoRN::STR_TIPO_RECIBO);
206 209 $objPenTramiteProcessadoRN->setRecebido($parNumIdTramite);
207 210  
... ...