From dc14e6943d0d1034fd177ea0e08ba1e5e1ebf97b Mon Sep 17 00:00:00 2001 From: andre guimaraes Date: Mon, 30 Oct 2017 10:46:19 +0000 Subject: [PATCH] Melhorias no tratamento de exceção, novo resource com serviços relacionados ao SIPAR, algumas melhorias em serviços existentes e documentação. --- .settings/org.eclipse.wst.common.component | 2 +- src/main/java/br/gov/ans/dao/DAO.java | 4 ++++ src/main/java/br/gov/ans/exceptions/ResourceConflictException.java | 23 +++++++++++++++++++++++ src/main/java/br/gov/ans/exceptions/handlers/EJBExceptionHandler.java | 40 ++++++++++++++++++++++++++++++++++++++++ src/main/java/br/gov/ans/exceptions/handlers/PersistenceExceptionHandler.java | 40 ++++++++++++++++++++++++++++++++++++++++ src/main/java/br/gov/ans/exceptions/handlers/ResourceConflictExceptionHandler.java | 35 +++++++++++++++++++++++++++++++++++ src/main/java/br/gov/ans/integracao/sei/client/SeiPortTypeProxy.java | 24 ++++++++---------------- src/main/java/br/gov/ans/integracao/sei/dao/DocumentoSiparDAO.java | 33 --------------------------------- src/main/java/br/gov/ans/integracao/sei/dao/SiparDAO.java | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/br/gov/ans/integracao/sei/modelo/DocumentoSipar.java | 130 ---------------------------------------------------------------------------------------------------------------------------------- src/main/java/br/gov/ans/integracao/sei/modelo/ResultadoConsultaDocumento.java | 1 + src/main/java/br/gov/ans/integracao/sei/modelo/ResultadoConsultaProcesso.java | 1 + src/main/java/br/gov/ans/integracao/sei/modelo/Tipo.java | 4 ++-- src/main/java/br/gov/ans/integracao/sei/rest/ProcessoResource.java | 6 +++--- src/main/java/br/gov/ans/integracao/sei/rest/SiparResource.java | 233 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/br/gov/ans/integracao/sei/rest/TipoConferenciaResource.java | 1 + src/main/java/br/gov/ans/integracao/sei/rest/UsuarioResource.java | 58 ++++++++++++++++++++++++++++++++++++---------------------- src/main/java/br/gov/ans/integracao/sipar/dao/ControleMigracao.java | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/br/gov/ans/integracao/sipar/dao/ControleMigracaoId.java | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/br/gov/ans/integracao/sipar/dao/DocumentoSipar.java | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/resources/META-INF/persistence.xml | 2 +- src/main/resources/messages.properties | 3 +++ src/test/java/br/gov/ans/integracao/sei/testes/Base64Decoder.java | 2 +- src/test/java/br/gov/ans/integracao/sei/testes/Base64Encoder.java | 45 +++++++++++++++++++++++++++++++++++++++++---- src/test/java/br/gov/ans/integracao/sei/testes/FunctionalTest.java | 4 ++-- src/test/java/br/gov/ans/integracao/sei/testes/SeiBrokerTest.java | 16 +++++++++------- 26 files changed, 781 insertions(+), 222 deletions(-) create mode 100644 src/main/java/br/gov/ans/exceptions/ResourceConflictException.java create mode 100644 src/main/java/br/gov/ans/exceptions/handlers/EJBExceptionHandler.java create mode 100644 src/main/java/br/gov/ans/exceptions/handlers/PersistenceExceptionHandler.java create mode 100644 src/main/java/br/gov/ans/exceptions/handlers/ResourceConflictExceptionHandler.java delete mode 100644 src/main/java/br/gov/ans/integracao/sei/dao/DocumentoSiparDAO.java create mode 100644 src/main/java/br/gov/ans/integracao/sei/dao/SiparDAO.java delete mode 100644 src/main/java/br/gov/ans/integracao/sei/modelo/DocumentoSipar.java create mode 100644 src/main/java/br/gov/ans/integracao/sei/rest/SiparResource.java create mode 100644 src/main/java/br/gov/ans/integracao/sipar/dao/ControleMigracao.java create mode 100644 src/main/java/br/gov/ans/integracao/sipar/dao/ControleMigracaoId.java create mode 100644 src/main/java/br/gov/ans/integracao/sipar/dao/DocumentoSipar.java diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 98f60d2..e69ab3f 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,5 +1,5 @@ - + diff --git a/src/main/java/br/gov/ans/dao/DAO.java b/src/main/java/br/gov/ans/dao/DAO.java index b3cc129..c6effb3 100644 --- a/src/main/java/br/gov/ans/dao/DAO.java +++ b/src/main/java/br/gov/ans/dao/DAO.java @@ -53,6 +53,10 @@ public class DAO implements Serializable{ em.remove(em.merge(t)); } + public T findById(Serializable id){ + return (T)em.find(classe, id); + } + @Transactional @SuppressWarnings({ "unchecked", "rawtypes" }) public Long count() { diff --git a/src/main/java/br/gov/ans/exceptions/ResourceConflictException.java b/src/main/java/br/gov/ans/exceptions/ResourceConflictException.java new file mode 100644 index 0000000..6f095cc --- /dev/null +++ b/src/main/java/br/gov/ans/exceptions/ResourceConflictException.java @@ -0,0 +1,23 @@ +package br.gov.ans.exceptions; + +import javax.ejb.ApplicationException; + +@ApplicationException +public class ResourceConflictException extends Exception{ + + private static final long serialVersionUID = 1L; + + private String message; + + public ResourceConflictException(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/src/main/java/br/gov/ans/exceptions/handlers/EJBExceptionHandler.java b/src/main/java/br/gov/ans/exceptions/handlers/EJBExceptionHandler.java new file mode 100644 index 0000000..a361df7 --- /dev/null +++ b/src/main/java/br/gov/ans/exceptions/handlers/EJBExceptionHandler.java @@ -0,0 +1,40 @@ +package br.gov.ans.exceptions.handlers; + +import static br.gov.ans.utils.HttpHeadersUtil.getAcceptType; + +import javax.ejb.EJBException; +import javax.inject.Inject; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +import org.jboss.logging.Logger; + +import br.gov.ans.exceptions.ErrorMessage; +import br.gov.ans.utils.MessageUtils; + +@Provider +public class EJBExceptionHandler implements ExceptionMapper{ + + @Inject + private Logger logger; + + @Context + private HttpHeaders headers; + + @Inject + private MessageUtils messages; + + public Response toResponse(EJBException ex) { + logger.error(ex, ex); + + return Response.status(Status.INTERNAL_SERVER_ERROR) + .entity(new ErrorMessage(messages.getMessage("erro.inesperado"),String.valueOf(Status.INTERNAL_SERVER_ERROR.getStatusCode()))) + .type(getAcceptType(headers)) + .build(); + } + +} diff --git a/src/main/java/br/gov/ans/exceptions/handlers/PersistenceExceptionHandler.java b/src/main/java/br/gov/ans/exceptions/handlers/PersistenceExceptionHandler.java new file mode 100644 index 0000000..8e6fe00 --- /dev/null +++ b/src/main/java/br/gov/ans/exceptions/handlers/PersistenceExceptionHandler.java @@ -0,0 +1,40 @@ +package br.gov.ans.exceptions.handlers; + +import static br.gov.ans.utils.HttpHeadersUtil.getAcceptType; + +import javax.inject.Inject; +import javax.persistence.PersistenceException; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +import org.jboss.logging.Logger; + +import br.gov.ans.exceptions.ErrorMessage; +import br.gov.ans.utils.MessageUtils; + +@Provider +public class PersistenceExceptionHandler implements ExceptionMapper{ + + @Inject + private Logger logger; + + @Context + private HttpHeaders headers; + + @Inject + private MessageUtils messages; + + public Response toResponse(PersistenceException ex) { + logger.error(ex, ex); + + return Response.status(Status.INTERNAL_SERVER_ERROR) + .entity(new ErrorMessage(messages.getMessage("erro.inesperado"),String.valueOf(Status.INTERNAL_SERVER_ERROR.getStatusCode()))) + .type(getAcceptType(headers)) + .build(); + } + +} diff --git a/src/main/java/br/gov/ans/exceptions/handlers/ResourceConflictExceptionHandler.java b/src/main/java/br/gov/ans/exceptions/handlers/ResourceConflictExceptionHandler.java new file mode 100644 index 0000000..0e36394 --- /dev/null +++ b/src/main/java/br/gov/ans/exceptions/handlers/ResourceConflictExceptionHandler.java @@ -0,0 +1,35 @@ +package br.gov.ans.exceptions.handlers; + +import static br.gov.ans.utils.HttpHeadersUtil.getAcceptType; + +import javax.inject.Inject; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +import org.jboss.logging.Logger; + +import br.gov.ans.exceptions.ErrorMessage; +import br.gov.ans.exceptions.ResourceConflictException; + +@Provider +public class ResourceConflictExceptionHandler implements ExceptionMapper{ + + @Inject + private Logger logger; + + @Context + private HttpHeaders headers; + + public Response toResponse(ResourceConflictException ex) { + logger.error(ex, ex); + + return Response.status(Status.CONFLICT) + .entity(new ErrorMessage(ex.getMessage(),String.valueOf(Status.CONFLICT.getStatusCode()))) + .type(getAcceptType(headers)) + .build(); + } +} diff --git a/src/main/java/br/gov/ans/integracao/sei/client/SeiPortTypeProxy.java b/src/main/java/br/gov/ans/integracao/sei/client/SeiPortTypeProxy.java index f884488..ba30f46 100644 --- a/src/main/java/br/gov/ans/integracao/sei/client/SeiPortTypeProxy.java +++ b/src/main/java/br/gov/ans/integracao/sei/client/SeiPortTypeProxy.java @@ -336,25 +336,17 @@ public class SeiPortTypeProxy implements br.gov.ans.integracao.sei.client.SeiPor identificacaoServico, idUnidade, idArquivoExtensao); } - public java.lang.String enviarProcesso(java.lang.String siglaSistema, - java.lang.String identificacaoServico, java.lang.String idUnidade, - java.lang.String protocoloProcedimento, - java.lang.String[] unidadesDestino, - java.lang.String sinManterAbertoUnidade, - java.lang.String sinRemoverAnotacao, - java.lang.String sinEnviarEmailNotificacao, - java.lang.String dataRetornoProgramado, - java.lang.String diasRetornoProgramado, - java.lang.String sinDiasUteisRetornoProgramado, + public java.lang.String enviarProcesso(java.lang.String siglaSistema, java.lang.String identificacaoServico, + java.lang.String idUnidade, java.lang.String protocoloProcedimento, java.lang.String[] unidadesDestino, + java.lang.String sinManterAbertoUnidade, java.lang.String sinRemoverAnotacao, + java.lang.String sinEnviarEmailNotificacao, java.lang.String dataRetornoProgramado, + java.lang.String diasRetornoProgramado, java.lang.String sinDiasUteisRetornoProgramado, java.lang.String sinReabrir) throws java.rmi.RemoteException { if (seiPortType == null) _initSeiPortTypeProxy(); - return seiPortType.enviarProcesso(siglaSistema, identificacaoServico, - idUnidade, protocoloProcedimento, unidadesDestino, - sinManterAbertoUnidade, sinRemoverAnotacao, - sinEnviarEmailNotificacao, dataRetornoProgramado, - diasRetornoProgramado, sinDiasUteisRetornoProgramado, - sinReabrir); + return seiPortType.enviarProcesso(siglaSistema, identificacaoServico, idUnidade, protocoloProcedimento, + unidadesDestino, sinManterAbertoUnidade, sinRemoverAnotacao, sinEnviarEmailNotificacao, + dataRetornoProgramado, diasRetornoProgramado, sinDiasUteisRetornoProgramado, sinReabrir); } public br.gov.ans.integracao.sei.client.Usuario[] listarUsuarios( diff --git a/src/main/java/br/gov/ans/integracao/sei/dao/DocumentoSiparDAO.java b/src/main/java/br/gov/ans/integracao/sei/dao/DocumentoSiparDAO.java deleted file mode 100644 index ee4181a..0000000 --- a/src/main/java/br/gov/ans/integracao/sei/dao/DocumentoSiparDAO.java +++ /dev/null @@ -1,33 +0,0 @@ -package br.gov.ans.integracao.sei.dao; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.inject.Inject; - -import br.gov.ans.dao.DAO; -import br.gov.ans.integracao.sei.modelo.DocumentoSipar; - -public class DocumentoSiparDAO { - - @SuppressWarnings("cdi-ambiguous-dependency") - @Inject - private DAO dao; - - public DocumentoSipar getDocumento(String numeroDocumento, String anoDocumento, String digitoDocumento){ - - Map params = new HashMap(); - params.put("numeroDocumento", numeroDocumento); - params.put("anoDocumento", anoDocumento); - params.put("digitoDocumento", digitoDocumento); - - List resultado = dao.executeNamedQuery("documentoPorNumeroAnoDigito", params); - - if(resultado.isEmpty()){ - return null; - } - - return resultado.get(0); - } -} diff --git a/src/main/java/br/gov/ans/integracao/sei/dao/SiparDAO.java b/src/main/java/br/gov/ans/integracao/sei/dao/SiparDAO.java new file mode 100644 index 0000000..d5fc73a --- /dev/null +++ b/src/main/java/br/gov/ans/integracao/sei/dao/SiparDAO.java @@ -0,0 +1,49 @@ +package br.gov.ans.integracao.sei.dao; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.ejb.Stateless; +import javax.inject.Inject; + +import br.gov.ans.dao.DAO; +import br.gov.ans.integracao.sipar.dao.ControleMigracao; +import br.gov.ans.integracao.sipar.dao.ControleMigracaoId; +import br.gov.ans.integracao.sipar.dao.DocumentoSipar; + +@Stateless +public class SiparDAO { + + @SuppressWarnings("cdi-ambiguous-dependency") + @Inject + private DAO daoDocumento; + + @Inject + private DAO daoMigracao; + + public DocumentoSipar getDocumento(String numeroDocumento, String anoDocumento, String digitoDocumento){ + + Map params = new HashMap(); + params.put("numeroDocumento", numeroDocumento); + params.put("anoDocumento", anoDocumento); + params.put("digitoDocumento", digitoDocumento); + + List resultado = daoDocumento.executeNamedQuery("documentoPorNumeroAnoDigito", params); + + if(resultado.isEmpty()){ + return null; + } + + return resultado.get(0); + } + + public ControleMigracao buscaProcessoImportado(ControleMigracaoId id){ + return daoMigracao.findById(id); + } + + public void merge(ControleMigracao controleMigracao){ + daoMigracao.merge(controleMigracao); + } + +} diff --git a/src/main/java/br/gov/ans/integracao/sei/modelo/DocumentoSipar.java b/src/main/java/br/gov/ans/integracao/sei/modelo/DocumentoSipar.java deleted file mode 100644 index c63461c..0000000 --- a/src/main/java/br/gov/ans/integracao/sei/modelo/DocumentoSipar.java +++ /dev/null @@ -1,130 +0,0 @@ -package br.gov.ans.integracao.sei.modelo; - -import java.util.Date; - -import javax.persistence.Entity; -import javax.persistence.EntityResult; -import javax.persistence.FieldResult; -import javax.persistence.Id; -import javax.persistence.NamedNativeQuery; -import javax.persistence.SqlResultSetMapping; - -@Entity -@SqlResultSetMapping(name="DocumentoSiparMapping", entities={ - @EntityResult(entityClass = DocumentoSipar.class, - fields = { - @FieldResult(name = "digito", column = "NU_DIGITO_DOCUMENTO"), - @FieldResult(name = "operadora", column = "CO_OPERADORA"), - @FieldResult(name = "emissao", column = "DT_EMISSAO_DOCUMENTO"), - @FieldResult(name = "registro", column = "DT_REGISTRO"), - @FieldResult(name = "tipo", column = "CO_TIPO_DOCUMENTO"), - @FieldResult(name = "resumo", column = "DS_RESUMO_DOCUMENTO"), - @FieldResult(name = "orgaoPosse", column = "CO_ORGAO_POSSE"), - @FieldResult(name = "orgaoOrigem", column = "CO_ORGAO_ORIGEM"), - @FieldResult(name = "orgaoRegistro", column = "CO_ORGAO_REGISTRO"), - @FieldResult(name = "assunto", column = "CO_ASSUNTO") - }) -}) -@NamedNativeQuery(name = "documentoPorNumeroAnoDigito", resultSetMapping = "DocumentoSiparMapping", -query = "SELECT TB.NU_DIGITO_DOCUMENTO, TB.CO_OPERADORA, TB.DT_EMISSAO_DOCUMENTO, TB.DT_REGISTRO, TB.CO_TIPO_DOCUMENTO, " - + "TB.DS_RESUMO_DOCUMENTO, TB.CO_ORGAO_POSSE, TB.CO_ORGAO_ORIGEM, TB.CO_ORGAO_REGISTRO, RL.CO_ASSUNTO " - + "FROM DBPSIPAR.TB_DOCUMENTO TB " - + "LEFT JOIN DBPSIPAR.RL_ASSUNTO_DOCUMENTO RL ON RL.CO_DOCUMENTO = TB.CO_SEQ_DOCUMENTO " - + "AND RL.NU_ANO_DOCUMENTO = TB.NU_ANO_DOCUMENTO " - + "WHERE TB.CO_SEQ_DOCUMENTO = :numeroDocumento " - + "AND TB.NU_ANO_DOCUMENTO = :anoDocumento " - + "AND TB.NU_DIGITO_DOCUMENTO = :digitoDocumento") -public class DocumentoSipar { - @Id - private String digito; - private String operadora; - private Date emissao; - private Date registro; - private String tipo; - private String resumo; - private Long orgaoPosse; - private Long orgaoOrigem; - private Long orgaoRegistro; - private Long assunto; - - public String getDigito() { - return digito; - } - - public void setDigito(String digito) { - this.digito = digito; - } - - public Long getAssunto() { - return assunto; - } - - public void setAssunto(Long assunto) { - this.assunto = assunto; - } - - public String getOperadora() { - return operadora; - } - - public void setOperadora(String operadora) { - this.operadora = operadora; - } - - public Date getEmissao() { - return emissao; - } - - public void setEmissao(Date emissao) { - this.emissao = emissao; - } - - public String getTipo() { - return tipo; - } - - public void setTipo(String tipo) { - this.tipo = tipo; - } - - public String getResumo() { - return resumo; - } - - public void setResumo(String resumo) { - this.resumo = resumo; - } - - public Long getOrgaoPosse() { - return orgaoPosse; - } - - public void setOrgaoPosse(Long orgaoPosse) { - this.orgaoPosse = orgaoPosse; - } - - public Long getOrgaoOrigem() { - return orgaoOrigem; - } - - public void setOrgaoOrigem(Long orgaoOrigem) { - this.orgaoOrigem = orgaoOrigem; - } - - public Long getOrgaoRegistro() { - return orgaoRegistro; - } - - public void setOrgaoRegistro(Long orgaoRegistro) { - this.orgaoRegistro = orgaoRegistro; - } - - public Date getRegistro() { - return registro; - } - - public void setRegistro(Date registro) { - this.registro = registro; - } - -} diff --git a/src/main/java/br/gov/ans/integracao/sei/modelo/ResultadoConsultaDocumento.java b/src/main/java/br/gov/ans/integracao/sei/modelo/ResultadoConsultaDocumento.java index 80f7d4c..d299234 100644 --- a/src/main/java/br/gov/ans/integracao/sei/modelo/ResultadoConsultaDocumento.java +++ b/src/main/java/br/gov/ans/integracao/sei/modelo/ResultadoConsultaDocumento.java @@ -3,6 +3,7 @@ package br.gov.ans.integracao.sei.modelo; import javax.xml.bind.annotation.XmlRootElement; import br.gov.ans.integracao.sei.client.RetornoConsultaDocumento; +import br.gov.ans.integracao.sipar.dao.DocumentoSipar; @XmlRootElement public class ResultadoConsultaDocumento { diff --git a/src/main/java/br/gov/ans/integracao/sei/modelo/ResultadoConsultaProcesso.java b/src/main/java/br/gov/ans/integracao/sei/modelo/ResultadoConsultaProcesso.java index bbdfb09..3f323fd 100644 --- a/src/main/java/br/gov/ans/integracao/sei/modelo/ResultadoConsultaProcesso.java +++ b/src/main/java/br/gov/ans/integracao/sei/modelo/ResultadoConsultaProcesso.java @@ -3,6 +3,7 @@ package br.gov.ans.integracao.sei.modelo; import javax.xml.bind.annotation.XmlRootElement; import br.gov.ans.integracao.sei.client.RetornoConsultaProcedimento; +import br.gov.ans.integracao.sipar.dao.DocumentoSipar; @XmlRootElement public class ResultadoConsultaProcesso { diff --git a/src/main/java/br/gov/ans/integracao/sei/modelo/Tipo.java b/src/main/java/br/gov/ans/integracao/sei/modelo/Tipo.java index 8457a03..6ac765f 100644 --- a/src/main/java/br/gov/ans/integracao/sei/modelo/Tipo.java +++ b/src/main/java/br/gov/ans/integracao/sei/modelo/Tipo.java @@ -8,8 +8,8 @@ import javax.persistence.SqlResultSetMapping; import javax.xml.bind.annotation.XmlRootElement; @Entity -@SqlResultSetMapping(name = "TipoMapping", entities = { @EntityResult(entityClass = Tipo.class, fields = { - @FieldResult(name = "codigo", column = "tipoCodigo"), @FieldResult(name = "nome", column = "tipoNome") }) }) +//@SqlResultSetMapping(name = "TipoMapping", entities = { @EntityResult(entityClass = Tipo.class, fields = { +// @FieldResult(name = "codigo", column = "tipoCodigo"), @FieldResult(name = "nome", column = "tipoNome") }) }) @XmlRootElement public class Tipo { @Id diff --git a/src/main/java/br/gov/ans/integracao/sei/rest/ProcessoResource.java b/src/main/java/br/gov/ans/integracao/sei/rest/ProcessoResource.java index 01e8f94..3e2befc 100644 --- a/src/main/java/br/gov/ans/integracao/sei/rest/ProcessoResource.java +++ b/src/main/java/br/gov/ans/integracao/sei/rest/ProcessoResource.java @@ -47,10 +47,9 @@ import br.gov.ans.integracao.sei.client.RetornoGeracaoProcedimento; import br.gov.ans.integracao.sei.client.SeiPortTypeProxy; import br.gov.ans.integracao.sei.client.TipoProcedimento; import br.gov.ans.integracao.sei.dao.DocumentoDAO; -import br.gov.ans.integracao.sei.dao.DocumentoSiparDAO; +import br.gov.ans.integracao.sei.dao.SiparDAO; import br.gov.ans.integracao.sei.dao.ProcessoDAO; import br.gov.ans.integracao.sei.modelo.DocumentoResumido; -import br.gov.ans.integracao.sei.modelo.DocumentoSipar; import br.gov.ans.integracao.sei.modelo.EnvioDeProcesso; import br.gov.ans.integracao.sei.modelo.Motivo; import br.gov.ans.integracao.sei.modelo.NovoAndamento; @@ -63,6 +62,7 @@ import br.gov.ans.integracao.sei.modelo.ProcessoResumido; import br.gov.ans.integracao.sei.modelo.ResultadoConsultaProcesso; import br.gov.ans.integracao.sei.modelo.SobrestamentoProcesso; import br.gov.ans.integracao.sei.utils.Constantes; +import br.gov.ans.integracao.sipar.dao.DocumentoSipar; import br.gov.ans.utils.MessageUtils; @@ -70,7 +70,7 @@ import br.gov.ans.utils.MessageUtils; public class ProcessoResource { @Inject - private DocumentoSiparDAO documentoSiparDAO; + private SiparDAO documentoSiparDAO; @Inject private ProcessoDAO processoDAO; diff --git a/src/main/java/br/gov/ans/integracao/sei/rest/SiparResource.java b/src/main/java/br/gov/ans/integracao/sei/rest/SiparResource.java new file mode 100644 index 0000000..cf6b172 --- /dev/null +++ b/src/main/java/br/gov/ans/integracao/sei/rest/SiparResource.java @@ -0,0 +1,233 @@ +package br.gov.ans.integracao.sei.rest; + +import java.net.URI; +import java.util.Date; + +import javax.inject.Inject; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.core.UriBuilder; +import javax.ws.rs.core.UriInfo; + +import org.jboss.logging.Logger; + +import br.gov.ans.exceptions.BusinessException; +import br.gov.ans.exceptions.ResourceConflictException; +import br.gov.ans.exceptions.ResourceNotFoundException; +import br.gov.ans.integracao.sei.dao.SiparDAO; +import br.gov.ans.integracao.sipar.dao.ControleMigracao; +import br.gov.ans.integracao.sipar.dao.ControleMigracaoId; +import br.gov.ans.utils.MessageUtils; + +@Path("/sipar") +public class SiparResource { + + @Inject + private SiparDAO dao; + + @Inject + private MessageUtils messages; + + @Inject + private Logger logger; + + @Context + private UriInfo uriInfo; + + private static int TRUE = 1; + private static int FALSE = 0; + + /** + * @api {put} /sipar/importados Importar Processo SIPAR + * @apiName importarProcesso + * @apiGroup SIPAR + * @apiVersion 2.0.0 + * + * @apiDescription Marca um processo físico (SIPAR) como importado para um processo eletrônico (SEI). + * + * @apiParam (Path Parameter) {String} processo Número do processo físico existente no SIPAR contendo 17 dígitos e iniciado com 33902. Ex. 33902111111111111 + * + * @apiExample {curl} Exemplo de requisição: + * curl -i http:///sei-broker/service/sipar/importados + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + * + * @apiErrorExample {json} Error-Response: + * HTTP/1.1 500 Internal Server Error + * { + * "error":"Mensagem de erro." + * "code":"código do erro" + * } + * + * + * @apiErrorExample {json} Error-Response: + * HTTP/1.1 400 Bad Request + * { + * "error":"Mensagem de erro." + * "code":"código do erro" + * } + * + * + * @apiErrorExample {json} Error-Response: + * HTTP/1.1 409 Conflict + * { + * "error":"Mensagem de erro." + * "code":"código do erro" + * } + */ + @POST + @Path("/importados") + @Consumes({MediaType.TEXT_PLAIN}) + public Response importarProcesso(String processo) throws Exception{ + String numero, ano, digito; + + try{ + numero = extraiNumero(processo); + ano = extraiAno(processo); + digito = extraiDigitoVerificador(processo); + }catch(Exception ex){ + logger.error(messages.getMessage("erro.numero.sipar"), ex); + throw new BusinessException(messages.getMessage("erro.numero.sipar",processo)); + } + + isProcessoSipar(numero, ano, digito); + + if(isProcessoImportado(numero, ano)){ + throw new ResourceConflictException(messages.getMessage("erro.processo.sipar.importado",processo)); + } + + importarProcesso(numero, ano); + + return Response.created(getResourcePath(processo)).build(); + + } + + /** + * @api {put} /processos-fisicos/{processo}/desmigracao 2.Desmigra Processo + * @apiName desmigra + * @apiGroup SIPAR + * @apiVersion 1.0.0 + * + * @apiDescription Desmigra um processo iniciado no SIPAR e transferido para o SEI, permitindo novamente a anexação e tramitação no SIPAR. + * + * @apiParam (Path Parameter) {String} processo Número do processo físico existente no SIPAR contendo 17 dígitos e iniciado com 33902. Ex. 33902111111111111 + * + * @apiExample {curl} Exemplo de requisição: + * curl -i http:///sipar-broker/service/processos-fisicos/33902111111111111/desmigracao + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + * + * @apiErrorExample {json} Error-Response: + * HTTP/1.1 500 Internal Server Error + * { + * "error":"Mensagem de erro." + * "code":"código do erro" + * } + * + * + * @apiErrorExample {json} Error-Response: + * HTTP/1.1 400 Bad Request + * { + * "error":"Mensagem de erro." + * "code":"código do erro" + * } + * + * + * @apiErrorExample {json} Error-Response: + * HTTP/1.1 409 Conflict + * { + * "error":"Mensagem de erro." + * "code":"código do erro" + * } + */ + @DELETE + @Path("/importados/{processo:\\d+}") + public Response cancelarImportacaoProcesso(@PathParam("processo") String processo) throws Exception{ + String numero, ano, digito; + + try{ + numero = extraiNumero(processo); + ano = extraiAno(processo); + digito = extraiDigitoVerificador(processo); + }catch(Exception ex){ + logger.error(messages.getMessage("erro.numero.sipar"), ex); + throw new BusinessException(messages.getMessage("erro.numero.sipar",processo)); + } + + if(!isProcessoImportado(numero, ano)){ + throw new ResourceNotFoundException(messages.getMessage("erro.processo.nao.importado",processo)); + } + + cancelarImportacaoProcesso(numero, ano); + + return Response.noContent().build(); + + } + + private void importarProcesso(String numeroDocumento, String anoDocumento){ + ControleMigracao controle = new ControleMigracao(); + controle.setId(getControleMigracaoID(numeroDocumento, anoDocumento)); + controle.setMigrado(TRUE); + controle.setDataUltimaAlteracao(new Date()); + + dao.merge(controle); + } + + private void cancelarImportacaoProcesso(String numeroDocumento, String anoDocumento){ + ControleMigracao controle = new ControleMigracao(); + controle.setId(getControleMigracaoID(numeroDocumento, anoDocumento)); + controle.setMigrado(FALSE); + controle.setDataUltimaAlteracao(new Date()); + + dao.merge(controle); + } + + private ControleMigracaoId getControleMigracaoID(String numeroDocumento, String anoDocumento){ + return new ControleMigracaoId(numeroDocumento, anoDocumento); + } + + private String extraiNumero(String processo) { + return processo.substring(0,(processo.length() - 6)); + } + + private String extraiAno(String processo) { + return processo.substring((processo.length() - 6), (processo.length() - 2)); + } + + private String extraiDigitoVerificador(String processo) { + return processo.substring((processo.length() - 2), processo.length()); + } + + public boolean isProcessoImportado(String numeroDocumento, String anoDocumento){ + ControleMigracao processoMigrado = dao.buscaProcessoImportado(getControleMigracaoID(numeroDocumento, anoDocumento)); + + if(processoMigrado != null && processoMigrado.isProcessoMigrado()){ + return true; + } + + return false; + } + + public void isProcessoSipar(String numeroDocumento, String anoDocumento, String digitoDocumento) throws ResourceNotFoundException{ + if(dao.getDocumento(numeroDocumento, anoDocumento, digitoDocumento) == null){ + throw new ResourceNotFoundException(messages.getMessage("erro.processo.nao.pertence.sipar")); + } + } + + public URI getResourcePath(String resourceId){ + UriBuilder builder = uriInfo.getAbsolutePathBuilder(); + + builder.path(resourceId); + + return builder.build(); + } +} diff --git a/src/main/java/br/gov/ans/integracao/sei/rest/TipoConferenciaResource.java b/src/main/java/br/gov/ans/integracao/sei/rest/TipoConferenciaResource.java index 8e56b3b..e3a9f01 100644 --- a/src/main/java/br/gov/ans/integracao/sei/rest/TipoConferenciaResource.java +++ b/src/main/java/br/gov/ans/integracao/sei/rest/TipoConferenciaResource.java @@ -14,6 +14,7 @@ import br.gov.ans.integracao.sei.client.TipoConferencia; import br.gov.ans.integracao.sei.modelo.Operacao; import br.gov.ans.integracao.sei.utils.Constantes; +@Path("/") public class TipoConferenciaResource { @Inject diff --git a/src/main/java/br/gov/ans/integracao/sei/rest/UsuarioResource.java b/src/main/java/br/gov/ans/integracao/sei/rest/UsuarioResource.java index d1c85d9..8989544 100644 --- a/src/main/java/br/gov/ans/integracao/sei/rest/UsuarioResource.java +++ b/src/main/java/br/gov/ans/integracao/sei/rest/UsuarioResource.java @@ -10,10 +10,10 @@ import java.util.List; import javax.inject.Inject; import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.NotFoundException; import javax.ws.rs.POST; -import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; @@ -49,7 +49,9 @@ public class UsuarioResource { * @apiName listarUsuarios * @apiGroup Usuario * @apiVersion 2.0.0 - * + * + * @apiPermission RO_SEI_BROKER + * * @apiDescription Este método realiza uma consulta aos usuários cadastrados que possuem o perfil "Básico". * * @apiParam (Path Parameters) {String} unidade Sigla da Unidade cadastrada no SEI. @@ -81,7 +83,9 @@ public class UsuarioResource { * @apiName buscarUsuario * @apiGroup Usuario * @apiVersion 2.0.0 - * + * + * @apiPermission RO_SEI_BROKER + * * @apiDescription Este método realiza a uma busca pelo login do usuário. * * @apiParam (Path Parameters) {String} unidade Sigla da Unidade cadastrada no SEI. @@ -111,7 +115,9 @@ public class UsuarioResource { * @apiName atribuirProcesso * @apiGroup Usuario * @apiVersion 2.0.0 - * + * + * @apiPermission RO_SEI_BROKER + * * @apiDescription Este método atribui o processo a um usuário. * * @apiParam (Path Parameters) {String} unidade Sigla da Unidade cadastrada no SEI @@ -155,7 +161,9 @@ public class UsuarioResource { * @apiName incluirUsuario * @apiGroup Usuario * @apiVersion 2.0.0 - * + * + * @apiPermission RO_SEI_BROKER_ADM + * * @apiDescription Este método realiza a inclusão de novos usuários ou alterarações nos usuários existentes. * * @apiParam (Request Body) {String} codigo Código que deseja atribuir ao usuário @@ -191,11 +199,13 @@ public class UsuarioResource { /** - * @api {post} /usuarios/excluir Excluir usuário + * @api {delete} /usuarios/:login Excluir usuário * @apiName excluirUsuario * @apiGroup Usuario * @apiVersion 2.0.0 - * + * + * @apiPermission RO_SEI_BROKER_ADM + * * @apiDescription Este método realiza a exclusão de usuários. * * @apiParam {String} codigo Código que deseja atribuir ao usuário @@ -203,7 +213,7 @@ public class UsuarioResource { * @apiParam {String} login Login que será atribuído ao usuário * * @apiExample Exemplo de requisição: - * endpoint: http:///sei-broker/service/usuarios/excluir + * endpoint: [DELETE] http:///sei-broker/service/usuarios/andre.guimaraes * * body: * { @@ -221,21 +231,23 @@ public class UsuarioResource { * "code":"código do erro" * } */ - @POST - @Path("/usuarios/excluir") + @DELETE + @Path("/usuarios/{login}") @Consumes({MediaType.APPLICATION_JSON}) @Produces(MediaType.APPLICATION_JSON) - public Boolean excluirUsuario(Usuario usuario) throws Exception{ + public Boolean excluirUsuario(@PathParam("login") String login,Usuario usuario) throws Exception{ return manterUsuario(Acao.EXCLUIR, usuario); } /** - * @api {put} /usuarios/desativar Desativar usuário + * @api {delete} /usuarios/ativos Desativar usuário * @apiName desativarUsuario * @apiGroup Usuario * @apiVersion 2.0.0 - * + * + * @apiPermission RO_SEI_BROKER_ADM + * * @apiDescription Este método desativa usuários. * * @apiParam {String} codigo Código que deseja atribuir ao usuário @@ -243,7 +255,7 @@ public class UsuarioResource { * @apiParam {String} login Login que será atribuído ao usuário * * @apiExample Exemplo de requisição: - * endpoint: http:///sei-broker/service/usuarios/desativar + * endpoint: [DELETE] http:///sei-broker/service/usuarios/ativos/andre.guimaraes * * body: * { @@ -261,21 +273,23 @@ public class UsuarioResource { * "code":"código do erro" * } */ - @PUT - @Path("/usuarios/desativar") + @DELETE + @Path("/usuarios/ativos/{login}") @Consumes({MediaType.APPLICATION_JSON}) @Produces(MediaType.APPLICATION_JSON) - public Boolean desativarUsuario(Usuario usuario) throws Exception{ + public Boolean desativarUsuario(@PathParam("login") String login,Usuario usuario) throws Exception{ return manterUsuario(Acao.DESATIVAR, usuario); } /** - * @api {put} /usuarios/ativar Ativar usuário + * @api {post} /usuarios/ativos Ativar usuário * @apiName ativarUsuario * @apiGroup Usuario * @apiVersion 2.0.0 - * + * + * @apiPermission RO_SEI_BROKER_ADM + * * @apiDescription Este método reativa usuários. * * @apiParam {String} codigo Código que deseja atribuir ao usuário @@ -283,7 +297,7 @@ public class UsuarioResource { * @apiParam {String} login Login que será atribuído ao usuário * * @apiExample Exemplo de requisição: - * endpoint: http:///sei-broker/service/usuarios/ativar + * endpoint: http:///sei-broker/service/usuarios/ativos * * body: * { @@ -301,8 +315,8 @@ public class UsuarioResource { * "code":"código do erro" * } */ - @PUT - @Path("/usuarios/ativar") + @POST + @Path("/usuarios/ativos") @Consumes({MediaType.APPLICATION_JSON}) @Produces(MediaType.APPLICATION_JSON) public Boolean ativarUsuario(Usuario usuario) throws Exception{ diff --git a/src/main/java/br/gov/ans/integracao/sipar/dao/ControleMigracao.java b/src/main/java/br/gov/ans/integracao/sipar/dao/ControleMigracao.java new file mode 100644 index 0000000..2c57e47 --- /dev/null +++ b/src/main/java/br/gov/ans/integracao/sipar/dao/ControleMigracao.java @@ -0,0 +1,56 @@ +package br.gov.ans.integracao.sipar.dao; + +import java.io.Serializable; +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.EmbeddedId; +import javax.persistence.Entity; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + +@Entity +@Table(schema="DBPSIPAR", name="TB_CONTROLE_MIGRACAO_SIPAR_SEI") +public class ControleMigracao implements Serializable { + + private static final long serialVersionUID = 1L; + + @EmbeddedId + private ControleMigracaoId id; + + @Temporal(TemporalType.TIMESTAMP) + @Column(name = "DT_ULTIMA_ALTERACAO_CONTROLE") + private Date dataUltimaAlteracao; + + @Column(name="LG_DOCUMENTO_MIGRACAO_SEI") + private Integer migrado; + + public ControleMigracaoId getId() { + return id; + } + + public void setId(ControleMigracaoId id) { + this.id = id; + } + + public Date getDataUltimaAlteracao() { + return dataUltimaAlteracao; + } + + public void setDataUltimaAlteracao(Date dataUltimaAlteracao) { + this.dataUltimaAlteracao = dataUltimaAlteracao; + } + + public Integer getMigrado() { + return migrado; + } + + public void setMigrado(Integer migrado) { + this.migrado = migrado; + } + + public boolean isProcessoMigrado() { + return this.migrado == 1 ? true : false; + } +} diff --git a/src/main/java/br/gov/ans/integracao/sipar/dao/ControleMigracaoId.java b/src/main/java/br/gov/ans/integracao/sipar/dao/ControleMigracaoId.java new file mode 100644 index 0000000..eeab6e0 --- /dev/null +++ b/src/main/java/br/gov/ans/integracao/sipar/dao/ControleMigracaoId.java @@ -0,0 +1,61 @@ +package br.gov.ans.integracao.sipar.dao; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Embeddable; + +@Embeddable +public class ControleMigracaoId implements Serializable { + + private static final long serialVersionUID = 1L; + + @Column(name = "CD_SEQ_DOCUMENTO") + private String numero; + + @Column(name = "NR_ANO_DOCUMENTO") + private String ano; + + public ControleMigracaoId() { + } + + public ControleMigracaoId(String numero, String ano) { + this.numero = numero; + this.ano = ano; + } + + public String getNumero() { + return numero; + } + + public void setNumero(String numero) { + this.numero = numero; + } + + public String getAno() { + return ano; + } + + public void setAno(String ano) { + this.ano = ano; + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof ControleMigracao) { + ControleMigracao controleMigracao = (ControleMigracao) obj; + return (this.numero != null && this.numero.equals(controleMigracao.getId().getNumero()) && + this.ano != null && this.ano.equals(controleMigracao.getId().getAno())); + } + return false; + } + + @Override + public int hashCode() { + final int numeroPrimo = 31; + int resultado = 1; + resultado = (numeroPrimo * resultado) + ((this.numero == null) ? 0 : this.numero.hashCode()); + resultado = (numeroPrimo * resultado) + ((this.ano == null) ? 0 : this.ano.hashCode()); + return resultado; + } +} diff --git a/src/main/java/br/gov/ans/integracao/sipar/dao/DocumentoSipar.java b/src/main/java/br/gov/ans/integracao/sipar/dao/DocumentoSipar.java new file mode 100644 index 0000000..75d8a31 --- /dev/null +++ b/src/main/java/br/gov/ans/integracao/sipar/dao/DocumentoSipar.java @@ -0,0 +1,130 @@ +package br.gov.ans.integracao.sipar.dao; + +import java.util.Date; + +import javax.persistence.Entity; +import javax.persistence.EntityResult; +import javax.persistence.FieldResult; +import javax.persistence.Id; +import javax.persistence.NamedNativeQuery; +import javax.persistence.SqlResultSetMapping; + +@Entity +@SqlResultSetMapping(name="DocumentoSiparMapping", entities={ + @EntityResult(entityClass = DocumentoSipar.class, + fields = { + @FieldResult(name = "digito", column = "NU_DIGITO_DOCUMENTO"), + @FieldResult(name = "operadora", column = "CO_OPERADORA"), + @FieldResult(name = "emissao", column = "DT_EMISSAO_DOCUMENTO"), + @FieldResult(name = "registro", column = "DT_REGISTRO"), + @FieldResult(name = "tipo", column = "CO_TIPO_DOCUMENTO"), + @FieldResult(name = "resumo", column = "DS_RESUMO_DOCUMENTO"), + @FieldResult(name = "orgaoPosse", column = "CO_ORGAO_POSSE"), + @FieldResult(name = "orgaoOrigem", column = "CO_ORGAO_ORIGEM"), + @FieldResult(name = "orgaoRegistro", column = "CO_ORGAO_REGISTRO"), + @FieldResult(name = "assunto", column = "CO_ASSUNTO") + }) +}) +@NamedNativeQuery(name = "documentoPorNumeroAnoDigito", resultSetMapping = "DocumentoSiparMapping", +query = "SELECT TB.NU_DIGITO_DOCUMENTO, TB.CO_OPERADORA, TB.DT_EMISSAO_DOCUMENTO, TB.DT_REGISTRO, TB.CO_TIPO_DOCUMENTO, " + + "TB.DS_RESUMO_DOCUMENTO, TB.CO_ORGAO_POSSE, TB.CO_ORGAO_ORIGEM, TB.CO_ORGAO_REGISTRO, RL.CO_ASSUNTO " + + "FROM DBPSIPAR.TB_DOCUMENTO TB " + + "LEFT JOIN DBPSIPAR.RL_ASSUNTO_DOCUMENTO RL ON RL.CO_DOCUMENTO = TB.CO_SEQ_DOCUMENTO " + + "AND RL.NU_ANO_DOCUMENTO = TB.NU_ANO_DOCUMENTO " + + "WHERE TB.CO_SEQ_DOCUMENTO = :numeroDocumento " + + "AND TB.NU_ANO_DOCUMENTO = :anoDocumento " + + "AND TB.NU_DIGITO_DOCUMENTO = :digitoDocumento") +public class DocumentoSipar { + @Id + private String digito; + private String operadora; + private Date emissao; + private Date registro; + private String tipo; + private String resumo; + private Long orgaoPosse; + private Long orgaoOrigem; + private Long orgaoRegistro; + private Long assunto; + + public String getDigito() { + return digito; + } + + public void setDigito(String digito) { + this.digito = digito; + } + + public Long getAssunto() { + return assunto; + } + + public void setAssunto(Long assunto) { + this.assunto = assunto; + } + + public String getOperadora() { + return operadora; + } + + public void setOperadora(String operadora) { + this.operadora = operadora; + } + + public Date getEmissao() { + return emissao; + } + + public void setEmissao(Date emissao) { + this.emissao = emissao; + } + + public String getTipo() { + return tipo; + } + + public void setTipo(String tipo) { + this.tipo = tipo; + } + + public String getResumo() { + return resumo; + } + + public void setResumo(String resumo) { + this.resumo = resumo; + } + + public Long getOrgaoPosse() { + return orgaoPosse; + } + + public void setOrgaoPosse(Long orgaoPosse) { + this.orgaoPosse = orgaoPosse; + } + + public Long getOrgaoOrigem() { + return orgaoOrigem; + } + + public void setOrgaoOrigem(Long orgaoOrigem) { + this.orgaoOrigem = orgaoOrigem; + } + + public Long getOrgaoRegistro() { + return orgaoRegistro; + } + + public void setOrgaoRegistro(Long orgaoRegistro) { + this.orgaoRegistro = orgaoRegistro; + } + + public Date getRegistro() { + return registro; + } + + public void setRegistro(Date registro) { + this.registro = registro; + } + +} diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml index 033ad9a..9a3234f 100644 --- a/src/main/resources/META-INF/persistence.xml +++ b/src/main/resources/META-INF/persistence.xml @@ -7,7 +7,7 @@ jdbc/sei-broker - br.gov.ans.integracao.sei.modelo.DocumentoSipar + br.gov.ans.integracao.sipar.dao.DocumentoSipar br.gov.ans.integracao.sei.modelo.InclusaoDocumento br.gov.ans.modelo.LogIntegracaoSistemica diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index fb6f286..0fbf13e 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -32,9 +32,12 @@ erro.persistir.confirmacao.inclusao.documento = Ocorreu um erro ao persistir a c erro.processar.conteudo.json = Erro ao processar o conteudo JSON, verifique a formação do JSON e se o envio foi realizado em Base64. erro.processo.anexado.nao.infomado = Número do processo a anexar não informado. erro.processo.incluir.bloco = Não foi possivel incluir o processo no bloco. +erro.processo.nao.importado = O processo {0} não foi encontrado nos registros de importação. erro.processo.nao.pertence.sei = O processo {0} não pertence ao SEI. +erro.processo.nao.pertence.sipar = O processo {0} não pertence ao SIPAR. erro.processo.relacionado.nao.infomado = É necessário informar o número do processo relacionado. erro.processo.sem.documentos = Nenhum documento anexado ao processo {0}. +erro.processo.sipar.importado = O processo {0} já foi importado para o SEI. erro.registrar.exclusao.documento = Erro ao registrar a exclusão do documento {0}. erro.registro.inclusao = Ocorreu um erro ao persistir o registro de inclusão. erro.relacionar.processo = Ocorreu um erro ao relacionar os processos. diff --git a/src/test/java/br/gov/ans/integracao/sei/testes/Base64Decoder.java b/src/test/java/br/gov/ans/integracao/sei/testes/Base64Decoder.java index 8a01aea..3b3f990 100644 --- a/src/test/java/br/gov/ans/integracao/sei/testes/Base64Decoder.java +++ b/src/test/java/br/gov/ans/integracao/sei/testes/Base64Decoder.java @@ -5,7 +5,7 @@ import org.apache.commons.codec.binary.Base64; public class Base64Decoder { public static void main(String[] args) { - String base64 = "eyJudW1lcm9Qcm9jZXNzbyI6IjMzOTEwMDAwMTIzMjAxNzkzIiwKInJhemFvU29jaWFsIjoiQU1JTCBBU1NJU1TKTkNJQSBNyURJQ0EgSU5URVJOQUNJT05BTCBTLkEuIiwKImNucGpPcGVyYWRvcmEiOiIyOTMwOTEyNzAwMDE3OSIsCiJudW1lcm9SZWdpc3Ryb0FucyI6IjMyNjMwNSIsCiJkYXRhUHJvdG9jb2xvIjoiMDEvMDIvMjAxNyIsCiJtZXNJbmljaW9BcGxpY2FjYW8iOiIwNS8yMDE3IiwKImFub0luaWNpb0FwbGljYWNhbyI6IjA0LzIwMTgifQo="; + String base64 = "PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PlRFU1RFVEVTVEU8L2JvZHk+PC9odG1sPg=="; System.out.println(new String(Base64.decodeBase64(base64))); } diff --git a/src/test/java/br/gov/ans/integracao/sei/testes/Base64Encoder.java b/src/test/java/br/gov/ans/integracao/sei/testes/Base64Encoder.java index 496e381..e6cbe35 100644 --- a/src/test/java/br/gov/ans/integracao/sei/testes/Base64Encoder.java +++ b/src/test/java/br/gov/ans/integracao/sei/testes/Base64Encoder.java @@ -1,13 +1,50 @@ package br.gov.ans.integracao.sei.testes; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + import org.apache.commons.codec.binary.Base64; public class Base64Encoder { - public static void main(String[] args) { - String string = "{\"conteudo\":\"tentativa 1 tentativa 2 tentativa 3 \\r tentativa 4 \\n fim! \"}"; - System.out.println(string); - System.out.println(Base64.encodeBase64String(string.getBytes())); + public static void main(String[] args) throws IOException { + String string = "{\"content\":\"tentativa 1 tentativa 2 tentativa 3 \\r tentativa 4 \\n fim!
teste da tag \"}"; + +// System.out.println(string); + +// System.out.println(Base64.encodeBase64String(string.getBytes())); + Base64Encoder encoder = new Base64Encoder(); + + System.out.println(encoder.getBase64("0693609.pdf")); + System.out.println(encoder.getMD5("0693609.pdf")); + System.out.println(Base64.encodeBase64String("{\"regAns\":\"363022\",\"razaoSocial\":\"BRADESCO SAUDE E ASSISTENCIA S.A\",\"emailCadop\":\"teste@teste.com\",\"nuCnpj\":\"0000000000\",\"noCargoRepr\":\"Diretor\",\"noRepresentante\":\"André Guimarães\",\"anoInicio\":\"2016\",\"anoFinal\":\"2017\",\"numeroDocumento\":\"00000000\"}".getBytes())); + } + + public String getBase64(String arquivo){ + ClassLoader classLoader = getClass().getClassLoader(); + + File file = new File(classLoader.getResource(arquivo).getFile()); + + byte[] bytes = new byte[(int) file.length()]; + + try { + FileInputStream fileInputStream = new FileInputStream(file); + fileInputStream.read(bytes); + } catch (Exception e) { + e.printStackTrace(); + } + + return Base64.encodeBase64String(bytes); } + public String getMD5(String arquivo) throws IOException{ + ClassLoader classLoader = getClass().getClassLoader(); + FileInputStream fis = new FileInputStream(new File(classLoader.getResource(arquivo).getFile())); + String md5 = org.apache.commons.codec.digest.DigestUtils.md5Hex(fis); + fis.close(); + + return md5; + } } + diff --git a/src/test/java/br/gov/ans/integracao/sei/testes/FunctionalTest.java b/src/test/java/br/gov/ans/integracao/sei/testes/FunctionalTest.java index 4f6e799..fb866b1 100644 --- a/src/test/java/br/gov/ans/integracao/sei/testes/FunctionalTest.java +++ b/src/test/java/br/gov/ans/integracao/sei/testes/FunctionalTest.java @@ -6,8 +6,8 @@ import com.jayway.restassured.RestAssured; public class FunctionalTest { - protected final String USUARIO = "desenv_integracao_sei"; - protected final String SENHA = "integra_sei_2016"; + protected final String USUARIO = "andre.guimaraes"; + protected final String SENHA = "Merda de senha!"; protected static final Boolean DESENVOLVIMENTO = false; @BeforeClass diff --git a/src/test/java/br/gov/ans/integracao/sei/testes/SeiBrokerTest.java b/src/test/java/br/gov/ans/integracao/sei/testes/SeiBrokerTest.java index 02d0569..18cc2a9 100644 --- a/src/test/java/br/gov/ans/integracao/sei/testes/SeiBrokerTest.java +++ b/src/test/java/br/gov/ans/integracao/sei/testes/SeiBrokerTest.java @@ -105,12 +105,12 @@ public class SeiBrokerTest extends FunctionalTest{ @Test public void AG_consultarDocumentosPorInteressadosTest(){ - given().auth().basic(USUARIO, SENHA).accept("application/json").when().get("/363022/documentos").then().statusCode(200); + given().auth().basic(USUARIO, SENHA).accept("application/json").when().get("/interessados/363022/documentos").then().statusCode(200); } @Test - public void AH_consultarProcessosPorInteressadosTest(){ - given().auth().basic(USUARIO, SENHA).accept("application/json").when().get("/363022/processos").then().statusCode(200); + public void AH_consultarProcessos(){ + given().auth().basic(USUARIO, SENHA).accept("application/json").when().get("/processos").then().statusCode(200); } @Test @@ -143,7 +143,7 @@ public class SeiBrokerTest extends FunctionalTest{ given().auth().basic(USUARIO, SENHA).accept("application/json").when().get("/unidades/cotec/codigo").then().statusCode(200); } - @Test +// @Test public void AP_cancelarDocumentoTest(){ given() .auth() @@ -381,7 +381,7 @@ public class SeiBrokerTest extends FunctionalTest{ response.then().statusCode(200); } -// @Test +//// @Test // public void BL_incluirDocumentoPorArquivoTest() { // Response response = given() // .auth() @@ -561,8 +561,10 @@ public class SeiBrokerTest extends FunctionalTest{ i.setNome("BRADESCO SAUDE E ASSISTENCIA S.A"); i.setSigla("363022"); documento.setInteressados(new Interessado[]{i}); - - documento.setConteudo(Base64.encodeBase64String("

Tendo em vista que o processo foi criado indevidamente pelo sistema de integração do ressarcimento ao SUS, considera-se encerrado o processo eletrônico, sendo vedada qualquer juntada de novos documentos eletrônicos por meio do SEI.
".getBytes())); + + documento.setConteudo("PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PlRFU1RFVEVTVEU8L2JvZHk+PC9odG1sPg=="); + +// documento.setConteudo(Base64.encodeBase64String("

Tendo em vista que o processo foi criado indevidamente pelo sistema de integração do ressarcimento ao SUS, considera-se encerrado o processo eletrônico, sendo vedada qualquer juntada de novos documentos eletrônicos por meio do SEI.
".getBytes())); return documento; } -- libgit2 0.21.2