diff --git a/pom.xml b/pom.xml
index bad86a0bc..c21b156bf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
br.com.rjconsultores
ventaboletosadm
- 1.19.0
+ 1.19.1
war
diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamentoFinanceiroTrecho.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamentoFinanceiroTrecho.java
index 73e940b62..f2a414fa0 100644
--- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamentoFinanceiroTrecho.java
+++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamentoFinanceiroTrecho.java
@@ -8,11 +8,14 @@ import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeSet;
@@ -39,137 +42,188 @@ public class RelatorioAproveitamentoFinanceiroTrecho extends Relatorio {
Connection conexao = this.relatorio.getConexao();
Map parametros = this.relatorio.getParametros();
- String sqlCombinacoes = gerarCombinacaoTrechos(parametros);
- StringBuilder sql = getSQL(parametros, sqlCombinacoes);
-
- NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql.toString());
-
- stmt.setInt("EMPRESA_ID", Integer.valueOf(parametros.get("EMPRESA_ID").toString()));
- stmt.setTimestamp("DATA_INICIAL", new Timestamp(DateUtil.inicioFecha((Date) parametros.get("DATA_INICIAL")).getTime()));
- stmt.setTimestamp("DATA_FINAL", new Timestamp(DateUtil.fimFecha((Date) parametros.get("DATA_FINAL")).getTime()));
-
- ResultSet rset = stmt.executeQuery();
+ StringBuilder paradasIds = new StringBuilder();
+ @SuppressWarnings("unchecked")
+ Map> mapRutaTrecho = (Map>) parametros.get("MAPRUTATRECHO");
- rset.setFetchSize(500);
+ for (Entry> entry : mapRutaTrecho.entrySet()) {
+ if(entry.getValue() != null && !entry.getValue().isEmpty()) {
+ paradasIds.append(entry.getValue().get(0).getOrigenId()+","+entry.getValue().get(entry.getValue().size()-1).getOrigenId()+",");
+ }
+ if (paradasIds.length() > 0) {
+ paradasIds.delete(paradasIds.length() - 1, paradasIds.length());
+ }
- while (rset.next()) {
+ String sqlCombinacoes = gerarCombinacaoTrechos(parametros);
+ StringBuilder sql = getSQL(parametros, sqlCombinacoes, paradasIds, entry.getKey() );
+ paradasIds = new StringBuilder();
- Map dataResult = new HashMap();
+ NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql.toString());
- dataResult.put("LINHA", rset.getString("linha"));
- dataResult.put("NUMLINHA", rset.getString("numLinha"));
- dataResult.put("SENTIDO", rset.getString("sentido"));
- dataResult.put("SERVICO", rset.getString("servico"));
- dataResult.put("HORARIO", rset.getString("horario"));
- dataResult.put("ORIGEM", rset.getString("origem"));
- dataResult.put("DESTINO", rset.getString("destino"));
- //Quantidade de assentos do diagrana autobus
- BigDecimal assentos = limpaNulo(rset.getBigDecimal("assentos"));
- BigDecimal tarifa = limpaNulo(rset.getBigDecimal("tarifa"));
- BigDecimal totPassageiros = BigDecimal.ZERO;
- BigDecimal totReceita = BigDecimal.ZERO;
- Integer viagens =0;
-
- BigDecimal segReceitaOpe = limpaNulo(rset.getBigDecimal("'2'_RECEITA_OPE"));
- Integer segQtde = rset.getInt("'2'_QTDE");
- BigDecimal segTot = limpaNulo(rset.getBigDecimal("'2'_TOT"));
- totPassageiros = totPassageiros.add(segTot);
- totReceita = totReceita.add(segReceitaOpe);
- viagens = viagens + segQtde;
-
- BigDecimal terReceitaOpe = limpaNulo(rset.getBigDecimal("'3'_RECEITA_OPE"));
- Integer terQtde = rset.getInt("'3'_QTDE");
- BigDecimal terTot = limpaNulo(rset.getBigDecimal("'3'_TOT"));
- totPassageiros = totPassageiros.add(terTot);
- totReceita = totReceita.add(terReceitaOpe);
- viagens = viagens .intValue() + terQtde.intValue();
-
- BigDecimal quaReceitaOpe = limpaNulo(rset.getBigDecimal("'4'_RECEITA_OPE"));
- Integer quaQtde = rset.getInt("'4'_QTDE");
- BigDecimal quaTot = limpaNulo(rset.getBigDecimal("'4'_TOT"));
- totPassageiros = totPassageiros.add(quaTot);
- totReceita = totReceita.add(quaReceitaOpe);
- viagens = viagens.intValue() + quaQtde.intValue();
-
- BigDecimal quiReceitaOpe = limpaNulo(rset.getBigDecimal("'5'_RECEITA_OPE"));
- Integer quiQtde = rset.getInt("'5'_QTDE");
- BigDecimal quiTot = limpaNulo(rset.getBigDecimal("'5'_TOT"));
- totPassageiros = totPassageiros.add(quiTot);
- totReceita = totReceita.add(quiReceitaOpe);
- viagens = viagens.intValue() + quiQtde.intValue();
-
- BigDecimal sexReceitaOpe = limpaNulo(rset.getBigDecimal("'6'_RECEITA_OPE"));
- Integer sexQtde = rset.getInt("'6'_QTDE");
- BigDecimal sexTot = limpaNulo(rset.getBigDecimal("'6'_TOT"));
- totPassageiros = totPassageiros.add(sexTot);
- totReceita = totReceita.add(sexReceitaOpe);
- viagens = viagens.intValue() + sexQtde.intValue();
-
- BigDecimal sabReceitaOpe = limpaNulo(rset.getBigDecimal("'7'_RECEITA_OPE"));
- Integer sabQtde = rset.getInt("'7'_QTDE");
- BigDecimal sabTot = limpaNulo(rset.getBigDecimal("'7'_TOT"));
- totPassageiros = totPassageiros.add(sabTot);
- totReceita = totReceita.add(sabReceitaOpe);
- viagens = viagens.intValue() + sabQtde.intValue();
-
- BigDecimal domReceitaOpe = limpaNulo(rset.getBigDecimal("'1'_RECEITA_OPE"));
- Integer domQtde = rset.getInt("'1'_QTDE");
- BigDecimal domTot = limpaNulo(rset.getBigDecimal("'1'_TOT"));
- totPassageiros = totPassageiros.add(domTot);
- totReceita = totReceita.add(domReceitaOpe);
- viagens = viagens.intValue() + domQtde.intValue();
- dataResult.put("VIAGENS", new BigDecimal(viagens));
- log.info("VIAGENS: " + viagens );
- dataResult.put("ASSENTOS", assentos);
- dataResult.put("TARIFA", tarifa);
- dataResult.put("TOT_PASSAGEIROS", totPassageiros);
- dataResult.put("TOT_RECEITA", totReceita);
-
- dataResult.put("SEG_RECEITA_OPE", segReceitaOpe);
- dataResult.put("SEG_QTDE", new BigDecimal(segQtde));
- dataResult.put("SEG_TOT", segTot);
- dataResult.put("SEG_FIN", calculaMedia(segReceitaOpe, tarifa, segQtde, assentos));
-
- dataResult.put("TER_RECEITA_OPE", terReceitaOpe);
- dataResult.put("TER_QTDE", new BigDecimal(terQtde));
- dataResult.put("TER_TOT", terTot);
- dataResult.put("TER_FIN", calculaMedia(terReceitaOpe, tarifa, terQtde, assentos));
-
- dataResult.put("QUA_RECEITA_OPE", quaReceitaOpe);
- dataResult.put("QUA_QTDE", new BigDecimal(quaQtde));
- dataResult.put("QUA_TOT", quaTot);
- dataResult.put("QUA_FIN", calculaMedia(quaReceitaOpe, tarifa, quaQtde, assentos));
-
- dataResult.put("QUI_RECEITA_OPE", quiReceitaOpe);
- dataResult.put("QUI_QTDE", new BigDecimal(quiQtde));
- dataResult.put("QUI_TOT", quiTot);
- dataResult.put("QUI_FIN", calculaMedia(quiReceitaOpe, tarifa, quiQtde, assentos));
-
- dataResult.put("SEX_RECEITA_OPE", sexReceitaOpe);
- dataResult.put("SEX_QTDE", new BigDecimal(sexQtde));
- dataResult.put("SEX_TOT", sexTot);
- dataResult.put("SEX_FIN", calculaMedia(sexReceitaOpe, tarifa, sexQtde, assentos));
-
- dataResult.put("SAB_RECEITA_OPE", sabReceitaOpe);
- dataResult.put("SAB_QTDE", new BigDecimal(sabQtde));
- dataResult.put("SAB_TOT", sabTot);
- dataResult.put("SAB_FIN", calculaMedia(sabReceitaOpe, tarifa, sabQtde, assentos));
-
- dataResult.put("DOM_RECEITA_OPE", domReceitaOpe);
- dataResult.put("DOM_QTDE", new BigDecimal(domQtde));
- dataResult.put("DOM_TOT", domTot);
- dataResult.put("DOM_FIN", calculaMedia(domReceitaOpe, tarifa, domQtde, assentos));
+ stmt.setInt("EMPRESA_ID", Integer.valueOf(parametros.get("EMPRESA_ID").toString()));
- this.dados.add(dataResult);
+
+ stmt.setTimestamp("DATA_INICIAL", new Timestamp(DateUtil.inicioFecha((Date) parametros.get("DATA_INICIAL")).getTime()));
+ stmt.setTimestamp("DATA_FINAL", new Timestamp(DateUtil.fimFecha((Date) parametros.get("DATA_FINAL")).getTime()));
+
+ ResultSet rset2 = stmt.executeQuery();
+ while (rset2.next()) {
+
+ Map dataResult = new HashMap();
+ dataResult.put("LINHA", rset2.getString("linha"));
+ dataResult.put("NUMLINHA", rset2.getString("numLinha"));
+ dataResult.put("SENTIDO", rset2.getString("sentido"));
+ dataResult.put("SERVICO", rset2.getString("servico"));
+ dataResult.put("HORARIO", rset2.getString("horario"));
+ dataResult.put("ORIGEM", rset2.getString("origem"));
+ dataResult.put("DESTINO", rset2.getString("destino"));
+ //Quantidade de assentos do diagrana autobus
+ BigDecimal assentos = limpaNulo(rset2.getBigDecimal("assentos"));
+ BigDecimal tarifa = limpaNulo(rset2.getBigDecimal("tarifa"));
+ BigDecimal totPassageiros = BigDecimal.ZERO;
+ BigDecimal totReceita = BigDecimal.ZERO;
+ Integer viagens =0;
+
+ BigDecimal segReceitaOpe = limpaNulo(rset2.getBigDecimal("'2'_RECEITA_OPE"));
+ Integer segQtde = rset2.getInt("'2'_QTDE");
+ BigDecimal segTot = limpaNulo(rset2.getBigDecimal("'2'_TOT"));
+ totPassageiros = totPassageiros.add(segTot);
+ totReceita = totReceita.add(segReceitaOpe);
+ viagens = viagens + segQtde;
+
+ BigDecimal terReceitaOpe = limpaNulo(rset2.getBigDecimal("'3'_RECEITA_OPE"));
+ Integer terQtde = rset2.getInt("'3'_QTDE");
+ BigDecimal terTot = limpaNulo(rset2.getBigDecimal("'3'_TOT"));
+ totPassageiros = totPassageiros.add(terTot);
+ totReceita = totReceita.add(terReceitaOpe);
+ viagens = viagens .intValue() + terQtde.intValue();
+
+ BigDecimal quaReceitaOpe = limpaNulo(rset2.getBigDecimal("'4'_RECEITA_OPE"));
+ Integer quaQtde = rset2.getInt("'4'_QTDE");
+ BigDecimal quaTot = limpaNulo(rset2.getBigDecimal("'4'_TOT"));
+ totPassageiros = totPassageiros.add(quaTot);
+ totReceita = totReceita.add(quaReceitaOpe);
+ viagens = viagens.intValue() + quaQtde.intValue();
+
+ BigDecimal quiReceitaOpe = limpaNulo(rset2.getBigDecimal("'5'_RECEITA_OPE"));
+ Integer quiQtde = rset2.getInt("'5'_QTDE");
+ BigDecimal quiTot = limpaNulo(rset2.getBigDecimal("'5'_TOT"));
+ totPassageiros = totPassageiros.add(quiTot);
+ totReceita = totReceita.add(quiReceitaOpe);
+ viagens = viagens.intValue() + quiQtde.intValue();
+
+ BigDecimal sexReceitaOpe = limpaNulo(rset2.getBigDecimal("'6'_RECEITA_OPE"));
+ Integer sexQtde = rset2.getInt("'6'_QTDE");
+ BigDecimal sexTot = limpaNulo(rset2.getBigDecimal("'6'_TOT"));
+ totPassageiros = totPassageiros.add(sexTot);
+ totReceita = totReceita.add(sexReceitaOpe);
+ viagens = viagens.intValue() + sexQtde.intValue();
+
+ BigDecimal sabReceitaOpe = limpaNulo(rset2.getBigDecimal("'7'_RECEITA_OPE"));
+ Integer sabQtde = rset2.getInt("'7'_QTDE");
+ BigDecimal sabTot = limpaNulo(rset2.getBigDecimal("'7'_TOT"));
+ totPassageiros = totPassageiros.add(sabTot);
+ totReceita = totReceita.add(sabReceitaOpe);
+ viagens = viagens.intValue() + sabQtde.intValue();
+
+ BigDecimal domReceitaOpe = limpaNulo(rset2.getBigDecimal("'1'_RECEITA_OPE"));
+ Integer domQtde = rset2.getInt("'1'_QTDE");
+ BigDecimal domTot = limpaNulo(rset2.getBigDecimal("'1'_TOT"));
+ totPassageiros = totPassageiros.add(domTot);
+ totReceita = totReceita.add(domReceitaOpe);
+ viagens = viagens.intValue() + domQtde.intValue();
+ dataResult.put("VIAGENS", new BigDecimal(viagens));
+ log.info("VIAGENS: " + viagens );
+ dataResult.put("ASSENTOS", assentos);
+ dataResult.put("TARIFA", tarifa);
+ dataResult.put("TOT_PASSAGEIROS", totPassageiros);
+ dataResult.put("TOT_RECEITA", totReceita);
+
+ dataResult.put("SEG_RECEITA_OPE", segReceitaOpe);
+ dataResult.put("SEG_QTDE", new BigDecimal(segQtde));
+ dataResult.put("SEG_TOT", segTot);
+ dataResult.put("SEG_FIN", calculaMedia(segReceitaOpe, tarifa, segQtde, assentos));
+
+ dataResult.put("TER_RECEITA_OPE", terReceitaOpe);
+ dataResult.put("TER_QTDE", new BigDecimal(terQtde));
+ dataResult.put("TER_TOT", terTot);
+ dataResult.put("TER_FIN", calculaMedia(terReceitaOpe, tarifa, terQtde, assentos));
+
+ dataResult.put("QUA_RECEITA_OPE", quaReceitaOpe);
+ dataResult.put("QUA_QTDE", new BigDecimal(quaQtde));
+ dataResult.put("QUA_TOT", quaTot);
+ dataResult.put("QUA_FIN", calculaMedia(quaReceitaOpe, tarifa, quaQtde, assentos));
+
+ dataResult.put("QUI_RECEITA_OPE", quiReceitaOpe);
+ dataResult.put("QUI_QTDE", new BigDecimal(quiQtde));
+ dataResult.put("QUI_TOT", quiTot);
+ dataResult.put("QUI_FIN", calculaMedia(quiReceitaOpe, tarifa, quiQtde, assentos));
+
+ dataResult.put("SEX_RECEITA_OPE", sexReceitaOpe);
+ dataResult.put("SEX_QTDE", new BigDecimal(sexQtde));
+ dataResult.put("SEX_TOT", sexTot);
+ dataResult.put("SEX_FIN", calculaMedia(sexReceitaOpe, tarifa, sexQtde, assentos));
+
+ dataResult.put("SAB_RECEITA_OPE", sabReceitaOpe);
+ dataResult.put("SAB_QTDE", new BigDecimal(sabQtde));
+ dataResult.put("SAB_TOT", sabTot);
+ dataResult.put("SAB_FIN", calculaMedia(sabReceitaOpe, tarifa, sabQtde, assentos));
+
+ dataResult.put("DOM_RECEITA_OPE", domReceitaOpe);
+ dataResult.put("DOM_QTDE", new BigDecimal(domQtde));
+ dataResult.put("DOM_TOT", domTot);
+ dataResult.put("DOM_FIN", calculaMedia(domReceitaOpe, tarifa, domQtde, assentos));
+
+ this.dados.add(dataResult);
+ }
+
+ this.resultSet = rset2;
}
-
- this.resultSet = rset;
+
+ Collections.sort(dados, new Comparator