Divergência Relatório Empresa ônibus x Empresa Corrida (fixes bug #6270)

Tempo: 08 horas

git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@43837 d1611594-4594-4d17-8e1d-87c2c4800839
master
julio 2015-05-08 17:49:24 +00:00
parent 96e7f80b5d
commit d1f63bc6ea
2 changed files with 77 additions and 167 deletions

View File

@ -37,8 +37,6 @@ public class RelatorioEmpresaCorrida extends Relatorio {
String sql = getSql(empresa); String sql = getSql(empresa);
System.out.println(sql);
NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql);
ResultSet rset = null; ResultSet rset = null;
@ -86,138 +84,52 @@ public class RelatorioEmpresaCorrida extends Relatorio {
private String getSql(String empresa) { private String getSql(String empresa) {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
sql.append("SELECT DISTINCT "); sql.append("select ");
sql.append(" c1.ruta_id, "); sql.append(" km2.empresa_id, ");
sql.append(" c1.EMPRESACORRIDA_ID, "); sql.append(" km2.nombempresa, ");
sql.append(" r.ruta_id, ");
sql.append(" r.descruta AS linea, "); sql.append(" r.descruta AS linea, ");
sql.append(" e.nombempresa, "); sql.append(" COALESCE(SUM(CASE WHEN ((b.motivocancelacion_id IS NULL) AND (cat.grupocategoria_id IS NULL OR cat.grupocategoria_id <> 4)) THEN b.preciopagado ELSE 0 END), 0) boletos, ");
sql.append(" COALESCE(SUM( "); sql.append(" COALESCE(SUM(CASE WHEN b.motivocancelacion_id IS NULL AND cat.grupocategoria_id = 4 THEN b.preciopagado ELSE 0 END), 0) abonos, ");
sql.append(" CASE "); sql.append(" COALESCE(SUM(CASE WHEN b.motivocancelacion_id IS NULL THEN 1 ELSE 0 END), 0) passageirosTransp, ");
sql.append(" WHEN ((b.motivocancelacion_id IS NULL) ");
sql.append(" AND (cat.grupocategoria_id IS NULL ");
sql.append(" OR cat.grupocategoria_id <> 4)) ");
sql.append(" THEN b.preciopagado ");
sql.append(" ELSE 0 ");
sql.append(" END), 0) boletos, ");
sql.append(" COALESCE(SUM( ");
sql.append(" CASE ");
sql.append(" WHEN b.motivocancelacion_id IS NULL ");
sql.append(" AND cat.grupocategoria_id = 4 ");
sql.append(" THEN b.preciopagado ");
sql.append(" ELSE 0 ");
sql.append(" END), 0) abonos, ");
sql.append(" COALESCE(SUM( ");
sql.append(" CASE ");
sql.append(" WHEN b.motivocancelacion_id IS NULL ");
sql.append(" THEN 1 ");
sql.append(" ELSE 0 ");
sql.append(" END), 0) passageirosTransp, ");
sql.append(" COALESCE(km2.kmtotal, 0) kmtotal, "); sql.append(" COALESCE(km2.kmtotal, 0) kmtotal, ");
sql.append(" COALESCE(km2.kmonibusproprio, 0) kmOnibusProprio, "); sql.append(" COALESCE(km2.kmonibusproprio, 0) kmOnibusProprio, ");
sql.append(" COALESCE(km2.kmonibusarrendados, 0) kmOnibusArrendados "); sql.append(" COALESCE(km2.kmonibusarrendados, 0) kmOnibusArrendados ");
sql.append("FROM "); sql.append("FROM ruta r ");
sql.append(" tramo t1 ");
sql.append("INNER JOIN "); sql.append("INNER JOIN ");
sql.append(" corrida_tramo ct "); sql.append(" ( SELECT ");
sql.append("ON ");
sql.append(" ct.tramo_id = t1.tramo_id ");
sql.append("INNER JOIN ");
sql.append(" corrida c1 ");
sql.append("ON ");
sql.append(" ct.corrida_id = c1.corrida_id ");
sql.append("AND ct.feccorrida = c1.feccorrida ");
sql.append("INNER JOIN ");
sql.append(" autobus a ");
sql.append("ON ");
sql.append(" ct.autobus_id = a.autobus_id ");
sql.append("LEFT JOIN ");
sql.append(" boleto b ");
sql.append("ON ");
sql.append(" b.corrida_id = c1.corrida_id ");
sql.append("AND b.feccorrida = c1.feccorrida ");
sql.append("LEFT JOIN ");
sql.append(" categoria cat ");
sql.append("ON ");
sql.append(" cat.categoria_id = b.categoria_id ");
sql.append("INNER JOIN ");
sql.append(" empresa e ");
sql.append("ON ");
sql.append(" e.empresa_id = c1.EMPRESACORRIDA_ID ");
sql.append("INNER JOIN ");
sql.append(" ruta r ");
sql.append("ON ");
sql.append(" r.ruta_id = c1.ruta_id ");
sql.append("LEFT JOIN ");
sql.append(" ( ");
sql.append(" SELECT ");
sql.append(" c.ruta_id ruta_id, "); sql.append(" c.ruta_id ruta_id, ");
sql.append(" c.EMPRESACORRIDA_ID empresa_id, "); sql.append(" e.empresa_id empresa_id, ");
sql.append(" e.nombempresa nombempresa, ");
sql.append(" COALESCE(SUM(t.cantkmreal), 0) kmtotal, "); sql.append(" COALESCE(SUM(t.cantkmreal), 0) kmtotal, ");
sql.append(" COALESCE(SUM( "); sql.append(" COALESCE(SUM(CASE WHEN a.empresa_id = c.empresacorrida_id THEN t.cantkmreal ELSE 0 END), 0) kmOnibusProprio, ");
sql.append(" CASE "); sql.append(" COALESCE(SUM(CASE WHEN a.empresa_id <> c.empresacorrida_id THEN t.cantkmreal ELSE 0 END), 0) kmOnibusArrendados ");
sql.append(" WHEN a.empresa_id = c.empresacorrida_id "); sql.append(" FROM corrida c ");
sql.append(" THEN t.cantkmreal "); sql.append(" INNER JOIN corrida_tramo ct ON ct.corrida_id = c.corrida_id AND c.feccorrida = ct.feccorrida ");
sql.append(" ELSE 0 "); sql.append(" INNER JOIN tramo t ON t.tramo_id = ct.tramo_id ");
sql.append(" END), 0) kmOnibusProprio, "); sql.append(" INNER JOIN parada o ON o.parada_id = ct.origen_id ");
sql.append(" COALESCE(SUM( "); sql.append(" INNER JOIN parada d ON d.parada_id = ct.destino_id ");
sql.append(" CASE "); sql.append(" INNER JOIN autobus a ON a.autobus_id = ct.autobus_id ");
sql.append(" WHEN a.empresa_id <> c.empresacorrida_id "); sql.append(" INNER JOIN empresa e ON e.empresa_id = a.empresa_id ");
sql.append(" THEN t.cantkmreal ");
sql.append(" ELSE 0 ");
sql.append(" END), 0) kmOnibusArrendados ");
sql.append(" FROM ");
sql.append(" corrida c ");
sql.append(" INNER JOIN ");
sql.append(" corrida_tramo ct ");
sql.append(" ON ");
sql.append(" ct.corrida_id = c.corrida_id ");
sql.append(" AND c.feccorrida = ct.feccorrida ");
sql.append(" INNER JOIN ");
sql.append(" tramo t ");
sql.append(" ON ");
sql.append(" t.tramo_id = ct.tramo_id ");
sql.append(" INNER JOIN ");
sql.append(" parada o ");
sql.append(" ON ");
sql.append(" o.parada_id = ct.origen_id ");
sql.append(" INNER JOIN ");
sql.append(" parada d ");
sql.append(" ON ");
sql.append(" d.parada_id = ct.destino_id ");
sql.append(" INNER JOIN ");
sql.append(" autobus a ");
sql.append(" ON ");
sql.append(" a.autobus_id = ct.autobus_id ");
sql.append(" INNER JOIN ");
sql.append(" empresa e ");
sql.append(" ON ");
sql.append(" e.empresa_id = a.empresa_id ");
sql.append(" WHERE c.activo <> 0 "); sql.append(" WHERE c.activo <> 0 ");
sql.append(" AND e.empresa_id = 1 ");
sql.append(" AND ct.activo = 1 ");
sql.append(" AND c.feccorrida BETWEEN :fecInicio AND :fecFinal ");
sql.append(" AND ct.feccorrida BETWEEN :fecInicio AND :fecFinal ");
sql.append(" GROUP BY ");
sql.append(" c.ruta_id, ");
sql.append(" c.EMPRESACORRIDA_ID ) km2 ");
sql.append("ON (km2.ruta_id = r.ruta_id AND km2.empresa_id = e.empresa_id) ");
sql.append("WHERE c1.activo <> 0 ");
sql.append("AND ct.activo <> 0 ");
sql.append("AND a.activo <> 0 ");
sql.append("AND t1.activo <> 0 ");
sql.append("AND c1.feccorrida BETWEEN :fecInicio AND :fecFinal ");
sql.append(StringUtils.isBlank(empresa) ? "" : " AND e.empresa_id = :empresa_id "); sql.append(StringUtils.isBlank(empresa) ? "" : " AND e.empresa_id = :empresa_id ");
sql.append("GROUP BY "); sql.append(" AND ct.activo = 1 ");
sql.append(" c1.ruta_id, "); sql.append(" AND c.FECCORRIDA BETWEEN :fecInicio AND :fecFinal ");
sql.append(" c1.EMPRESACORRIDA_ID, "); sql.append(" GROUP BY c.ruta_id, e.empresa_id, e.nombempresa) km2 ON r.ruta_id = km2.ruta_id ");
sql.append(" r.descruta, "); sql.append("INNER JOIN corrida c ON c.ruta_id = km2.ruta_id ");
sql.append(" e.nombempresa, "); sql.append("INNER JOIN corrida_tramo ct ON ct.corrida_id = c.corrida_id AND c.feccorrida = ct.feccorrida ");
sql.append(" km2.kmtotal, "); sql.append("INNER JOIN tramo t ON t.tramo_id = ct.tramo_id ");
sql.append(" km2.kmonibusproprio, "); sql.append("INNER JOIN parada o ON o.parada_id = ct.origen_id ");
sql.append(" km2.kmonibusarrendados "); sql.append("INNER JOIN parada d ON d.parada_id = ct.destino_id ");
sql.append("ORDER BY "); sql.append("INNER JOIN autobus a ON a.autobus_id = ct.autobus_id ");
sql.append(" nombempresa, "); sql.append("INNER JOIN empresa e ON e.empresa_id = a.empresa_id ");
sql.append(" linea"); sql.append("LEFT JOIN boleto b ON b.corrida_id = c.corrida_id AND b.feccorrida = c.feccorrida ");
sql.append("LEFT OUTER JOIN categoria cat ON cat.categoria_id = b.categoria_id ");
sql.append("WHERE c.activo <> 0 ");
sql.append("AND e.empresa_id = 1 ");
sql.append("AND ct.activo = 1 ");
sql.append("AND c.FECCORRIDA BETWEEN :fecInicio AND :fecFinal ");
sql.append("GROUP BY km2.empresa_id, km2.nombempresa, r.ruta_id, r.descruta, km2.kmtotal, km2.kmonibusproprio, km2.kmonibusarrendados");
return sql.toString(); return sql.toString();
} }

View File

@ -23,10 +23,10 @@ import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement;
public class RelatorioEmpresaOnibus extends Relatorio { public class RelatorioEmpresaOnibus extends Relatorio {
private List<RelatorioEmpresaOnibusBean> lsDadosRelatorio; private List<RelatorioEmpresaOnibusBean> lsDadosRelatorio;
public RelatorioEmpresaOnibus(Map<String, Object> parametros, Connection conexao) throws Exception { public RelatorioEmpresaOnibus(Map<String, Object> parametros, Connection conexao) throws Exception {
super(parametros, conexao); super(parametros, conexao);
this.setCustomDataSource(new DataSource(this) { this.setCustomDataSource(new DataSource(this) {
@Override @Override
public void initDados() throws Exception { public void initDados() throws Exception {
@ -39,31 +39,29 @@ public class RelatorioEmpresaOnibus extends Relatorio {
String fecFinal = parametros.get("fecFinal").toString() + " 23:59:59"; String fecFinal = parametros.get("fecFinal").toString() + " 23:59:59";
String empresa = parametros.get("empresa") != null ? parametros.get("empresa").toString() : ""; String empresa = parametros.get("empresa") != null ? parametros.get("empresa").toString() : "";
String autobus = parametros.get("autobus") != null ? parametros.get("autobus").toString() : ""; String autobus = parametros.get("autobus") != null ? parametros.get("autobus").toString() : "";
String sql = getSql(empresa, autobus); String sql = getSql(empresa, autobus);
System.out.println(sql);
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql);
stmt.setTimestamp("fecInicio", new java.sql.Timestamp(sdf.parse(fecInicio).getTime())); stmt.setTimestamp("fecInicio", new java.sql.Timestamp(sdf.parse(fecInicio).getTime()));
stmt.setTimestamp("fecFinal", new java.sql.Timestamp(sdf.parse(fecFinal).getTime())); stmt.setTimestamp("fecFinal", new java.sql.Timestamp(sdf.parse(fecFinal).getTime()));
if (empresa != null && !empresa.equals("")){ if (empresa != null && !empresa.equals("")) {
stmt.setInt("empresa_id", Integer.parseInt(empresa)); stmt.setInt("empresa_id", Integer.parseInt(empresa));
} }
if (autobus != null && !autobus.equals("")){ if (autobus != null && !autobus.equals("")) {
stmt.setInt("autobus_id", Integer.parseInt(autobus)); stmt.setInt("autobus_id", Integer.parseInt(autobus));
} }
ResultSet rset = null; ResultSet rset = null;
rset = stmt.executeQuery(); rset = stmt.executeQuery();
// Soma os kms dos tramos. // Soma os kms dos tramos.
// HashMap utilizado para identificar os tramos de uma corrida // HashMap utilizado para identificar os tramos de uma corrida
Map<String, RelatorioEmpresaOnibusBean> mDadosRelatorio = new LinkedHashMap<String, RelatorioEmpresaOnibusBean>(); Map<String, RelatorioEmpresaOnibusBean> mDadosRelatorio = new LinkedHashMap<String, RelatorioEmpresaOnibusBean>();
lsDadosRelatorio = new ArrayList<RelatorioEmpresaOnibusBean>(); lsDadosRelatorio = new ArrayList<RelatorioEmpresaOnibusBean>();
sdf.applyPattern("dd/MM/yyyy"); sdf.applyPattern("dd/MM/yyyy");
while (rset.next()) { while (rset.next()) {
RelatorioEmpresaOnibusBean empresaOnibusBean = new RelatorioEmpresaOnibusBean(); RelatorioEmpresaOnibusBean empresaOnibusBean = new RelatorioEmpresaOnibusBean();
@ -76,51 +74,51 @@ public class RelatorioEmpresaOnibus extends Relatorio {
empresaOnibusBean.setKmts(rset.getInt("kmts")); empresaOnibusBean.setKmts(rset.getInt("kmts"));
empresaOnibusBean.setOrigem(rset.getString("origem")); empresaOnibusBean.setOrigem(rset.getString("origem"));
empresaOnibusBean.setNumsecuencia(rset.getInt("numsecuencia")); empresaOnibusBean.setNumsecuencia(rset.getInt("numsecuencia"));
String key = empresaOnibusBean.getCorridaId() + "-" + empresaOnibusBean.getCoche() + "-" + empresaOnibusBean.getHora() + "-" + String key = empresaOnibusBean.getCorridaId() + "-" + empresaOnibusBean.getCoche() + "-" + empresaOnibusBean.getHora() + "-" +
sdf.format(empresaOnibusBean.getDia()) + "-" + empresaOnibusBean.getEmpresa(); sdf.format(empresaOnibusBean.getDia()) + "-" + empresaOnibusBean.getEmpresa();
if(mDadosRelatorio.containsKey(key)) { if (mDadosRelatorio.containsKey(key)) {
RelatorioEmpresaOnibusBean auxEmpresaOnibusBean = mDadosRelatorio.get(key); RelatorioEmpresaOnibusBean auxEmpresaOnibusBean = mDadosRelatorio.get(key);
empresaOnibusBean.setOrigem(auxEmpresaOnibusBean.getOrigem()); empresaOnibusBean.setOrigem(auxEmpresaOnibusBean.getOrigem());
empresaOnibusBean.setKmts(empresaOnibusBean.getKmts() + auxEmpresaOnibusBean.getKmts()); empresaOnibusBean.setKmts(empresaOnibusBean.getKmts() + auxEmpresaOnibusBean.getKmts());
if(empresaOnibusBean.getNumsecuencia() < auxEmpresaOnibusBean.getNumsecuencia()) { if (empresaOnibusBean.getNumsecuencia() < auxEmpresaOnibusBean.getNumsecuencia()) {
empresaOnibusBean.setDestino(auxEmpresaOnibusBean.getDestino()); empresaOnibusBean.setDestino(auxEmpresaOnibusBean.getDestino());
} }
} }
mDadosRelatorio.put(key, empresaOnibusBean); mDadosRelatorio.put(key, empresaOnibusBean);
} }
for (Entry<String, RelatorioEmpresaOnibusBean> empresaOnibusBean : mDadosRelatorio.entrySet()) { for (Entry<String, RelatorioEmpresaOnibusBean> empresaOnibusBean : mDadosRelatorio.entrySet()) {
lsDadosRelatorio.add(empresaOnibusBean.getValue()); lsDadosRelatorio.add(empresaOnibusBean.getValue());
} }
if (lsDadosRelatorio.size() > 0) { if (lsDadosRelatorio.size() > 0) {
Collections.sort(lsDadosRelatorio,new Comparator<RelatorioEmpresaOnibusBean>() { Collections.sort(lsDadosRelatorio, new Comparator<RelatorioEmpresaOnibusBean>() {
@Override @Override
public int compare(RelatorioEmpresaOnibusBean o1, RelatorioEmpresaOnibusBean o2) { public int compare(RelatorioEmpresaOnibusBean o1, RelatorioEmpresaOnibusBean o2) {
int result = o1.getEmpresa().compareToIgnoreCase(o2.getEmpresa()); int result = o1.getEmpresa().compareToIgnoreCase(o2.getEmpresa());
if (result != 0){ if (result != 0) {
return result; return result;
} }
result = o1.getCoche().compareTo(o2.getCoche()); result = o1.getCoche().compareTo(o2.getCoche());
if (result != 0){ if (result != 0) {
return result; return result;
} }
result = o1.getDia().compareTo(o2.getDia()); result = o1.getDia().compareTo(o2.getDia());
if (result != 0){ if (result != 0) {
return result; return result;
} }
try { try {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm"); SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
Date h1 = formatter.parse(o1.getHora()); Date h1 = formatter.parse(o1.getHora());
Date h2 = formatter.parse(o2.getHora()); Date h2 = formatter.parse(o2.getHora());
result = h1.compareTo(h2); result = h1.compareTo(h2);
} catch (ParseException e) { } catch (ParseException e) {
} }
return result; return result;
@ -128,11 +126,11 @@ public class RelatorioEmpresaOnibus extends Relatorio {
}); });
setLsDadosRelatorio(lsDadosRelatorio); setLsDadosRelatorio(lsDadosRelatorio);
} }
} }
}); });
} }
public void setLsDadosRelatorio(List<RelatorioEmpresaOnibusBean> lsDadosRelatorio) { public void setLsDadosRelatorio(List<RelatorioEmpresaOnibusBean> lsDadosRelatorio) {
this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio)); this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio));
this.lsDadosRelatorio = lsDadosRelatorio; this.lsDadosRelatorio = lsDadosRelatorio;
@ -140,9 +138,9 @@ public class RelatorioEmpresaOnibus extends Relatorio {
@Override @Override
protected void processaParametros() throws Exception { protected void processaParametros() throws Exception {
} }
private String getSql(String empresa, String autobus) { private String getSql(String empresa, String autobus) {
StringBuffer sql = new StringBuffer(); StringBuffer sql = new StringBuffer();
@ -157,16 +155,16 @@ public class RelatorioEmpresaOnibus extends Relatorio {
sql.append(" inner join autobus a on a.autobus_id = ct.autobus_id "); sql.append(" inner join autobus a on a.autobus_id = ct.autobus_id ");
sql.append(" inner join empresa e on e.empresa_id = a.empresa_id "); sql.append(" inner join empresa e on e.empresa_id = a.empresa_id ");
sql.append(" where c.activo = 1 "); sql.append(" where c.activo = 1 ");
if (!empresa.isEmpty()){ if (!empresa.isEmpty()) {
sql.append(" and e.empresa_id = :empresa_id "); sql.append(" and e.empresa_id = :empresa_id ");
} }
if (!autobus.isEmpty()){ if (!autobus.isEmpty()) {
sql.append(" and a.autobus_id = :autobus_id "); sql.append(" and a.autobus_id = :autobus_id ");
} }
sql.append(" and ct.activo = 1 and c.feccorrida between :fecInicio and :fecFinal "); sql.append(" and ct.activo = 1 and c.feccorrida between :fecInicio and :fecFinal ");
sql.append(" and ct.feccorrida between :fecInicio and :fecFinal "); sql.append(" and ct.feccorrida between :fecInicio and :fecFinal ");
sql.append(" order by e.nombempresa, a.numautobus, c.feccorrida, ct.numsecuencia "); sql.append(" order by e.nombempresa, a.numautobus, c.feccorrida, ct.numsecuencia ");
return sql.toString(); return sql.toString();
} }
} }