Commit dc14e6943d0d1034fd177ea0e08ba1e5e1ebf97b
1 parent
3597c7de
Exists in
master
and in
1 other branch
Melhorias no tratamento de exceção, novo resource com serviços relacionados ao S…
…IPAR, algumas melhorias em serviços existentes e documentação.
Showing
26 changed files
with
781 additions
and
222 deletions
Show diff stats
.settings/org.eclipse.wst.common.component
1 | 1 | <?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0"> |
2 | - <wb-module deploy-name="sei-broker-2.3"> | |
2 | + <wb-module deploy-name="sei-broker-2.2"> | |
3 | 3 | <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/> |
4 | 4 | <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> |
5 | 5 | <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> | ... | ... |
src/main/java/br/gov/ans/dao/DAO.java
... | ... | @@ -53,6 +53,10 @@ public class DAO<T> implements Serializable{ |
53 | 53 | em.remove(em.merge(t)); |
54 | 54 | } |
55 | 55 | |
56 | + public T findById(Serializable id){ | |
57 | + return (T)em.find(classe, id); | |
58 | + } | |
59 | + | |
56 | 60 | @Transactional |
57 | 61 | @SuppressWarnings({ "unchecked", "rawtypes" }) |
58 | 62 | public Long count() { | ... | ... |
src/main/java/br/gov/ans/exceptions/ResourceConflictException.java
0 → 100644
... | ... | @@ -0,0 +1,23 @@ |
1 | +package br.gov.ans.exceptions; | |
2 | + | |
3 | +import javax.ejb.ApplicationException; | |
4 | + | |
5 | +@ApplicationException | |
6 | +public class ResourceConflictException extends Exception{ | |
7 | + | |
8 | + private static final long serialVersionUID = 1L; | |
9 | + | |
10 | + private String message; | |
11 | + | |
12 | + public ResourceConflictException(String message) { | |
13 | + this.message = message; | |
14 | + } | |
15 | + | |
16 | + public String getMessage() { | |
17 | + return message; | |
18 | + } | |
19 | + | |
20 | + public void setMessage(String message) { | |
21 | + this.message = message; | |
22 | + } | |
23 | +} | ... | ... |
src/main/java/br/gov/ans/exceptions/handlers/EJBExceptionHandler.java
0 → 100644
... | ... | @@ -0,0 +1,40 @@ |
1 | +package br.gov.ans.exceptions.handlers; | |
2 | + | |
3 | +import static br.gov.ans.utils.HttpHeadersUtil.getAcceptType; | |
4 | + | |
5 | +import javax.ejb.EJBException; | |
6 | +import javax.inject.Inject; | |
7 | +import javax.ws.rs.core.Context; | |
8 | +import javax.ws.rs.core.HttpHeaders; | |
9 | +import javax.ws.rs.core.Response; | |
10 | +import javax.ws.rs.core.Response.Status; | |
11 | +import javax.ws.rs.ext.ExceptionMapper; | |
12 | +import javax.ws.rs.ext.Provider; | |
13 | + | |
14 | +import org.jboss.logging.Logger; | |
15 | + | |
16 | +import br.gov.ans.exceptions.ErrorMessage; | |
17 | +import br.gov.ans.utils.MessageUtils; | |
18 | + | |
19 | +@Provider | |
20 | +public class EJBExceptionHandler implements ExceptionMapper<EJBException>{ | |
21 | + | |
22 | + @Inject | |
23 | + private Logger logger; | |
24 | + | |
25 | + @Context | |
26 | + private HttpHeaders headers; | |
27 | + | |
28 | + @Inject | |
29 | + private MessageUtils messages; | |
30 | + | |
31 | + public Response toResponse(EJBException ex) { | |
32 | + logger.error(ex, ex); | |
33 | + | |
34 | + return Response.status(Status.INTERNAL_SERVER_ERROR) | |
35 | + .entity(new ErrorMessage(messages.getMessage("erro.inesperado"),String.valueOf(Status.INTERNAL_SERVER_ERROR.getStatusCode()))) | |
36 | + .type(getAcceptType(headers)) | |
37 | + .build(); | |
38 | + } | |
39 | + | |
40 | +} | ... | ... |
src/main/java/br/gov/ans/exceptions/handlers/PersistenceExceptionHandler.java
0 → 100644
... | ... | @@ -0,0 +1,40 @@ |
1 | +package br.gov.ans.exceptions.handlers; | |
2 | + | |
3 | +import static br.gov.ans.utils.HttpHeadersUtil.getAcceptType; | |
4 | + | |
5 | +import javax.inject.Inject; | |
6 | +import javax.persistence.PersistenceException; | |
7 | +import javax.ws.rs.core.Context; | |
8 | +import javax.ws.rs.core.HttpHeaders; | |
9 | +import javax.ws.rs.core.Response; | |
10 | +import javax.ws.rs.core.Response.Status; | |
11 | +import javax.ws.rs.ext.ExceptionMapper; | |
12 | +import javax.ws.rs.ext.Provider; | |
13 | + | |
14 | +import org.jboss.logging.Logger; | |
15 | + | |
16 | +import br.gov.ans.exceptions.ErrorMessage; | |
17 | +import br.gov.ans.utils.MessageUtils; | |
18 | + | |
19 | +@Provider | |
20 | +public class PersistenceExceptionHandler implements ExceptionMapper<PersistenceException>{ | |
21 | + | |
22 | + @Inject | |
23 | + private Logger logger; | |
24 | + | |
25 | + @Context | |
26 | + private HttpHeaders headers; | |
27 | + | |
28 | + @Inject | |
29 | + private MessageUtils messages; | |
30 | + | |
31 | + public Response toResponse(PersistenceException ex) { | |
32 | + logger.error(ex, ex); | |
33 | + | |
34 | + return Response.status(Status.INTERNAL_SERVER_ERROR) | |
35 | + .entity(new ErrorMessage(messages.getMessage("erro.inesperado"),String.valueOf(Status.INTERNAL_SERVER_ERROR.getStatusCode()))) | |
36 | + .type(getAcceptType(headers)) | |
37 | + .build(); | |
38 | + } | |
39 | + | |
40 | +} | ... | ... |
src/main/java/br/gov/ans/exceptions/handlers/ResourceConflictExceptionHandler.java
0 → 100644
... | ... | @@ -0,0 +1,35 @@ |
1 | +package br.gov.ans.exceptions.handlers; | |
2 | + | |
3 | +import static br.gov.ans.utils.HttpHeadersUtil.getAcceptType; | |
4 | + | |
5 | +import javax.inject.Inject; | |
6 | +import javax.ws.rs.core.Context; | |
7 | +import javax.ws.rs.core.HttpHeaders; | |
8 | +import javax.ws.rs.core.Response; | |
9 | +import javax.ws.rs.core.Response.Status; | |
10 | +import javax.ws.rs.ext.ExceptionMapper; | |
11 | +import javax.ws.rs.ext.Provider; | |
12 | + | |
13 | +import org.jboss.logging.Logger; | |
14 | + | |
15 | +import br.gov.ans.exceptions.ErrorMessage; | |
16 | +import br.gov.ans.exceptions.ResourceConflictException; | |
17 | + | |
18 | +@Provider | |
19 | +public class ResourceConflictExceptionHandler implements ExceptionMapper<ResourceConflictException>{ | |
20 | + | |
21 | + @Inject | |
22 | + private Logger logger; | |
23 | + | |
24 | + @Context | |
25 | + private HttpHeaders headers; | |
26 | + | |
27 | + public Response toResponse(ResourceConflictException ex) { | |
28 | + logger.error(ex, ex); | |
29 | + | |
30 | + return Response.status(Status.CONFLICT) | |
31 | + .entity(new ErrorMessage(ex.getMessage(),String.valueOf(Status.CONFLICT.getStatusCode()))) | |
32 | + .type(getAcceptType(headers)) | |
33 | + .build(); | |
34 | + } | |
35 | +} | ... | ... |
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 |
336 | 336 | identificacaoServico, idUnidade, idArquivoExtensao); |
337 | 337 | } |
338 | 338 | |
339 | - public java.lang.String enviarProcesso(java.lang.String siglaSistema, | |
340 | - java.lang.String identificacaoServico, java.lang.String idUnidade, | |
341 | - java.lang.String protocoloProcedimento, | |
342 | - java.lang.String[] unidadesDestino, | |
343 | - java.lang.String sinManterAbertoUnidade, | |
344 | - java.lang.String sinRemoverAnotacao, | |
345 | - java.lang.String sinEnviarEmailNotificacao, | |
346 | - java.lang.String dataRetornoProgramado, | |
347 | - java.lang.String diasRetornoProgramado, | |
348 | - java.lang.String sinDiasUteisRetornoProgramado, | |
339 | + public java.lang.String enviarProcesso(java.lang.String siglaSistema, java.lang.String identificacaoServico, | |
340 | + java.lang.String idUnidade, java.lang.String protocoloProcedimento, java.lang.String[] unidadesDestino, | |
341 | + java.lang.String sinManterAbertoUnidade, java.lang.String sinRemoverAnotacao, | |
342 | + java.lang.String sinEnviarEmailNotificacao, java.lang.String dataRetornoProgramado, | |
343 | + java.lang.String diasRetornoProgramado, java.lang.String sinDiasUteisRetornoProgramado, | |
349 | 344 | java.lang.String sinReabrir) throws java.rmi.RemoteException { |
350 | 345 | if (seiPortType == null) |
351 | 346 | _initSeiPortTypeProxy(); |
352 | - return seiPortType.enviarProcesso(siglaSistema, identificacaoServico, | |
353 | - idUnidade, protocoloProcedimento, unidadesDestino, | |
354 | - sinManterAbertoUnidade, sinRemoverAnotacao, | |
355 | - sinEnviarEmailNotificacao, dataRetornoProgramado, | |
356 | - diasRetornoProgramado, sinDiasUteisRetornoProgramado, | |
357 | - sinReabrir); | |
347 | + return seiPortType.enviarProcesso(siglaSistema, identificacaoServico, idUnidade, protocoloProcedimento, | |
348 | + unidadesDestino, sinManterAbertoUnidade, sinRemoverAnotacao, sinEnviarEmailNotificacao, | |
349 | + dataRetornoProgramado, diasRetornoProgramado, sinDiasUteisRetornoProgramado, sinReabrir); | |
358 | 350 | } |
359 | 351 | |
360 | 352 | public br.gov.ans.integracao.sei.client.Usuario[] listarUsuarios( | ... | ... |
src/main/java/br/gov/ans/integracao/sei/dao/DocumentoSiparDAO.java
... | ... | @@ -1,33 +0,0 @@ |
1 | -package br.gov.ans.integracao.sei.dao; | |
2 | - | |
3 | -import java.util.HashMap; | |
4 | -import java.util.List; | |
5 | -import java.util.Map; | |
6 | - | |
7 | -import javax.inject.Inject; | |
8 | - | |
9 | -import br.gov.ans.dao.DAO; | |
10 | -import br.gov.ans.integracao.sei.modelo.DocumentoSipar; | |
11 | - | |
12 | -public class DocumentoSiparDAO { | |
13 | - | |
14 | - @SuppressWarnings("cdi-ambiguous-dependency") | |
15 | - @Inject | |
16 | - private DAO<DocumentoSipar> dao; | |
17 | - | |
18 | - public DocumentoSipar getDocumento(String numeroDocumento, String anoDocumento, String digitoDocumento){ | |
19 | - | |
20 | - Map<String, Object> params = new HashMap<String, Object>(); | |
21 | - params.put("numeroDocumento", numeroDocumento); | |
22 | - params.put("anoDocumento", anoDocumento); | |
23 | - params.put("digitoDocumento", digitoDocumento); | |
24 | - | |
25 | - List<DocumentoSipar> resultado = dao.executeNamedQuery("documentoPorNumeroAnoDigito", params); | |
26 | - | |
27 | - if(resultado.isEmpty()){ | |
28 | - return null; | |
29 | - } | |
30 | - | |
31 | - return resultado.get(0); | |
32 | - } | |
33 | -} |
src/main/java/br/gov/ans/integracao/sei/dao/SiparDAO.java
0 → 100644
... | ... | @@ -0,0 +1,49 @@ |
1 | +package br.gov.ans.integracao.sei.dao; | |
2 | + | |
3 | +import java.util.HashMap; | |
4 | +import java.util.List; | |
5 | +import java.util.Map; | |
6 | + | |
7 | +import javax.ejb.Stateless; | |
8 | +import javax.inject.Inject; | |
9 | + | |
10 | +import br.gov.ans.dao.DAO; | |
11 | +import br.gov.ans.integracao.sipar.dao.ControleMigracao; | |
12 | +import br.gov.ans.integracao.sipar.dao.ControleMigracaoId; | |
13 | +import br.gov.ans.integracao.sipar.dao.DocumentoSipar; | |
14 | + | |
15 | +@Stateless | |
16 | +public class SiparDAO { | |
17 | + | |
18 | + @SuppressWarnings("cdi-ambiguous-dependency") | |
19 | + @Inject | |
20 | + private DAO<DocumentoSipar> daoDocumento; | |
21 | + | |
22 | + @Inject | |
23 | + private DAO<ControleMigracao> daoMigracao; | |
24 | + | |
25 | + public DocumentoSipar getDocumento(String numeroDocumento, String anoDocumento, String digitoDocumento){ | |
26 | + | |
27 | + Map<String, Object> params = new HashMap<String, Object>(); | |
28 | + params.put("numeroDocumento", numeroDocumento); | |
29 | + params.put("anoDocumento", anoDocumento); | |
30 | + params.put("digitoDocumento", digitoDocumento); | |
31 | + | |
32 | + List<DocumentoSipar> resultado = daoDocumento.executeNamedQuery("documentoPorNumeroAnoDigito", params); | |
33 | + | |
34 | + if(resultado.isEmpty()){ | |
35 | + return null; | |
36 | + } | |
37 | + | |
38 | + return resultado.get(0); | |
39 | + } | |
40 | + | |
41 | + public ControleMigracao buscaProcessoImportado(ControleMigracaoId id){ | |
42 | + return daoMigracao.findById(id); | |
43 | + } | |
44 | + | |
45 | + public void merge(ControleMigracao controleMigracao){ | |
46 | + daoMigracao.merge(controleMigracao); | |
47 | + } | |
48 | + | |
49 | +} | ... | ... |
src/main/java/br/gov/ans/integracao/sei/modelo/DocumentoSipar.java
... | ... | @@ -1,130 +0,0 @@ |
1 | -package br.gov.ans.integracao.sei.modelo; | |
2 | - | |
3 | -import java.util.Date; | |
4 | - | |
5 | -import javax.persistence.Entity; | |
6 | -import javax.persistence.EntityResult; | |
7 | -import javax.persistence.FieldResult; | |
8 | -import javax.persistence.Id; | |
9 | -import javax.persistence.NamedNativeQuery; | |
10 | -import javax.persistence.SqlResultSetMapping; | |
11 | - | |
12 | -@Entity | |
13 | -@SqlResultSetMapping(name="DocumentoSiparMapping", entities={ | |
14 | - @EntityResult(entityClass = DocumentoSipar.class, | |
15 | - fields = { | |
16 | - @FieldResult(name = "digito", column = "NU_DIGITO_DOCUMENTO"), | |
17 | - @FieldResult(name = "operadora", column = "CO_OPERADORA"), | |
18 | - @FieldResult(name = "emissao", column = "DT_EMISSAO_DOCUMENTO"), | |
19 | - @FieldResult(name = "registro", column = "DT_REGISTRO"), | |
20 | - @FieldResult(name = "tipo", column = "CO_TIPO_DOCUMENTO"), | |
21 | - @FieldResult(name = "resumo", column = "DS_RESUMO_DOCUMENTO"), | |
22 | - @FieldResult(name = "orgaoPosse", column = "CO_ORGAO_POSSE"), | |
23 | - @FieldResult(name = "orgaoOrigem", column = "CO_ORGAO_ORIGEM"), | |
24 | - @FieldResult(name = "orgaoRegistro", column = "CO_ORGAO_REGISTRO"), | |
25 | - @FieldResult(name = "assunto", column = "CO_ASSUNTO") | |
26 | - }) | |
27 | -}) | |
28 | -@NamedNativeQuery(name = "documentoPorNumeroAnoDigito", resultSetMapping = "DocumentoSiparMapping", | |
29 | -query = "SELECT TB.NU_DIGITO_DOCUMENTO, TB.CO_OPERADORA, TB.DT_EMISSAO_DOCUMENTO, TB.DT_REGISTRO, TB.CO_TIPO_DOCUMENTO, " | |
30 | - + "TB.DS_RESUMO_DOCUMENTO, TB.CO_ORGAO_POSSE, TB.CO_ORGAO_ORIGEM, TB.CO_ORGAO_REGISTRO, RL.CO_ASSUNTO " | |
31 | - + "FROM DBPSIPAR.TB_DOCUMENTO TB " | |
32 | - + "LEFT JOIN DBPSIPAR.RL_ASSUNTO_DOCUMENTO RL ON RL.CO_DOCUMENTO = TB.CO_SEQ_DOCUMENTO " | |
33 | - + "AND RL.NU_ANO_DOCUMENTO = TB.NU_ANO_DOCUMENTO " | |
34 | - + "WHERE TB.CO_SEQ_DOCUMENTO = :numeroDocumento " | |
35 | - + "AND TB.NU_ANO_DOCUMENTO = :anoDocumento " | |
36 | - + "AND TB.NU_DIGITO_DOCUMENTO = :digitoDocumento") | |
37 | -public class DocumentoSipar { | |
38 | - @Id | |
39 | - private String digito; | |
40 | - private String operadora; | |
41 | - private Date emissao; | |
42 | - private Date registro; | |
43 | - private String tipo; | |
44 | - private String resumo; | |
45 | - private Long orgaoPosse; | |
46 | - private Long orgaoOrigem; | |
47 | - private Long orgaoRegistro; | |
48 | - private Long assunto; | |
49 | - | |
50 | - public String getDigito() { | |
51 | - return digito; | |
52 | - } | |
53 | - | |
54 | - public void setDigito(String digito) { | |
55 | - this.digito = digito; | |
56 | - } | |
57 | - | |
58 | - public Long getAssunto() { | |
59 | - return assunto; | |
60 | - } | |
61 | - | |
62 | - public void setAssunto(Long assunto) { | |
63 | - this.assunto = assunto; | |
64 | - } | |
65 | - | |
66 | - public String getOperadora() { | |
67 | - return operadora; | |
68 | - } | |
69 | - | |
70 | - public void setOperadora(String operadora) { | |
71 | - this.operadora = operadora; | |
72 | - } | |
73 | - | |
74 | - public Date getEmissao() { | |
75 | - return emissao; | |
76 | - } | |
77 | - | |
78 | - public void setEmissao(Date emissao) { | |
79 | - this.emissao = emissao; | |
80 | - } | |
81 | - | |
82 | - public String getTipo() { | |
83 | - return tipo; | |
84 | - } | |
85 | - | |
86 | - public void setTipo(String tipo) { | |
87 | - this.tipo = tipo; | |
88 | - } | |
89 | - | |
90 | - public String getResumo() { | |
91 | - return resumo; | |
92 | - } | |
93 | - | |
94 | - public void setResumo(String resumo) { | |
95 | - this.resumo = resumo; | |
96 | - } | |
97 | - | |
98 | - public Long getOrgaoPosse() { | |
99 | - return orgaoPosse; | |
100 | - } | |
101 | - | |
102 | - public void setOrgaoPosse(Long orgaoPosse) { | |
103 | - this.orgaoPosse = orgaoPosse; | |
104 | - } | |
105 | - | |
106 | - public Long getOrgaoOrigem() { | |
107 | - return orgaoOrigem; | |
108 | - } | |
109 | - | |
110 | - public void setOrgaoOrigem(Long orgaoOrigem) { | |
111 | - this.orgaoOrigem = orgaoOrigem; | |
112 | - } | |
113 | - | |
114 | - public Long getOrgaoRegistro() { | |
115 | - return orgaoRegistro; | |
116 | - } | |
117 | - | |
118 | - public void setOrgaoRegistro(Long orgaoRegistro) { | |
119 | - this.orgaoRegistro = orgaoRegistro; | |
120 | - } | |
121 | - | |
122 | - public Date getRegistro() { | |
123 | - return registro; | |
124 | - } | |
125 | - | |
126 | - public void setRegistro(Date registro) { | |
127 | - this.registro = registro; | |
128 | - } | |
129 | - | |
130 | -} |
src/main/java/br/gov/ans/integracao/sei/modelo/ResultadoConsultaDocumento.java
... | ... | @@ -3,6 +3,7 @@ package br.gov.ans.integracao.sei.modelo; |
3 | 3 | import javax.xml.bind.annotation.XmlRootElement; |
4 | 4 | |
5 | 5 | import br.gov.ans.integracao.sei.client.RetornoConsultaDocumento; |
6 | +import br.gov.ans.integracao.sipar.dao.DocumentoSipar; | |
6 | 7 | |
7 | 8 | @XmlRootElement |
8 | 9 | public class ResultadoConsultaDocumento { | ... | ... |
src/main/java/br/gov/ans/integracao/sei/modelo/ResultadoConsultaProcesso.java
... | ... | @@ -3,6 +3,7 @@ package br.gov.ans.integracao.sei.modelo; |
3 | 3 | import javax.xml.bind.annotation.XmlRootElement; |
4 | 4 | |
5 | 5 | import br.gov.ans.integracao.sei.client.RetornoConsultaProcedimento; |
6 | +import br.gov.ans.integracao.sipar.dao.DocumentoSipar; | |
6 | 7 | |
7 | 8 | @XmlRootElement |
8 | 9 | public class ResultadoConsultaProcesso { | ... | ... |
src/main/java/br/gov/ans/integracao/sei/modelo/Tipo.java
... | ... | @@ -8,8 +8,8 @@ import javax.persistence.SqlResultSetMapping; |
8 | 8 | import javax.xml.bind.annotation.XmlRootElement; |
9 | 9 | |
10 | 10 | @Entity |
11 | -@SqlResultSetMapping(name = "TipoMapping", entities = { @EntityResult(entityClass = Tipo.class, fields = { | |
12 | - @FieldResult(name = "codigo", column = "tipoCodigo"), @FieldResult(name = "nome", column = "tipoNome") }) }) | |
11 | +//@SqlResultSetMapping(name = "TipoMapping", entities = { @EntityResult(entityClass = Tipo.class, fields = { | |
12 | +// @FieldResult(name = "codigo", column = "tipoCodigo"), @FieldResult(name = "nome", column = "tipoNome") }) }) | |
13 | 13 | @XmlRootElement |
14 | 14 | public class Tipo { |
15 | 15 | @Id | ... | ... |
src/main/java/br/gov/ans/integracao/sei/rest/ProcessoResource.java
... | ... | @@ -47,10 +47,9 @@ import br.gov.ans.integracao.sei.client.RetornoGeracaoProcedimento; |
47 | 47 | import br.gov.ans.integracao.sei.client.SeiPortTypeProxy; |
48 | 48 | import br.gov.ans.integracao.sei.client.TipoProcedimento; |
49 | 49 | import br.gov.ans.integracao.sei.dao.DocumentoDAO; |
50 | -import br.gov.ans.integracao.sei.dao.DocumentoSiparDAO; | |
50 | +import br.gov.ans.integracao.sei.dao.SiparDAO; | |
51 | 51 | import br.gov.ans.integracao.sei.dao.ProcessoDAO; |
52 | 52 | import br.gov.ans.integracao.sei.modelo.DocumentoResumido; |
53 | -import br.gov.ans.integracao.sei.modelo.DocumentoSipar; | |
54 | 53 | import br.gov.ans.integracao.sei.modelo.EnvioDeProcesso; |
55 | 54 | import br.gov.ans.integracao.sei.modelo.Motivo; |
56 | 55 | import br.gov.ans.integracao.sei.modelo.NovoAndamento; |
... | ... | @@ -63,6 +62,7 @@ import br.gov.ans.integracao.sei.modelo.ProcessoResumido; |
63 | 62 | import br.gov.ans.integracao.sei.modelo.ResultadoConsultaProcesso; |
64 | 63 | import br.gov.ans.integracao.sei.modelo.SobrestamentoProcesso; |
65 | 64 | import br.gov.ans.integracao.sei.utils.Constantes; |
65 | +import br.gov.ans.integracao.sipar.dao.DocumentoSipar; | |
66 | 66 | import br.gov.ans.utils.MessageUtils; |
67 | 67 | |
68 | 68 | |
... | ... | @@ -70,7 +70,7 @@ import br.gov.ans.utils.MessageUtils; |
70 | 70 | public class ProcessoResource { |
71 | 71 | |
72 | 72 | @Inject |
73 | - private DocumentoSiparDAO documentoSiparDAO; | |
73 | + private SiparDAO documentoSiparDAO; | |
74 | 74 | |
75 | 75 | @Inject |
76 | 76 | private ProcessoDAO processoDAO; | ... | ... |
src/main/java/br/gov/ans/integracao/sei/rest/SiparResource.java
0 → 100644
... | ... | @@ -0,0 +1,233 @@ |
1 | +package br.gov.ans.integracao.sei.rest; | |
2 | + | |
3 | +import java.net.URI; | |
4 | +import java.util.Date; | |
5 | + | |
6 | +import javax.inject.Inject; | |
7 | +import javax.ws.rs.Consumes; | |
8 | +import javax.ws.rs.DELETE; | |
9 | +import javax.ws.rs.POST; | |
10 | +import javax.ws.rs.Path; | |
11 | +import javax.ws.rs.PathParam; | |
12 | +import javax.ws.rs.core.Context; | |
13 | +import javax.ws.rs.core.MediaType; | |
14 | +import javax.ws.rs.core.Response; | |
15 | +import javax.ws.rs.core.Response.Status; | |
16 | +import javax.ws.rs.core.UriBuilder; | |
17 | +import javax.ws.rs.core.UriInfo; | |
18 | + | |
19 | +import org.jboss.logging.Logger; | |
20 | + | |
21 | +import br.gov.ans.exceptions.BusinessException; | |
22 | +import br.gov.ans.exceptions.ResourceConflictException; | |
23 | +import br.gov.ans.exceptions.ResourceNotFoundException; | |
24 | +import br.gov.ans.integracao.sei.dao.SiparDAO; | |
25 | +import br.gov.ans.integracao.sipar.dao.ControleMigracao; | |
26 | +import br.gov.ans.integracao.sipar.dao.ControleMigracaoId; | |
27 | +import br.gov.ans.utils.MessageUtils; | |
28 | + | |
29 | +@Path("/sipar") | |
30 | +public class SiparResource { | |
31 | + | |
32 | + @Inject | |
33 | + private SiparDAO dao; | |
34 | + | |
35 | + @Inject | |
36 | + private MessageUtils messages; | |
37 | + | |
38 | + @Inject | |
39 | + private Logger logger; | |
40 | + | |
41 | + @Context | |
42 | + private UriInfo uriInfo; | |
43 | + | |
44 | + private static int TRUE = 1; | |
45 | + private static int FALSE = 0; | |
46 | + | |
47 | + /** | |
48 | + * @api {put} /sipar/importados Importar Processo SIPAR | |
49 | + * @apiName importarProcesso | |
50 | + * @apiGroup SIPAR | |
51 | + * @apiVersion 2.0.0 | |
52 | + * | |
53 | + * @apiDescription Marca um processo físico (SIPAR) como importado para um processo eletrônico (SEI). | |
54 | + * | |
55 | + * @apiParam (Path Parameter) {String} processo Número do processo físico existente no SIPAR contendo 17 dígitos e iniciado com 33902. Ex. 33902111111111111 | |
56 | + * | |
57 | + * @apiExample {curl} Exemplo de requisição: | |
58 | + * curl -i http://<host>/sei-broker/service/sipar/importados | |
59 | + * | |
60 | + * @apiSuccessExample {json} Success-Response: | |
61 | + * HTTP/1.1 204 No Content | |
62 | + * | |
63 | + * @apiErrorExample {json} Error-Response: | |
64 | + * HTTP/1.1 500 Internal Server Error | |
65 | + * { | |
66 | + * "error":"Mensagem de erro." | |
67 | + * "code":"código do erro" | |
68 | + * } | |
69 | + * | |
70 | + * | |
71 | + * @apiErrorExample {json} Error-Response: | |
72 | + * HTTP/1.1 400 Bad Request | |
73 | + * { | |
74 | + * "error":"Mensagem de erro." | |
75 | + * "code":"código do erro" | |
76 | + * } | |
77 | + * | |
78 | + * | |
79 | + * @apiErrorExample {json} Error-Response: | |
80 | + * HTTP/1.1 409 Conflict | |
81 | + * { | |
82 | + * "error":"Mensagem de erro." | |
83 | + * "code":"código do erro" | |
84 | + * } | |
85 | + */ | |
86 | + @POST | |
87 | + @Path("/importados") | |
88 | + @Consumes({MediaType.TEXT_PLAIN}) | |
89 | + public Response importarProcesso(String processo) throws Exception{ | |
90 | + String numero, ano, digito; | |
91 | + | |
92 | + try{ | |
93 | + numero = extraiNumero(processo); | |
94 | + ano = extraiAno(processo); | |
95 | + digito = extraiDigitoVerificador(processo); | |
96 | + }catch(Exception ex){ | |
97 | + logger.error(messages.getMessage("erro.numero.sipar"), ex); | |
98 | + throw new BusinessException(messages.getMessage("erro.numero.sipar",processo)); | |
99 | + } | |
100 | + | |
101 | + isProcessoSipar(numero, ano, digito); | |
102 | + | |
103 | + if(isProcessoImportado(numero, ano)){ | |
104 | + throw new ResourceConflictException(messages.getMessage("erro.processo.sipar.importado",processo)); | |
105 | + } | |
106 | + | |
107 | + importarProcesso(numero, ano); | |
108 | + | |
109 | + return Response.created(getResourcePath(processo)).build(); | |
110 | + | |
111 | + } | |
112 | + | |
113 | + /** | |
114 | + * @api {put} /processos-fisicos/{processo}/desmigracao 2.Desmigra Processo | |
115 | + * @apiName desmigra | |
116 | + * @apiGroup SIPAR | |
117 | + * @apiVersion 1.0.0 | |
118 | + * | |
119 | + * @apiDescription Desmigra um processo iniciado no SIPAR e transferido para o SEI, permitindo novamente a anexação e tramitação no SIPAR. | |
120 | + * | |
121 | + * @apiParam (Path Parameter) {String} processo Número do processo físico existente no SIPAR contendo 17 dígitos e iniciado com 33902. Ex. 33902111111111111 | |
122 | + * | |
123 | + * @apiExample {curl} Exemplo de requisição: | |
124 | + * curl -i http://<host>/sipar-broker/service/processos-fisicos/33902111111111111/desmigracao | |
125 | + * | |
126 | + * @apiSuccessExample {json} Success-Response: | |
127 | + * HTTP/1.1 204 No Content | |
128 | + * | |
129 | + * @apiErrorExample {json} Error-Response: | |
130 | + * HTTP/1.1 500 Internal Server Error | |
131 | + * { | |
132 | + * "error":"Mensagem de erro." | |
133 | + * "code":"código do erro" | |
134 | + * } | |
135 | + * | |
136 | + * | |
137 | + * @apiErrorExample {json} Error-Response: | |
138 | + * HTTP/1.1 400 Bad Request | |
139 | + * { | |
140 | + * "error":"Mensagem de erro." | |
141 | + * "code":"código do erro" | |
142 | + * } | |
143 | + * | |
144 | + * | |
145 | + * @apiErrorExample {json} Error-Response: | |
146 | + * HTTP/1.1 409 Conflict | |
147 | + * { | |
148 | + * "error":"Mensagem de erro." | |
149 | + * "code":"código do erro" | |
150 | + * } | |
151 | + */ | |
152 | + @DELETE | |
153 | + @Path("/importados/{processo:\\d+}") | |
154 | + public Response cancelarImportacaoProcesso(@PathParam("processo") String processo) throws Exception{ | |
155 | + String numero, ano, digito; | |
156 | + | |
157 | + try{ | |
158 | + numero = extraiNumero(processo); | |
159 | + ano = extraiAno(processo); | |
160 | + digito = extraiDigitoVerificador(processo); | |
161 | + }catch(Exception ex){ | |
162 | + logger.error(messages.getMessage("erro.numero.sipar"), ex); | |
163 | + throw new BusinessException(messages.getMessage("erro.numero.sipar",processo)); | |
164 | + } | |
165 | + | |
166 | + if(!isProcessoImportado(numero, ano)){ | |
167 | + throw new ResourceNotFoundException(messages.getMessage("erro.processo.nao.importado",processo)); | |
168 | + } | |
169 | + | |
170 | + cancelarImportacaoProcesso(numero, ano); | |
171 | + | |
172 | + return Response.noContent().build(); | |
173 | + | |
174 | + } | |
175 | + | |
176 | + private void importarProcesso(String numeroDocumento, String anoDocumento){ | |
177 | + ControleMigracao controle = new ControleMigracao(); | |
178 | + controle.setId(getControleMigracaoID(numeroDocumento, anoDocumento)); | |
179 | + controle.setMigrado(TRUE); | |
180 | + controle.setDataUltimaAlteracao(new Date()); | |
181 | + | |
182 | + dao.merge(controle); | |
183 | + } | |
184 | + | |
185 | + private void cancelarImportacaoProcesso(String numeroDocumento, String anoDocumento){ | |
186 | + ControleMigracao controle = new ControleMigracao(); | |
187 | + controle.setId(getControleMigracaoID(numeroDocumento, anoDocumento)); | |
188 | + controle.setMigrado(FALSE); | |
189 | + controle.setDataUltimaAlteracao(new Date()); | |
190 | + | |
191 | + dao.merge(controle); | |
192 | + } | |
193 | + | |
194 | + private ControleMigracaoId getControleMigracaoID(String numeroDocumento, String anoDocumento){ | |
195 | + return new ControleMigracaoId(numeroDocumento, anoDocumento); | |
196 | + } | |
197 | + | |
198 | + private String extraiNumero(String processo) { | |
199 | + return processo.substring(0,(processo.length() - 6)); | |
200 | + } | |
201 | + | |
202 | + private String extraiAno(String processo) { | |
203 | + return processo.substring((processo.length() - 6), (processo.length() - 2)); | |
204 | + } | |
205 | + | |
206 | + private String extraiDigitoVerificador(String processo) { | |
207 | + return processo.substring((processo.length() - 2), processo.length()); | |
208 | + } | |
209 | + | |
210 | + public boolean isProcessoImportado(String numeroDocumento, String anoDocumento){ | |
211 | + ControleMigracao processoMigrado = dao.buscaProcessoImportado(getControleMigracaoID(numeroDocumento, anoDocumento)); | |
212 | + | |
213 | + if(processoMigrado != null && processoMigrado.isProcessoMigrado()){ | |
214 | + return true; | |
215 | + } | |
216 | + | |
217 | + return false; | |
218 | + } | |
219 | + | |
220 | + public void isProcessoSipar(String numeroDocumento, String anoDocumento, String digitoDocumento) throws ResourceNotFoundException{ | |
221 | + if(dao.getDocumento(numeroDocumento, anoDocumento, digitoDocumento) == null){ | |
222 | + throw new ResourceNotFoundException(messages.getMessage("erro.processo.nao.pertence.sipar")); | |
223 | + } | |
224 | + } | |
225 | + | |
226 | + public URI getResourcePath(String resourceId){ | |
227 | + UriBuilder builder = uriInfo.getAbsolutePathBuilder(); | |
228 | + | |
229 | + builder.path(resourceId); | |
230 | + | |
231 | + return builder.build(); | |
232 | + } | |
233 | +} | ... | ... |
src/main/java/br/gov/ans/integracao/sei/rest/TipoConferenciaResource.java
src/main/java/br/gov/ans/integracao/sei/rest/UsuarioResource.java
... | ... | @@ -10,10 +10,10 @@ import java.util.List; |
10 | 10 | |
11 | 11 | import javax.inject.Inject; |
12 | 12 | import javax.ws.rs.Consumes; |
13 | +import javax.ws.rs.DELETE; | |
13 | 14 | import javax.ws.rs.GET; |
14 | 15 | import javax.ws.rs.NotFoundException; |
15 | 16 | import javax.ws.rs.POST; |
16 | -import javax.ws.rs.PUT; | |
17 | 17 | import javax.ws.rs.Path; |
18 | 18 | import javax.ws.rs.PathParam; |
19 | 19 | import javax.ws.rs.Produces; |
... | ... | @@ -49,7 +49,9 @@ public class UsuarioResource { |
49 | 49 | * @apiName listarUsuarios |
50 | 50 | * @apiGroup Usuario |
51 | 51 | * @apiVersion 2.0.0 |
52 | - * | |
52 | + * | |
53 | + * @apiPermission RO_SEI_BROKER | |
54 | + * | |
53 | 55 | * @apiDescription Este método realiza uma consulta aos usuários cadastrados que possuem o perfil "Básico". |
54 | 56 | * |
55 | 57 | * @apiParam (Path Parameters) {String} unidade Sigla da Unidade cadastrada no SEI. |
... | ... | @@ -81,7 +83,9 @@ public class UsuarioResource { |
81 | 83 | * @apiName buscarUsuario |
82 | 84 | * @apiGroup Usuario |
83 | 85 | * @apiVersion 2.0.0 |
84 | - * | |
86 | + * | |
87 | + * @apiPermission RO_SEI_BROKER | |
88 | + * | |
85 | 89 | * @apiDescription Este método realiza a uma busca pelo login do usuário. |
86 | 90 | * |
87 | 91 | * @apiParam (Path Parameters) {String} unidade Sigla da Unidade cadastrada no SEI. |
... | ... | @@ -111,7 +115,9 @@ public class UsuarioResource { |
111 | 115 | * @apiName atribuirProcesso |
112 | 116 | * @apiGroup Usuario |
113 | 117 | * @apiVersion 2.0.0 |
114 | - * | |
118 | + * | |
119 | + * @apiPermission RO_SEI_BROKER | |
120 | + * | |
115 | 121 | * @apiDescription Este método atribui o processo a um usuário. |
116 | 122 | * |
117 | 123 | * @apiParam (Path Parameters) {String} unidade Sigla da Unidade cadastrada no SEI |
... | ... | @@ -155,7 +161,9 @@ public class UsuarioResource { |
155 | 161 | * @apiName incluirUsuario |
156 | 162 | * @apiGroup Usuario |
157 | 163 | * @apiVersion 2.0.0 |
158 | - * | |
164 | + * | |
165 | + * @apiPermission RO_SEI_BROKER_ADM | |
166 | + * | |
159 | 167 | * @apiDescription Este método realiza a inclusão de novos usuários ou alterarações nos usuários existentes. |
160 | 168 | * |
161 | 169 | * @apiParam (Request Body) {String} codigo Código que deseja atribuir ao usuário |
... | ... | @@ -191,11 +199,13 @@ public class UsuarioResource { |
191 | 199 | |
192 | 200 | |
193 | 201 | /** |
194 | - * @api {post} /usuarios/excluir Excluir usuário | |
202 | + * @api {delete} /usuarios/:login Excluir usuário | |
195 | 203 | * @apiName excluirUsuario |
196 | 204 | * @apiGroup Usuario |
197 | 205 | * @apiVersion 2.0.0 |
198 | - * | |
206 | + * | |
207 | + * @apiPermission RO_SEI_BROKER_ADM | |
208 | + * | |
199 | 209 | * @apiDescription Este método realiza a exclusão de usuários. |
200 | 210 | * |
201 | 211 | * @apiParam {String} codigo Código que deseja atribuir ao usuário |
... | ... | @@ -203,7 +213,7 @@ public class UsuarioResource { |
203 | 213 | * @apiParam {String} login Login que será atribuído ao usuário |
204 | 214 | * |
205 | 215 | * @apiExample Exemplo de requisição: |
206 | - * endpoint: http://<host>/sei-broker/service/usuarios/excluir | |
216 | + * endpoint: [DELETE] http://<host>/sei-broker/service/usuarios/andre.guimaraes | |
207 | 217 | * |
208 | 218 | * body: |
209 | 219 | * { |
... | ... | @@ -221,21 +231,23 @@ public class UsuarioResource { |
221 | 231 | * "code":"código do erro" |
222 | 232 | * } |
223 | 233 | */ |
224 | - @POST | |
225 | - @Path("/usuarios/excluir") | |
234 | + @DELETE | |
235 | + @Path("/usuarios/{login}") | |
226 | 236 | @Consumes({MediaType.APPLICATION_JSON}) |
227 | 237 | @Produces(MediaType.APPLICATION_JSON) |
228 | - public Boolean excluirUsuario(Usuario usuario) throws Exception{ | |
238 | + public Boolean excluirUsuario(@PathParam("login") String login,Usuario usuario) throws Exception{ | |
229 | 239 | return manterUsuario(Acao.EXCLUIR, usuario); |
230 | 240 | } |
231 | 241 | |
232 | 242 | |
233 | 243 | /** |
234 | - * @api {put} /usuarios/desativar Desativar usuário | |
244 | + * @api {delete} /usuarios/ativos Desativar usuário | |
235 | 245 | * @apiName desativarUsuario |
236 | 246 | * @apiGroup Usuario |
237 | 247 | * @apiVersion 2.0.0 |
238 | - * | |
248 | + * | |
249 | + * @apiPermission RO_SEI_BROKER_ADM | |
250 | + * | |
239 | 251 | * @apiDescription Este método desativa usuários. |
240 | 252 | * |
241 | 253 | * @apiParam {String} codigo Código que deseja atribuir ao usuário |
... | ... | @@ -243,7 +255,7 @@ public class UsuarioResource { |
243 | 255 | * @apiParam {String} login Login que será atribuído ao usuário |
244 | 256 | * |
245 | 257 | * @apiExample Exemplo de requisição: |
246 | - * endpoint: http://<host>/sei-broker/service/usuarios/desativar | |
258 | + * endpoint: [DELETE] http://<host>/sei-broker/service/usuarios/ativos/andre.guimaraes | |
247 | 259 | * |
248 | 260 | * body: |
249 | 261 | * { |
... | ... | @@ -261,21 +273,23 @@ public class UsuarioResource { |
261 | 273 | * "code":"código do erro" |
262 | 274 | * } |
263 | 275 | */ |
264 | - @PUT | |
265 | - @Path("/usuarios/desativar") | |
276 | + @DELETE | |
277 | + @Path("/usuarios/ativos/{login}") | |
266 | 278 | @Consumes({MediaType.APPLICATION_JSON}) |
267 | 279 | @Produces(MediaType.APPLICATION_JSON) |
268 | - public Boolean desativarUsuario(Usuario usuario) throws Exception{ | |
280 | + public Boolean desativarUsuario(@PathParam("login") String login,Usuario usuario) throws Exception{ | |
269 | 281 | return manterUsuario(Acao.DESATIVAR, usuario); |
270 | 282 | } |
271 | 283 | |
272 | 284 | |
273 | 285 | /** |
274 | - * @api {put} /usuarios/ativar Ativar usuário | |
286 | + * @api {post} /usuarios/ativos Ativar usuário | |
275 | 287 | * @apiName ativarUsuario |
276 | 288 | * @apiGroup Usuario |
277 | 289 | * @apiVersion 2.0.0 |
278 | - * | |
290 | + * | |
291 | + * @apiPermission RO_SEI_BROKER_ADM | |
292 | + * | |
279 | 293 | * @apiDescription Este método reativa usuários. |
280 | 294 | * |
281 | 295 | * @apiParam {String} codigo Código que deseja atribuir ao usuário |
... | ... | @@ -283,7 +297,7 @@ public class UsuarioResource { |
283 | 297 | * @apiParam {String} login Login que será atribuído ao usuário |
284 | 298 | * |
285 | 299 | * @apiExample Exemplo de requisição: |
286 | - * endpoint: http://<host>/sei-broker/service/usuarios/ativar | |
300 | + * endpoint: http://<host>/sei-broker/service/usuarios/ativos | |
287 | 301 | * |
288 | 302 | * body: |
289 | 303 | * { |
... | ... | @@ -301,8 +315,8 @@ public class UsuarioResource { |
301 | 315 | * "code":"código do erro" |
302 | 316 | * } |
303 | 317 | */ |
304 | - @PUT | |
305 | - @Path("/usuarios/ativar") | |
318 | + @POST | |
319 | + @Path("/usuarios/ativos") | |
306 | 320 | @Consumes({MediaType.APPLICATION_JSON}) |
307 | 321 | @Produces(MediaType.APPLICATION_JSON) |
308 | 322 | public Boolean ativarUsuario(Usuario usuario) throws Exception{ | ... | ... |
src/main/java/br/gov/ans/integracao/sipar/dao/ControleMigracao.java
0 → 100644
... | ... | @@ -0,0 +1,56 @@ |
1 | +package br.gov.ans.integracao.sipar.dao; | |
2 | + | |
3 | +import java.io.Serializable; | |
4 | +import java.util.Date; | |
5 | + | |
6 | +import javax.persistence.Column; | |
7 | +import javax.persistence.EmbeddedId; | |
8 | +import javax.persistence.Entity; | |
9 | +import javax.persistence.Table; | |
10 | +import javax.persistence.Temporal; | |
11 | +import javax.persistence.TemporalType; | |
12 | + | |
13 | +@Entity | |
14 | +@Table(schema="DBPSIPAR", name="TB_CONTROLE_MIGRACAO_SIPAR_SEI") | |
15 | +public class ControleMigracao implements Serializable { | |
16 | + | |
17 | + private static final long serialVersionUID = 1L; | |
18 | + | |
19 | + @EmbeddedId | |
20 | + private ControleMigracaoId id; | |
21 | + | |
22 | + @Temporal(TemporalType.TIMESTAMP) | |
23 | + @Column(name = "DT_ULTIMA_ALTERACAO_CONTROLE") | |
24 | + private Date dataUltimaAlteracao; | |
25 | + | |
26 | + @Column(name="LG_DOCUMENTO_MIGRACAO_SEI") | |
27 | + private Integer migrado; | |
28 | + | |
29 | + public ControleMigracaoId getId() { | |
30 | + return id; | |
31 | + } | |
32 | + | |
33 | + public void setId(ControleMigracaoId id) { | |
34 | + this.id = id; | |
35 | + } | |
36 | + | |
37 | + public Date getDataUltimaAlteracao() { | |
38 | + return dataUltimaAlteracao; | |
39 | + } | |
40 | + | |
41 | + public void setDataUltimaAlteracao(Date dataUltimaAlteracao) { | |
42 | + this.dataUltimaAlteracao = dataUltimaAlteracao; | |
43 | + } | |
44 | + | |
45 | + public Integer getMigrado() { | |
46 | + return migrado; | |
47 | + } | |
48 | + | |
49 | + public void setMigrado(Integer migrado) { | |
50 | + this.migrado = migrado; | |
51 | + } | |
52 | + | |
53 | + public boolean isProcessoMigrado() { | |
54 | + return this.migrado == 1 ? true : false; | |
55 | + } | |
56 | +} | ... | ... |
src/main/java/br/gov/ans/integracao/sipar/dao/ControleMigracaoId.java
0 → 100644
... | ... | @@ -0,0 +1,61 @@ |
1 | +package br.gov.ans.integracao.sipar.dao; | |
2 | + | |
3 | +import java.io.Serializable; | |
4 | + | |
5 | +import javax.persistence.Column; | |
6 | +import javax.persistence.Embeddable; | |
7 | + | |
8 | +@Embeddable | |
9 | +public class ControleMigracaoId implements Serializable { | |
10 | + | |
11 | + private static final long serialVersionUID = 1L; | |
12 | + | |
13 | + @Column(name = "CD_SEQ_DOCUMENTO") | |
14 | + private String numero; | |
15 | + | |
16 | + @Column(name = "NR_ANO_DOCUMENTO") | |
17 | + private String ano; | |
18 | + | |
19 | + public ControleMigracaoId() { | |
20 | + } | |
21 | + | |
22 | + public ControleMigracaoId(String numero, String ano) { | |
23 | + this.numero = numero; | |
24 | + this.ano = ano; | |
25 | + } | |
26 | + | |
27 | + public String getNumero() { | |
28 | + return numero; | |
29 | + } | |
30 | + | |
31 | + public void setNumero(String numero) { | |
32 | + this.numero = numero; | |
33 | + } | |
34 | + | |
35 | + public String getAno() { | |
36 | + return ano; | |
37 | + } | |
38 | + | |
39 | + public void setAno(String ano) { | |
40 | + this.ano = ano; | |
41 | + } | |
42 | + | |
43 | + @Override | |
44 | + public boolean equals(Object obj) { | |
45 | + if (obj instanceof ControleMigracao) { | |
46 | + ControleMigracao controleMigracao = (ControleMigracao) obj; | |
47 | + return (this.numero != null && this.numero.equals(controleMigracao.getId().getNumero()) && | |
48 | + this.ano != null && this.ano.equals(controleMigracao.getId().getAno())); | |
49 | + } | |
50 | + return false; | |
51 | + } | |
52 | + | |
53 | + @Override | |
54 | + public int hashCode() { | |
55 | + final int numeroPrimo = 31; | |
56 | + int resultado = 1; | |
57 | + resultado = (numeroPrimo * resultado) + ((this.numero == null) ? 0 : this.numero.hashCode()); | |
58 | + resultado = (numeroPrimo * resultado) + ((this.ano == null) ? 0 : this.ano.hashCode()); | |
59 | + return resultado; | |
60 | + } | |
61 | +} | ... | ... |
src/main/java/br/gov/ans/integracao/sipar/dao/DocumentoSipar.java
0 → 100644
... | ... | @@ -0,0 +1,130 @@ |
1 | +package br.gov.ans.integracao.sipar.dao; | |
2 | + | |
3 | +import java.util.Date; | |
4 | + | |
5 | +import javax.persistence.Entity; | |
6 | +import javax.persistence.EntityResult; | |
7 | +import javax.persistence.FieldResult; | |
8 | +import javax.persistence.Id; | |
9 | +import javax.persistence.NamedNativeQuery; | |
10 | +import javax.persistence.SqlResultSetMapping; | |
11 | + | |
12 | +@Entity | |
13 | +@SqlResultSetMapping(name="DocumentoSiparMapping", entities={ | |
14 | + @EntityResult(entityClass = DocumentoSipar.class, | |
15 | + fields = { | |
16 | + @FieldResult(name = "digito", column = "NU_DIGITO_DOCUMENTO"), | |
17 | + @FieldResult(name = "operadora", column = "CO_OPERADORA"), | |
18 | + @FieldResult(name = "emissao", column = "DT_EMISSAO_DOCUMENTO"), | |
19 | + @FieldResult(name = "registro", column = "DT_REGISTRO"), | |
20 | + @FieldResult(name = "tipo", column = "CO_TIPO_DOCUMENTO"), | |
21 | + @FieldResult(name = "resumo", column = "DS_RESUMO_DOCUMENTO"), | |
22 | + @FieldResult(name = "orgaoPosse", column = "CO_ORGAO_POSSE"), | |
23 | + @FieldResult(name = "orgaoOrigem", column = "CO_ORGAO_ORIGEM"), | |
24 | + @FieldResult(name = "orgaoRegistro", column = "CO_ORGAO_REGISTRO"), | |
25 | + @FieldResult(name = "assunto", column = "CO_ASSUNTO") | |
26 | + }) | |
27 | +}) | |
28 | +@NamedNativeQuery(name = "documentoPorNumeroAnoDigito", resultSetMapping = "DocumentoSiparMapping", | |
29 | +query = "SELECT TB.NU_DIGITO_DOCUMENTO, TB.CO_OPERADORA, TB.DT_EMISSAO_DOCUMENTO, TB.DT_REGISTRO, TB.CO_TIPO_DOCUMENTO, " | |
30 | + + "TB.DS_RESUMO_DOCUMENTO, TB.CO_ORGAO_POSSE, TB.CO_ORGAO_ORIGEM, TB.CO_ORGAO_REGISTRO, RL.CO_ASSUNTO " | |
31 | + + "FROM DBPSIPAR.TB_DOCUMENTO TB " | |
32 | + + "LEFT JOIN DBPSIPAR.RL_ASSUNTO_DOCUMENTO RL ON RL.CO_DOCUMENTO = TB.CO_SEQ_DOCUMENTO " | |
33 | + + "AND RL.NU_ANO_DOCUMENTO = TB.NU_ANO_DOCUMENTO " | |
34 | + + "WHERE TB.CO_SEQ_DOCUMENTO = :numeroDocumento " | |
35 | + + "AND TB.NU_ANO_DOCUMENTO = :anoDocumento " | |
36 | + + "AND TB.NU_DIGITO_DOCUMENTO = :digitoDocumento") | |
37 | +public class DocumentoSipar { | |
38 | + @Id | |
39 | + private String digito; | |
40 | + private String operadora; | |
41 | + private Date emissao; | |
42 | + private Date registro; | |
43 | + private String tipo; | |
44 | + private String resumo; | |
45 | + private Long orgaoPosse; | |
46 | + private Long orgaoOrigem; | |
47 | + private Long orgaoRegistro; | |
48 | + private Long assunto; | |
49 | + | |
50 | + public String getDigito() { | |
51 | + return digito; | |
52 | + } | |
53 | + | |
54 | + public void setDigito(String digito) { | |
55 | + this.digito = digito; | |
56 | + } | |
57 | + | |
58 | + public Long getAssunto() { | |
59 | + return assunto; | |
60 | + } | |
61 | + | |
62 | + public void setAssunto(Long assunto) { | |
63 | + this.assunto = assunto; | |
64 | + } | |
65 | + | |
66 | + public String getOperadora() { | |
67 | + return operadora; | |
68 | + } | |
69 | + | |
70 | + public void setOperadora(String operadora) { | |
71 | + this.operadora = operadora; | |
72 | + } | |
73 | + | |
74 | + public Date getEmissao() { | |
75 | + return emissao; | |
76 | + } | |
77 | + | |
78 | + public void setEmissao(Date emissao) { | |
79 | + this.emissao = emissao; | |
80 | + } | |
81 | + | |
82 | + public String getTipo() { | |
83 | + return tipo; | |
84 | + } | |
85 | + | |
86 | + public void setTipo(String tipo) { | |
87 | + this.tipo = tipo; | |
88 | + } | |
89 | + | |
90 | + public String getResumo() { | |
91 | + return resumo; | |
92 | + } | |
93 | + | |
94 | + public void setResumo(String resumo) { | |
95 | + this.resumo = resumo; | |
96 | + } | |
97 | + | |
98 | + public Long getOrgaoPosse() { | |
99 | + return orgaoPosse; | |
100 | + } | |
101 | + | |
102 | + public void setOrgaoPosse(Long orgaoPosse) { | |
103 | + this.orgaoPosse = orgaoPosse; | |
104 | + } | |
105 | + | |
106 | + public Long getOrgaoOrigem() { | |
107 | + return orgaoOrigem; | |
108 | + } | |
109 | + | |
110 | + public void setOrgaoOrigem(Long orgaoOrigem) { | |
111 | + this.orgaoOrigem = orgaoOrigem; | |
112 | + } | |
113 | + | |
114 | + public Long getOrgaoRegistro() { | |
115 | + return orgaoRegistro; | |
116 | + } | |
117 | + | |
118 | + public void setOrgaoRegistro(Long orgaoRegistro) { | |
119 | + this.orgaoRegistro = orgaoRegistro; | |
120 | + } | |
121 | + | |
122 | + public Date getRegistro() { | |
123 | + return registro; | |
124 | + } | |
125 | + | |
126 | + public void setRegistro(Date registro) { | |
127 | + this.registro = registro; | |
128 | + } | |
129 | + | |
130 | +} | ... | ... |
src/main/resources/META-INF/persistence.xml
... | ... | @@ -7,7 +7,7 @@ |
7 | 7 | |
8 | 8 | <jta-data-source>jdbc/sei-broker</jta-data-source> |
9 | 9 | |
10 | - <class>br.gov.ans.integracao.sei.modelo.DocumentoSipar</class> | |
10 | + <class>br.gov.ans.integracao.sipar.dao.DocumentoSipar</class> | |
11 | 11 | <class>br.gov.ans.integracao.sei.modelo.InclusaoDocumento</class> |
12 | 12 | <class>br.gov.ans.modelo.LogIntegracaoSistemica</class> |
13 | 13 | ... | ... |
src/main/resources/messages.properties
... | ... | @@ -32,9 +32,12 @@ erro.persistir.confirmacao.inclusao.documento = Ocorreu um erro ao persistir a c |
32 | 32 | erro.processar.conteudo.json = Erro ao processar o conteudo JSON, verifique a formação do JSON e se o envio foi realizado em Base64. |
33 | 33 | erro.processo.anexado.nao.infomado = Número do processo a anexar não informado. |
34 | 34 | erro.processo.incluir.bloco = Não foi possivel incluir o processo no bloco. |
35 | +erro.processo.nao.importado = O processo {0} não foi encontrado nos registros de importação. | |
35 | 36 | erro.processo.nao.pertence.sei = O processo {0} não pertence ao SEI. |
37 | +erro.processo.nao.pertence.sipar = O processo {0} não pertence ao SIPAR. | |
36 | 38 | erro.processo.relacionado.nao.infomado = É necessário informar o número do processo relacionado. |
37 | 39 | erro.processo.sem.documentos = Nenhum documento anexado ao processo {0}. |
40 | +erro.processo.sipar.importado = O processo {0} já foi importado para o SEI. | |
38 | 41 | erro.registrar.exclusao.documento = Erro ao registrar a exclusão do documento {0}. |
39 | 42 | erro.registro.inclusao = Ocorreu um erro ao persistir o registro de inclusão. |
40 | 43 | erro.relacionar.processo = Ocorreu um erro ao relacionar os processos. | ... | ... |
src/test/java/br/gov/ans/integracao/sei/testes/Base64Decoder.java
... | ... | @@ -5,7 +5,7 @@ import org.apache.commons.codec.binary.Base64; |
5 | 5 | |
6 | 6 | public class Base64Decoder { |
7 | 7 | public static void main(String[] args) { |
8 | - String base64 = "eyJudW1lcm9Qcm9jZXNzbyI6IjMzOTEwMDAwMTIzMjAxNzkzIiwKInJhemFvU29jaWFsIjoiQU1JTCBBU1NJU1TKTkNJQSBNyURJQ0EgSU5URVJOQUNJT05BTCBTLkEuIiwKImNucGpPcGVyYWRvcmEiOiIyOTMwOTEyNzAwMDE3OSIsCiJudW1lcm9SZWdpc3Ryb0FucyI6IjMyNjMwNSIsCiJkYXRhUHJvdG9jb2xvIjoiMDEvMDIvMjAxNyIsCiJtZXNJbmljaW9BcGxpY2FjYW8iOiIwNS8yMDE3IiwKImFub0luaWNpb0FwbGljYWNhbyI6IjA0LzIwMTgifQo="; | |
8 | + String base64 = "PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PlRFU1RFVEVTVEU8L2JvZHk+PC9odG1sPg=="; | |
9 | 9 | |
10 | 10 | System.out.println(new String(Base64.decodeBase64(base64))); |
11 | 11 | } | ... | ... |
src/test/java/br/gov/ans/integracao/sei/testes/Base64Encoder.java
1 | 1 | package br.gov.ans.integracao.sei.testes; |
2 | 2 | |
3 | +import java.io.File; | |
4 | +import java.io.FileInputStream; | |
5 | +import java.io.IOException; | |
6 | + | |
3 | 7 | import org.apache.commons.codec.binary.Base64; |
4 | 8 | |
5 | 9 | public class Base64Encoder { |
6 | 10 | |
7 | - public static void main(String[] args) { | |
8 | - String string = "{\"conteudo\":\"tentativa 1 
 tentativa 2 tentativa 3 \\r tentativa 4 \\n fim! \"}"; | |
9 | - System.out.println(string); | |
10 | - System.out.println(Base64.encodeBase64String(string.getBytes())); | |
11 | + public static void main(String[] args) throws IOException { | |
12 | + String string = "{\"content\":\"tentativa 1 
 tentativa 2 tentativa 3 \\r tentativa 4 \\n fim! <br> teste da tag \"}"; | |
13 | + | |
14 | +// System.out.println(string); | |
15 | + | |
16 | +// System.out.println(Base64.encodeBase64String(string.getBytes())); | |
17 | + Base64Encoder encoder = new Base64Encoder(); | |
18 | + | |
19 | + System.out.println(encoder.getBase64("0693609.pdf")); | |
20 | + System.out.println(encoder.getMD5("0693609.pdf")); | |
21 | + 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())); | |
22 | + } | |
23 | + | |
24 | + public String getBase64(String arquivo){ | |
25 | + ClassLoader classLoader = getClass().getClassLoader(); | |
26 | + | |
27 | + File file = new File(classLoader.getResource(arquivo).getFile()); | |
28 | + | |
29 | + byte[] bytes = new byte[(int) file.length()]; | |
30 | + | |
31 | + try { | |
32 | + FileInputStream fileInputStream = new FileInputStream(file); | |
33 | + fileInputStream.read(bytes); | |
34 | + } catch (Exception e) { | |
35 | + e.printStackTrace(); | |
36 | + } | |
37 | + | |
38 | + return Base64.encodeBase64String(bytes); | |
11 | 39 | } |
12 | 40 | |
41 | + public String getMD5(String arquivo) throws IOException{ | |
42 | + ClassLoader classLoader = getClass().getClassLoader(); | |
43 | + FileInputStream fis = new FileInputStream(new File(classLoader.getResource(arquivo).getFile())); | |
44 | + String md5 = org.apache.commons.codec.digest.DigestUtils.md5Hex(fis); | |
45 | + fis.close(); | |
46 | + | |
47 | + return md5; | |
48 | + } | |
13 | 49 | } |
50 | + | ... | ... |
src/test/java/br/gov/ans/integracao/sei/testes/FunctionalTest.java
... | ... | @@ -6,8 +6,8 @@ import com.jayway.restassured.RestAssured; |
6 | 6 | |
7 | 7 | public class FunctionalTest { |
8 | 8 | |
9 | - protected final String USUARIO = "desenv_integracao_sei"; | |
10 | - protected final String SENHA = "integra_sei_2016"; | |
9 | + protected final String USUARIO = "andre.guimaraes"; | |
10 | + protected final String SENHA = "Merda de senha!"; | |
11 | 11 | protected static final Boolean DESENVOLVIMENTO = false; |
12 | 12 | |
13 | 13 | @BeforeClass | ... | ... |
src/test/java/br/gov/ans/integracao/sei/testes/SeiBrokerTest.java
... | ... | @@ -105,12 +105,12 @@ public class SeiBrokerTest extends FunctionalTest{ |
105 | 105 | |
106 | 106 | @Test |
107 | 107 | public void AG_consultarDocumentosPorInteressadosTest(){ |
108 | - given().auth().basic(USUARIO, SENHA).accept("application/json").when().get("/363022/documentos").then().statusCode(200); | |
108 | + given().auth().basic(USUARIO, SENHA).accept("application/json").when().get("/interessados/363022/documentos").then().statusCode(200); | |
109 | 109 | } |
110 | 110 | |
111 | 111 | @Test |
112 | - public void AH_consultarProcessosPorInteressadosTest(){ | |
113 | - given().auth().basic(USUARIO, SENHA).accept("application/json").when().get("/363022/processos").then().statusCode(200); | |
112 | + public void AH_consultarProcessos(){ | |
113 | + given().auth().basic(USUARIO, SENHA).accept("application/json").when().get("/processos").then().statusCode(200); | |
114 | 114 | } |
115 | 115 | |
116 | 116 | @Test |
... | ... | @@ -143,7 +143,7 @@ public class SeiBrokerTest extends FunctionalTest{ |
143 | 143 | given().auth().basic(USUARIO, SENHA).accept("application/json").when().get("/unidades/cotec/codigo").then().statusCode(200); |
144 | 144 | } |
145 | 145 | |
146 | - @Test | |
146 | +// @Test | |
147 | 147 | public void AP_cancelarDocumentoTest(){ |
148 | 148 | given() |
149 | 149 | .auth() |
... | ... | @@ -381,7 +381,7 @@ public class SeiBrokerTest extends FunctionalTest{ |
381 | 381 | response.then().statusCode(200); |
382 | 382 | } |
383 | 383 | |
384 | -// @Test | |
384 | +//// @Test | |
385 | 385 | // public void BL_incluirDocumentoPorArquivoTest() { |
386 | 386 | // Response response = given() |
387 | 387 | // .auth() |
... | ... | @@ -561,8 +561,10 @@ public class SeiBrokerTest extends FunctionalTest{ |
561 | 561 | i.setNome("BRADESCO SAUDE E ASSISTENCIA S.A"); |
562 | 562 | i.setSigla("363022"); |
563 | 563 | documento.setInteressados(new Interessado[]{i}); |
564 | - | |
565 | - documento.setConteudo(Base64.encodeBase64String("<BR><BR>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.<BR>".getBytes())); | |
564 | + | |
565 | + documento.setConteudo("PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PlRFU1RFVEVTVEU8L2JvZHk+PC9odG1sPg=="); | |
566 | + | |
567 | +// documento.setConteudo(Base64.encodeBase64String("<BR><BR>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.<BR>".getBytes())); | |
566 | 568 | |
567 | 569 | return documento; |
568 | 570 | } | ... | ... |