diff --git a/src/com/rjconsultores/ventaboletos/dao/CorridaDAO.java b/src/com/rjconsultores/ventaboletos/dao/CorridaDAO.java index aa921f41a..d767b7f0b 100644 --- a/src/com/rjconsultores/ventaboletos/dao/CorridaDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/CorridaDAO.java @@ -11,6 +11,7 @@ import com.rjconsultores.ventaboletos.entidad.ClaseServicio; import com.rjconsultores.ventaboletos.entidad.Corrida; import com.rjconsultores.ventaboletos.entidad.Corrida.Id; 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; @@ -78,4 +79,8 @@ public interface CorridaDAO extends GenericDAO { public void actualizaFecHusoFecVerano(Corrida corrida); + public void actualizaFecHusoFecVerano(List corridas); + + public List buscarPorEstado(Estado estado, Date dataInicial); + } \ No newline at end of file diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/CorridaHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/CorridaHibernateDAO.java index c5a0e4571..e6fde9bfd 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/CorridaHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/CorridaHibernateDAO.java @@ -27,6 +27,7 @@ import com.rjconsultores.ventaboletos.entidad.ClaseServicio; import com.rjconsultores.ventaboletos.entidad.Corrida; import com.rjconsultores.ventaboletos.entidad.Corrida.Id; 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; @@ -41,9 +42,10 @@ public class CorridaHibernateDAO extends GenericHibernateDAO buscarGroupCorrridaId(final Integer corridaId, final Integer origem, final Integer destino, final Integer ruta, final Integer numRuta, final Date dateInicio, final Date dateFin) { - StringBuffer sql = new StringBuffer(); + + StringBuilder sql = new StringBuilder(); sql.append(" SELECT c.corrida_id "); sql.append(" FROM corrida c "); if (numRuta != null) { @@ -394,7 +397,7 @@ public class CorridaHibernateDAO extends GenericHibernateDAO buscarGroupCorrridaId(final Integer corridaId, final Date dateInicio, final Date dateFin) { - StringBuffer sql = new StringBuffer(); + StringBuilder sql = new StringBuilder(); sql.append(" SELECT c.corrida_id "); sql.append(" FROM corrida c "); sql.append(" WHERE c.feccorrida BETWEEN :dateInicio AND :dateFin "); @@ -447,15 +450,97 @@ public class CorridaHibernateDAO extends GenericHibernateDAO corridas) { + + List> corridaIdList = new ArrayList>(); + List> fecorridaList = new ArrayList>(); + + ArrayList corridaIds = new ArrayList(); + ArrayList fecorridas = new ArrayList(); + + Integer cont = NumberUtils.INTEGER_ONE; + for (Corrida corrida : corridas) { + + if (cont < MAX_ARRAY) { + corridaIds.add(corrida.getId().getCorridaId()); + fecorridas.add(corrida.getId().getFeccorrida()); + cont++; + } else { + cont = NumberUtils.INTEGER_ONE; + corridaIdList.add(corridaIds); + fecorridaList.add(fecorridas); + + corridaIds = new ArrayList(); + fecorridas = new ArrayList(); + + corridaIds.add(corrida.getId().getCorridaId()); + fecorridas.add(corrida.getId().getFeccorrida()); + + } + } + + if (corridaIdList.size() == fecorridaList.size()) { + for (int i = 0; i < corridaIdList.size(); i++) { + + try { + Query queryCorrida = getSession().createQuery( + sqlBuilder.getSQLActualizarCorridaFecHusoFecVerano()); + queryCorrida.setParameterList("corridaId", corridaIdList.get(i)); + queryCorrida.setParameterList("feccorrida", fecorridaList.get(i)); + queryCorrida.executeUpdate(); + + Query queryCorridaTramo = getSession().createQuery( + sqlBuilder.getSQLActualizarCorridaTramoFecHusoFecVerano()); + queryCorridaTramo.setParameterList("corridaId", corridaIdList.get(i)); + queryCorridaTramo.setParameterList("feccorrida", fecorridaList.get(i)); + queryCorridaTramo.executeUpdate(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + + @Override + public List buscarPorEstado(final Estado estado, final Date dataInicial) { + + StringBuilder hql = new StringBuilder(); + + hql.append(" select "); + hql.append(" 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 )"); + hql.append(" group by "); + hql.append(" ct.corrida.id.corridaId, "); + hql.append(" ct.corrida.id.feccorrida "); + + Query query = getSession().createQuery(hql.toString()); + query.setBoolean("isActivo", Boolean.TRUE); + query.setDate("feccorrida", dataInicial); + query.setInteger("estadoId", estado.getEstadoId()); + + return query.list(); + } } diff --git a/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/SQLBuilder.java b/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/SQLBuilder.java index 8359120b2..fdf6f1de4 100644 --- a/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/SQLBuilder.java +++ b/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/SQLBuilder.java @@ -1,7 +1,5 @@ package com.rjconsultores.ventaboletos.dao.sqlbuilder; -import java.util.Date; - /** * Interface que indica quais são os SQL nativos da aplicação. * @@ -35,8 +33,8 @@ public interface SQLBuilder { public String getSQLInserirTarifaPelaTarifaOficial(Integer vigenciaTarifaId, Integer usuarioId); - public String getSQLActualizarCorridaFecHusoFecVerano(Integer corridaId, Date feccorrida); + public String getSQLActualizarCorridaFecHusoFecVerano(); - public String getSQLActualizarCorridaTramoFecHusoFecVerano(Integer corridaId, Date feccorrida); + public String getSQLActualizarCorridaTramoFecHusoFecVerano(); } diff --git a/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/impl/SQLBuilderOracle.java b/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/impl/SQLBuilderOracle.java index bf97211e3..dd09951ec 100644 --- a/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/impl/SQLBuilderOracle.java +++ b/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/impl/SQLBuilderOracle.java @@ -1,12 +1,10 @@ package com.rjconsultores.ventaboletos.dao.sqlbuilder.impl; -import java.util.Date; - import com.rjconsultores.ventaboletos.dao.sqlbuilder.SQLBuilder; public class SQLBuilderOracle implements SQLBuilder { - private static final Integer HORAS_NO_DIA = new Integer(24); + private static final Integer HORAS_NO_DIA = Integer.valueOf(24); @Override public String getSQLGerarTarifaOficial(final Integer codRuta, final Integer usuarioId, @@ -405,6 +403,7 @@ public class SQLBuilderOracle implements SQLBuilder { return sb.toString(); } + @Override public String getSQLAtualizarTarifaPorTarifaOfical(final Integer vigenciaTarifaId, final Integer usuarioId, final Boolean calculaPegagio) { StringBuilder sb = new StringBuilder(""); @@ -448,6 +447,7 @@ public class SQLBuilderOracle implements SQLBuilder { return sb.toString(); } + @Override public String getSQLInserirTarifaPelaTarifaOficial(final Integer vigenciaTarifaId, final Integer usuarioId) { StringBuilder sb = new StringBuilder(""); sb.append(" insert "); @@ -503,9 +503,10 @@ public class SQLBuilderOracle implements SQLBuilder { return sb.toString(); } - public String getSQLActualizarCorridaFecHusoFecVerano(final Integer corridaId, final Date feccorrida) { + @Override + public String getSQLActualizarCorridaFecHusoFecVerano() { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append(" update Corrida cq "); sb.append(" set cq.fechorSalidaOriginalH = "); @@ -520,19 +521,20 @@ public class SQLBuilderOracle implements SQLBuilder { sb.append(" then (c.origem.ciudad.estado.tiempoHorVerano/").append(HORAS_NO_DIA).append(") "); sb.append(" else 0 end, 0) "); sb.append(" from Corrida c "); - sb.append(" where c.id.corridaId = :corridaId "); - sb.append(" and c.id.feccorrida = :feccorrida "); + sb.append(" where c.id.corridaId in ( :corridaId ) "); + sb.append(" and c.id.feccorrida in ( :feccorrida ) "); sb.append(" and c.id.corridaId = cq.id.corridaId "); sb.append(" and c.id.feccorrida = cq.id.feccorrida "); sb.append(" ) "); - sb.append(" where cq.id.corridaId = :corridaId "); - sb.append(" and cq.id.feccorrida = :feccorrida "); + sb.append(" where cq.id.corridaId in ( :corridaId ) "); + sb.append(" and cq.id.feccorrida in ( :feccorrida ) "); return sb.toString(); } - public String getSQLActualizarCorridaTramoFecHusoFecVerano(final Integer corridaId, final Date feccorrida) { - StringBuffer sb = new StringBuffer(); + @Override + public String getSQLActualizarCorridaTramoFecHusoFecVerano() { + StringBuilder sb = new StringBuilder(); sb.append(" update CorridaTramo ctq "); sb.append(" set ctq.fechorSalidaOriginalH = "); @@ -547,8 +549,8 @@ public class SQLBuilderOracle implements SQLBuilder { sb.append(" then (ct.origem.ciudad.estado.tiempoHorVerano/").append(HORAS_NO_DIA).append(") "); sb.append(" else 0 end, 0) "); sb.append(" from CorridaTramo ct "); - sb.append(" where ct.corrida.id.corridaId = :corridaId "); - sb.append(" and ct.corrida.id.feccorrida = :feccorrida "); + sb.append(" where ct.corrida.id.corridaId in ( :corridaId ) "); + sb.append(" and ct.corrida.id.feccorrida in ( :feccorrida ) "); sb.append(" and ctq.corridatramoId = ct.corridatramoId "); sb.append(" ) "); @@ -567,8 +569,8 @@ public class SQLBuilderOracle implements SQLBuilder { sb.append(" then (ct.origem.ciudad.estado.tiempoHorVerano/").append(HORAS_NO_DIA).append(") "); sb.append(" else 0 end, 0) "); sb.append(" from CorridaTramo ct "); - sb.append(" where ct.corrida.id.corridaId = :corridaId "); - sb.append(" and ct.corrida.id.feccorrida = :feccorrida "); + sb.append(" where ct.corrida.id.corridaId in ( :corridaId ) "); + sb.append(" and ct.corrida.id.feccorrida in ( :feccorrida ) "); sb.append(" and ctq.corridatramoId = ct.corridatramoId "); sb.append(" ) "); @@ -587,13 +589,13 @@ public class SQLBuilderOracle implements SQLBuilder { sb.append(" then (ct.destino.ciudad.estado.tiempoHorVerano/").append(HORAS_NO_DIA).append(") "); sb.append(" else 0 end, 0) "); sb.append(" from CorridaTramo ct "); - sb.append(" where ct.corrida.id.corridaId = :corridaId "); - sb.append(" and ct.corrida.id.feccorrida = :feccorrida "); + sb.append(" where ct.corrida.id.corridaId in ( :corridaId ) "); + sb.append(" and ct.corrida.id.feccorrida in ( :feccorrida ) "); sb.append(" and ctq.corridatramoId = ct.corridatramoId "); sb.append(" ) "); - sb.append(" where ctq.corrida.id.corridaId = :corridaId "); - sb.append(" and ctq.corrida.id.feccorrida = :feccorrida "); + sb.append(" where ctq.corrida.id.corridaId in ( :corridaId ) "); + sb.append(" and ctq.corrida.id.feccorrida in ( :feccorrida ) "); return sb.toString(); } diff --git a/src/com/rjconsultores/ventaboletos/entidad/Corrida.java b/src/com/rjconsultores/ventaboletos/entidad/Corrida.java index 4fb340206..6bb7ccf05 100644 --- a/src/com/rjconsultores/ventaboletos/entidad/Corrida.java +++ b/src/com/rjconsultores/ventaboletos/entidad/Corrida.java @@ -233,6 +233,11 @@ public class Corrida implements Serializable { public Corrida() { } + public Corrida(Integer corridaId, Date feccorrida) { + this.id.setCorridaId(corridaId); + this.id.setFeccorrida(feccorrida); + } + public Corrida(Marca marca, Integer corridaId, Parada origen, Parada destino, ClaseServicio claseServicio, Date horario) { this.id = new Id(); this.id.setCorridaId(corridaId); diff --git a/src/com/rjconsultores/ventaboletos/service/CorridaService.java b/src/com/rjconsultores/ventaboletos/service/CorridaService.java index bf9c6f4f7..bfbdeb83c 100644 --- a/src/com/rjconsultores/ventaboletos/service/CorridaService.java +++ b/src/com/rjconsultores/ventaboletos/service/CorridaService.java @@ -11,6 +11,7 @@ import com.rjconsultores.ventaboletos.entidad.ClaseServicio; import com.rjconsultores.ventaboletos.entidad.Corrida; import com.rjconsultores.ventaboletos.entidad.DiagramaAutobus; import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida; +import com.rjconsultores.ventaboletos.entidad.Estado; import com.rjconsultores.ventaboletos.entidad.Parada; /** @@ -60,4 +61,6 @@ public interface CorridaService extends GenericService { public List buscarGroupCorrridaId(Integer corridaId, Date dateInicio, Date dateFin); public List buscarGroupCorrridaId(Integer corridaId, Integer origem, Integer destino, Integer ruta, Integer numRuta, Date dateInicio, Date dateFin); + + public Boolean atualizarCorridaFecHusoFecVerano(Estado estado, Date dataInicial); } diff --git a/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java index 19c6158f5..62b823cfe 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java @@ -13,6 +13,7 @@ import java.util.List; import javax.persistence.Transient; +import org.apache.commons.lang.math.NumberUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -536,13 +537,20 @@ public class CorridaServiceImpl implements CorridaService { numSec = numSec + 1; corridaTramo.setNumsecdestino(numSec.shortValue()); + Calendar salida = Calendar.getInstance(); Date fecHorSalida = calcularFechorsalida(esquemaTramo, dataGeracao, horaChegadaAnterior, tiempoInstanciaAnterior); - fecHorSalida.setSeconds(0); - corridaTramo.setFechorsalida(fecHorSalida); + salida.setTime(fecHorSalida); + salida.set(salida.get(Calendar.YEAR), salida.get(Calendar.MONTH), salida.get(Calendar.DATE), + salida.get(Calendar.HOUR_OF_DAY), salida.get(Calendar.MINUTE), NumberUtils.INTEGER_ZERO); + corridaTramo.setFechorsalida(salida.getTime()); + Calendar llegada = Calendar.getInstance(); Date fecHorallegada = calcularFechorllegada(esquemaTramo, corrida.getClaseServicio(), dataGeracao, fecHorSalida); - fecHorallegada.setSeconds(0); - corridaTramo.setFechorllegada(fecHorallegada); + llegada.setTime(fecHorallegada); + llegada.set(llegada.get(Calendar.YEAR), llegada.get(Calendar.MONTH), llegada.get(Calendar.DATE), + llegada.get(Calendar.HOUR_OF_DAY), llegada.get(Calendar.MINUTE), NumberUtils.INTEGER_ZERO); + corridaTramo.setFechorllegada(llegada.getTime()); + horaChegadaAnterior = fecHorallegada; tiempoInstanciaAnterior = esquemaTramo.getTiempoEstancia(); @@ -1024,4 +1032,18 @@ public class CorridaServiceImpl implements CorridaService { return corridaDAO.buscarGroupCorrridaId(corridaId, origem, destino, ruta, numRuta, gCalendarDe.getTime(), gCalendarAte.getTime()); } + + @Override + public Boolean atualizarCorridaFecHusoFecVerano(Estado estado, Date dataInicial) { + try { + List corridas = corridaDAO.buscarPorEstado(estado, dataInicial); + corridaDAO.actualizaFecHusoFecVerano(corridas); + return Boolean.TRUE; + + } catch (Exception ex) { + log.error("Erro ao atualizar corridas FecHuso FecVerano: " + ex, ex); + } + return Boolean.FALSE; + + } }