package com.rjconsultores.ventaboletos.dao.hibernate; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.List; import org.apache.commons.lang.math.NumberUtils; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.hibernate.transform.AliasToBeanResultTransformer; import org.hibernate.type.IntegerType; import org.hibernate.type.StringType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; import com.rjconsultores.ventaboletos.dao.SisdapDAO; import com.rjconsultores.ventaboletos.relatorios.MovimentoLinha; import com.rjconsultores.ventaboletos.relatorios.MovimentoSecoes; import com.rjconsultores.ventaboletos.relatorios.PrefixoAntt; @Repository("sisdapDAO") public class SisdapHibernateDAO extends HibernateDaoSupport implements SisdapDAO { private static String HYPHEN = "-"; @Autowired public SisdapHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) { setSessionFactory(factory); } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public List getMovimentoLinhas(Date fecInicio, Date fecFinal, Integer empresaId) { List list = consultaMovimentoLinhas(fecInicio, fecFinal, empresaId); List result = new ArrayList(); for (MovimentoLinha movimentoLinha : list) { boolean insert = agrupaMovimentoLinhas(result, movimentoLinha); if (insert) result.add(movimentoLinha); } List periodos = new ArrayList(); for (MovimentoLinha movimentoLinha : result) { String periodo = movimentoLinha.getAno() + HYPHEN + movimentoLinha.getMes(); if (!periodos.contains(periodo)) { periodos.add(periodo); } } List prefixos = buscaPrefixoEmpresa(empresaId); HashMap> periodosPrefixos = new HashMap>(); for (String pd : periodos) { periodosPrefixos.put(pd, prefixos); } for (MovimentoLinha movimentoLinha : result) { String periodo = movimentoLinha.getAno() + HYPHEN + movimentoLinha.getMes(); PrefixoAntt prefixoAntt = new PrefixoAntt(); prefixoAntt.setAntt(movimentoLinha.getAntt()); prefixoAntt.setPrefixo(movimentoLinha.getPrefixo()); if (periodosPrefixos.get(periodo).contains(prefixoAntt)) { periodosPrefixos.get(periodo).remove(prefixoAntt); } } for (String key : periodosPrefixos.keySet()) { String[] periodo = key.split(HYPHEN); Integer ano = Integer.parseInt(periodo[0]); Integer mes = Integer.parseInt(periodo[1]); for (PrefixoAntt prefixoAntt : periodosPrefixos.get(key)) { MovimentoLinha linha = new MovimentoLinha(); linha.setAno(ano); linha.setMes(mes); linha.setAntt(prefixoAntt.getAntt()); linha.setPrefixo(prefixoAntt.getPrefixo()); linha.setLugaresIda(NumberUtils.INTEGER_ZERO); linha.setLugaresVolta(NumberUtils.INTEGER_ZERO); linha.setViagensIda(NumberUtils.INTEGER_ZERO); linha.setViagensVolta(NumberUtils.INTEGER_ZERO); result.add(linha); } } Collections.sort(result, new Comparator() { public int compare(Object o1, Object o2) { MovimentoLinha c1 = (MovimentoLinha) o1; MovimentoLinha c2 = (MovimentoLinha) o2; int result = c1.getAno().compareTo(c2.getAno()); if (result == 0) { result = c1.getMes().compareTo(c2.getMes()); } if (result == 0) { result = c1.getAntt().compareToIgnoreCase(c2.getAntt()); } if (result == 0) { return c1.getPrefixo().compareToIgnoreCase(c2.getPrefixo()); } return result; } }); List movimentoLinhas = new ArrayList(); movimentoLinhas.add("empresa;prefixo;mes;ano;viagem_ida;viagem_volta;lugar_ida;lugar_volta"); for (MovimentoLinha movimentoLinha : result) { movimentoLinhas.add(movimentoLinha.toString()); } return movimentoLinhas; } private List consultaMovimentoLinhas(Date fecInicio, Date fecFinal, Integer empresaId) { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); StringBuilder sb = new StringBuilder(); sb.append("select e.codantt antt, r.prefixo prefixo, "); sb.append(" to_char(c.feccorrida, 'MM') mes, to_char(c.feccorrida, 'yyyy') ano, "); sb.append(" nvl(case r.indsentidoida when 1 then count(r.prefixo) end, 0) viagensida, "); sb.append(" nvl(case r.indsentidoida when 0 then count(r.prefixo) end, 0) viagensvolta, "); sb.append(" nvl(case r.indsentidoida when 1 then sum(da.cantasientos) end, 0) lugaresida, "); sb.append(" nvl(case r.indsentidoida when 0 then sum(da.cantasientos) end, 0) lugaresvolta "); sb.append("from ruta_empresa re "); sb.append(" left join marca m on m.marca_id = re.empresa_id "); sb.append(" left join empresa e on m.empresa_id = e.empresa_id "); sb.append(" left join ruta r on re.ruta_id = r.ruta_id "); sb.append(" left join corrida c on c.ruta_id = r.ruta_id "); sb.append(" left outer join rol_operativo ro on c.roloperativo_id = ro.roloperativo_id "); sb.append(" left outer join diagrama_autobus da on da.diagramaautobus_id = ro.diagramaautobus_id "); sb.append("where m.marca_id = :empresaId and re.activo = 1 and r.activo = 1 "); sb.append(" and r.orgaoconcedente_id = 3 and e.codantt is not null "); sb.append(" and c.feccorrida between to_date(:fecInicio, 'DD/MM/YYYY') and "); sb.append(" to_date(:fecFinal, 'DD/MM/YYYY') "); sb.append("group by e.codantt, r.prefixo, r.indsentidoida, "); sb.append(" to_char(c.feccorrida, 'MM'), to_char(c.feccorrida, 'yyyy') "); sb.append("order by mes, ano, e.codantt, r.prefixo, viagensida, viagensvolta "); Query query = getSession().createSQLQuery(sb.toString()) .addScalar("antt", StringType.INSTANCE) .addScalar("prefixo", StringType.INSTANCE) .addScalar("mes", IntegerType.INSTANCE) .addScalar("ano", IntegerType.INSTANCE) .addScalar("viagensIda", IntegerType.INSTANCE) .addScalar("viagensVolta", IntegerType.INSTANCE) .addScalar("lugaresIda", IntegerType.INSTANCE) .addScalar("lugaresVolta", IntegerType.INSTANCE); query.setResultTransformer(new AliasToBeanResultTransformer(MovimentoLinha.class)); query.setParameter("fecInicio", sdf.format(fecInicio)); query.setParameter("fecFinal", sdf.format(fecFinal)); query.setParameter("empresaId", empresaId); return query.list(); } private List buscaPrefixoEmpresa(Integer empresaId) { StringBuilder sb = new StringBuilder(); sb.append(" select e.codantt antt, r.prefixo prefixo "); sb.append(" from ruta_empresa re "); sb.append(" left join marca m on m.marca_id = re.empresa_id "); sb.append(" left join empresa e on m.empresa_id = e.empresa_id "); sb.append(" left join ruta r on re.ruta_id = r.ruta_id "); sb.append(" where re.empresa_id = :empresaId and r.orgaoconcedente_id = 3 "); sb.append(" and re.activo = 1 and r.activo = 1 "); sb.append(" group by e.codantt, r.prefixo "); sb.append(" order by e.codantt, r.prefixo "); Query query = getSession().createSQLQuery(sb.toString()) .addScalar("antt", StringType.INSTANCE) .addScalar("prefixo", StringType.INSTANCE); query.setResultTransformer(new AliasToBeanResultTransformer(PrefixoAntt.class)); query.setParameter("empresaId", empresaId); return query.list(); } private boolean agrupaMovimentoLinhas(List resul, MovimentoLinha movimentoLinha) { if (resul.isEmpty()) { return true; } else { for (MovimentoLinha ml : resul) { if (ml.getPrefixo().equals(movimentoLinha.getPrefixo()) && ml.getMes().equals(movimentoLinha.getMes()) && ml.getAno().equals(movimentoLinha.getAno())) { if (movimentoLinha.getViagensVolta() > 0) { ml.setLugaresVolta(movimentoLinha.getLugaresVolta()); ml.setViagensVolta(movimentoLinha.getViagensVolta()); } if (movimentoLinha.getViagensIda() > 0) { ml.setLugaresIda(movimentoLinha.getLugaresIda()); ml.setViagensIda(movimentoLinha.getViagensIda()); } return false; } } } return true; } @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public List getMovimentoSecoes(Date fecInicio, Date fecFinal, Integer empresaId) { List listResultConsulta = consultaMovimentoSecoes(fecInicio, fecFinal, empresaId); List listResultIdaVoltaInvertida = new ArrayList(); List listVoltasSemIda = new ArrayList(); for (MovimentoSecoes ms : listResultConsulta) { Boolean achou = Boolean.FALSE; if(isIda(ms)) { for (MovimentoSecoes ms2 : listResultConsulta) { if(ms.getLocalOrigem().equals(ms2.getLocalDestino()) && ms2.getLocalOrigem().equals(ms.getLocalDestino()) && !isIda(ms2) && ms2.getPrefixo().equals(ms.getPrefixo())) { ms.setDescontoIdosoVolta(ms2.getDescontoIdosoVolta()); ms.setGratuidadeIdosoVolta(ms2.getGratuidadeIdosoVolta()); ms.setGratuidadePasseLivreVolta(ms2.getGratuidadePasseLivreVolta()); ms.setPassageirosVolta(ms2.getPassageirosVolta()); listResultIdaVoltaInvertida.add(ms); achou = Boolean.TRUE; break; } } if(!achou) { listResultIdaVoltaInvertida.add(ms); } } else { listVoltasSemIda.add(ms); } } for (MovimentoSecoes volta : listVoltasSemIda) { Boolean achou = Boolean.FALSE; for (MovimentoSecoes idaVolta : listResultIdaVoltaInvertida) { if(idaVolta.getLocalOrigem().equals(volta.getLocalDestino()) && volta.getLocalOrigem().equals(idaVolta.getLocalDestino()) && volta.getPrefixo().equals(idaVolta.getPrefixo())) { achou = Boolean.TRUE; } } if(!achou) { String origem = volta.getLocalOrigem(); String destino = volta.getLocalDestino(); volta.setLocalDestino(origem); volta.setLocalOrige(destino); listResultIdaVoltaInvertida.add(volta); } } List periodos = new ArrayList(); for (MovimentoSecoes ms : listResultIdaVoltaInvertida) { String periodo = ms.getAno() + HYPHEN + ms.getMes(); if (!periodos.contains(periodo)) { periodos.add(periodo); } } List prefixos = buscaPrefixoEmpresaOrigenDestino(empresaId); HashMap> periodosPrefixos = new HashMap>(); for (String pd : periodos) { periodosPrefixos.put(pd, prefixos); } for (MovimentoSecoes ms : listResultIdaVoltaInvertida) { String periodo = ms.getAno() + HYPHEN + ms.getMes(); PrefixoAntt prefixoAntt = new PrefixoAntt(); prefixoAntt.setAntt(ms.getAntt()); prefixoAntt.setPrefixo(ms.getPrefixo()); prefixoAntt.setLocalDestino(ms.getLocalDestino()); prefixoAntt.setLocalOrigem(ms.getLocalOrigem()); if (periodosPrefixos.get(periodo).contains(prefixoAntt)) { periodosPrefixos.get(periodo).remove(prefixoAntt); } } for (String key : periodosPrefixos.keySet()) { String[] periodo = key.split(HYPHEN); Integer ano = Integer.parseInt(periodo[0]); Integer mes = Integer.parseInt(periodo[1]); for (PrefixoAntt prefixoAntt : periodosPrefixos.get(key)) { MovimentoSecoes ms = new MovimentoSecoes(); ms.setAno(ano); ms.setMes(mes); ms.setAntt(prefixoAntt.getAntt()); ms.setPrefixo(prefixoAntt.getPrefixo()); ms.setLocalDestino(prefixoAntt.getLocalDestino()); ms.setLocalOrige(prefixoAntt.getLocalOrigem()); ms.setDescontoIdosoIda(NumberUtils.INTEGER_ZERO); ms.setDescontoIdosoVolta(NumberUtils.INTEGER_ZERO); ms.setGratuidadeIdosoIda(NumberUtils.INTEGER_ZERO); ms.setGratuidadeIdosoVolta(NumberUtils.INTEGER_ZERO); ms.setGratuidadePasseLivreIda(NumberUtils.INTEGER_ZERO); ms.setGratuidadePasseLivreVolta(NumberUtils.INTEGER_ZERO); ms.setPassageirosIda(NumberUtils.INTEGER_ZERO); ms.setPassageirosVolta(NumberUtils.INTEGER_ZERO); listResultIdaVoltaInvertida.add(ms); } } Collections.sort(listResultIdaVoltaInvertida, new Comparator() { public int compare(Object o1, Object o2) { MovimentoSecoes c1 = (MovimentoSecoes) o1; MovimentoSecoes c2 = (MovimentoSecoes) o2; int result = c1.getAno().compareTo(c2.getAno()); if (result == 0) { result = c1.getMes().compareTo(c2.getMes()); } if (result == 0) { result = c1.getAntt().compareToIgnoreCase(c2.getAntt()); } if (result == 0) { return c1.getPrefixo().compareToIgnoreCase(c2.getPrefixo()); } if (result == 0) { return c1.getLocalOrigem().compareToIgnoreCase(c2.getLocalOrigem()); } if (result == 0) { return c1.getLocalDestino().compareToIgnoreCase(c2.getLocalDestino()); } return result; } }); List movimentosSecoes = new ArrayList(); movimentosSecoes.add("empresa;prefixo;local_origem;local_destino;mes;ano;passageiro_ida;passageiro_volta;gratuidade_ida" + ";gratuidade_volta;idoso_ida;idoso_volta;desconto_ida;desconto_volta "); for (MovimentoSecoes ms : listResultIdaVoltaInvertida) { movimentosSecoes.add(ms.toString()); } return movimentosSecoes; } private boolean isIda(MovimentoSecoes ms) { Integer somaVolta = (ms.getDescontoIdosoVolta() + ms.getGratuidadeIdosoVolta() + ms.getGratuidadePasseLivreVolta() + ms.getPassageirosVolta()); Integer somaIda = (ms.getDescontoIdosoIda() + ms.getGratuidadeIdosoIda() + ms.getGratuidadePasseLivreIda() + ms.getPassageirosIda()); return (somaVolta.intValue() == 0) && (somaIda.intValue() > 0); } private List consultaMovimentoSecoes(Date fecInicio, Date fecFinal, Integer empresaId) { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); StringBuilder sb = new StringBuilder(); sb.append("SELECT subAlias.antt, "); sb.append(" subAlias.prefixo, "); sb.append(" subAlias.mes, "); sb.append(" subAlias.ano, "); sb.append(" po.codantt localOrigem, "); sb.append(" pd.codantt localDestino, "); sb.append(" sum(subAlias.passageirosida) as passageirosida, "); sb.append(" sum(subAlias.passageirosvolta) as passageirosvolta, "); sb.append(" sum(subAlias.gratuidadepasselivreida) as gratuidadepasselivreida, "); sb.append(" sum(subAlias.gratuidadepasselivrevolta) as gratuidadepasselivrevolta, "); sb.append(" sum(subAlias.gratuidadeidosoida) as gratuidadeidosoida, "); sb.append(" sum(subAlias.gratuidadeidosovolta) as gratuidadeidosovolta, "); sb.append(" sum(subAlias.descontoidosoida) as descontoidosoida, "); sb.append(" sum(subAlias.descontoidosovolta) as descontoidosovolta "); sb.append("FROM (SELECT distinct subResp.antt antt, "); sb.append(" subResp.prefixo prefixo, "); sb.append(" subResp.mes mes, "); sb.append(" subResp.ano ano, "); sb.append(" coalesce(ase.aliasorigen_id, subResp.localorigem) aliasorigen, "); sb.append(" coalesce(ase.aliasdestino_id, subResp.localdestino) aliasdestino, "); sb.append(" subResp.passageirosida passageirosida, "); sb.append(" subResp.passageirosvolta passageirosvolta, "); sb.append(" subResp.gratuidadepasselivreida gratuidadepasselivreida, "); sb.append(" subResp.gratuidadepasselivrevolta gratuidadepasselivrevolta, "); sb.append(" subResp.gratuidadeidosoida gratuidadeidosoida, "); sb.append(" subResp.gratuidadeidosovolta gratuidadeidosovolta, "); sb.append(" subResp.descontoidosoida descontoidosoida, "); sb.append(" subResp.descontoidosovolta descontoidosovolta "); sb.append(" FROM (SELECT distinct r.ruta_id ruta_id, "); sb.append(" e.codantt antt, "); sb.append(" r.prefixo prefixo, "); sb.append(" To_char(c.feccorrida, 'MM') mes, "); sb.append(" To_char(c.feccorrida, 'yyyy') ano, "); sb.append(" po.parada_id localorigem, "); sb.append(" pd.parada_id localdestino, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 1 AND b.categoria_id IN (SELECT categoria_id "); sb.append(" FROM categoria "); sb.append(" WHERE grupocategoria_id IS NULL) THEN Count(*) END, 0) passageirosida, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 0 AND b.categoria_id IN (SELECT categoria_id "); sb.append(" FROM categoria "); sb.append(" WHERE grupocategoria_id IS NULL) THEN Count(*) END, 0) passageirosvolta, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 1 AND b.categoria_id IN (SELECT categoria_id "); sb.append(" FROM categoria "); sb.append(" WHERE grupocategoria_id IN ( 2 )) THEN Count(*) END, 0) gratuidadepasselivreida, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 0 AND b.categoria_id IN (SELECT categoria_id "); sb.append(" FROM categoria "); sb.append(" WHERE grupocategoria_id IN ( 2 )) THEN Count(*) END, 0) gratuidadepasselivrevolta, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 1 AND b.categoria_id IN (SELECT categoria_id "); sb.append(" FROM categoria "); sb.append(" WHERE grupocategoria_id IN ( 1 )) THEN Count(*) END, 0) gratuidadeidosoida, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 0 AND b.categoria_id IN (SELECT categoria_id "); sb.append(" FROM categoria "); sb.append(" WHERE grupocategoria_id IN ( 1 )) THEN Count(*) END, 0) gratuidadeidosovolta, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 1 AND b.categoria_id IN (SELECT categoria_id "); sb.append(" FROM categoria "); sb.append(" WHERE grupocategoria_id IN ( 3 )) THEN Count(*) END, 0) descontoidosoida, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 0 AND b.categoria_id IN (SELECT categoria_id "); sb.append(" FROM categoria "); sb.append(" WHERE grupocategoria_id IN ( 3 )) THEN Count(*) END, 0) descontoidosovolta "); sb.append(" FROM ruta_empresa re "); sb.append(" left join marca m ON m.marca_id = re.empresa_id "); sb.append(" left join empresa e ON m.empresa_id = e.empresa_id "); sb.append(" left join ruta r ON re.ruta_id = r.ruta_id "); sb.append(" left join corrida c ON c.ruta_id = r.ruta_id "); sb.append(" left outer join boleto b ON c.corrida_id = b.corrida_id AND c.feccorrida = b.feccorrida "); sb.append(" left outer join parada po ON po.parada_id = b.origen_id "); sb.append(" left outer join parada pd ON pd.parada_id = b.destino_id "); sb.append(" WHERE m.marca_id = :empresaId "); sb.append(" AND re.activo = 1 "); sb.append(" AND r.activo = 1 "); sb.append(" AND r.orgaoconcedente_id = 3 "); sb.append(" AND b.numasiento IS NOT NULL "); sb.append(" AND b.motivocancelacion_id IS NULL "); sb.append(" AND e.codantt IS NOT NULL "); sb.append(" AND c.feccorrida BETWEEN To_date(:fecInicio, 'DD/MM/YYYY') AND To_date (:fecFinal, 'DD/MM/YYYY') "); sb.append(" AND b.categoria_id <> (select valorconstante from constante where NOMBCONSTANTE = 'GRATUIDADE_CRIANCA')"); sb.append(" GROUP BY e.codantt, "); sb.append(" r.prefixo, "); sb.append(" To_char(c.feccorrida, 'MM'), "); sb.append(" To_char(c.feccorrida, 'yyyy'), "); sb.append(" po.parada_id, "); sb.append(" pd.parada_id, "); sb.append(" r.indsentidoida, "); sb.append(" b.categoria_id, "); sb.append(" r.ruta_id "); sb.append( " ORDER BY e.codantt, "); sb.append( " r.prefixo) subResp "); sb.append(" left join alias_servico ase ON ( subResp.localorigem = ase.origen_id AND subResp.localdestino = ase.destino_id and ase.ruta_id = subResp.ruta_id) "); sb.append( " ORDER BY subResp.antt,"); sb.append( " subResp.prefixo"); sb.append( " ) subAlias"); sb.append(" inner join parada po ON ( subAlias.aliasorigen = po.parada_id ) "); sb.append(" inner join parada pd ON ( subAlias.aliasdestino = pd.parada_id ) "); sb.append("GROUP BY mes, "); sb.append(" ano, "); sb.append(" antt, "); sb.append(" prefixo, "); sb.append(" po.codantt, "); sb.append(" pd.codantt "); sb.append("ORDER BY mes, "); sb.append(" ano, "); sb.append(" antt, "); sb.append(" prefixo, "); sb.append(" localOrigem, "); sb.append(" localDestino "); Query query = getSession().createSQLQuery(sb.toString()) .addScalar("antt", StringType.INSTANCE) .addScalar("prefixo", StringType.INSTANCE) .addScalar("mes", IntegerType.INSTANCE) .addScalar("ano", IntegerType.INSTANCE) .addScalar("localOrigem", StringType.INSTANCE) .addScalar("localDestino", StringType.INSTANCE) .addScalar("passageirosIda", IntegerType.INSTANCE) .addScalar("passageirosVolta", IntegerType.INSTANCE) .addScalar("gratuidadePasseLivreIda", IntegerType.INSTANCE) .addScalar("gratuidadePasseLivreVolta", IntegerType.INSTANCE) .addScalar("gratuidadeIdosoIda", IntegerType.INSTANCE) .addScalar("gratuidadeIdosoVolta", IntegerType.INSTANCE) .addScalar("descontoIdosoIda", IntegerType.INSTANCE) .addScalar("descontoIdosoVolta", IntegerType.INSTANCE); query.setResultTransformer(new AliasToBeanResultTransformer(MovimentoSecoes.class)); query.setParameter("fecInicio", sdf.format(fecInicio)); query.setParameter("fecFinal", sdf.format(fecFinal)); query.setParameter("empresaId", empresaId); return query.list(); } private List buscaPrefixoEmpresaOrigenDestino(Integer empresaId) { StringBuilder sb = new StringBuilder(); sb.append("SELECT subResp.antt, "); sb.append(" subResp.prefixo, "); sb.append(" po.codantt localOrigem, "); sb.append(" pd.codantt localDestino "); sb.append("FROM (SELECT subAlias.antt antt, "); sb.append(" ru.prefixo prefixo, "); sb.append(" subAlias.localorigem localOrigem, "); sb.append(" subAlias.localdestino localDestino "); sb.append(" FROM ruta ru, "); sb.append(" (SELECT subSelect.antt antt, "); sb.append(" subSelect.ruta_id rutaId, "); sb.append(" subSelect.prefixo prefixo, "); sb.append(" Nvl(asr.aliasorigen_id, subSelect.localorigem) AS "); sb.append(" localOrigem, "); sb.append(" Nvl(asr.aliasdestino_id, subSelect.localdestino) AS "); sb.append(" localDestino "); sb.append(" FROM (SELECT e.codantt antt, "); sb.append(" ru.ruta_id, "); sb.append(" po.parada_id localOrigem, "); sb.append(" pd.parada_id localDestino, "); sb.append(" ru.prefixo prefixo "); sb.append(" FROM ruta_empresa re "); sb.append(" left join marca m "); sb.append(" ON m.marca_id = re.empresa_id "); sb.append(" left join empresa e "); sb.append(" ON m.empresa_id = e.empresa_id "); sb.append(" left join ruta ru "); sb.append(" ON re.ruta_id = ru.ruta_id, "); sb.append(" parada po, "); sb.append(" parada pd "); sb.append(" WHERE re.empresa_id = :empresaId "); sb.append(" AND ru.orgaoconcedente_id = 3 "); sb.append(" AND re.activo = 1 "); sb.append(" AND ru.activo = 1 "); sb.append(" AND po.parada_id = (SELECT t.origen_id "); sb.append(" FROM tramo t "); sb.append(" WHERE t.tramo_id = "); sb.append(" (SELECT rs.tramo_id "); sb.append(" FROM ruta r "); sb.append(" left join ruta_secuencia "); sb.append(" rs "); sb.append(" ON rs.ruta_id = "); sb.append(" r.ruta_id "); sb.append(" WHERE "); sb.append(" r.ruta_id IN ( ru.ruta_id ) "); sb.append(" AND r.indsentidoida = 1 "); sb.append(" AND r.activo = 1 "); sb.append(" AND rs.activo = 1 "); sb.append(" AND ROWNUM <= 1 "); sb.append(" AND rs.numsecuencia IN "); sb.append(" (SELECT "); sb.append(" Min(rs.numsecuencia) + 1 "); sb.append(" FROM "); sb.append(" ruta r "); sb.append(" left join ruta_secuencia "); sb.append(" rs "); sb.append(" ON rs.ruta_id = "); sb.append(" r.ruta_id "); sb.append(" WHERE "); sb.append(" r.prefixo IN ( ru.prefixo "); sb.append(" ) "); sb.append(" AND r.indsentidoida = 1 "); sb.append(" AND r.activo = 1 "); sb.append(" AND rs.activo = 1) "); sb.append(" GROUP BY "); sb.append(" rs.tramo_id) "); sb.append(" AND ROWNUM <= 1) "); sb.append(" AND pd.parada_id = (SELECT t.destino_id "); sb.append(" FROM tramo t "); sb.append(" WHERE t.tramo_id = "); sb.append(" (SELECT rs.tramo_id "); sb.append(" FROM ruta r "); sb.append(" left join ruta_secuencia "); sb.append(" rs "); sb.append(" ON rs.ruta_id = "); sb.append(" r.ruta_id "); sb.append(" WHERE "); sb.append(" r.ruta_id IN ( ru.ruta_id ) "); sb.append(" AND r.indsentidoida = 1 "); sb.append(" AND r.activo = 1 "); sb.append(" AND rs.activo = 1 "); sb.append(" AND ROWNUM <= 1 "); sb.append(" AND rs.numsecuencia IN "); sb.append(" (SELECT Max(rs.numsecuencia) "); sb.append(" FROM ruta r "); sb.append(" left join ruta_secuencia rs "); sb.append(" ON rs.ruta_id = "); sb.append(" r.ruta_id "); sb.append(" WHERE "); sb.append(" r.prefixo IN ( ru.prefixo ) "); sb.append(" AND r.indsentidoida = 1 "); sb.append(" AND r.activo = 1 "); sb.append(" AND rs.activo = 1) "); sb.append(" GROUP BY "); sb.append(" rs.tramo_id)) "); sb.append(" ) "); sb.append(" subSelect "); sb.append(" left join alias_servico asr "); sb.append(" ON ( asr.origen_id = subSelect.localorigem "); sb.append(" AND asr.destino_id = subSelect.localdestino "); sb.append(" AND asr.ruta_id = subSelect.ruta_id ) "); sb.append(" GROUP BY subSelect.antt, "); sb.append(" subSelect.ruta_id, "); sb.append(" subSelect.prefixo, "); sb.append(" Nvl(asr.aliasorigen_id, subSelect.localorigem), "); sb.append(" Nvl(asr.aliasdestino_id, subSelect.localdestino)) "); sb.append(" subAlias "); sb.append(" WHERE ru.ruta_id IN ( subAlias.rutaid ) "); sb.append(" GROUP BY subAlias.antt, "); sb.append(" subAlias.localorigem, "); sb.append(" subAlias.localdestino, "); sb.append(" ru.prefixo) subResp "); sb.append(" inner join parada po "); sb.append(" ON ( subResp.localorigem = po.parada_id ) "); sb.append(" inner join parada pd "); sb.append(" ON ( subResp.localdestino = pd.parada_id ) "); sb.append("ORDER BY subResp.antt, "); sb.append(" subResp.prefixo, "); sb.append(" po.codantt, "); sb.append(" pd.codantt "); Query query = getSession().createSQLQuery(sb.toString()) .addScalar("antt", StringType.INSTANCE) .addScalar("prefixo", StringType.INSTANCE) .addScalar("localOrigem", StringType.INSTANCE) .addScalar("localDestino", StringType.INSTANCE); query.setResultTransformer(new AliasToBeanResultTransformer(PrefixoAntt.class)); query.setParameter("empresaId", empresaId); return query.list(); } // private boolean agrupaMovimentoSecoes(List resul, MovimentoSecoes movimentoSecao) { // // if (resul.isEmpty()) { // return true; // } else { // for (MovimentoSecoes ms : resul) { // if (ms.getPrefixo().equals(movimentoSecao.getPrefixo()) && ms.getMes().equals(movimentoSecao.getMes()) // && ms.getAno().equals(movimentoSecao.getAno()) && ms.getLocalOrigem().equals(movimentoSecao.getLocalOrigem()) // && ms.getLocalDestino().equals(movimentoSecao.getLocalDestino())) { // // ms.setDescontoIdosoIda(ms.getDescontoIdosoIda() + movimentoSecao.getDescontoIdosoIda()); // ms.setDescontoIdosoVolta(ms.getDescontoIdosoVolta() + movimentoSecao.getDescontoIdosoVolta()); // // ms.setGratuidadeIdosoIda(ms.getGratuidadeIdosoIda() + movimentoSecao.getGratuidadeIdosoIda()); // ms.setGratuidadeIdosoVolta(ms.getGratuidadeIdosoVolta() + movimentoSecao.getGratuidadeIdosoVolta()); // // ms.setGratuidadePasseLivreIda(ms.getGratuidadePasseLivreIda() + movimentoSecao.getGratuidadePasseLivreIda()); // ms.setGratuidadePasseLivreVolta(ms.getGratuidadePasseLivreVolta() + movimentoSecao.getGratuidadePasseLivreVolta()); // // ms.setPassageirosIda(ms.getPassageirosIda() + movimentoSecao.getPassageirosIda()); // ms.setPassageirosVolta(ms.getPassageirosVolta() + movimentoSecao.getPassageirosVolta()); // // return false; // } // } // } // // return true; // } }