package br.com.centralit.citcorpore.negocio; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import java.util.Set; import br.com.centralit.citcorpore.bean.PosicionamentoAtendenteDTO; import br.com.centralit.citcorpore.bean.result.PosicionamentoAtendenteResultDTO; import br.com.centralit.citcorpore.integracao.PosicionamentoAtendenteDAO; import br.com.centralit.citcorpore.util.Enumerados.TipoDate; import br.com.citframework.service.CrudServiceImpl; import br.com.citframework.util.Assert; import br.com.citframework.util.UtilDatas; import com.google.common.base.Function; import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; public class PosicionamentoAtendenteServiceEjb extends CrudServiceImpl implements PosicionamentoAtendenteService { private PosicionamentoAtendenteDAO dao; @Override protected PosicionamentoAtendenteDAO getDao() { if (dao == null) { dao = new PosicionamentoAtendenteDAO(); } return dao; } private static final Function<PosicionamentoAtendenteResultDTO, Integer> groupUsuarioFunction = new Function<PosicionamentoAtendenteResultDTO, Integer>() { @Override public Integer apply(final PosicionamentoAtendenteResultDTO item) { return item.getIdUsuario(); } }; @Override public List<PosicionamentoAtendenteResultDTO> listLastLocationWithSolicitationInfo(final PosicionamentoAtendenteDTO posicionamentoAtendente) throws Exception { Assert.notNull(posicionamentoAtendente, "'PosicionamentoAtendente' must not be null."); final List<PosicionamentoAtendenteResultDTO> onDB = this.getDao().listLastLocationWithSolicitationInfo(posicionamentoAtendente); for (final PosicionamentoAtendenteResultDTO posicionamentoAtendenteResult : onDB) { final Timestamp ultimaVisualizacao = posicionamentoAtendenteResult.getUltimaVisualizacao(); posicionamentoAtendenteResult.setUltimaVisualizacao(null); posicionamentoAtendenteResult.setLastSeem(UtilDatas.convertDateToString(TipoDate.TIMESTAMP_WITH_SECONDS, ultimaVisualizacao)); } final List<PosicionamentoAtendenteResultDTO> posicionamentos = new ArrayList<>(); if (onDB != null) { final Multimap<Integer, PosicionamentoAtendenteResultDTO> maped = Multimaps.index(onDB.iterator(), groupUsuarioFunction); final Set<Integer> ids = maped.keySet(); for (final Integer integer : ids) { posicionamentos.add(((List<PosicionamentoAtendenteResultDTO>) maped.get(integer)).get(0)); } } return posicionamentos; } }