git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@31584 d1611594-4594-4d17-8e1d-87c2c4800839
parent
a5378b60be
commit
34e4177184
|
@ -26,12 +26,14 @@ 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.utilerias.ApplicationProperties;
|
||||
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -46,6 +48,7 @@ public class CorridaHibernateDAO extends GenericHibernateDAO<Corrida, Corrida.Id
|
|||
private static final Integer ULTIMO_MINUTO_SEGUNDO = Integer.valueOf(59);
|
||||
private static final Integer ULTIMO_MILLISEGUNDO = Integer.valueOf(99);
|
||||
private static final Integer MAX_ARRAY = Integer.valueOf(1000);
|
||||
private static final Integer HORAS_NO_DIA = Integer.valueOf(24);
|
||||
|
||||
@Autowired
|
||||
public CorridaHibernateDAO(@Qualifier("sessionFactory") final SessionFactory factory) {
|
||||
|
@ -465,61 +468,105 @@ public class CorridaHibernateDAO extends GenericHibernateDAO<Corrida, Corrida.Id
|
|||
|
||||
@Override
|
||||
public void actualizaFecHusoFecVerano(final List<Corrida> corridas) {
|
||||
|
||||
List<ArrayList<Integer>> corridaIdList = new ArrayList<ArrayList<Integer>>();
|
||||
List<ArrayList<Date>> fecorridaList = new ArrayList<ArrayList<Date>>();
|
||||
|
||||
ArrayList<Integer> corridaIds = new ArrayList<Integer>();
|
||||
ArrayList<Date> fecorridas = new ArrayList<Date>();
|
||||
|
||||
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<Integer>();
|
||||
fecorridas = new ArrayList<Date>();
|
||||
|
||||
corridaIds.add(corrida.getId().getCorridaId());
|
||||
fecorridas.add(corrida.getId().getFeccorrida());
|
||||
|
||||
}
|
||||
}
|
||||
List<Object[]> tramos = null;
|
||||
|
||||
corridaIdList.add(corridaIds);
|
||||
fecorridaList.add(fecorridas);
|
||||
|
||||
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();
|
||||
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 husoHorVeranoLlegadaAnterior = null;
|
||||
|
||||
Date fechorSalidaOriginalUpdate = null;
|
||||
Date fechorsalidaUpdate = null;
|
||||
Date fechorllegadaUpdate = null;
|
||||
|
||||
for (Corrida corrida : corridas) {
|
||||
tramos = buscarTramosCorrida(corrida);
|
||||
|
||||
husoHorVeranoLlegadaAnterior = null;
|
||||
|
||||
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());
|
||||
|
||||
if (husoHorVeranoLlegadaAnterior == null){
|
||||
fechorSalidaOriginalUpdate = fechorSalidaOriginal;
|
||||
fechorsalidaUpdate = fechorsalida;
|
||||
}else{
|
||||
fechorSalidaOriginalUpdate = husoHorVeranoLlegadaAnterior;
|
||||
fechorsalidaUpdate = husoHorVeranoLlegadaAnterior;
|
||||
}
|
||||
|
||||
husoHorVeranoLlegadaAnterior = calcularHusoHorVeranoLlegada(
|
||||
fechorsalida,
|
||||
fechorllegada,
|
||||
fechorsalidaUpdate,
|
||||
tiempoHorHusoOrigem + tiempoHorVeranoOrigem,
|
||||
tiempoHorHusoDestino + tiempoHorVeranoDestino);
|
||||
|
||||
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
|
||||
if (tiempoOrigen != tiempoDestino) {
|
||||
long elapsedHoras = DateUtil.getElapsedHoras(fechorsalida,fechorllegada);
|
||||
|
||||
horLlegada = Calendar.getInstance();
|
||||
horLlegada.setTime(fechorsalidaH);
|
||||
|
||||
horLlegada.add(Calendar.HOUR, (int)elapsedHoras);
|
||||
horLlegada.add(Calendar.HOUR, difHuso(tiempoOrigen,tiempoDestino));
|
||||
|
||||
}
|
||||
|
||||
return (horLlegada == null) ? null : horLlegada.getTime();
|
||||
}
|
||||
|
||||
private int difHuso(int a,int b){
|
||||
int mult=0;
|
||||
|
||||
if ( (a < b) && (b<=0) ){
|
||||
mult = -1;
|
||||
}else if ( (a<b) && (a>=0) ){
|
||||
mult = -1;
|
||||
}else if (a> b){
|
||||
mult = -1;
|
||||
}else{
|
||||
mult = 1;
|
||||
}
|
||||
|
||||
return ((Math.abs(a)-Math.abs(b)) * mult);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Corrida> buscarPorEstado(final Estado estado, final Date dataInicial) {
|
||||
|
||||
StringBuilder hql = new StringBuilder();
|
||||
|
||||
hql.append(" select ");
|
||||
|
@ -544,4 +591,42 @@ public class CorridaHibernateDAO extends GenericHibernateDAO<Corrida, Corrida.Id
|
|||
|
||||
return query.list();
|
||||
}
|
||||
|
||||
private List<Object[]> 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(ct.origem.ciudad.estado.tiempoHorHuso, 0) as tiempoHorHusoOrigem,");
|
||||
hql.append(" nvl( case when ");
|
||||
hql.append(" ct.fechorSalidaOriginal between ");
|
||||
hql.append(" ct.origem.ciudad.estado.fecInicioHorVerano ");
|
||||
hql.append(" and ct.origem.ciudad.estado.fecFinoHorVerano ");
|
||||
hql.append(" then (ct.origem.ciudad.estado.tiempoHorVerano)");
|
||||
hql.append(" else 0 end, 0) as tiempoHorVeranoOrigem,");
|
||||
hql.append(" nvl(ct.destino.ciudad.estado.tiempoHorHuso, 0) as tiempoHorHusoDestino,");
|
||||
hql.append(" nvl( case when ");
|
||||
hql.append(" ct.fechorSalidaOriginal between ");
|
||||
hql.append(" ct.destino.ciudad.estado.fecInicioHorVerano ");
|
||||
hql.append(" and ct.destino.ciudad.estado.fecFinoHorVerano ");
|
||||
hql.append(" then (ct.destino.ciudad.estado.tiempoHorVerano)");
|
||||
hql.append(" else 0 end, 0) as tiempoHorVeranoDestino");
|
||||
hql.append(" from CorridaTramo ct ");
|
||||
hql.append(" where ct.corrida.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.setBoolean("isActivo", Boolean.TRUE);
|
||||
query.setDate("feccorrida", corrida.getId().getFeccorrida());
|
||||
query.setInteger("corridaId", corrida.getId().getCorridaId());
|
||||
|
||||
return query.list();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -537,65 +537,8 @@ public class SQLBuilderOracle implements SQLBuilder {
|
|||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append(" update CorridaTramo ctq ");
|
||||
sb.append(" set ctq.fechorSalidaOriginalH = ");
|
||||
sb.append(" ( ");
|
||||
sb.append(" select ");
|
||||
sb.append(" ct.fechorSalidaOriginal ");
|
||||
sb.append(" + nvl((ct.origem.ciudad.estado.tiempoHorHuso/").append(HORAS_NO_DIA).append("), 0) ");
|
||||
sb.append(" + nvl( case when ");
|
||||
sb.append(" ct.fechorSalidaOriginal between ");
|
||||
sb.append(" ct.origem.ciudad.estado.fecInicioHorVerano ");
|
||||
sb.append(" and ct.origem.ciudad.estado.fecFinoHorVerano ");
|
||||
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 in ( :corridaId ) ");
|
||||
sb.append(" and ct.corrida.id.feccorrida in ( :feccorrida ) ");
|
||||
sb.append(" and ctq.corridatramoId = ct.corridatramoId ");
|
||||
sb.append(" ) ");
|
||||
|
||||
sb.append(" , ");
|
||||
|
||||
sb.append(" ctq.fechorsalidaH = ");
|
||||
|
||||
sb.append(" ( ");
|
||||
sb.append(" select ");
|
||||
sb.append(" ct.fechorsalida ");
|
||||
sb.append(" + nvl((ct.origem.ciudad.estado.tiempoHorHuso/").append(HORAS_NO_DIA).append("), 0) ");
|
||||
sb.append(" + nvl( case when ");
|
||||
sb.append(" ct.fechorsalida between ");
|
||||
sb.append(" ct.origem.ciudad.estado.fecInicioHorVerano ");
|
||||
sb.append(" and ct.origem.ciudad.estado.fecFinoHorVerano ");
|
||||
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 in ( :corridaId ) ");
|
||||
sb.append(" and ct.corrida.id.feccorrida in ( :feccorrida ) ");
|
||||
sb.append(" and ctq.corridatramoId = ct.corridatramoId ");
|
||||
sb.append(" ) ");
|
||||
|
||||
sb.append(" , ");
|
||||
|
||||
sb.append(" ctq.fechorllegadaH = ");
|
||||
|
||||
sb.append(" ( ");
|
||||
sb.append(" select ");
|
||||
sb.append(" ct.fechorllegada ");
|
||||
sb.append(" + nvl((ct.destino.ciudad.estado.tiempoHorHuso/").append(HORAS_NO_DIA).append("), 0) ");
|
||||
sb.append(" + nvl( case when ");
|
||||
sb.append(" ct.fechorllegada between ");
|
||||
sb.append(" ct.destino.ciudad.estado.fecInicioHorVerano ");
|
||||
sb.append(" and ct.destino.ciudad.estado.fecFinoHorVerano ");
|
||||
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 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 in ( :corridaId ) ");
|
||||
sb.append(" and ctq.corrida.id.feccorrida in ( :feccorrida ) ");
|
||||
sb.append(" set ctq.fechorSalidaOriginalH = :fechorSalidaOriginalH, ctq.fechorsalidaH = :fechorsalidaH, ctq.fechorllegadaH = :fechorllegadaH");
|
||||
sb.append(" where ctq.corridatramoId = :corridatramoId ");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
|
|
@ -528,7 +528,6 @@ public class CorridaServiceImpl implements CorridaService {
|
|||
Date husoHorVeranoLlegadaAnterior = null;
|
||||
|
||||
for (EsquemaTramo esquemaTramo : lsEsquemaTramo) {
|
||||
|
||||
CorridaTramo corridaTramo = new CorridaTramo();
|
||||
corridaTramo.setAutobus(null);
|
||||
corridaTramo.setConductor(null);
|
||||
|
@ -585,6 +584,21 @@ public class CorridaServiceImpl implements CorridaService {
|
|||
corridaTramo.setCorrida(corrida);
|
||||
corridaTramo.setFechorSalidaOriginal(fecHorSalida);
|
||||
|
||||
if (husoHorVeranoLlegadaAnterior == null){
|
||||
corridaTramo.setFechorsalidaH(corridaTramo.getFechorsalida());
|
||||
}else{
|
||||
corridaTramo.setFechorsalidaH(husoHorVeranoLlegadaAnterior);
|
||||
}
|
||||
|
||||
husoHorVeranoLlegadaAnterior = calcularHusoHorVeranoLlegada(esquemaTramo, corridaTramo);
|
||||
|
||||
if (husoHorVeranoLlegadaAnterior != null){
|
||||
corridaTramo.setFechorllegadaH(husoHorVeranoLlegadaAnterior);
|
||||
}else{
|
||||
corridaTramo.setFechorllegadaH(corridaTramo.getFechorllegada());
|
||||
}
|
||||
|
||||
|
||||
if (husoHorVeranoLlegadaAnterior == null){
|
||||
corridaTramo.setFechorsalidaH(corridaTramo.getFechorsalida());
|
||||
}else{
|
||||
|
@ -1126,6 +1140,7 @@ public class CorridaServiceImpl implements CorridaService {
|
|||
public Boolean atualizarCorridaFecHusoFecVerano(Estado estado, Date dataInicial) {
|
||||
try {
|
||||
List<Corrida> corridas = corridaDAO.buscarPorEstado(estado, dataInicial);
|
||||
|
||||
corridaDAO.actualizaFecHusoFecVerano(corridas);
|
||||
return Boolean.TRUE;
|
||||
|
||||
|
|
Loading…
Reference in New Issue