Commit 54e7357c538f3d4d7236a393b3ab6712cbf1a44a

Authored by andre.guimaraes
1 parent 417b7ae2

Corrige serviço listar unidades do processo

O serviço estava inconsistente e não considerava a tarefa conclusão
automatica. Em alguns casos unidades onde o processo estava concluído
eram retornadas.
src/main/java/br/gov/ans/integracao/sei/dao/UnidadeDAO.java
@@ -2,6 +2,7 @@ package br.gov.ans.integracao.sei.dao; @@ -2,6 +2,7 @@ package br.gov.ans.integracao.sei.dao;
2 2
3 import java.util.List; 3 import java.util.List;
4 import java.util.function.Predicate; 4 import java.util.function.Predicate;
  5 +import java.util.stream.Collector;
5 import java.util.stream.Collectors; 6 import java.util.stream.Collectors;
6 7
7 import javax.persistence.EntityManager; 8 import javax.persistence.EntityManager;
@@ -20,11 +21,12 @@ public class UnidadeDAO { @@ -20,11 +21,12 @@ public class UnidadeDAO {
20 private static final int CONCLUSAO_PROCESSO = 28; 21 private static final int CONCLUSAO_PROCESSO = 28;
21 private static final int REABERTURA_PROCESSO = 29; 22 private static final int REABERTURA_PROCESSO = 29;
22 private static final int ENVIO_PROCESSO = 32; 23 private static final int ENVIO_PROCESSO = 32;
  24 + private static final int CONCLUSAO_AUTOMATICA = 41;
23 private static final int RECEBIMENTO_PROCESSO = 48; 25 private static final int RECEBIMENTO_PROCESSO = 48;
24 - 26 +
25 public List<Unidade> listarUnidadesProcesso(String idProcedimento){ 27 public List<Unidade> listarUnidadesProcesso(String idProcedimento){
26 StringBuilder sql = new StringBuilder("SELECT u.id_unidade idUnidade, u.sigla, u.descricao, u.sin_protocolo sinProtocolo, "); 28 StringBuilder sql = new StringBuilder("SELECT u.id_unidade idUnidade, u.sigla, u.descricao, u.sin_protocolo sinProtocolo, ");
27 - sql.append("u.sin_arquivamento sinArquivamento, u.sin_ouvidoria sinOuvidoria, t.id_tarefa tarefa "); 29 + sql.append("u.sin_arquivamento sinArquivamento, u.sin_ouvidoria sinOuvidoria, t.id_tarefa tarefa, a.dth_abertura data ");
28 sql.append("FROM protocolo p "); 30 sql.append("FROM protocolo p ");
29 sql.append("JOIN atividade a ON p.id_protocolo = a.id_protocolo "); 31 sql.append("JOIN atividade a ON p.id_protocolo = a.id_protocolo ");
30 sql.append("JOIN unidade u ON a.id_unidade = u.id_unidade "); 32 sql.append("JOIN unidade u ON a.id_unidade = u.id_unidade ");
@@ -32,43 +34,50 @@ public class UnidadeDAO { @@ -32,43 +34,50 @@ public class UnidadeDAO {
32 sql.append("WHERE p.id_protocolo = :protocolo "); 34 sql.append("WHERE p.id_protocolo = :protocolo ");
33 sql.append("and t.id_tarefa in ("); 35 sql.append("and t.id_tarefa in (");
34 sql.append(ABERTURA_PROCESSO + ","); 36 sql.append(ABERTURA_PROCESSO + ",");
35 - sql.append(CONCLUSAO_PROCESSO + ",");  
36 sql.append(REABERTURA_PROCESSO + ","); 37 sql.append(REABERTURA_PROCESSO + ",");
  38 + sql.append(CONCLUSAO_PROCESSO + ",");
37 sql.append(ENVIO_PROCESSO + ","); 39 sql.append(ENVIO_PROCESSO + ",");
  40 + sql.append(CONCLUSAO_AUTOMATICA + ",");
38 sql.append(RECEBIMENTO_PROCESSO); 41 sql.append(RECEBIMENTO_PROCESSO);
39 sql.append(") "); 42 sql.append(") ");
40 sql.append("order by a.dth_abertura desc "); 43 sql.append("order by a.dth_abertura desc ");
41 44
42 Query query = em.createNativeQuery(sql.toString(), UnidadeTarefa.class); 45 Query query = em.createNativeQuery(sql.toString(), UnidadeTarefa.class);
43 -  
44 query.setParameter("protocolo", idProcedimento); 46 query.setParameter("protocolo", idProcedimento);
45 47
46 List<UnidadeTarefa> resultado = query.getResultList(); 48 List<UnidadeTarefa> resultado = query.getResultList();
  49 +
  50 + resultado = removeUnidadesProcessoConcluido(resultado);
47 51
48 - List<Unidade> unidades = resultado.stream()  
49 - .filter(makeUntil(u -> u.getTarefa() == 28))  
50 - .distinct()  
51 - .filter(u -> u.getTarefa() != 28)  
52 - .collect(Collectors.toList()); 52 + resultado = removeRegistrosDeTarefasDeConclusao(resultado);
53 53
54 - return unidades; 54 + return convertParaListUnidadeRemovendoDuplicidades(resultado);
55 } 55 }
56 56
57 - public static <T> Predicate<T> makeUntil(final Predicate<T> predicate) {  
58 - return new Predicate<T>() {  
59 -  
60 - private boolean hasMatched; 57 + private List<UnidadeTarefa> removeUnidadesProcessoConcluido(List<UnidadeTarefa> unidades){
  58 + unidades.removeIf(u -> unidades.stream()
  59 + .filter(c -> (c.getTarefa() == CONCLUSAO_PROCESSO || c.getTarefa() == CONCLUSAO_AUTOMATICA))
  60 + .anyMatch(r ->
  61 + (
  62 + r.getIdUnidade() == u.getIdUnidade() &&
  63 + r.getData().after(u.getData())
  64 + )
  65 + ));
  66 +
  67 + return unidades;
  68 + }
61 69
62 - @Override  
63 - public boolean test(final T s) {  
64 - if (hasMatched) {  
65 - return false;  
66 - }  
67 - else {  
68 - hasMatched = predicate.test(s);  
69 - return true;  
70 - }  
71 - }  
72 - }; 70 + private List<UnidadeTarefa> removeRegistrosDeTarefasDeConclusao(List<UnidadeTarefa> unidades){
  71 + return unidades.stream()
  72 + .filter(u -> u.getTarefa() != CONCLUSAO_PROCESSO)
  73 + .filter(u -> u.getTarefa() != CONCLUSAO_AUTOMATICA)
  74 + .collect(Collectors.toList());
  75 + }
  76 +
  77 + private List<Unidade> convertParaListUnidadeRemovendoDuplicidades(List<UnidadeTarefa> unidades){
  78 + return unidades.stream()
  79 + .map(u -> (Unidade) u)
  80 + .distinct()
  81 + .collect(Collectors.toList());
73 } 82 }
74 } 83 }
src/main/java/br/gov/ans/integracao/sei/modelo/UnidadeTarefa.java
1 package br.gov.ans.integracao.sei.modelo; 1 package br.gov.ans.integracao.sei.modelo;
2 2
  3 +import java.util.Date;
  4 +
3 import javax.persistence.Entity; 5 import javax.persistence.Entity;
4 6
5 import org.codehaus.jackson.annotate.JsonIgnore; 7 import org.codehaus.jackson.annotate.JsonIgnore;
@@ -11,6 +13,9 @@ public class UnidadeTarefa extends Unidade{ @@ -11,6 +13,9 @@ public class UnidadeTarefa extends Unidade{
11 13
12 @JsonIgnore 14 @JsonIgnore
13 private int tarefa; 15 private int tarefa;
  16 +
  17 + @JsonIgnore
  18 + private Date data;
14 19
15 @JsonIgnore 20 @JsonIgnore
16 public int getTarefa() { 21 public int getTarefa() {
@@ -21,4 +26,14 @@ public class UnidadeTarefa extends Unidade{ @@ -21,4 +26,14 @@ public class UnidadeTarefa extends Unidade{
21 public void setTarefa(int tarefa) { 26 public void setTarefa(int tarefa) {
22 this.tarefa = tarefa; 27 this.tarefa = tarefa;
23 } 28 }
  29 +
  30 + @JsonIgnore
  31 + public Date getData() {
  32 + return data;
  33 + }
  34 +
  35 + @JsonIgnore
  36 + public void setData(Date data) {
  37 + this.data = data;
  38 + }
24 } 39 }
25 \ No newline at end of file 40 \ No newline at end of file