From 6e712f963a405e8f83e8258b4cc834a1b927f3c9 Mon Sep 17 00:00:00 2001 From: "daniel.zauli" Date: Tue, 15 Jan 2019 19:54:23 +0000 Subject: [PATCH] =?UTF-8?q?0013237:=20Horarios=20Unesul=2011/01=20=C3=A0?= =?UTF-8?q?=2013/01=20fixes=20bug#0013237=20dev:leo=20qua:Renato?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@88898 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../dao/hibernate/CorridaHibernateDAO.java | 1792 +++++++++-------- .../hibernate/CorridaTramoHibernateDAO.java | 35 +- 2 files changed, 937 insertions(+), 890 deletions(-) diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/CorridaHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/CorridaHibernateDAO.java index 15591f6cf..798cf2deb 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/CorridaHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/CorridaHibernateDAO.java @@ -1,885 +1,907 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package com.rjconsultores.ventaboletos.dao.hibernate; - -import java.math.BigDecimal; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.List; - -import org.apache.commons.lang.math.NumberUtils; -import org.hibernate.Criteria; -import org.hibernate.Query; -import org.hibernate.SQLQuery; -import org.hibernate.SessionFactory; -import org.hibernate.criterion.Order; -import org.hibernate.criterion.Projections; -import org.hibernate.criterion.Restrictions; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; - -import com.rjconsultores.ventaboletos.dao.CorridaDAO; -import com.rjconsultores.ventaboletos.dao.CorridaTramoDAO; -import com.rjconsultores.ventaboletos.dao.sqlbuilder.SQLBuilder; -import com.rjconsultores.ventaboletos.entidad.ClaseServicio; -import com.rjconsultores.ventaboletos.entidad.Corrida; -import com.rjconsultores.ventaboletos.entidad.Corrida.Id; -import com.rjconsultores.ventaboletos.entidad.CorridaTramo; -import com.rjconsultores.ventaboletos.entidad.DiagramaAutobus; -import com.rjconsultores.ventaboletos.entidad.Estado; -import com.rjconsultores.ventaboletos.entidad.Marca; -import com.rjconsultores.ventaboletos.entidad.Parada; -import com.rjconsultores.ventaboletos.entidad.Ruta; -import com.rjconsultores.ventaboletos.exception.BusinessException; -import com.rjconsultores.ventaboletos.utilerias.ActivoUtil; -import com.rjconsultores.ventaboletos.utilerias.ApplicationProperties; -import com.rjconsultores.ventaboletos.utilerias.DateUtil; - -/** - * - * @author rodrigo - */ -@Repository("corridaDAO") -public class CorridaHibernateDAO extends GenericHibernateDAO implements CorridaDAO { - - @Autowired - private SQLBuilder sqlBuilder; - private static final Integer ULTIMA_HORA_DIA = Integer.valueOf(23); - private static final Integer ULTIMO_MINUTO_SEGUNDO = Integer.valueOf(59); - private static final Integer ULTIMO_MILLISEGUNDO = Integer.valueOf(99); - @Autowired - private CorridaTramoDAO corridaTramoDao; - - @Autowired - public CorridaHibernateDAO(@Qualifier("sessionFactory") final SessionFactory factory) { - setSessionFactory(factory); - } - - @Override - public Boolean existe(final Id id) { - - Criteria c = makeCriteria(); - c.setProjection(Projections.rowCount()); - c.add(Restrictions.eq("id", id)); - - Long cant = HibernateFix.count(c.list()); - - return (cant > 0); - } - - @Override - public Corrida suscribir(final Corrida entity) { - - if (ApplicationProperties.getInstance().gerarCampoEquivalenciaCorrida()) { - String sql = "SELECT CORRIDA_EQUIVALENCIA_SEQ.NEXTVAL FROM DUAL"; - Object o = this.getSession().createSQLQuery(sql).uniqueResult(); - entity.setEquivalenciaId(o.toString()); - } - - Corrida corrida = super.suscribir(entity); - this.getSession().flush(); - return corrida; - } - - @Override - public List buscarPorAutobusCorridasFuturas(final DiagramaAutobus diagramaAutobus) { - String hql = " select co from Corrida co, Autobus ab " - + " where ab.autobusId = co.autobus.autobusId " - + " and ab.diagramaAutobus.diagramaautobusId = " + diagramaAutobus.getDiagramaautobusId() - + " and co.id.feccorrida > current_timestamp()"; - - Query sq = getSession().createQuery(hql); - - List lsCorridas = sq.list(); - - return lsCorridas; - } - - @Override - public List buscarPorRolOperativoCorridasFuturas(final DiagramaAutobus diagramaAutobus) { - String hql = " select co from Corrida co, RolOperativo rol " - + " where rol.roloperativoId = co.rolOperativo.roloperativoId " - + " and rol.diagramaAutobus.diagramaautobusId = " + diagramaAutobus.getDiagramaautobusId() - + " and co.id.feccorrida > current_timestamp()"; - - Query sq = getSession().createQuery(hql); - List lsCorridas = sq.list(); - - return lsCorridas; - } - - @Override - public List buscarPorFecCorrida(final Date value) { - Criteria c = getSession().createCriteria(getPersistentClass()); - c.add(Restrictions.eq("activo", ActivoUtil.ATIVO)); - - c.add(Restrictions.eq("id.feccorrida", value)); - - return c.list(); - } - - @Override - public Long count(final Ruta ruta) { - Criteria c = this.makeCriteria(); - c.add(Restrictions.eq("ruta", ruta)); - c.add(Restrictions.eq("activo", ActivoUtil.ATIVO)); - c.setProjection(Projections.rowCount()); - - return HibernateFix.count(c.list()); - - } - - @Override - public List verificarCorridaId(Integer corridaId) { - - StringBuilder hql = new StringBuilder(); - hql.append("select distinct "); - hql.append(" new com.rjconsultores.ventaboletos.entidad.Corrida("); - hql.append(" c.id.corridaId, "); - hql.append(" c.origem, "); - hql.append(" c.destino) "); - hql.append("from "); - hql.append(" Corrida c "); - hql.append("where "); - hql.append(" 1 = 1 "); - hql.append(" and c.activo = 1 "); - hql.append(" and cast(c.id.corridaId as string) like :corridaId "); - hql.append(" group by "); - hql.append(" c.id.corridaId, "); - hql.append(" c.origem, "); - hql.append(" c.destino) "); - - Query sq = getSession().createQuery(hql.toString()); - - if (corridaId != null) { - sq.setParameter("corridaId", corridaId.toString() + '%'); - } else { - sq.setParameter("corridaId", '%'); - } - - return sq.list(); - } - - @Override - public List buscarPorId(final Integer idCorrida) { - Criteria c = getSession().createCriteria(getPersistentClass()); - c.add(Restrictions.eq("activo", ActivoUtil.ATIVO)); - c.add(Restrictions.eq("id.corridaId", idCorrida)); - - return c.list(); - } - - @Override - public List buscarFiltro(final Parada ori, final Parada des, final Date hora, final ClaseServicio cs) { - Criteria c = getSession().createCriteria(getPersistentClass()); - c.add(Restrictions.eq("activo", ActivoUtil.ATIVO)); - c.add(Restrictions.eq("origem", ori)); - c.add(Restrictions.eq("destino", des)); - c.add(Restrictions.between("fechorsalida", getDiaGeracaoHoraIni(hora), getDiaGeracaoHoraFim(hora))); - c.add(Restrictions.eq("claseServicio", cs)); - - return c.list(); - } - - @Override - public boolean count(final Parada ori, final Parada des, final Date hora, - final ClaseServicio cs, final boolean pisoExtra) { - - Criteria c = makeCriteria(); - c.setProjection(Projections.rowCount()); - c.add(Restrictions.eq("activo", ActivoUtil.ATIVO)); - c.add(Restrictions.eq("origem", ori)); - c.add(Restrictions.eq("destino", des)); - c.add(Restrictions.between("fechorsalida", getDiaGeracaoHoraIni(hora), getDiaGeracaoHoraFim(hora))); - c.add(Restrictions.eq("claseServicio", cs)); - - // Se for piso extra numPiso = 2 - if (pisoExtra) { - // Corrida Piso Extra - c.add(Restrictions.eq("numPiso", 2)); - } else { - // num piso == null ou diferente de 2 - c.add(Restrictions.or(Restrictions.not(Restrictions.eq("numPiso", 2)), Restrictions.isNull("numPiso"))); - } - - Long cant = HibernateFix.count(c.list()); - - return (cant > 0); - } - - private Date getDiaGeracaoHoraIni(final Date hora) { - Date dataCorreta = new Date(); - - // para pegar a hora e adicionar ao dia da geracao: - GregorianCalendar gAux = new GregorianCalendar(); - gAux.setTime(hora); - GregorianCalendar gcalendar = new GregorianCalendar(); - gcalendar.setTime(hora); - gcalendar.set(Calendar.HOUR_OF_DAY, gAux.get(Calendar.HOUR_OF_DAY)); - gcalendar.set(Calendar.MINUTE, gAux.get(Calendar.MINUTE)); - gcalendar.set(Calendar.SECOND, NumberUtils.INTEGER_ZERO); - gcalendar.set(Calendar.MILLISECOND, NumberUtils.INTEGER_ZERO); - - dataCorreta = gcalendar.getTime(); - - return dataCorreta; - } - - private Date getDiaGeracaoHoraFim(final Date hora) { - Date dataCorreta = new Date(); - - // para pegar a hora e adicionar ao dia da geracao: - GregorianCalendar gAux = new GregorianCalendar(); - gAux.setTime(hora); - GregorianCalendar gcalendar = new GregorianCalendar(); - gcalendar.setTime(hora); - gcalendar.set(Calendar.HOUR_OF_DAY, gAux.get(Calendar.HOUR_OF_DAY)); - gcalendar.set(Calendar.MINUTE, gAux.get(Calendar.MINUTE)); - gcalendar.set(Calendar.SECOND, NumberUtils.INTEGER_ZERO); - gcalendar.set(Calendar.MILLISECOND, ULTIMA_HORA_DIA); - - dataCorreta = gcalendar.getTime(); - - return dataCorreta; - } - - @Override - public List buscarDistinct(final Parada ori, final Parada des, final Date horaSalidaInicio, - final Date horaSalidaFin, final ClaseServicio cs, final Integer corridaId) { - StringBuilder hql = new StringBuilder(""); - hql.append("select distinct "); - hql.append(" new com.rjconsultores.ventaboletos.entidad.Corrida("); - hql.append(" c.marca, "); - hql.append(" c.id.corridaId, "); - hql.append(" c.origem, "); - hql.append(" c.destino, "); - hql.append(" c.claseServicio, "); - hql.append(" c.corridaCtrl.horario) "); - hql.append("from "); - hql.append(" Corrida c "); - hql.append("where "); - hql.append(" 1 = 1 "); - if (ori != null) { - hql.append(" and c.origem = :origen "); - } - if (des != null) { - hql.append(" and c.destino = :destino"); - } - if (cs != null) { - hql.append(" and c.claseServicio = :claseServicio "); - } - if (corridaId != null) { - hql.append(" and c.id.corridaId = :corridaId "); - } - if (horaSalidaInicio != null) { - - hql.append(" and c.corridaCtrl.horario >= :horaSalidaInicio"); - } - if (horaSalidaFin != null) { - - hql.append(" and c.corridaCtrl.horario <= :horaSalidaFin"); - } - - hql.append(" order by c.id.corridaId,c.corridaCtrl.horario"); - - Query query = getSession().createQuery(hql.toString()); - - if (ori != null) { - query.setParameter("origen", ori); - } - if (des != null) { - query.setParameter("destino", des); - } - if (cs != null) { - query.setParameter("claseServicio", cs); - } - if (corridaId != null) { - query.setParameter("corridaId", corridaId); - } - - if (horaSalidaInicio != null) { - - query.setParameter("horaSalidaInicio", horaSalidaInicio); - } - if (horaSalidaFin != null) { - query.setParameter("horaSalidaFin", horaSalidaFin); - - } - - return query.list(); - } - - @Override - public boolean existe(final Ruta ruta, final Date fecCorrida, final Date horaCorrida, - final ClaseServicio claseServicio, final Marca marca, final boolean pisoExtra) { - Calendar soloFecha = Calendar.getInstance(); - soloFecha.setTime(fecCorrida); - soloFecha.set(Calendar.HOUR, NumberUtils.INTEGER_ZERO); - soloFecha.set(Calendar.MINUTE, NumberUtils.INTEGER_ZERO); - soloFecha.set(Calendar.SECOND, NumberUtils.INTEGER_ZERO); - soloFecha.set(Calendar.MILLISECOND, NumberUtils.INTEGER_ZERO); - - Criteria c = makeCriteria(); - c.setProjection(Projections.rowCount()); - c.add(Restrictions.eq("ruta", ruta)); - c.add(Restrictions.eq("id.feccorrida", soloFecha.getTime())); - c.add(Restrictions.eq("claseServicio", claseServicio)); - c.add(Restrictions.eq("marca", marca)); - - // Se for piso extra numPiso = 2 - if (pisoExtra) { - // Corrida Piso Extra - c.add(Restrictions.eq("numPiso", 2)); - } else { - // num piso == null ou diferente de 2 - c.add(Restrictions.or(Restrictions.not(Restrictions.eq("numPiso", 2)), Restrictions.isNull("numPiso"))); - } - - Criteria cCorridaCtrl = c.createCriteria("corridaCtrl"); - cCorridaCtrl.add(Restrictions.eq("horario", horaCorrida)); - - Long cant = HibernateFix.count(c.list()); - - return (cant > 0); - } - - @Override - public Long cantCorridaGeneradasHoy() { - Calendar cTmp1 = Calendar.getInstance(); - Calendar cTmp2 = Calendar.getInstance(); - - cTmp1.set(Calendar.HOUR_OF_DAY, NumberUtils.INTEGER_ZERO); - cTmp1.set(Calendar.MINUTE, NumberUtils.INTEGER_ZERO); - cTmp1.set(Calendar.MILLISECOND, NumberUtils.INTEGER_ZERO); - cTmp1.set(Calendar.SECOND, NumberUtils.INTEGER_ZERO); - - cTmp2.set(Calendar.HOUR_OF_DAY, ULTIMA_HORA_DIA); - cTmp2.set(Calendar.MINUTE, ULTIMO_MINUTO_SEGUNDO); - cTmp2.set(Calendar.SECOND, ULTIMO_MINUTO_SEGUNDO); - cTmp2.set(Calendar.MILLISECOND, ULTIMO_MILLISEGUNDO); - - String sql = "select count(c.fecmodif) from Corrida c where c.fecmodif between :inicio and :fim"; - - Query query = getSession().createQuery(sql); - query.setParameter("inicio", cTmp1.getTime()); - query.setParameter("fim", cTmp2.getTime()); - Long count = HibernateFix.count(query.uniqueResult()); - - return count; - } - - @Override - public List buscarGroupCorrridaId(final Integer corridaId, final Integer origem, final Integer destino, - final Integer ruta, final Integer numRuta, final Date dateInicio, final Date dateFin) { - - StringBuilder sql = new StringBuilder(); - sql.append(" SELECT c.corrida_id "); - sql.append(" FROM corrida c "); - if (numRuta != null) { - sql.append(" INNER JOIN Ruta r ON r.ruta_id=c.ruta_id "); - } - sql.append(" WHERE c.feccorrida BETWEEN :dateInicio AND :dateFin "); - sql.append(" AND c.corrida_id LIKE :corridaId "); - - if (origem != null) { - sql.append(" AND c.ORIGEN_ID=").append(origem); - } - if (destino != null) { - sql.append(" AND c.DESTINO_ID=").append(destino); - } - if (ruta != null) { - sql.append(" AND c.RUTA_ID=").append(ruta); - } - if (numRuta != null) { - sql.append(" AND r.NUMRUTA=").append(numRuta); - } - - sql.append(" GROUP BY c.corrida_id "); - - Query sq = getSession().createSQLQuery(sql.toString()); - - if (corridaId != null) { - sq.setParameter("corridaId", corridaId.toString() + '%'); - } else { - sq.setParameter("corridaId", '%'); - } - - sq.setParameter("dateInicio", dateInicio); - sq.setParameter("dateFin", dateFin); - - List lsObject = sq.list(); - - List lsCorridas = new ArrayList(); - - if (lsObject != null && !lsObject.isEmpty()) { - - for (Object object : lsObject) { - - BigDecimal id = (BigDecimal) object; - - StringBuffer hql = new StringBuffer(); - hql.append(" FROM Corrida "); - hql.append(" WHERE id.corridaId = " + id); - - Query squery = getSession().createQuery(hql.toString()); - squery.setMaxResults(NumberUtils.INTEGER_ONE); - - List lsCorridasAux = squery.list(); - - if (lsCorridasAux != null && !lsCorridasAux.isEmpty()) { - lsCorridas.add(lsCorridasAux.iterator().next()); - } - } - } - - return lsCorridas; - } - - @Override - public List buscarGroupCorrridaId(final Integer corridaId, final Date dateInicio, final Date dateFin) { - - StringBuilder sql = new StringBuilder(); - sql.append(" SELECT c.corrida_id "); - sql.append(" FROM corrida c "); - sql.append(" WHERE c.feccorrida BETWEEN :dateInicio AND :dateFin "); - sql.append(" AND c.corrida_id LIKE :corridaId "); - sql.append(" GROUP BY c.corrida_id "); - - Query sq = getSession().createSQLQuery(sql.toString()); - - if (corridaId != null) { - sq.setParameter("corridaId", corridaId.toString() + '%'); - } else { - sq.setParameter("corridaId", '%'); - } - - sq.setParameter("dateInicio", dateInicio); - sq.setParameter("dateFin", dateFin); - - List lsObject = sq.list(); - - List lsCorridas = new ArrayList(); - - if (lsObject != null && !lsObject.isEmpty()) { - - for (Object object : lsObject) { - - BigDecimal id = (BigDecimal) object; - - StringBuffer hql = new StringBuffer(); - hql.append(" FROM Corrida "); - hql.append(" WHERE id.corridaId = " + id); - - Query squery = getSession().createQuery(hql.toString()); - squery.setMaxResults(NumberUtils.INTEGER_ONE); - - List lsCorridasAux = squery.list(); - - if (lsCorridasAux != null && !lsCorridasAux.isEmpty()) { - lsCorridas.add(lsCorridasAux.iterator().next()); - } - } - } - - return lsCorridas; - } - - @Override - public void actualizaFecHusoFecVerano(final Corrida corrida) { - - Integer corridaId = corrida.getId().getCorridaId(); - Date feccorrida = corrida.getId().getFeccorrida(); - - Query queryCorrida = getSession().createQuery( - sqlBuilder.getSQLActualizarCorridaFecHusoFecVerano()); - queryCorrida.setInteger("corridaId", corridaId); - queryCorrida.setInteger("corridaId", corridaId); - queryCorrida.setDate("feccorrida", feccorrida); - queryCorrida.executeUpdate(); - - Query queryCorridaTramo = getSession().createQuery( - sqlBuilder.getSQLActualizarCorridaTramoFecHusoFecVerano()); - queryCorridaTramo.setInteger("corridaId", corridaId); - queryCorridaTramo.setDate("feccorrida", feccorrida); - queryCorridaTramo.executeUpdate(); - } - - @SuppressWarnings("deprecation") - @Override - public void actualizaFecHusoFecVerano(final List corridas) { - - for (Corrida corrida : corridas) { - - Date husoHorVeranoLlegadaAnterior = null; - Date fechorSalidaOriginalUpdate = null; - Date fechorsalidaUpdate = null; - Date fechorllegadaUpdate = null; - Integer corridatramoId = 0; - Date fechorSalidaOriginal = null; - Date fechorsalida = null; - Date fechorllegada = null; - Integer tiempoHorHusoOrigem = Integer.valueOf(0); - Integer tiempoHorVeranoOrigem = Integer.valueOf(0); - Integer tiempoHorHusoDestino = Integer.valueOf(0); - Integer tiempoHorVeranoDestino = Integer.valueOf(0); - Date tiempoestancia = null; - - List tramos = buscarTramosCorrida(corrida); - - for (Object[] objeto : tramos) { - corridatramoId = Integer.valueOf(objeto[0].toString()); - fechorSalidaOriginal = (Date) objeto[2]; - fechorsalida = (Date) objeto[3]; - fechorllegada = (Date) objeto[4]; - tiempoHorHusoOrigem = Integer.valueOf(objeto[5].toString()); - tiempoHorVeranoOrigem = Integer.valueOf(objeto[6].toString()); - tiempoHorHusoDestino = Integer.valueOf(objeto[7].toString()); - tiempoHorVeranoDestino = Integer.valueOf(objeto[8].toString()); - tiempoestancia = (Date) objeto[9]; - - if (husoHorVeranoLlegadaAnterior == null) { - fechorSalidaOriginalUpdate = fechorSalidaOriginal; - fechorsalidaUpdate = fechorsalida; - } else { - fechorSalidaOriginalUpdate = husoHorVeranoLlegadaAnterior; - fechorsalidaUpdate = husoHorVeranoLlegadaAnterior; - } - - husoHorVeranoLlegadaAnterior = calcularHusoHorVeranoLlegada( - fechorsalida, - fechorllegada, - fechorsalidaUpdate, - tiempoHorHusoOrigem + tiempoHorVeranoOrigem, - tiempoHorHusoDestino + tiempoHorVeranoDestino); - - if (tiempoestancia != null) { - Calendar aux = Calendar.getInstance(); - aux.setTime(DateUtil.normalizar(husoHorVeranoLlegadaAnterior)); - aux.add(Calendar.MINUTE, tiempoestancia.getMinutes()); - aux.add(Calendar.HOUR_OF_DAY, tiempoestancia.getHours()); - - husoHorVeranoLlegadaAnterior = aux.getTime(); - - Calendar auxFechorsalidaUpdate = Calendar.getInstance(); - auxFechorsalidaUpdate.setTime(DateUtil.normalizar(fechorsalidaUpdate)); - auxFechorsalidaUpdate.add(Calendar.MINUTE, tiempoestancia.getMinutes()); - auxFechorsalidaUpdate.add(Calendar.HOUR_OF_DAY, tiempoestancia.getHours()); - - fechorsalidaUpdate = auxFechorsalidaUpdate.getTime(); - } - - if (husoHorVeranoLlegadaAnterior != null) { - fechorllegadaUpdate = husoHorVeranoLlegadaAnterior; - } else { - fechorllegadaUpdate = fechorllegada; - } - - Query queryCorridaTramo = getSession().createQuery(sqlBuilder.getSQLActualizarCorridaTramoFecHusoFecVerano()); - queryCorridaTramo.setTimestamp("fechorSalidaOriginalH", fechorSalidaOriginalUpdate); - queryCorridaTramo.setTimestamp("fechorsalidaH", fechorsalidaUpdate); - queryCorridaTramo.setTimestamp("fechorllegadaH", fechorllegadaUpdate); - queryCorridaTramo.setInteger("corridatramoId", corridatramoId); - queryCorridaTramo.executeUpdate(); - } - } - } - - private Date calcularHusoHorVeranoLlegada(Date fechorsalida, Date fechorllegada, Date fechorsalidaH, int tiempoOrigen, int tiempoDestino) { - Calendar horLlegada = null; - - // Si los tiempos son distintos, hube cambio de huso horario/horario de verano - - long elapsedMinutes = DateUtil.getElapsedMinutos(fechorsalida, fechorllegada); - - horLlegada = Calendar.getInstance(); - horLlegada.setTime(fechorsalidaH); - horLlegada.add(Calendar.MINUTE, (int) elapsedMinutes); - - if (tiempoOrigen != tiempoDestino) { - horLlegada.add(Calendar.HOUR, difHuso(tiempoOrigen, tiempoDestino)); - - } - - return (horLlegada == null) ? null : horLlegada.getTime(); - } - - private int difHuso(int a, int b) { - return b - a; - } - - @Override - public List buscarPorEstado(final Estado estado, final Date dataInicial, Integer corridaId) { - StringBuilder hql = new StringBuilder(); - - hql.append(" select "); - hql.append(" distinct new com.rjconsultores.ventaboletos.entidad.Corrida").append("("); - hql.append(" ct.corrida.id.corridaId, "); - hql.append(" ct.corrida.id.feccorrida").append(")"); - hql.append(" from CorridaTramo ct "); - hql.append(" left join ct.origem.ciudad.estado eo "); - hql.append(" left join ct.destino.ciudad.estado ed "); - hql.append(" where ct.corrida.activo = :isActivo "); - hql.append(" and ct.corrida.id.feccorrida >= :feccorrida "); - hql.append(" and ( eo.estadoId = :estadoId "); - hql.append(" or ed.estadoId = :estadoId )"); - if (corridaId != null) { - hql.append(" and ct.corrida.id.corridaId = :corridaId )"); - } - hql.append(" group by "); - hql.append(" ct.corrida.id.corridaId, "); - hql.append(" ct.corrida.id.feccorrida "); - - Query query = getSession().createQuery(hql.toString()); - query.setInteger("isActivo", ActivoUtil.ATIVO); - query.setDate("feccorrida", dataInicial); - query.setInteger("estadoId", estado.getEstadoId()); - - if (corridaId != null) { - query.setInteger("corridaId", corridaId); - } - - return query.list(); - } - - @Override - public List buscarPorEstado(final Estado estado, final Date dataInicial) { - return buscarPorEstado(estado, dataInicial, null); - } - - private List buscarTramosCorrida(final Corrida corrida) { - StringBuilder hql = new StringBuilder(); - - hql.append(" select "); - hql.append(" ct.corridatramoId, "); - hql.append(" ct.numsecuencia,"); - hql.append(" ct.fechorSalidaOriginal,"); - hql.append(" ct.fechorsalida,"); - hql.append(" ct.fechorllegada,"); - hql.append(" nvl(estadoO.tiempoHorHuso, 0) as tiempoHorHusoOrigem,"); - hql.append(" nvl( case when "); - hql.append(" ct.fechorSalidaOriginal between "); - hql.append(" estadoO.fecInicioHorVerano "); - hql.append(" and estadoO.fecFinoHorVerano "); - hql.append(" then (estadoO.tiempoHorVerano)"); - hql.append(" else 0 end, 0) as tiempoHorVeranoOrigem,"); - hql.append(" nvl(estadoD.tiempoHorHuso, 0) as tiempoHorHusoDestino,"); - hql.append(" nvl( case when "); - hql.append(" ct.fechorSalidaOriginal between "); - hql.append(" estadoD.fecInicioHorVerano "); - hql.append(" and estadoD.fecFinoHorVerano "); - hql.append(" then (estadoD.tiempoHorVerano)"); - hql.append(" else 0 end, 0) as tiempoHorVeranoDestino,"); - hql.append(" ct.tiempoEstancia "); - hql.append(" from CorridaTramo ct "); - hql.append(" inner join ct.origem origem "); - hql.append(" inner join origem.ciudad ciudadO "); - hql.append(" inner join ciudadO.estado estadoO "); - hql.append(" inner join ct.destino destino "); - hql.append(" inner join destino.ciudad ciudadD "); - hql.append(" inner join ciudadD.estado estadoD "); - - hql.append(" where ct.corrida.activo = :isActivo "); - hql.append(" and ct.activo = :isActivo "); - hql.append(" and ct.corrida.id.corridaId = :corridaId "); - hql.append(" and ct.corrida.id.feccorrida = :feccorrida "); - hql.append(" order by "); - hql.append(" ct.numsecuencia "); - - Query query = getSession().createQuery(hql.toString()); - query.setInteger("isActivo", ActivoUtil.ATIVO); - query.setDate("feccorrida", corrida.getId().getFeccorrida()); - query.setInteger("corridaId", corrida.getId().getCorridaId()); - - return query.list(); - } - - @Override - public Corrida buscaCorrridaFutura(Ruta ruta, Date fecInicio) { - Criteria c = getSession().createCriteria(getPersistentClass()); - c.add(Restrictions.eq("ruta", ruta)); - c.add(Restrictions.gt("fechorsalida", fecInicio)); - c.addOrder(Order.asc("fechorsalida")); - List lsCorrida = c.list(); - if (!lsCorrida.isEmpty()) { - return lsCorrida.get(0); - } - return null; - } - - @Override - public Boolean editarCorridaPorOutraCorrida(List corridas, Corrida corridaPadrao) { - List tramosPadrao = corridaTramoDao.buscarCorridaTramoPorCorrida(corridaPadrao); - - for (Corrida corrida : corridas) { - List tramos = corridaTramoDao.buscarCorridaTramoPorCorrida(corrida); - - for (CorridaTramo tramo : tramos) { - for (CorridaTramo tramoPadrao : tramosPadrao) { - if (tramoPadrao.getNumsecuencia().equals(tramo.getNumsecuencia())) { - tramo.setFechorsalida(mudarData(tramoPadrao.getFechorsalida(), tramo.getFechorsalida())); - tramo.setFechorsalidaH(mudarData(tramoPadrao.getFechorsalidaH(), tramo.getFechorsalidaH())); - tramo.setFechorSalidaOriginal(mudarData(tramoPadrao.getFechorSalidaOriginal(), tramo.getFechorSalidaOriginal())); - tramo.setFechorllegada(mudarData(tramoPadrao.getFechorllegada(), tramo.getFechorllegada())); - tramo.setFechorllegadaH(mudarData(tramoPadrao.getFechorllegadaH(), tramo.getFechorllegadaH())); - corridaTramoDao.actualizacion(tramo); - break; - } - - } - - } - } - return true; - } - - private Date mudarData(Date dataPadrao, Date dataMudanca) { - Calendar calPadrao = Calendar.getInstance(); - calPadrao.setTime(dataPadrao); - Calendar calMudanca = Calendar.getInstance(); - calMudanca.setTime(dataMudanca); - - calMudanca.set(calMudanca.get(Calendar.YEAR), calMudanca.get(Calendar.MONTH), calMudanca.get(Calendar.DAY_OF_MONTH), - calPadrao.get(Calendar.HOUR_OF_DAY), calPadrao.get(Calendar.MINUTE), calPadrao.get(Calendar.SECOND)); - return calMudanca.getTime(); - } - - @Override - public Corrida buscarPorId(Id id) { - Criteria c = makeCriteria(); - c.add(Restrictions.eq("id", id)); - return (Corrida) c.uniqueResult(); - } - - @Override - public List buscarCorridaRelAproveitamento(Parada origem, Parada destino, - Date feccorrida, Integer corridaId) { - - StringBuilder sql = new StringBuilder(); - sql.append(" select "); - sql.append(" c.corrida_id as corrida_id, "); - sql.append(" c.feccorrida as feccorrida, "); - sql.append(" c.fechorsalida as fechorsalida, "); - sql.append(" origen.parada_id as origen_id, "); - sql.append(" origen.descparada as origen, "); - sql.append(" destino.parada_id as destino_id, "); - sql.append(" destino.descparada as destino, "); - sql.append(" r.ruta_id as ruta_id, "); - sql.append(" r.descruta as descruta, "); - sql.append(" cs.claseservicio_id as claseservicio_id, "); - sql.append(" cs.descclase as descclase "); - sql.append(" from corrida c "); - sql.append(" inner join parada origen on c.origen_id = origen.parada_id "); - sql.append(" inner join parada destino on c.destino_id = destino.parada_id "); - sql.append(" inner join ruta r on c.ruta_id = r.ruta_id "); - sql.append(" inner join clase_servicio cs on c.claseservicio_id = cs.claseservicio_id "); - sql.append(" where c.activo <> 0 "); - if (corridaId != null) { - sql.append(" and c.corrida_id = :corridaId "); - } - sql.append(feccorrida == null ? "" : " and c.feccorrida = :feccorrida "); - if (origem != null) { - sql.append(origem == null ? "" : " and c.origen_id = :origen_id "); - } - if (destino != null) { - sql.append(destino == null ? "" : " and c.destino_id = :destino_id "); - } - - Query query = getSession().createSQLQuery(sql.toString()); - if (corridaId != null) { - query.setParameter("corridaId", corridaId); - } - query.setParameter("feccorrida", feccorrida); - if (origem != null) { - query.setParameter("origen_id", origem.getParadaId()); - } - if (destino != null) { - query.setParameter("destino_id", destino.getParadaId()); - } - - List lsObject = query.list(); - - List lsCorridas = new ArrayList(); - - if (lsObject != null && !lsObject.isEmpty()) { - - for (Object object : lsObject) { - if (object != null) { - Object objectArray[] = (Object[]) object; - Id id = new Id(); - id.setCorridaId(((BigDecimal) objectArray[0]).intValue()); - id.setFeccorrida((Timestamp) objectArray[1]); - - Parada o = new Parada(); - o.setParadaId(((BigDecimal) objectArray[3]).intValue()); - o.setDescparada((String) objectArray[4]); - - Parada d = new Parada(); - d.setParadaId(((BigDecimal) objectArray[5]).intValue()); - d.setDescparada((String) objectArray[6]); - - Ruta ruta = new Ruta(); - ruta.setRutaId(((BigDecimal) objectArray[7]).intValue()); - ruta.setDescruta((String) objectArray[8]); - - ClaseServicio claseServicio = new ClaseServicio(); - claseServicio.setClaseservicioId(((BigDecimal) objectArray[9]).intValue()); - claseServicio.setDescclase((String) objectArray[10]); - - Corrida corrida = new Corrida(); - corrida.setId(id); - corrida.setFechorsalida((Timestamp) objectArray[2]); - corrida.setOrigem(o); - corrida.setDestino(d); - corrida.setRuta(ruta); - corrida.setClaseServicio(claseServicio); - - lsCorridas.add(corrida); - } - } - } - return lsCorridas; - } - - @Override - public Boolean existeCorrida(Long id) { - StringBuilder sql = new StringBuilder(); - sql.append("SELECT CORRIDA_ID FROM CORRIDA corrida "); - sql.append("WHERE CORRIDA_ID = " + id + " AND ACTIVO = 1"); - - Query query = getSession().createSQLQuery(sql.toString()); - - return query.list().size() > 0; - } - - @Override - @Transactional(rollbackFor = { BusinessException.class }) - public Integer atualizaCorridasIntegracaoTotvs(Marca marca, Date dataIncial, Date dataFinal, Integer corridaId) throws BusinessException { - - // update caja set integradototvs = 0 where PUNTOVENTA_ID = 269 and FECHORVENTA >= '30/03/2018' and FECHORVENTA <= '01/04/2018'; - StringBuilder sb = new StringBuilder(); - sb.append(" update corrida set integradototvs = 0 "); - sb.append(" where FECCORRIDA >= :fechorInicial "); - sb.append(" and FECCORRIDA <= :fechorFinal "); - sb.append(" and CORRIDA_ID = :corridaId "); - if (marca != null) { - sb.append(" and MARCA_ID = :marcaId "); - } - SQLQuery query = getSession().createSQLQuery(sb.toString()); - if (marca != null) { - query.setInteger("marcaId", marca.getMarcaId()); - } - query.setInteger("corridaId", corridaId); - query.setTimestamp("fechorInicial", dataIncial); - query.setTimestamp("fechorFinal", dataFinal); - Integer result = query.executeUpdate(); - return result; - } - -} +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.rjconsultores.ventaboletos.dao.hibernate; + +import java.math.BigDecimal; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.List; + +import org.apache.commons.lang.math.NumberUtils; +import org.apache.log4j.Logger; +import org.hibernate.Criteria; +import org.hibernate.Query; +import org.hibernate.SQLQuery; +import org.hibernate.SessionFactory; +import org.hibernate.criterion.Order; +import org.hibernate.criterion.Projections; +import org.hibernate.criterion.Restrictions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import com.rjconsultores.ventaboletos.dao.CorridaDAO; +import com.rjconsultores.ventaboletos.dao.CorridaTramoDAO; +import com.rjconsultores.ventaboletos.dao.sqlbuilder.SQLBuilder; +import com.rjconsultores.ventaboletos.entidad.ClaseServicio; +import com.rjconsultores.ventaboletos.entidad.Corrida; +import com.rjconsultores.ventaboletos.entidad.Corrida.Id; +import com.rjconsultores.ventaboletos.entidad.CorridaTramo; +import com.rjconsultores.ventaboletos.entidad.DiagramaAutobus; +import com.rjconsultores.ventaboletos.entidad.Estado; +import com.rjconsultores.ventaboletos.entidad.Marca; +import com.rjconsultores.ventaboletos.entidad.Parada; +import com.rjconsultores.ventaboletos.entidad.Ruta; +import com.rjconsultores.ventaboletos.exception.BusinessException; +import com.rjconsultores.ventaboletos.utilerias.ActivoUtil; +import com.rjconsultores.ventaboletos.utilerias.ApplicationProperties; +import com.rjconsultores.ventaboletos.utilerias.DateUtil; + +/** + * + * @author rodrigo + */ +@Repository("corridaDAO") +public class CorridaHibernateDAO extends GenericHibernateDAO implements CorridaDAO { + + @Autowired + private SQLBuilder sqlBuilder; + private static final Integer ULTIMA_HORA_DIA = Integer.valueOf(23); + private static final Integer ULTIMO_MINUTO_SEGUNDO = Integer.valueOf(59); + private static final Integer ULTIMO_MILLISEGUNDO = Integer.valueOf(99); + @Autowired + private CorridaTramoDAO corridaTramoDao; + + private static final long serialVersionUID = 1L; + private static Logger log = Logger.getLogger(CorridaHibernateDAO.class); + + @Autowired + public CorridaHibernateDAO(@Qualifier("sessionFactory") final SessionFactory factory) { + setSessionFactory(factory); + } + + @Override + public Boolean existe(final Id id) { + + Criteria c = makeCriteria(); + c.setProjection(Projections.rowCount()); + c.add(Restrictions.eq("id", id)); + + Long cant = HibernateFix.count(c.list()); + + return (cant > 0); + } + + @Override + public Corrida suscribir(final Corrida entity) { + + if (ApplicationProperties.getInstance().gerarCampoEquivalenciaCorrida()) { + String sql = "SELECT CORRIDA_EQUIVALENCIA_SEQ.NEXTVAL FROM DUAL"; + Object o = this.getSession().createSQLQuery(sql).uniqueResult(); + entity.setEquivalenciaId(o.toString()); + } + + Corrida corrida = super.suscribir(entity); + this.getSession().flush(); + return corrida; + } + + @Override + public List buscarPorAutobusCorridasFuturas(final DiagramaAutobus diagramaAutobus) { + String hql = " select co from Corrida co, Autobus ab " + + " where ab.autobusId = co.autobus.autobusId " + + " and ab.diagramaAutobus.diagramaautobusId = " + diagramaAutobus.getDiagramaautobusId() + + " and co.id.feccorrida > current_timestamp()"; + + Query sq = getSession().createQuery(hql); + + List lsCorridas = sq.list(); + + return lsCorridas; + } + + @Override + public List buscarPorRolOperativoCorridasFuturas(final DiagramaAutobus diagramaAutobus) { + String hql = " select co from Corrida co, RolOperativo rol " + + " where rol.roloperativoId = co.rolOperativo.roloperativoId " + + " and rol.diagramaAutobus.diagramaautobusId = " + diagramaAutobus.getDiagramaautobusId() + + " and co.id.feccorrida > current_timestamp()"; + + Query sq = getSession().createQuery(hql); + List lsCorridas = sq.list(); + + return lsCorridas; + } + + @Override + public List buscarPorFecCorrida(final Date value) { + Criteria c = getSession().createCriteria(getPersistentClass()); + c.add(Restrictions.eq("activo", ActivoUtil.ATIVO)); + + c.add(Restrictions.eq("id.feccorrida", value)); + + return c.list(); + } + + @Override + public Long count(final Ruta ruta) { + Criteria c = this.makeCriteria(); + c.add(Restrictions.eq("ruta", ruta)); + c.add(Restrictions.eq("activo", ActivoUtil.ATIVO)); + c.setProjection(Projections.rowCount()); + + return HibernateFix.count(c.list()); + + } + + @Override + public List verificarCorridaId(Integer corridaId) { + + StringBuilder hql = new StringBuilder(); + hql.append("select distinct "); + hql.append(" new com.rjconsultores.ventaboletos.entidad.Corrida("); + hql.append(" c.id.corridaId, "); + hql.append(" c.origem, "); + hql.append(" c.destino) "); + hql.append("from "); + hql.append(" Corrida c "); + hql.append("where "); + hql.append(" 1 = 1 "); + hql.append(" and c.activo = 1 "); + hql.append(" and cast(c.id.corridaId as string) like :corridaId "); + hql.append(" group by "); + hql.append(" c.id.corridaId, "); + hql.append(" c.origem, "); + hql.append(" c.destino) "); + + Query sq = getSession().createQuery(hql.toString()); + + if (corridaId != null) { + sq.setParameter("corridaId", corridaId.toString() + '%'); + } else { + sq.setParameter("corridaId", '%'); + } + + return sq.list(); + } + + @Override + public List buscarPorId(final Integer idCorrida) { + Criteria c = getSession().createCriteria(getPersistentClass()); + c.add(Restrictions.eq("activo", ActivoUtil.ATIVO)); + c.add(Restrictions.eq("id.corridaId", idCorrida)); + + return c.list(); + } + + @Override + public List buscarFiltro(final Parada ori, final Parada des, final Date hora, final ClaseServicio cs) { + Criteria c = getSession().createCriteria(getPersistentClass()); + c.add(Restrictions.eq("activo", ActivoUtil.ATIVO)); + c.add(Restrictions.eq("origem", ori)); + c.add(Restrictions.eq("destino", des)); + c.add(Restrictions.between("fechorsalida", getDiaGeracaoHoraIni(hora), getDiaGeracaoHoraFim(hora))); + c.add(Restrictions.eq("claseServicio", cs)); + + return c.list(); + } + + @Override + public boolean count(final Parada ori, final Parada des, final Date hora, + final ClaseServicio cs, final boolean pisoExtra) { + + Criteria c = makeCriteria(); + c.setProjection(Projections.rowCount()); + c.add(Restrictions.eq("activo", ActivoUtil.ATIVO)); + c.add(Restrictions.eq("origem", ori)); + c.add(Restrictions.eq("destino", des)); + c.add(Restrictions.between("fechorsalida", getDiaGeracaoHoraIni(hora), getDiaGeracaoHoraFim(hora))); + c.add(Restrictions.eq("claseServicio", cs)); + + // Se for piso extra numPiso = 2 + if (pisoExtra) { + // Corrida Piso Extra + c.add(Restrictions.eq("numPiso", 2)); + } else { + // num piso == null ou diferente de 2 + c.add(Restrictions.or(Restrictions.not(Restrictions.eq("numPiso", 2)), Restrictions.isNull("numPiso"))); + } + + Long cant = HibernateFix.count(c.list()); + + return (cant > 0); + } + + private Date getDiaGeracaoHoraIni(final Date hora) { + Date dataCorreta = new Date(); + + // para pegar a hora e adicionar ao dia da geracao: + GregorianCalendar gAux = new GregorianCalendar(); + gAux.setTime(hora); + GregorianCalendar gcalendar = new GregorianCalendar(); + gcalendar.setTime(hora); + gcalendar.set(Calendar.HOUR_OF_DAY, gAux.get(Calendar.HOUR_OF_DAY)); + gcalendar.set(Calendar.MINUTE, gAux.get(Calendar.MINUTE)); + gcalendar.set(Calendar.SECOND, NumberUtils.INTEGER_ZERO); + gcalendar.set(Calendar.MILLISECOND, NumberUtils.INTEGER_ZERO); + + dataCorreta = gcalendar.getTime(); + + return dataCorreta; + } + + private Date getDiaGeracaoHoraFim(final Date hora) { + Date dataCorreta = new Date(); + + // para pegar a hora e adicionar ao dia da geracao: + GregorianCalendar gAux = new GregorianCalendar(); + gAux.setTime(hora); + GregorianCalendar gcalendar = new GregorianCalendar(); + gcalendar.setTime(hora); + gcalendar.set(Calendar.HOUR_OF_DAY, gAux.get(Calendar.HOUR_OF_DAY)); + gcalendar.set(Calendar.MINUTE, gAux.get(Calendar.MINUTE)); + gcalendar.set(Calendar.SECOND, NumberUtils.INTEGER_ZERO); + gcalendar.set(Calendar.MILLISECOND, ULTIMA_HORA_DIA); + + dataCorreta = gcalendar.getTime(); + + return dataCorreta; + } + + @Override + public List buscarDistinct(final Parada ori, final Parada des, final Date horaSalidaInicio, + final Date horaSalidaFin, final ClaseServicio cs, final Integer corridaId) { + StringBuilder hql = new StringBuilder(""); + hql.append("select distinct "); + hql.append(" new com.rjconsultores.ventaboletos.entidad.Corrida("); + hql.append(" c.marca, "); + hql.append(" c.id.corridaId, "); + hql.append(" c.origem, "); + hql.append(" c.destino, "); + hql.append(" c.claseServicio, "); + hql.append(" c.corridaCtrl.horario) "); + hql.append("from "); + hql.append(" Corrida c "); + hql.append("where "); + hql.append(" 1 = 1 "); + if (ori != null) { + hql.append(" and c.origem = :origen "); + } + if (des != null) { + hql.append(" and c.destino = :destino"); + } + if (cs != null) { + hql.append(" and c.claseServicio = :claseServicio "); + } + if (corridaId != null) { + hql.append(" and c.id.corridaId = :corridaId "); + } + if (horaSalidaInicio != null) { + + hql.append(" and c.corridaCtrl.horario >= :horaSalidaInicio"); + } + if (horaSalidaFin != null) { + + hql.append(" and c.corridaCtrl.horario <= :horaSalidaFin"); + } + + hql.append(" order by c.id.corridaId,c.corridaCtrl.horario"); + + Query query = getSession().createQuery(hql.toString()); + + if (ori != null) { + query.setParameter("origen", ori); + } + if (des != null) { + query.setParameter("destino", des); + } + if (cs != null) { + query.setParameter("claseServicio", cs); + } + if (corridaId != null) { + query.setParameter("corridaId", corridaId); + } + + if (horaSalidaInicio != null) { + + query.setParameter("horaSalidaInicio", horaSalidaInicio); + } + if (horaSalidaFin != null) { + query.setParameter("horaSalidaFin", horaSalidaFin); + + } + + return query.list(); + } + + @Override + public boolean existe(final Ruta ruta, final Date fecCorrida, final Date horaCorrida, + final ClaseServicio claseServicio, final Marca marca, final boolean pisoExtra) { + Calendar soloFecha = Calendar.getInstance(); + soloFecha.setTime(fecCorrida); + soloFecha.set(Calendar.HOUR, NumberUtils.INTEGER_ZERO); + soloFecha.set(Calendar.MINUTE, NumberUtils.INTEGER_ZERO); + soloFecha.set(Calendar.SECOND, NumberUtils.INTEGER_ZERO); + soloFecha.set(Calendar.MILLISECOND, NumberUtils.INTEGER_ZERO); + + Criteria c = makeCriteria(); + c.setProjection(Projections.rowCount()); + c.add(Restrictions.eq("ruta", ruta)); + c.add(Restrictions.eq("id.feccorrida", soloFecha.getTime())); + c.add(Restrictions.eq("claseServicio", claseServicio)); + c.add(Restrictions.eq("marca", marca)); + + // Se for piso extra numPiso = 2 + if (pisoExtra) { + // Corrida Piso Extra + c.add(Restrictions.eq("numPiso", 2)); + } else { + // num piso == null ou diferente de 2 + c.add(Restrictions.or(Restrictions.not(Restrictions.eq("numPiso", 2)), Restrictions.isNull("numPiso"))); + } + + Criteria cCorridaCtrl = c.createCriteria("corridaCtrl"); + cCorridaCtrl.add(Restrictions.eq("horario", horaCorrida)); + + Long cant = HibernateFix.count(c.list()); + + return (cant > 0); + } + + @Override + public Long cantCorridaGeneradasHoy() { + Calendar cTmp1 = Calendar.getInstance(); + Calendar cTmp2 = Calendar.getInstance(); + + cTmp1.set(Calendar.HOUR_OF_DAY, NumberUtils.INTEGER_ZERO); + cTmp1.set(Calendar.MINUTE, NumberUtils.INTEGER_ZERO); + cTmp1.set(Calendar.MILLISECOND, NumberUtils.INTEGER_ZERO); + cTmp1.set(Calendar.SECOND, NumberUtils.INTEGER_ZERO); + + cTmp2.set(Calendar.HOUR_OF_DAY, ULTIMA_HORA_DIA); + cTmp2.set(Calendar.MINUTE, ULTIMO_MINUTO_SEGUNDO); + cTmp2.set(Calendar.SECOND, ULTIMO_MINUTO_SEGUNDO); + cTmp2.set(Calendar.MILLISECOND, ULTIMO_MILLISEGUNDO); + + String sql = "select count(c.fecmodif) from Corrida c where c.fecmodif between :inicio and :fim"; + + Query query = getSession().createQuery(sql); + query.setParameter("inicio", cTmp1.getTime()); + query.setParameter("fim", cTmp2.getTime()); + Long count = HibernateFix.count(query.uniqueResult()); + + return count; + } + + @Override + public List buscarGroupCorrridaId(final Integer corridaId, final Integer origem, final Integer destino, + final Integer ruta, final Integer numRuta, final Date dateInicio, final Date dateFin) { + + StringBuilder sql = new StringBuilder(); + sql.append(" SELECT c.corrida_id "); + sql.append(" FROM corrida c "); + if (numRuta != null) { + sql.append(" INNER JOIN Ruta r ON r.ruta_id=c.ruta_id "); + } + sql.append(" WHERE c.feccorrida BETWEEN :dateInicio AND :dateFin "); + sql.append(" AND c.corrida_id LIKE :corridaId "); + + if (origem != null) { + sql.append(" AND c.ORIGEN_ID=").append(origem); + } + if (destino != null) { + sql.append(" AND c.DESTINO_ID=").append(destino); + } + if (ruta != null) { + sql.append(" AND c.RUTA_ID=").append(ruta); + } + if (numRuta != null) { + sql.append(" AND r.NUMRUTA=").append(numRuta); + } + + sql.append(" GROUP BY c.corrida_id "); + + Query sq = getSession().createSQLQuery(sql.toString()); + + if (corridaId != null) { + sq.setParameter("corridaId", corridaId.toString() + '%'); + } else { + sq.setParameter("corridaId", '%'); + } + + sq.setParameter("dateInicio", dateInicio); + sq.setParameter("dateFin", dateFin); + + List lsObject = sq.list(); + + List lsCorridas = new ArrayList(); + + if (lsObject != null && !lsObject.isEmpty()) { + + for (Object object : lsObject) { + + BigDecimal id = (BigDecimal) object; + + StringBuffer hql = new StringBuffer(); + hql.append(" FROM Corrida "); + hql.append(" WHERE id.corridaId = " + id); + + Query squery = getSession().createQuery(hql.toString()); + squery.setMaxResults(NumberUtils.INTEGER_ONE); + + List lsCorridasAux = squery.list(); + + if (lsCorridasAux != null && !lsCorridasAux.isEmpty()) { + lsCorridas.add(lsCorridasAux.iterator().next()); + } + } + } + + return lsCorridas; + } + + @Override + public List buscarGroupCorrridaId(final Integer corridaId, final Date dateInicio, final Date dateFin) { + + StringBuilder sql = new StringBuilder(); + sql.append(" SELECT c.corrida_id "); + sql.append(" FROM corrida c "); + sql.append(" WHERE c.feccorrida BETWEEN :dateInicio AND :dateFin "); + sql.append(" AND c.corrida_id LIKE :corridaId "); + sql.append(" GROUP BY c.corrida_id "); + + Query sq = getSession().createSQLQuery(sql.toString()); + + if (corridaId != null) { + sq.setParameter("corridaId", corridaId.toString() + '%'); + } else { + sq.setParameter("corridaId", '%'); + } + + sq.setParameter("dateInicio", dateInicio); + sq.setParameter("dateFin", dateFin); + + List lsObject = sq.list(); + + List lsCorridas = new ArrayList(); + + if (lsObject != null && !lsObject.isEmpty()) { + + for (Object object : lsObject) { + + BigDecimal id = (BigDecimal) object; + + StringBuffer hql = new StringBuffer(); + hql.append(" FROM Corrida "); + hql.append(" WHERE id.corridaId = " + id); + + Query squery = getSession().createQuery(hql.toString()); + squery.setMaxResults(NumberUtils.INTEGER_ONE); + + List lsCorridasAux = squery.list(); + + if (lsCorridasAux != null && !lsCorridasAux.isEmpty()) { + lsCorridas.add(lsCorridasAux.iterator().next()); + } + } + } + + return lsCorridas; + } + + @Override + public void actualizaFecHusoFecVerano(final Corrida corrida) { + + Integer corridaId = corrida.getId().getCorridaId(); + Date feccorrida = corrida.getId().getFeccorrida(); + + Query queryCorrida = getSession().createQuery( + sqlBuilder.getSQLActualizarCorridaFecHusoFecVerano()); + queryCorrida.setInteger("corridaId", corridaId); + queryCorrida.setInteger("corridaId", corridaId); + queryCorrida.setDate("feccorrida", feccorrida); + queryCorrida.executeUpdate(); + + Query queryCorridaTramo = getSession().createQuery( + sqlBuilder.getSQLActualizarCorridaTramoFecHusoFecVerano()); + queryCorridaTramo.setInteger("corridaId", corridaId); + queryCorridaTramo.setDate("feccorrida", feccorrida); + queryCorridaTramo.executeUpdate(); + } + + @SuppressWarnings("deprecation") + @Override + public void actualizaFecHusoFecVerano(final List corridas) { + + for (Corrida corrida : corridas) { + + Date husoHorVeranoLlegadaAnterior = null; + Date fechorSalidaOriginalUpdate = null; + Date fechorsalidaUpdate = null; + Date fechorllegadaUpdate = null; + Integer corridatramoId = 0; + Date fechorSalidaOriginal = null; + Date fechorsalida = null; + Date fechorllegada = null; + Integer tiempoHorHusoOrigem = Integer.valueOf(0); + Integer tiempoHorVeranoOrigem = Integer.valueOf(0); + Integer tiempoHorHusoDestino = Integer.valueOf(0); + Integer tiempoHorVeranoDestino = Integer.valueOf(0); + Date tiempoestancia = null; + + List tramos = buscarTramosCorrida(corrida); + + for (Object[] objeto : tramos) { + corridatramoId = Integer.valueOf(objeto[0].toString()); + fechorSalidaOriginal = (Date) objeto[2]; + fechorsalida = (Date) objeto[3]; + fechorllegada = (Date) objeto[4]; + tiempoHorHusoOrigem = Integer.valueOf(objeto[5].toString()); + tiempoHorVeranoOrigem = Integer.valueOf(objeto[6].toString()); + tiempoHorHusoDestino = Integer.valueOf(objeto[7].toString()); + tiempoHorVeranoDestino = Integer.valueOf(objeto[8].toString()); + tiempoestancia = (Date) objeto[9]; + + if (husoHorVeranoLlegadaAnterior == null) { + fechorSalidaOriginalUpdate = fechorSalidaOriginal; + fechorsalidaUpdate = fechorsalida; + } else { + fechorSalidaOriginalUpdate = husoHorVeranoLlegadaAnterior; + fechorsalidaUpdate = husoHorVeranoLlegadaAnterior; + } + + husoHorVeranoLlegadaAnterior = calcularHusoHorVeranoLlegada( + fechorsalida, + fechorllegada, + fechorsalidaUpdate, + tiempoHorHusoOrigem + tiempoHorVeranoOrigem, + tiempoHorHusoDestino + tiempoHorVeranoDestino); + + if (tiempoestancia != null) { + Calendar aux = Calendar.getInstance(); + aux.setTime(DateUtil.normalizar(husoHorVeranoLlegadaAnterior)); + aux.add(Calendar.MINUTE, tiempoestancia.getMinutes()); + aux.add(Calendar.HOUR_OF_DAY, tiempoestancia.getHours()); + + husoHorVeranoLlegadaAnterior = aux.getTime(); + + Calendar auxFechorsalidaUpdate = Calendar.getInstance(); + auxFechorsalidaUpdate.setTime(DateUtil.normalizar(fechorsalidaUpdate)); + auxFechorsalidaUpdate.add(Calendar.MINUTE, tiempoestancia.getMinutes()); + auxFechorsalidaUpdate.add(Calendar.HOUR_OF_DAY, tiempoestancia.getHours()); + + fechorsalidaUpdate = auxFechorsalidaUpdate.getTime(); + } + + if (husoHorVeranoLlegadaAnterior != null) { + fechorllegadaUpdate = husoHorVeranoLlegadaAnterior; + } else { + fechorllegadaUpdate = fechorllegada; + } + + Query queryCorridaTramo = getSession().createQuery(sqlBuilder.getSQLActualizarCorridaTramoFecHusoFecVerano()); + queryCorridaTramo.setTimestamp("fechorSalidaOriginalH", fechorSalidaOriginalUpdate); + queryCorridaTramo.setTimestamp("fechorsalidaH", fechorsalidaUpdate); + queryCorridaTramo.setTimestamp("fechorllegadaH", fechorllegadaUpdate); + queryCorridaTramo.setInteger("corridatramoId", corridatramoId); + queryCorridaTramo.executeUpdate(); + } + } + } + + private Date calcularHusoHorVeranoLlegada(Date fechorsalida, Date fechorllegada, Date fechorsalidaH, int tiempoOrigen, int tiempoDestino) { + Calendar horLlegada = null; + + // Si los tiempos son distintos, hube cambio de huso horario/horario de verano + + long elapsedMinutes = DateUtil.getElapsedMinutos(fechorsalida, fechorllegada); + + horLlegada = Calendar.getInstance(); + horLlegada.setTime(fechorsalidaH); + horLlegada.add(Calendar.MINUTE, (int) elapsedMinutes); + + if (tiempoOrigen != tiempoDestino) { + horLlegada.add(Calendar.HOUR, difHuso(tiempoOrigen, tiempoDestino)); + + } + + return (horLlegada == null) ? null : horLlegada.getTime(); + } + + private int difHuso(int a, int b) { + return b - a; + } + + @Override + public List buscarPorEstado(final Estado estado, final Date dataInicial, Integer corridaId) { + StringBuilder hql = new StringBuilder(); + + hql.append(" select "); + hql.append(" distinct new com.rjconsultores.ventaboletos.entidad.Corrida").append("("); + hql.append(" ct.corrida.id.corridaId, "); + hql.append(" ct.corrida.id.feccorrida").append(")"); + hql.append(" from CorridaTramo ct "); + hql.append(" left join ct.origem.ciudad.estado eo "); + hql.append(" left join ct.destino.ciudad.estado ed "); + hql.append(" where ct.corrida.activo = :isActivo "); + hql.append(" and ct.corrida.id.feccorrida >= :feccorrida "); + hql.append(" and ( eo.estadoId = :estadoId "); + hql.append(" or ed.estadoId = :estadoId )"); + if (corridaId != null) { + hql.append(" and ct.corrida.id.corridaId = :corridaId )"); + } + hql.append(" group by "); + hql.append(" ct.corrida.id.corridaId, "); + hql.append(" ct.corrida.id.feccorrida "); + + Query query = getSession().createQuery(hql.toString()); + query.setInteger("isActivo", ActivoUtil.ATIVO); + query.setDate("feccorrida", dataInicial); + query.setInteger("estadoId", estado.getEstadoId()); + + if (corridaId != null) { + query.setInteger("corridaId", corridaId); + } + + return query.list(); + } + + @Override + public List buscarPorEstado(final Estado estado, final Date dataInicial) { + return buscarPorEstado(estado, dataInicial, null); + } + + private List buscarTramosCorrida(final Corrida corrida) { + StringBuilder hql = new StringBuilder(); + + hql.append(" select "); + hql.append(" ct.corridatramoId, "); + hql.append(" ct.numsecuencia,"); + hql.append(" ct.fechorSalidaOriginal,"); + hql.append(" ct.fechorsalida,"); + hql.append(" ct.fechorllegada,"); + hql.append(" nvl(estadoO.tiempoHorHuso, 0) as tiempoHorHusoOrigem,"); + hql.append(" nvl( case when "); + hql.append(" ct.fechorSalidaOriginal between "); + hql.append(" estadoO.fecInicioHorVerano "); + hql.append(" and estadoO.fecFinoHorVerano "); + hql.append(" then (estadoO.tiempoHorVerano)"); + hql.append(" else 0 end, 0) as tiempoHorVeranoOrigem,"); + hql.append(" nvl(estadoD.tiempoHorHuso, 0) as tiempoHorHusoDestino,"); + hql.append(" nvl( case when "); + hql.append(" ct.fechorSalidaOriginal between "); + hql.append(" estadoD.fecInicioHorVerano "); + hql.append(" and estadoD.fecFinoHorVerano "); + hql.append(" then (estadoD.tiempoHorVerano)"); + hql.append(" else 0 end, 0) as tiempoHorVeranoDestino,"); + hql.append(" ct.tiempoEstancia "); + hql.append(" from CorridaTramo ct "); + hql.append(" inner join ct.origem origem "); + hql.append(" inner join origem.ciudad ciudadO "); + hql.append(" inner join ciudadO.estado estadoO "); + hql.append(" inner join ct.destino destino "); + hql.append(" inner join destino.ciudad ciudadD "); + hql.append(" inner join ciudadD.estado estadoD "); + + hql.append(" where ct.corrida.activo = :isActivo "); + hql.append(" and ct.activo = :isActivo "); + hql.append(" and ct.corrida.id.corridaId = :corridaId "); + hql.append(" and ct.corrida.id.feccorrida = :feccorrida "); + hql.append(" order by "); + hql.append(" ct.numsecuencia "); + + Query query = getSession().createQuery(hql.toString()); + query.setInteger("isActivo", ActivoUtil.ATIVO); + query.setDate("feccorrida", corrida.getId().getFeccorrida()); + query.setInteger("corridaId", corrida.getId().getCorridaId()); + + return query.list(); + } + + @Override + public Corrida buscaCorrridaFutura(Ruta ruta, Date fecInicio) { + Criteria c = getSession().createCriteria(getPersistentClass()); + c.add(Restrictions.eq("ruta", ruta)); + c.add(Restrictions.gt("fechorsalida", fecInicio)); + c.addOrder(Order.asc("fechorsalida")); + List lsCorrida = c.list(); + if (!lsCorrida.isEmpty()) { + return lsCorrida.get(0); + } + return null; + } + + @Override + public Boolean editarCorridaPorOutraCorrida(List corridas, Corrida corridaPadrao) { + List tramosPadrao = corridaTramoDao.buscarCorridaTramoPorCorrida(corridaPadrao); + + for (Corrida corrida : corridas) { + List tramos = corridaTramoDao.buscarCorridaTramoPorCorrida(corrida); + + try{ + for (CorridaTramo tramo : tramos) { + + for (CorridaTramo tramoPadrao : tramosPadrao) { + if (tramoPadrao.getNumsecuencia().equals(tramo.getNumsecuencia())) { + tramo.setFechorsalida(mudarData(tramoPadrao.getFechorsalida(), tramo.getFechorsalida())); + tramo.setFechorsalidaH(mudarData(tramoPadrao.getFechorsalidaH(), tramo.getFechorsalidaH())); + tramo.setFechorSalidaOriginal(mudarData(tramoPadrao.getFechorSalidaOriginal(), tramo.getFechorSalidaOriginal())); + tramo.setFechorllegada(mudarData(tramoPadrao.getFechorllegada(), tramo.getFechorllegada())); + tramo.setFechorllegadaH(mudarData(tramoPadrao.getFechorllegadaH(), tramo.getFechorllegadaH())); + corridaTramoDao.actualizacion(tramo); + break; + } + } + } + }catch(Exception e){ + log.error(e.getMessage()); + } + + } + return true; + } + + private Date mudarData(Date dataPadrao, Date dataMudanca) { + try{ + Calendar calPadrao = Calendar.getInstance(); + calPadrao.setTime(dataPadrao); + Calendar calMudanca = Calendar.getInstance(); + calMudanca.setTime(dataMudanca); + + calMudanca.set(calMudanca.get(Calendar.YEAR), calMudanca.get(Calendar.MONTH), calMudanca.get(Calendar.DAY_OF_MONTH), + calPadrao.get(Calendar.HOUR_OF_DAY), calPadrao.get(Calendar.MINUTE), calPadrao.get(Calendar.SECOND)); + return calMudanca.getTime(); + }catch(Exception e){ + return null; + } + } + + @Override + public Corrida buscarPorId(Id id) { + + StringBuilder hql = new StringBuilder(); + + hql.append(" from Corrida corrida "); + hql.append(" where corrida.id.feccorrida = :feccorrida "); + hql.append(" and corrida.id.corridaId = :corridaId )"); + + Query query = getSession().createQuery(hql.toString()); + query.setDate("feccorrida", id.getFeccorrida()); + query.setInteger("corridaId", id.getCorridaId()); + + query.setMaxResults(1); + return (Corrida)query.uniqueResult(); + } + + @Override + public List buscarCorridaRelAproveitamento(Parada origem, Parada destino, + Date feccorrida, Integer corridaId) { + + StringBuilder sql = new StringBuilder(); + sql.append(" select "); + sql.append(" c.corrida_id as corrida_id, "); + sql.append(" c.feccorrida as feccorrida, "); + sql.append(" c.fechorsalida as fechorsalida, "); + sql.append(" origen.parada_id as origen_id, "); + sql.append(" origen.descparada as origen, "); + sql.append(" destino.parada_id as destino_id, "); + sql.append(" destino.descparada as destino, "); + sql.append(" r.ruta_id as ruta_id, "); + sql.append(" r.descruta as descruta, "); + sql.append(" cs.claseservicio_id as claseservicio_id, "); + sql.append(" cs.descclase as descclase "); + sql.append(" from corrida c "); + sql.append(" inner join parada origen on c.origen_id = origen.parada_id "); + sql.append(" inner join parada destino on c.destino_id = destino.parada_id "); + sql.append(" inner join ruta r on c.ruta_id = r.ruta_id "); + sql.append(" inner join clase_servicio cs on c.claseservicio_id = cs.claseservicio_id "); + sql.append(" where c.activo <> 0 "); + if (corridaId != null) { + sql.append(" and c.corrida_id = :corridaId "); + } + sql.append(feccorrida == null ? "" : " and c.feccorrida = :feccorrida "); + if (origem != null) { + sql.append(origem == null ? "" : " and c.origen_id = :origen_id "); + } + if (destino != null) { + sql.append(destino == null ? "" : " and c.destino_id = :destino_id "); + } + + Query query = getSession().createSQLQuery(sql.toString()); + if (corridaId != null) { + query.setParameter("corridaId", corridaId); + } + query.setParameter("feccorrida", feccorrida); + if (origem != null) { + query.setParameter("origen_id", origem.getParadaId()); + } + if (destino != null) { + query.setParameter("destino_id", destino.getParadaId()); + } + + List lsObject = query.list(); + + List lsCorridas = new ArrayList(); + + if (lsObject != null && !lsObject.isEmpty()) { + + for (Object object : lsObject) { + if (object != null) { + Object objectArray[] = (Object[]) object; + Id id = new Id(); + id.setCorridaId(((BigDecimal) objectArray[0]).intValue()); + id.setFeccorrida((Timestamp) objectArray[1]); + + Parada o = new Parada(); + o.setParadaId(((BigDecimal) objectArray[3]).intValue()); + o.setDescparada((String) objectArray[4]); + + Parada d = new Parada(); + d.setParadaId(((BigDecimal) objectArray[5]).intValue()); + d.setDescparada((String) objectArray[6]); + + Ruta ruta = new Ruta(); + ruta.setRutaId(((BigDecimal) objectArray[7]).intValue()); + ruta.setDescruta((String) objectArray[8]); + + ClaseServicio claseServicio = new ClaseServicio(); + claseServicio.setClaseservicioId(((BigDecimal) objectArray[9]).intValue()); + claseServicio.setDescclase((String) objectArray[10]); + + Corrida corrida = new Corrida(); + corrida.setId(id); + corrida.setFechorsalida((Timestamp) objectArray[2]); + corrida.setOrigem(o); + corrida.setDestino(d); + corrida.setRuta(ruta); + corrida.setClaseServicio(claseServicio); + + lsCorridas.add(corrida); + } + } + } + return lsCorridas; + } + + @Override + public Boolean existeCorrida(Long id) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT CORRIDA_ID FROM CORRIDA corrida "); + sql.append("WHERE CORRIDA_ID = " + id + " AND ACTIVO = 1"); + + Query query = getSession().createSQLQuery(sql.toString()); + + return query.list().size() > 0; + } + + @Override + @Transactional(rollbackFor = { BusinessException.class }) + public Integer atualizaCorridasIntegracaoTotvs(Marca marca, Date dataIncial, Date dataFinal, Integer corridaId) throws BusinessException { + + // update caja set integradototvs = 0 where PUNTOVENTA_ID = 269 and FECHORVENTA >= '30/03/2018' and FECHORVENTA <= '01/04/2018'; + StringBuilder sb = new StringBuilder(); + sb.append(" update corrida set integradototvs = 0 "); + sb.append(" where FECCORRIDA >= :fechorInicial "); + sb.append(" and FECCORRIDA <= :fechorFinal "); + sb.append(" and CORRIDA_ID = :corridaId "); + if (marca != null) { + sb.append(" and MARCA_ID = :marcaId "); + } + SQLQuery query = getSession().createSQLQuery(sb.toString()); + if (marca != null) { + query.setInteger("marcaId", marca.getMarcaId()); + } + query.setInteger("corridaId", corridaId); + query.setTimestamp("fechorInicial", dataIncial); + query.setTimestamp("fechorFinal", dataFinal); + Integer result = query.executeUpdate(); + return result; + } + +} diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/CorridaTramoHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/CorridaTramoHibernateDAO.java index e19ac5ce2..3ac6058d2 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/CorridaTramoHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/CorridaTramoHibernateDAO.java @@ -3,10 +3,15 @@ package com.rjconsultores.ventaboletos.dao.hibernate; import java.math.BigDecimal; import java.util.List; +import org.apache.log4j.Logger; import org.hibernate.Criteria; +import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.hibernate.criterion.Restrictions; +import org.hibernate.transform.AliasToBeanResultTransformer; +import org.hibernate.type.ShortType; +import org.hibernate.type.TimestampType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Repository; @@ -23,6 +28,9 @@ public class CorridaTramoHibernateDAO extends GenericHibernateDAO obtenerTramoTarjetaEmitida() { @@ -45,11 +53,28 @@ public class CorridaTramoHibernateDAO extends GenericHibernateDAO buscarCorridaTramoPorCorrida(Corrida corrida) { - Criteria c = getSession().createCriteria(getPersistentClass()); - c.add(Restrictions.eq("activo", ActivoUtil.ATIVO)); - c.add(Restrictions.eq("corrida", corrida)); - - return c.list(); + try{ + String queryStr = "select ct.Numsecuencia as Numsecuencia, ct.Fechorsalida as Fechorsalida, ct.FechorsalidaH as FechorsalidaH, ct.FechorSalidaOriginal as FechorSalidaOriginal, ct.Fechorllegada as Fechorllegada, ct.FechorllegadaH as FechorllegadaH from Corrida_Tramo ct where ct.activo = :activo and ct.corrida_id = :corridaId and ct.feccorrida = :feccorrida "; + Query query = getSession().createSQLQuery(queryStr).addScalar("numsecuencia", ShortType.INSTANCE) + .addScalar("fechorsalida", TimestampType.INSTANCE) + .addScalar("fechorsalidaH", TimestampType.INSTANCE) + .addScalar("fechorSalidaOriginal", TimestampType.INSTANCE) + .addScalar("fechorllegada", TimestampType.INSTANCE) + .addScalar("fechorllegadaH", TimestampType.INSTANCE); + + query.setInteger("activo", ActivoUtil.ATIVO); + query.setInteger("corridaId", corrida.getId().getCorridaId()); + query.setDate("feccorrida", corrida.getId().getFeccorrida()); + + query.setResultTransformer(new AliasToBeanResultTransformer(CorridaTramo.class)); + + + return (List)query.list(); + + }catch(HibernateException e){ + log.error(e.getMessage()); + } + return null; } public BigDecimal buscarSumTarjetaMesmaCorrida(CorridaTramo ct) {