diff --git a/src/main/java/br/gov/ans/integracao/sei/dao/UnidadeDAO.java b/src/main/java/br/gov/ans/integracao/sei/dao/UnidadeDAO.java index c437698..6881b82 100644 --- a/src/main/java/br/gov/ans/integracao/sei/dao/UnidadeDAO.java +++ b/src/main/java/br/gov/ans/integracao/sei/dao/UnidadeDAO.java @@ -2,6 +2,7 @@ package br.gov.ans.integracao.sei.dao; import java.util.List; import java.util.function.Predicate; +import java.util.stream.Collector; import java.util.stream.Collectors; import javax.persistence.EntityManager; @@ -20,11 +21,12 @@ public class UnidadeDAO { private static final int CONCLUSAO_PROCESSO = 28; private static final int REABERTURA_PROCESSO = 29; private static final int ENVIO_PROCESSO = 32; + private static final int CONCLUSAO_AUTOMATICA = 41; private static final int RECEBIMENTO_PROCESSO = 48; - + public List listarUnidadesProcesso(String idProcedimento){ StringBuilder sql = new StringBuilder("SELECT u.id_unidade idUnidade, u.sigla, u.descricao, u.sin_protocolo sinProtocolo, "); - sql.append("u.sin_arquivamento sinArquivamento, u.sin_ouvidoria sinOuvidoria, t.id_tarefa tarefa "); + sql.append("u.sin_arquivamento sinArquivamento, u.sin_ouvidoria sinOuvidoria, t.id_tarefa tarefa, a.dth_abertura data "); sql.append("FROM protocolo p "); sql.append("JOIN atividade a ON p.id_protocolo = a.id_protocolo "); sql.append("JOIN unidade u ON a.id_unidade = u.id_unidade "); @@ -32,43 +34,50 @@ public class UnidadeDAO { sql.append("WHERE p.id_protocolo = :protocolo "); sql.append("and t.id_tarefa in ("); sql.append(ABERTURA_PROCESSO + ","); - sql.append(CONCLUSAO_PROCESSO + ","); sql.append(REABERTURA_PROCESSO + ","); + sql.append(CONCLUSAO_PROCESSO + ","); sql.append(ENVIO_PROCESSO + ","); + sql.append(CONCLUSAO_AUTOMATICA + ","); sql.append(RECEBIMENTO_PROCESSO); sql.append(") "); sql.append("order by a.dth_abertura desc "); Query query = em.createNativeQuery(sql.toString(), UnidadeTarefa.class); - query.setParameter("protocolo", idProcedimento); List resultado = query.getResultList(); + + resultado = removeUnidadesProcessoConcluido(resultado); - List unidades = resultado.stream() - .filter(makeUntil(u -> u.getTarefa() == 28)) - .distinct() - .filter(u -> u.getTarefa() != 28) - .collect(Collectors.toList()); + resultado = removeRegistrosDeTarefasDeConclusao(resultado); - return unidades; + return convertParaListUnidadeRemovendoDuplicidades(resultado); } - public static Predicate makeUntil(final Predicate predicate) { - return new Predicate() { - - private boolean hasMatched; + private List removeUnidadesProcessoConcluido(List unidades){ + unidades.removeIf(u -> unidades.stream() + .filter(c -> (c.getTarefa() == CONCLUSAO_PROCESSO || c.getTarefa() == CONCLUSAO_AUTOMATICA)) + .anyMatch(r -> + ( + r.getIdUnidade() == u.getIdUnidade() && + r.getData().after(u.getData()) + ) + )); + + return unidades; + } - @Override - public boolean test(final T s) { - if (hasMatched) { - return false; - } - else { - hasMatched = predicate.test(s); - return true; - } - } - }; + private List removeRegistrosDeTarefasDeConclusao(List unidades){ + return unidades.stream() + .filter(u -> u.getTarefa() != CONCLUSAO_PROCESSO) + .filter(u -> u.getTarefa() != CONCLUSAO_AUTOMATICA) + .collect(Collectors.toList()); + } + + private List convertParaListUnidadeRemovendoDuplicidades(List unidades){ + return unidades.stream() + .map(u -> (Unidade) u) + .distinct() + .collect(Collectors.toList()); } } diff --git a/src/main/java/br/gov/ans/integracao/sei/modelo/UnidadeTarefa.java b/src/main/java/br/gov/ans/integracao/sei/modelo/UnidadeTarefa.java index 6e14eac..e73dbf9 100644 --- a/src/main/java/br/gov/ans/integracao/sei/modelo/UnidadeTarefa.java +++ b/src/main/java/br/gov/ans/integracao/sei/modelo/UnidadeTarefa.java @@ -1,5 +1,7 @@ package br.gov.ans.integracao.sei.modelo; +import java.util.Date; + import javax.persistence.Entity; import org.codehaus.jackson.annotate.JsonIgnore; @@ -11,6 +13,9 @@ public class UnidadeTarefa extends Unidade{ @JsonIgnore private int tarefa; + + @JsonIgnore + private Date data; @JsonIgnore public int getTarefa() { @@ -21,4 +26,14 @@ public class UnidadeTarefa extends Unidade{ public void setTarefa(int tarefa) { this.tarefa = tarefa; } + + @JsonIgnore + public Date getData() { + return data; + } + + @JsonIgnore + public void setData(Date data) { + this.data = data; + } } \ No newline at end of file -- libgit2 0.21.2