0005247: B6 - SISDAP Relatório ANTT

Tempo: 18 horas

git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@36035 d1611594-4594-4d17-8e1d-87c2c4800839
master
julio 2014-06-16 15:07:19 +00:00
parent ca4bc531d4
commit ae91009f83
3 changed files with 463 additions and 154 deletions

View File

@ -2,9 +2,13 @@ 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;
@ -18,67 +22,131 @@ 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<String> movimentoLinhas = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
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 distinct 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(" nvl(case r.indsentidoida ");
sb.append(" when 1 then count(r.prefixo) ");
sb.append(" end, 0) viagensida, ");
sb.append(" nvl(case r.indsentidoida ");
sb.append(" when 0 then count(r.prefixo) ");
sb.append(" end, 0) viagensvolta, ");
sb.append(" nvl(case r.indsentidoida ");
sb.append(" when 1 then sum(da.cantasientos) ");
sb.append(" end, 0) lugaresida, ");
sb.append(" nvl(case r.indsentidoida ");
sb.append(" when 0 then sum(da.cantasientos) ");
sb.append(" end, 0) lugaresvolta ");
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 r ");
sb.append(" on re.ruta_id = r.ruta_id ");
sb.append(" left join corrida c ");
sb.append(" on c.ruta_id = r.ruta_id ");
sb.append(" left outer join rol_operativo ro ");
sb.append(" on c.roloperativo_id = ro.roloperativo_id ");
sb.append(" left outer join diagrama_autobus da ");
sb.append(" on da.diagramaautobus_id = ro.diagramaautobus_id ");
sb.append("where m.marca_id = :empresaId ");
sb.append(" and r.orgaoconcedente_id = 3 ");
sb.append(" 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, ");
sb.append(" r.prefixo, ");
sb.append(" r.indsentidoida, ");
sb.append(" to_char(c.feccorrida, 'MM'), ");
sb.append(" to_char(c.feccorrida, 'yyyy') ");
sb.append("order by mes, ");
sb.append(" ano, ");
sb.append(" e.codantt, ");
sb.append(" r.prefixo, ");
sb.append(" viagensida, ");
sb.append(" viagensvolta ");
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)
@ -95,23 +163,30 @@ public class SisdapHibernateDAO extends HibernateDaoSupport implements SisdapDAO
query.setParameter("fecFinal", sdf.format(fecFinal));
query.setParameter("empresaId", empresaId);
List<MovimentoLinha> list = query.list();
return query.list();
}
movimentoLinhas.add("empresa;prefixo;mes;ano;viagem_ida;viagem_volta;lugar_ida;lugar_volta");
private List<PrefixoAntt> buscaPrefixoEmpresa(Integer empresaId) {
List<MovimentoLinha> result = new ArrayList<MovimentoLinha>();
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 ");
for (MovimentoLinha movimentoLinha : list) {
boolean insert = agrupaMovimentoLinhas(result, movimentoLinha);
if (insert)
result.add(movimentoLinha);
}
Query query = getSession().createSQLQuery(sb.toString())
.addScalar("antt", StringType.INSTANCE)
.addScalar("prefixo", StringType.INSTANCE);
query.setResultTransformer(new AliasToBeanResultTransformer(PrefixoAntt.class));
for (MovimentoLinha movimentoLinha : result) {
movimentoLinhas.add(movimentoLinha.toString());
}
query.setParameter("empresaId", empresaId);
return movimentoLinhas;
return query.list();
}
private boolean agrupaMovimentoLinhas(List<MovimentoLinha> resul, MovimentoLinha movimentoLinha) {
@ -140,101 +215,180 @@ public class SisdapHibernateDAO extends HibernateDaoSupport implements SisdapDAO
return true;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public List<String> getMovimentoSecoes(Date fecInicio, Date fecFinal, Integer empresaId) {
List<MovimentoSecoes> list = consultaMovimentoSecoes(fecInicio, fecFinal, empresaId);
List<MovimentoSecoes> result = new ArrayList<MovimentoSecoes>();
for (MovimentoSecoes ms : list) {
boolean insert = agrupaMovimentoSecoes(result, ms);
if (insert)
result.add(ms);
}
List<String> periodos = new ArrayList<String>();
for (MovimentoSecoes ms : result) {
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 : result) {
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);
result.add(ms);
}
}
Collections.sort(result, 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 : result) {
movimentosSecoes.add(ms.toString());
}
return movimentosSecoes;
}
private List<MovimentoSecoes> consultaMovimentoSecoes(Date fecInicio, Date fecFinal, Integer empresaId) {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
StringBuilder sb = new StringBuilder();
sb.append("SELECT DISTINCT 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(" CASE r.indsentidoida ");
sb.append(" WHEN 1 THEN po.codantt ");
sb.append(" ELSE pd.codantt ");
sb.append(" END localOrigem, ");
sb.append(" CASE r.indsentidoida ");
sb.append(" WHEN 1 THEN pd.codantt ");
sb.append(" ELSE po.codantt ");
sb.append(" END localDestino, ");
sb.append(" Nvl(CASE r.indsentidoida ");
sb.append(" WHEN 1 THEN Count(*) ");
sb.append(" END, 0) passageirosIda, ");
sb.append(" Nvl(CASE r.indsentidoida ");
sb.append(" WHEN 0 THEN Count(*) ");
sb.append(" END, 0) passageirosVolta, ");
sb.append(" Nvl(CASE ");
sb.append(" WHEN r.indsentidoida = 1 ");
sb.append(" AND b.categoria_id IN (SELECT categoria_id ");
sb.append(" FROM categoria ");
sb.append(" WHERE grupocategoria_id IN ( 1, 2 )) THEN Count(* ");
sb.append(" ) ");
sb.append(" END, 0) gratuidadePasseLivreIda, ");
sb.append(" Nvl(CASE ");
sb.append(" WHEN r.indsentidoida = 0 ");
sb.append(" AND b.categoria_id IN (SELECT categoria_id ");
sb.append(" FROM categoria ");
sb.append(" WHERE grupocategoria_id IN ( 1, 2 )) THEN Count(* ");
sb.append(" ) ");
sb.append(" END, 0) gratuidadePasseLivreVolta, ");
sb.append(" Nvl(CASE ");
sb.append(" WHEN r.indsentidoida = 1 ");
sb.append(" AND b.categoria_id IN (SELECT categoria_id ");
sb.append(" FROM categoria ");
sb.append(" WHERE grupocategoria_id = 1) THEN Count(*) ");
sb.append(" END, 0) gratuidadeIdosoIda, ");
sb.append(" Nvl(CASE ");
sb.append(" WHEN r.indsentidoida = 0 ");
sb.append(" AND b.categoria_id IN (SELECT categoria_id ");
sb.append(" FROM categoria ");
sb.append(" WHERE grupocategoria_id = 1) THEN Count(*) ");
sb.append(" END, 0) gratuidadeIdosoVolta, ");
sb.append(" Nvl(CASE ");
sb.append(" WHEN r.indsentidoida = 1 ");
sb.append(" AND b.categoria_id IN (SELECT categoria_id ");
sb.append(" FROM categoria ");
sb.append(" WHERE grupocategoria_id = 3) THEN Count(*) ");
sb.append(" END, 0) descontoIdosoIda, ");
sb.append(" Nvl(CASE ");
sb.append(" WHEN r.indsentidoida = 0 ");
sb.append(" AND b.categoria_id IN (SELECT categoria_id ");
sb.append(" FROM categoria ");
sb.append(" WHERE grupocategoria_id = 3) THEN Count(*) ");
sb.append(" END, 0) descontoIdosoVolta ");
sb.append("FROM corrida c ");
sb.append(" left join boleto b ");
sb.append(" ON c.corrida_id = b.corrida_id ");
sb.append(" AND c.feccorrida = b.feccorrida ");
sb.append(" left join ruta r ");
sb.append(" ON r.ruta_id = c.ruta_id ");
sb.append(" left join parada po ");
sb.append(" ON po.parada_id = b.origen_id ");
sb.append(" left join parada pd ");
sb.append(" ON pd.parada_id = b.destino_id ");
sb.append(" left join empresa e ");
sb.append(" ON e.empresa_id = b.empresacorrida_id ");
sb.append("WHERE 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 e.empresa_id = :empresaId ");
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, ");
sb.append("select 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(" case r.indsentidoida when 1 then po.codantt else pd.codantt end localorigem, ");
sb.append(" case r.indsentidoida when 1 then pd.codantt else po.codantt end localdestino, ");
sb.append(" nvl(case when r.indsentidoida = 1 and b.categoria_id in ");
sb.append(" (select categoria_id from categoria where grupocategoria_id is null) ");
sb.append(" then count(*) end, 0) passageirosida, ");
sb.append(" nvl(case when r.indsentidoida = 0 and b.categoria_id in ");
sb.append(" (select categoria_id from categoria where grupocategoria_id is null) ");
sb.append(" then count(*) end, 0) passageirosvolta, ");
sb.append(" nvl(case when r.indsentidoida = 1 and b.categoria_id in ");
sb.append(" (select categoria_id from categoria where grupocategoria_id in ( 2 )) ");
sb.append(" then count(*) end, 0) gratuidadepasselivreida, ");
sb.append(" nvl(case when r.indsentidoida = 0 and b.categoria_id in ");
sb.append(" (select categoria_id from categoria where grupocategoria_id in ( 2 )) ");
sb.append(" then count(*) end, 0) gratuidadepasselivrevolta, ");
sb.append(" nvl(case when r.indsentidoida = 1 and b.categoria_id in ");
sb.append(" (select categoria_id from categoria where grupocategoria_id in ( 1 )) ");
sb.append(" then count(*) end, 0) gratuidadeidosoida, ");
sb.append(" nvl(case when r.indsentidoida = 0 and b.categoria_id in ");
sb.append(" (select categoria_id from categoria where grupocategoria_id in ( 1 )) ");
sb.append(" then count(*) end, 0) gratuidadeidosovolta, ");
sb.append(" nvl(case when r.indsentidoida = 1 and b.categoria_id in ");
sb.append(" (select categoria_id from categoria where grupocategoria_id in ( 3 )) ");
sb.append(" then count(*) end, 0) descontoidosoida, ");
sb.append(" nvl(case when r.indsentidoida = 0 and b.categoria_id in ");
sb.append(" (select categoria_id from categoria where grupocategoria_id in ( 3 )) ");
sb.append(" 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 ");
sb.append(" 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 ");
sb.append(" to_date(:fecFinal, 'DD/MM/YYYY') ");
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(" to_char(c.feccorrida, 'MM'), ");
sb.append(" to_char(c.feccorrida, 'yyyy'), ");
sb.append(" po.codantt, ");
sb.append(" pd.codantt, ");
sb.append(" r.indsentidoida, ");
sb.append(" b.categoria_id ");
sb.append("ORDER BY mes, ");
sb.append("order by mes, ");
sb.append(" ano, ");
sb.append(" e.codantt, ");
sb.append(" r.prefixo, ");
sb.append(" localOrigem, ");
sb.append(" localDestino ");
sb.append(" localorigem, ");
sb.append(" localdestino ");
Query query = getSession().createSQLQuery(sb.toString())
.addScalar("antt", StringType.INSTANCE)
@ -258,24 +412,95 @@ public class SisdapHibernateDAO extends HibernateDaoSupport implements SisdapDAO
query.setParameter("fecFinal", sdf.format(fecFinal));
query.setParameter("empresaId", empresaId);
List<MovimentoSecoes> list = query.list();
return query.list();
}
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 ");
private List<PrefixoAntt> buscaPrefixoEmpresaOrigenDestino(Integer empresaId) {
List<MovimentoSecoes> result = new ArrayList<MovimentoSecoes>();
StringBuilder sb = new StringBuilder();
sb.append("SELECT e.codantt antt, ");
sb.append(" ru.prefixo prefixo, ");
sb.append(" po.codantt localOrigem, ");
sb.append(" pd.codantt localDestino ");
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 ru 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 AND ru.activo = 1 ");
sb.append(" AND po.parada_id = (SELECT t.origen_id FROM tramo t ");
sb.append(" WHERE t.tramo_id = ");
sb.append(" (SELECT rs.tramo_id FROM ruta r ");
sb.append(" left join ruta_secuencia rs ON rs.ruta_id = r.ruta_id ");
sb.append(" WHERE 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(" AND ROWNUM <= 1 ");
sb.append(" AND rs.numsecuencia IN ");
sb.append(" (SELECT Min(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 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 = (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 r.prefixo IN ");
sb.append(" ( ru.prefixo ) ");
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 rs.tramo_id)) ");
sb.append("GROUP BY e.codantt, ");
sb.append(" ru.prefixo, ");
sb.append(" po.descparada, ");
sb.append(" po.codantt, ");
sb.append(" pd.descparada, ");
sb.append(" pd.codantt ");
sb.append("ORDER BY e.codantt, ");
sb.append(" ru.prefixo, ");
sb.append(" po.descparada, ");
sb.append(" po.codantt ");
for (MovimentoSecoes ms : list) {
boolean insert = agrupaMovimentoSecoes(result, ms);
if (insert)
result.add(ms);
}
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));
for (MovimentoSecoes ms : result) {
movimentosSecoes.add(ms.toString());
}
query.setParameter("empresaId", empresaId);
return query.list();
return movimentosSecoes;
}
private boolean agrupaMovimentoSecoes(List<MovimentoSecoes> resul, MovimentoSecoes movimentoSecao) {

View File

@ -131,7 +131,7 @@ public class MovimentoSecoes {
@Override
public String toString() {
return antt + ";" + prefixo + ";" + mes + ";" + ano + ";" + localOrigem + ";" + localDestino + ";" + passageirosIda + ";" + passageirosVolta + ";" + gratuidadePasseLivreIda + ";" + gratuidadePasseLivreVolta + ";" + gratuidadeIdosoIda + ";" + gratuidadeIdosoVolta + ";" + descontoIdosoIda + ";" + descontoIdosoVolta;
return antt + ";" + prefixo + ";" + localOrigem + ";" + localDestino + ";" + mes + ";" + ano + ";" + passageirosIda + ";" + passageirosVolta + ";" + gratuidadePasseLivreIda + ";" + gratuidadePasseLivreVolta + ";" + gratuidadeIdosoIda + ";" + gratuidadeIdosoVolta + ";" + descontoIdosoIda + ";" + descontoIdosoVolta;
}
}

View File

@ -0,0 +1,84 @@
package com.rjconsultores.ventaboletos.relatorios;
public class PrefixoAntt {
private String antt;
private String prefixo;
private String localOrigem;
private String localDestino;
public String getAntt() {
return antt;
}
public void setAntt(String antt) {
this.antt = antt;
}
public String getPrefixo() {
return prefixo;
}
public void setPrefixo(String prefixo) {
this.prefixo = prefixo;
}
public String getLocalOrigem() {
return localOrigem;
}
public void setLocalOrigem(String localOrigem) {
this.localOrigem = localOrigem;
}
public String getLocalDestino() {
return localDestino;
}
public void setLocalDestino(String localDestino) {
this.localDestino = localDestino;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((antt == null) ? 0 : antt.hashCode());
result = prime * result + ((localDestino == null) ? 0 : localDestino.hashCode());
result = prime * result + ((localOrigem == null) ? 0 : localOrigem.hashCode());
result = prime * result + ((prefixo == null) ? 0 : prefixo.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
PrefixoAntt other = (PrefixoAntt) obj;
if (antt == null) {
if (other.antt != null)
return false;
} else if (!antt.equals(other.antt))
return false;
if (localDestino == null) {
if (other.localDestino != null)
return false;
} else if (!localDestino.equals(other.localDestino))
return false;
if (localOrigem == null) {
if (other.localOrigem != null)
return false;
} else if (!localOrigem.equals(other.localOrigem))
return false;
if (prefixo == null) {
if (other.prefixo != null)
return false;
} else if (!prefixo.equals(other.prefixo))
return false;
return true;
}
}