package com.rjconsultores.ventaboletos.dao.hibernate; import java.sql.SQLException; 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 javax.sql.DataSource; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.ResultSetHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.lang.math.NumberUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import com.rjconsultores.ventaboletos.dao.SisdapDAO; import com.rjconsultores.ventaboletos.entidad.Categoria; import com.rjconsultores.ventaboletos.relatorios.MovimentoLinha; import com.rjconsultores.ventaboletos.relatorios.MovimentoSecoes; import com.rjconsultores.ventaboletos.relatorios.PrefixoAntt; @Repository("sisdapDAO") public class SisdapHibernateDAO implements SisdapDAO { private static String HYPHEN = "-"; private static Logger log = Logger.getLogger(SisdapHibernateDAO.class); @Autowired private DataSource dataSourceRead; @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 empresa e on e.empresa_id = re.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 e.empresa_id = ? and re.activo = 1 and r.activo = 1 and e.activo = 1 "); sb.append(" and r.orgaoconcedente_id = 3 and e.codantt is not null "); sb.append(" and c.feccorrida between to_date(?, 'DD/MM/YYYY') and "); sb.append(" to_date(?, '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 "); QueryRunner queryRunner = new QueryRunner(dataSourceRead); ResultSetHandler> handler = new BeanListHandler(MovimentoLinha.class); List returnedList = new ArrayList(); try { returnedList = queryRunner.query(sb.toString(), handler, empresaId, sdf.format(fecInicio), sdf.format(fecFinal)); } catch (SQLException e) { log.error("",e); } return returnedList; } 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.empresa_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 = ? and r.orgaoconcedente_id = 3 "); sb.append(" and re.activo = 1 and r.activo = 1 and e.activo = 1 "); sb.append(" group by e.codantt, r.prefixo "); sb.append(" order by e.codantt, r.prefixo "); QueryRunner queryRunner = new QueryRunner(dataSourceRead, true); ResultSetHandler> handler = new BeanListHandler(PrefixoAntt.class); List returnedList = new ArrayList(); try { returnedList = queryRunner.query(sb.toString(), handler, empresaId); } catch (SQLException e) { log.error("",e); } return returnedList; } 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 pesquisaGratuidade, List pesquisaGratuidadeIdoso, List pesquisaDescontoIdoso, List pesquisaDescontoJovem, List pesquisaGratuidadeJovem) { List listResultConsulta = consultaMovimentoSecoes(fecInicio, fecFinal, empresaId, pesquisaGratuidade, pesquisaDescontoIdoso, pesquisaGratuidadeIdoso, pesquisaDescontoJovem, pesquisaGratuidadeJovem); 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 != null && ms2 != null && ms.getLocalOrigem() != null && ms2.getLocalOrigem() != null && 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()); ms.setGratuidadeJovenVolta(ms2.getGratuidadeJovenVolta()); ms.setDescontoJovenVolta(ms2.getGratuidadeJovenVolta()); ms.setDescontoJovenVolta(ms2.getGratuidadeJovenVolta()); 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 != null && idaVolta.getLocalOrigem() != null && volta != null && volta.getLocalOrigem() != null && volta.getPrefixo() != null && idaVolta.getLocalOrigem().equals(volta.getLocalDestino()) && volta.getLocalOrigem().equals(idaVolta.getLocalDestino()) && volta.getPrefixo().equals(idaVolta.getPrefixo())) { achou = Boolean.TRUE; break; } } if(!achou) { String origem = volta.getLocalOrigem(); String destino = volta.getLocalDestino(); volta.setLocalDestino(origem); volta.setLocalOrigem(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.setLocalOrigem(prefixoAntt.getLocalOrigem()); ms.setDescontoIdosoIda(NumberUtils.INTEGER_ZERO); ms.setDescontoIdosoVolta(NumberUtils.INTEGER_ZERO); ms.setGratuidadeIdosoIda(NumberUtils.INTEGER_ZERO); ms.setGratuidadeIdosoVolta(NumberUtils.INTEGER_ZERO); ms.setGratuidadeJovenIda(NumberUtils.INTEGER_ZERO); ms.setGratuidadeJovenVolta(NumberUtils.INTEGER_ZERO); ms.setDescontoJovenIda(NumberUtils.INTEGER_ZERO); ms.setDescontoJovenVolta(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;gratuidade_jovem_ida;gratuidade_jovem_volta;gratuidade_jovem_desconto_ida;gratuidade_jovem_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, List pesquisaGratuidade, List pesquisaDescontoIdoso, List pesquisaGratuidadeIdoso, List pesquisaDescontoJovem, List pesquisaGratuidadeJovem) { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); String gratuidade = ""; for (Object categoria : pesquisaGratuidade) { gratuidade += ((Categoria) categoria).getCategoriaId() + ","; } gratuidade = gratuidade.substring(0, gratuidade.length()-1); String gratuidadeIdoso = ""; for (Object categoria : pesquisaGratuidadeIdoso) { gratuidadeIdoso += ((Categoria) categoria).getCategoriaId() + ","; } gratuidadeIdoso = gratuidadeIdoso.substring(0, gratuidadeIdoso.length()-1); String descontoIdoso = ""; for (Object categoria : pesquisaDescontoIdoso) { descontoIdoso += ((Categoria) categoria).getCategoriaId() + ","; } descontoIdoso = descontoIdoso.substring(0, descontoIdoso.length()-1); String gratuidadeJovem = ""; for (Object categoria : pesquisaGratuidadeJovem) { gratuidadeJovem += ((Categoria) categoria).getCategoriaId() + ","; } gratuidadeJovem = gratuidadeJovem.substring(0, gratuidadeJovem.length()-1); String descontoJovem = ""; for (Object categoria : pesquisaDescontoJovem) { descontoJovem += ((Categoria) categoria).getCategoriaId() + ","; } descontoJovem = descontoJovem.substring(0, descontoJovem.length()-1); 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(" sum(subAlias.gratuidadejovenida) as gratuidadejovenida, "); sb.append(" sum(subAlias.gratuidadejovenvolta) as gratuidadejovenvolta, "); sb.append(" sum(subAlias.descontojovenida) as descontojovenida, "); sb.append(" sum(subAlias.descontojovenvolta) as descontojovenvolta "); sb.append("FROM (SELECT 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(" subResp.gratuidadejovenida gratuidadejovenida, "); sb.append(" subResp.gratuidadejovenvolta gratuidadejovenvolta, "); sb.append(" subResp.descontojovenida descontojovenida, "); sb.append(" subResp.descontojovenvolta descontojovenvolta "); 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 FROM categoria 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 FROM categoria WHERE grupocategoria_id IS NULL) THEN Count(*) END, 0) passageirosvolta, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 1 AND b.categoria_id IN ( " + gratuidade + " ) THEN Count(*) END, 0) gratuidadepasselivreida, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 0 AND b.categoria_id IN ( " + gratuidade + " ) THEN Count(*) END, 0) gratuidadepasselivrevolta, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 1 AND b.categoria_id IN ( " + gratuidadeIdoso + " ) THEN Count(*) END, 0) gratuidadeidosoida, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 0 AND b.categoria_id IN ( " + gratuidadeIdoso + " ) THEN Count(*) END, 0) gratuidadeidosovolta, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 1 AND b.categoria_id IN ( " + descontoIdoso + " ) THEN Count(*) END, 0) descontoidosoida, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 0 AND b.categoria_id IN ( " + descontoIdoso + " ) THEN Count(*) END, 0) descontoidosovolta, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 1 AND b.categoria_id IN ( " + gratuidadeJovem + " ) THEN Count(*) END, 0) gratuidadejovenida, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 0 AND b.categoria_id IN ( " + gratuidadeJovem + " ) THEN Count(*) END, 0) gratuidadejovenvolta, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 1 AND b.categoria_id IN ( " + descontoJovem + " ) THEN Count(*) END, 0) descontojovenida, "); sb.append(" Nvl(CASE WHEN r.indsentidoida = 0 AND b.categoria_id IN ( " + descontoJovem + " ) THEN Count(*) END, 0) descontojovenvolta "); sb.append(" FROM ruta_empresa re "); sb.append(" left join empresa e ON e.empresa_id = re.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 e.empresa_id = ? "); sb.append(" AND re.activo = 1 "); sb.append(" AND r.activo = 1 "); sb.append(" AND e.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 b.indstatusoperacion = 'F' "); sb.append(" AND b.activo = 1 "); sb.append(" AND e.codantt IS NOT NULL "); sb.append(" AND c.feccorrida BETWEEN To_date(?, 'dd/MM/yyyy') AND To_date (?, '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 and ase.activo = 1) "); 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 "); QueryRunner queryRunner = new QueryRunner(dataSourceRead, true); ResultSetHandler> handler = new BeanListHandler(MovimentoSecoes.class); List returnedList = new ArrayList(); try { returnedList = queryRunner.query(sb.toString(), handler, empresaId, sdf.format(fecInicio), sdf.format(fecFinal)); } catch (SQLException e) { log.error("",e); } return returnedList; } private List buscaPrefixoEmpresaOrigenDestino(Integer empresaId) { StringBuilder sb = new StringBuilder(); sb.append(" SELECT DISTINCT "); sb.append(" subAlias.antt, "); sb.append(" subAlias.prefixo, "); sb.append(" CASE WHEN subAlias.indIda = 1 THEN po.codantt ELSE pd.codantt END localOrigem, "); sb.append(" CASE WHEN subAlias.indIda = 1 THEN pd.codantt ELSE po.codantt END localDestino "); sb.append(" FROM (SELECT distinct subResp.antt antt, "); sb.append(" subResp.prefixo prefixo, "); sb.append(" ase.aliasorigen_id aliasorigen, "); sb.append(" ase.aliasdestino_id aliasdestino, "); sb.append(" subResp.indIda indIda "); sb.append(" FROM (SELECT distinct r.ruta_id ruta_id, "); sb.append(" e.codantt antt, "); sb.append(" r.prefixo prefixo, "); sb.append(" po.parada_id localorigem, "); sb.append(" pd.parada_id localdestino, "); sb.append(" r.INDSENTIDOIDA indIda "); sb.append(" FROM ruta_empresa re "); sb.append(" join empresa e ON re.empresa_id = e.empresa_id "); sb.append(" join ruta r ON re.ruta_id = r.ruta_id "); sb.append(" join RUTA_COMBINACION rc on rc.RUTA_ID = r.ruta_id "); sb.append(" join tramo tr on tr.TRAMO_ID = rc.TRAMO_ID "); sb.append(" join parada po ON po.parada_id = tr.origen_id "); sb.append(" join parada pd ON pd.parada_id = tr.destino_id "); sb.append(" WHERE e.empresa_id = ? "); sb.append(" AND re.activo = 1 "); sb.append(" AND r.activo = 1 "); sb.append(" AND r.orgaoconcedente_id = 3 "); sb.append(" AND e.codantt IS NOT NULL "); sb.append(" GROUP BY e.codantt, "); sb.append(" r.prefixo, "); sb.append(" po.parada_id, "); sb.append(" pd.parada_id, "); sb.append(" r.ruta_id, "); sb.append(" r.INDSENTIDOIDA "); sb.append(" ORDER BY e.codantt, "); sb.append(" r.prefixo) subResp "); sb.append(" 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 ) subAlias "); sb.append(" join parada po ON ( subAlias.aliasorigen = po.parada_id ) "); sb.append(" join parada pd ON ( subAlias.aliasdestino = pd.parada_id ) "); sb.append(" WHERE po.codantt <> pd.codantt "); sb.append(" GROUP BY antt, "); sb.append(" prefixo, "); sb.append(" po.codantt, "); sb.append(" pd.codantt , "); sb.append(" indIda "); sb.append(" ORDER BY antt, "); sb.append(" prefixo, "); sb.append(" localOrigem, "); sb.append(" localDestino "); QueryRunner queryRunner = new QueryRunner(dataSourceRead, true); ResultSetHandler> handler = new BeanListHandler(PrefixoAntt.class); List returnedList = new ArrayList(); try { returnedList = queryRunner.query(sb.toString(), handler, empresaId); } catch (SQLException e) { log.error("",e); } return returnedList; } }