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 2  
3 3 import java.util.List;
4 4 import java.util.function.Predicate;
  5 +import java.util.stream.Collector;
5 6 import java.util.stream.Collectors;
6 7  
7 8 import javax.persistence.EntityManager;
... ... @@ -20,11 +21,12 @@ public class UnidadeDAO {
20 21 private static final int CONCLUSAO_PROCESSO = 28;
21 22 private static final int REABERTURA_PROCESSO = 29;
22 23 private static final int ENVIO_PROCESSO = 32;
  24 + private static final int CONCLUSAO_AUTOMATICA = 41;
23 25 private static final int RECEBIMENTO_PROCESSO = 48;
24   -
  26 +
25 27 public List<Unidade> listarUnidadesProcesso(String idProcedimento){
26 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 30 sql.append("FROM protocolo p ");
29 31 sql.append("JOIN atividade a ON p.id_protocolo = a.id_protocolo ");
30 32 sql.append("JOIN unidade u ON a.id_unidade = u.id_unidade ");
... ... @@ -32,43 +34,50 @@ public class UnidadeDAO {
32 34 sql.append("WHERE p.id_protocolo = :protocolo ");
33 35 sql.append("and t.id_tarefa in (");
34 36 sql.append(ABERTURA_PROCESSO + ",");
35   - sql.append(CONCLUSAO_PROCESSO + ",");
36 37 sql.append(REABERTURA_PROCESSO + ",");
  38 + sql.append(CONCLUSAO_PROCESSO + ",");
37 39 sql.append(ENVIO_PROCESSO + ",");
  40 + sql.append(CONCLUSAO_AUTOMATICA + ",");
38 41 sql.append(RECEBIMENTO_PROCESSO);
39 42 sql.append(") ");
40 43 sql.append("order by a.dth_abertura desc ");
41 44  
42 45 Query query = em.createNativeQuery(sql.toString(), UnidadeTarefa.class);
43   -
44 46 query.setParameter("protocolo", idProcedimento);
45 47  
46 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 1 package br.gov.ans.integracao.sei.modelo;
2 2  
  3 +import java.util.Date;
  4 +
3 5 import javax.persistence.Entity;
4 6  
5 7 import org.codehaus.jackson.annotate.JsonIgnore;
... ... @@ -11,6 +13,9 @@ public class UnidadeTarefa extends Unidade{
11 13  
12 14 @JsonIgnore
13 15 private int tarefa;
  16 +
  17 + @JsonIgnore
  18 + private Date data;
14 19  
15 20 @JsonIgnore
16 21 public int getTarefa() {
... ... @@ -21,4 +26,14 @@ public class UnidadeTarefa extends Unidade{
21 26 public void setTarefa(int tarefa) {
22 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 40 \ No newline at end of file
... ...