diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/ConexionHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/ConexionHibernateDAO.java index a9c0c70c4..e2bec0313 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/ConexionHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/ConexionHibernateDAO.java @@ -3,6 +3,7 @@ package com.rjconsultores.ventaboletos.dao.hibernate; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -90,7 +91,7 @@ public class ConexionHibernateDAO extends GenericHibernateDAO @Override public List buscarConexiones(boolean isBuscaAgrupada, Integer origenId, Integer destinoId) { - String queryStr = getQueryConexiones(isBuscaAgrupada, origenId, destinoId); + String queryStr = getQueryConexiones(origenId, destinoId); Query query = getSession().createSQLQuery(queryStr); List list = query.list(); @@ -109,15 +110,62 @@ public class ConexionHibernateDAO extends GenericHibernateDAO vos.add(vo); } + if (isBuscaAgrupada) { + return agruparConexiones(vos); + } + return vos; } - private String getQueryConexiones(boolean isBuscaAgrupada, Integer origenId, Integer destinoId) { + private List agruparConexiones(List conexiones) { + + LinkedHashMap> map = new LinkedHashMap>(); + + List agrpVo = new ArrayList(); + + String grupoTrecho = null; + Integer grupo = null; + for (ConexionVO vo : conexiones) { + + if (grupo == null) + grupo = vo.getGrupo(); + + if (!grupo.equals(vo.getGrupo())) { + if (!map.containsKey(grupoTrecho)) { + map.put(grupoTrecho, agrpVo); + } + + grupo = vo.getGrupo(); + grupoTrecho = null; + agrpVo = new ArrayList(); + } + + if (grupo.equals(vo.getGrupo())) { + + if (grupoTrecho == null) { + grupoTrecho = vo.getTramoOrigen() + ";" + vo.getTramoDestino() + ";"; + } else { + grupoTrecho += vo.getTramoOrigen() + ";" + vo.getTramoDestino() + ";"; + } + + agrpVo.add(vo); + } + + } + + List agrupados = new ArrayList(); + for (Map.Entry> entry : map.entrySet()) { + agrupados.addAll(entry.getValue()); + } + + return agrupados; + } + + private String getQueryConexiones(Integer origenId, Integer destinoId) { StringBuilder sb = new StringBuilder(); - sb.append(" select "); - sb.append(isBuscaAgrupada ? " max(c.numgrupo) as grupo, " : " c.numgrupo as grupo, "); + sb.append(" c.numgrupo as grupo, "); sb.append(" cc.conexionctrl_id as conexionCtrlId, occ.descparada as conOrigen, dcc.descparada as conDestino, "); sb.append(" oc.descparada as tramoOrigen, dc.descparada as tramoDestino, c.numsecuencia as numsecuencia "); sb.append(" from conexion_ctrl cc "); @@ -137,14 +185,13 @@ public class ConexionHibernateDAO extends GenericHibernateDAO sb.append(" and dc.parada_id = c.destino_id "); if (origenId != null) { - sb.append(" and cc.origen_id = ").append(origenId); + sb.append(" and cc.origen_id = ").append(origenId); } if (destinoId != null) { - sb.append(" and cc.destino_id = ").append(destinoId); + sb.append(" and cc.destino_id = ").append(destinoId); } - sb.append(isBuscaAgrupada ? " group by cc.conexionctrl_id , occ.descparada, dcc.descparada, oc.descparada, dc.descparada, c.numsecuencia " : ""); sb.append(" order by conOrigen, conDestino, conexionCtrlId, grupo, numsecuencia, tramoOrigen, tramoDestino "); return sb.toString(); }