AdmMono/src/com/rjconsultores/ventaboletos/dao/hibernate/SisdapHibernateDAO.java

682 lines
34 KiB
Java

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<String> getMovimentoLinhas(Date fecInicio, Date fecFinal, Integer empresaId) {
List<MovimentoLinha> list = consultaMovimentoLinhas(fecInicio, fecFinal, empresaId);
List<MovimentoLinha> result = new ArrayList<MovimentoLinha>();
for (MovimentoLinha movimentoLinha : list) {
boolean insert = agrupaMovimentoLinhas(result, movimentoLinha);
if (insert)
result.add(movimentoLinha);
}
List<String> periodos = new ArrayList<String>();
for (MovimentoLinha movimentoLinha : result) {
String periodo = movimentoLinha.getAno() + HYPHEN + movimentoLinha.getMes();
if (!periodos.contains(periodo)) {
periodos.add(periodo);
}
}
List<PrefixoAntt> prefixos = buscaPrefixoEmpresa(empresaId);
HashMap<String, List<PrefixoAntt>> periodosPrefixos = new HashMap<String, List<PrefixoAntt>>();
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<String> movimentoLinhas = new ArrayList<String>();
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<MovimentoLinha> 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<PrefixoAntt> 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<MovimentoLinha> 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<String> getMovimentoSecoes(Date fecInicio, Date fecFinal, Integer empresaId) {
List<MovimentoSecoes> listResultConsulta = consultaMovimentoSecoes(fecInicio, fecFinal, empresaId);
List<MovimentoSecoes> listResultIdaVoltaInvertida = new ArrayList<MovimentoSecoes>();
List<MovimentoSecoes> listVoltasSemIda = new ArrayList<MovimentoSecoes>();
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<String> periodos = new ArrayList<String>();
for (MovimentoSecoes ms : listResultIdaVoltaInvertida) {
String periodo = ms.getAno() + HYPHEN + ms.getMes();
if (!periodos.contains(periodo)) {
periodos.add(periodo);
}
}
List<PrefixoAntt> prefixos = buscaPrefixoEmpresaOrigenDestino(empresaId);
HashMap<String, List<PrefixoAntt>> periodosPrefixos = new HashMap<String, List<PrefixoAntt>>();
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<String> movimentosSecoes = new ArrayList<String>();
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<MovimentoSecoes> 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<PrefixoAntt> 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<MovimentoSecoes> 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;
// }
}