Merge pull request 'fixes bug #AL-3494' (!147) from AL-3494 into master

Reviewed-on: adm/ModelWeb#147
Reviewed-by: fabio <fabio.faria@rjconsultores.com.br>
master
fabio 2024-02-19 10:53:20 +00:00
commit faf738bf2b
12 changed files with 1001 additions and 114 deletions

View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>br.com.rjconsultores</groupId> <groupId>br.com.rjconsultores</groupId>
<artifactId>ModelWeb</artifactId> <artifactId>ModelWeb</artifactId>
<version>1.37.0</version> <version>1.38.0</version>
<distributionManagement> <distributionManagement>
<repository> <repository>

View File

@ -25,4 +25,5 @@ public interface BoletoDAO extends GenericDAO<Boleto, Long> {
public String getSequenciaNumReservacion(); public String getSequenciaNumReservacion();
void insertBoletoReserva(Boleto miBoletoTemporal); void insertBoletoReserva(Boleto miBoletoTemporal);
public boolean isExisteBoletoPorCorrida(Integer corridaId, Date fecCorrida); public boolean isExisteBoletoPorCorrida(Integer corridaId, Date fecCorrida);
public boolean isExisteBoletoPorCorridaOrigemIdOuDestinoId(Integer corridaId, Date fecCorrida, Integer origemId, Integer destinoId);
} }

View File

@ -1,6 +1,7 @@
package com.rjconsultores.ventaboletos.dao; package com.rjconsultores.ventaboletos.dao;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
import java.util.List; import java.util.List;
import com.rjconsultores.ventaboletos.entidad.Corrida; import com.rjconsultores.ventaboletos.entidad.Corrida;
@ -18,5 +19,8 @@ public interface CorridaTramoDAO extends GenericDAO<CorridaTramo, Integer> {
public BigDecimal buscarSumTarjetaMesmaCorrida(CorridaTramo ct); public BigDecimal buscarSumTarjetaMesmaCorrida(CorridaTramo ct);
List<Tramo> buscarTramoPorCorridaId(Integer corridaId); List<Tramo> buscarTramoPorCorridaId(Integer corridaId);
public CorridaTramo buscaCorridaTramoByFecCorridaECorridaIdEdOrigemId(Date fecCorrida, Integer corridaId, boolean isAutorizaServicoIniciado, Integer paradaId);
public List<CorridaTramo> buscaCorridaTramoByFecCorridaECorridaId(Date fecCorrida, Integer corridaId, boolean isAutorizaServicoIniciado);
} }

View File

@ -94,6 +94,29 @@ public class BoletoHibernateDAO extends GenericHibernateDAO<Boleto, Long> implem
} }
public boolean isExisteBoletoPorCorridaOrigemIdOuDestinoId(Integer corridaId, Date fecCorrida, Integer origemId, Integer destinoId) {
try {
StringBuilder hql = new StringBuilder();
hql.append(" select ");
hql.append(" count(*) from boleto b where " );
hql.append(" b.corrida_id = :corridaId and b.feccorrida = :feccorrida and ROWNUM = 1 and b.activo = :isActivo and (b.origen_id=:origemId or b.destino_id=:destinoId)");
Query query = getSession().createSQLQuery(hql.toString());
query.setInteger("isActivo", ActivoUtil.ATIVO);
query.setDate("feccorrida", fecCorrida);
query.setInteger("corridaId", corridaId);
query.setInteger("origemId", origemId);
query.setInteger("destinoId", destinoId);
BigDecimal qtde = (BigDecimal) query.uniqueResult();
return qtde !=null && MoneyHelper.isMaior(qtde, BigDecimal.ZERO) ;
}catch(Exception e) {
log.error("Erro buscar Bole to por corrida para corrida=" + corridaId + "data:" + DateUtil.getStringDate(fecCorrida), e);
return false;
}
}
public String getSequenciaBoletoId(){ public String getSequenciaBoletoId(){
String sql = "SELECT BOLETO_SEQ.nextval FROM DUAL"; String sql = "SELECT BOLETO_SEQ.nextval FROM DUAL";
Object o = this.getSession().createSQLQuery(sql).uniqueResult(); Object o = this.getSession().createSQLQuery(sql).uniqueResult();

View File

@ -1,10 +1,10 @@
package com.rjconsultores.ventaboletos.dao.hibernate; package com.rjconsultores.ventaboletos.dao.hibernate;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
import java.util.List; import java.util.List;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.hibernate.Criteria; import org.hibernate.Criteria;
import org.hibernate.HibernateException; import org.hibernate.HibernateException;
import org.hibernate.Query; import org.hibernate.Query;
@ -17,12 +17,14 @@ import org.hibernate.type.TimestampType;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.rjconsultores.ventaboletos.dao.CorridaTramoDAO; import com.rjconsultores.ventaboletos.dao.CorridaTramoDAO;
import com.rjconsultores.ventaboletos.entidad.Corrida; import com.rjconsultores.ventaboletos.entidad.Corrida;
import com.rjconsultores.ventaboletos.entidad.CorridaTramo; import com.rjconsultores.ventaboletos.entidad.CorridaTramo;
import com.rjconsultores.ventaboletos.entidad.Tramo; import com.rjconsultores.ventaboletos.entidad.Tramo;
import com.rjconsultores.ventaboletos.utilerias.ActivoUtil; import com.rjconsultores.ventaboletos.utilerias.ActivoUtil;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
@Repository("corridaTramoDAO") @Repository("corridaTramoDAO")
public class CorridaTramoHibernateDAO extends GenericHibernateDAO<CorridaTramo, Integer> implements CorridaTramoDAO { public class CorridaTramoHibernateDAO extends GenericHibernateDAO<CorridaTramo, Integer> implements CorridaTramoDAO {
@ -107,4 +109,58 @@ public class CorridaTramoHibernateDAO extends GenericHibernateDAO<CorridaTramo,
return c.list(); return c.list();
} }
@Override
@Transactional
public CorridaTramo buscaCorridaTramoByFecCorridaECorridaIdEdOrigemId(Date fecCorrida, Integer corridaId, boolean isAutorizaServicoIniciado, Integer paradaId) {
try {
StringBuilder hql = new StringBuilder();
hql.append(" from CorridaTramo as ct ");
hql.append(" where ");
hql.append(isAutorizaServicoIniciado ? " ct.activo <> 0 " : " ct.activo = 1 ");
hql.append(" and ct.corrida.id.corridaId = :corrida_id ");
hql.append(" and ct.corrida.id.feccorrida = :feccorrida ");
hql.append(" and ct.origem.paradaId = :paradaId ");
hql.append(" order by ct.numsecuencia");
Query sq = getSession().createQuery(hql.toString());
sq.setInteger("corrida_id", corridaId);
sq.setDate("feccorrida", fecCorrida);
sq.setInteger("corrida_id", corridaId);
sq.setInteger("paradaId", paradaId);
return (CorridaTramo) sq.uniqueResult();
}catch (Exception e) {
log.error("Erro ao obter CorridaTramo para corridaId:" + corridaId + " fecCorrida:" + DateUtil.getStringDate24Hour(fecCorrida) + " paradaId:" + paradaId , e);
}
return null;
}
@Override
public List<CorridaTramo> buscaCorridaTramoByFecCorridaECorridaId(Date fecCorrida, Integer corridaId,
boolean isAutorizaServicoIniciado) {
Criteria c = getSession().createCriteria(getPersistentClass());
c.add(Restrictions.eq("activo", ActivoUtil.ATIVO));
c.createAlias("corrida", "corrida");
c.add(Restrictions.eq("corrida.id.corridaId", corridaId));
c.add(Restrictions.eq("corrida.id.feccorrida", fecCorrida));
//c.setProjection(Projections.distinct(Projections.property("tramo")));
return c.list();
}
@Override
@Transactional
public CorridaTramo suscribir(final CorridaTramo entity) {
try {
this.getHibernateTemplate().save(entity);
getHibernateTemplate().flush();
return entity;
} catch (final HibernateException ex) {
throw convertHibernateAccessException(ex);
}
}
} }

View File

@ -33,7 +33,7 @@ import org.hibernate.annotations.NotFoundAction;
@Entity @Entity
@SequenceGenerator(name = "CORRIDA_TRAMO_SEQ", sequenceName = "CORRIDA_TRAMO_SEQ", allocationSize = 1) @SequenceGenerator(name = "CORRIDA_TRAMO_SEQ", sequenceName = "CORRIDA_TRAMO_SEQ", allocationSize = 1)
@Table(name = "CORRIDA_TRAMO") @Table(name = "CORRIDA_TRAMO")
public class CorridaTramo implements Serializable { public class CorridaTramo implements Serializable, Comparable<CorridaTramo> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Id @Id
@ -118,6 +118,62 @@ public class CorridaTramo implements Serializable {
@Temporal(javax.persistence.TemporalType.TIMESTAMP) @Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date fechorSalidaOriginalH; private Date fechorSalidaOriginalH;
public CorridaTramo(CorridaTramo corridaTramo) {
this.numsecuencia = corridaTramo.getNumsecuencia();
this.fechorsalida = corridaTramo.getFechorsalida();
this.fechorllegada = corridaTramo.getFechorllegada();
this.fechortarjetaviaje =corridaTramo.getFechortarjetaviaje();
this.usuariotarjetaviajeId = corridaTramo.getUsuariotarjetaviajeId();
this.numsecorigen = corridaTramo.getNumsecorigen();
this.numsecdestino = corridaTramo.getNumsecdestino();
this.activo = corridaTramo.getActivo();
this.fecmodif = corridaTramo.getFecmodif();
this.usuarioId = corridaTramo.getUsuarioId();
this.tramo = corridaTramo.getTramo();
this.origem = corridaTramo.getOrigem();
this.destino = corridaTramo.getDestino();
this.nodo = corridaTramo.getNodo();
this.conductor = corridaTramo.getConductor();
this.conductor1 =corridaTramo.getConductor1();
this.autobus = corridaTramo.getAutobus();
this.fechorSalidaOriginal = corridaTramo.getFechorSalidaOriginal();
this.tiempoEstancia = corridaTramo.getTiempoEstancia();
this.indmanttarjeta = corridaTramo.getIndmanttarjeta();
this.folioTarjeta = corridaTramo.getFolioTarjeta();
this.plataforma = corridaTramo.getPlataforma();
this.tipoPassagem = corridaTramo.getTipoPassagem();
this.fechorsalidaH = corridaTramo.getFechorsalidaH();
this.fechorllegadaH = corridaTramo.getFechorllegadaH();
this.fechorSalidaOriginalH = corridaTramo.getFechorSalidaOriginalH();
}
public Boolean getIndmanttarjeta() { public Boolean getIndmanttarjeta() {
return indmanttarjeta; return indmanttarjeta;
} }
@ -383,4 +439,9 @@ public class CorridaTramo implements Serializable {
public String toString() { public String toString() {
return "com.rjconsultores.ventaboletos.entidad.test.CorridaTramo[corridatramoId=" + corridatramoId + "]"; return "com.rjconsultores.ventaboletos.entidad.test.CorridaTramo[corridatramoId=" + corridatramoId + "]";
} }
@Override
public int compareTo(CorridaTramo corridaTramo) {
return this.numsecuencia.compareTo(corridaTramo.getNumsecuencia());
}
} }

View File

@ -26,4 +26,6 @@ public interface BoletoService {
BigDecimal valorSeguro, BigDecimal valorTaxaEmbarque, BigDecimal valorPedagio) throws Exception; BigDecimal valorSeguro, BigDecimal valorTaxaEmbarque, BigDecimal valorPedagio) throws Exception;
public boolean isExisteBoletoPorCorrida(Integer corridaId, Date fecCorrida); public boolean isExisteBoletoPorCorrida(Integer corridaId, Date fecCorrida);
public boolean isExisteBoletoPorCorridaOrigemIdOuDestinoId(Integer corridaId, Date fecCorrida, Integer origemId, Integer destinoId);
} }

View File

@ -1,10 +1,26 @@
package com.rjconsultores.ventaboletos.service; package com.rjconsultores.ventaboletos.service;
import java.util.Date;
import java.util.List; import java.util.List;
import com.rjconsultores.ventaboletos.entidad.Autobus;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.CorridaTramo; import com.rjconsultores.ventaboletos.entidad.CorridaTramo;
import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida;
import com.rjconsultores.ventaboletos.entidad.EsquemaTramo;
import com.rjconsultores.ventaboletos.entidad.Nodo;
import com.rjconsultores.ventaboletos.vo.esquemaoperacional.ItemEditarCorridaTramo;
public interface CorridaTramoService extends GenericService<CorridaTramo, Integer> { public interface CorridaTramoService extends GenericService<CorridaTramo, Integer> {
public List<CorridaTramo> obtenerTramoTarjetaEmitida(); public List<CorridaTramo> obtenerTramoTarjetaEmitida();
public boolean atualizaCorridaTramo(ItemEditarCorridaTramo itemEditarCorridaTramo);
public void adicionaCorridaTramo(ItemEditarCorridaTramo itemEditarCorridaTramo, EsquemaCorrida esquemaCorrida, Date dataCorrida);
public void excluiCorridaTramo(ItemEditarCorridaTramo itemEditarCorridaTramo);
public List<CorridaTramo> criaCorridaTramoList(Autobus autobus, Date dataGeracao, Date fechorSalidaOriginalH ,
List<EsquemaTramo> lsEsquemaTramo, Nodo nodo, ClaseServicio claseServicio, String statusCorrida);
} }

View File

@ -196,5 +196,9 @@ public class BoletoServiceImpl implements BoletoService {
} }
public boolean isExisteBoletoPorCorridaOrigemIdOuDestinoId(Integer corridaId, Date fecCorrida, Integer origemId, Integer destinoId) {
return boletoDAO.isExisteBoletoPorCorridaOrigemIdOuDestinoId(corridaId, fecCorrida, origemId, destinoId);
}
} }

View File

@ -18,7 +18,6 @@ import javax.persistence.Transient;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils; import org.apache.commons.lang.math.NumberUtils;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -70,6 +69,7 @@ import com.rjconsultores.ventaboletos.service.ConstanteService;
import com.rjconsultores.ventaboletos.service.CorridaCtrlService; import com.rjconsultores.ventaboletos.service.CorridaCtrlService;
import com.rjconsultores.ventaboletos.service.CorridaInfoService; import com.rjconsultores.ventaboletos.service.CorridaInfoService;
import com.rjconsultores.ventaboletos.service.CorridaService; import com.rjconsultores.ventaboletos.service.CorridaService;
import com.rjconsultores.ventaboletos.service.CorridaTramoService;
import com.rjconsultores.ventaboletos.service.DetDiagramaAutobusService; import com.rjconsultores.ventaboletos.service.DetDiagramaAutobusService;
import com.rjconsultores.ventaboletos.service.EsquemaAsientoService; import com.rjconsultores.ventaboletos.service.EsquemaAsientoService;
import com.rjconsultores.ventaboletos.service.EsquemaCorridaInfoService; import com.rjconsultores.ventaboletos.service.EsquemaCorridaInfoService;
@ -98,7 +98,7 @@ public class CorridaServiceImpl implements CorridaService {
private static final Logger log = Logger.getLogger(CorridaServiceImpl.class); private static final Logger log = Logger.getLogger(CorridaServiceImpl.class);
private static int CANT_MAX_CORRIDA_GERA_MANUAL = 40; private static int CANT_MAX_CORRIDA_GERA_MANUAL = 40;
private static SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
// Tipo de venda Reserva // Tipo de venda Reserva
private static final Integer TPV_RESERVA_NORMAL = 15; private static final Integer TPV_RESERVA_NORMAL = 15;
@ -151,7 +151,8 @@ public class CorridaServiceImpl implements CorridaService {
private CorridaInfoService corridaInfoService; private CorridaInfoService corridaInfoService;
@Autowired @Autowired
private EsquemaCorridaInfoService esquemaCorridaInfoService; private EsquemaCorridaInfoService esquemaCorridaInfoService;
@Autowired
private CorridaTramoService corridaTramosService;
@Autowired @Autowired
public CorridaServiceImpl(@Qualifier("transactionManager") PlatformTransactionManager transactionManager) { public CorridaServiceImpl(@Qualifier("transactionManager") PlatformTransactionManager transactionManager) {
@ -357,7 +358,7 @@ public class CorridaServiceImpl implements CorridaService {
} else { } else {
GregorianCalendar gHoraSaidaProximo = new GregorianCalendar(); GregorianCalendar gHoraSaidaProximo = new GregorianCalendar();
gHoraSaidaProximo.setTime(horaChegadaAnterior); gHoraSaidaProximo.setTime(horaChegadaAnterior);
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
log.debug("Tempo Recorrido : " + sdf.format(gHoraSaidaProximo.getTime())); log.debug("Tempo Recorrido : " + sdf.format(gHoraSaidaProximo.getTime()));
if (tiempoEstanciaAnterior != null) { if (tiempoEstanciaAnterior != null) {
@ -542,7 +543,11 @@ public class CorridaServiceImpl implements CorridaService {
validaFlexBus(esquemaCorrida, corrida); validaFlexBus(esquemaCorrida, corrida);
List<CorridaTramo> lsCorridaTramo = criaCorridaTramoList(esquemaCorrida, dataGeracao, corrida, lsEsquemaTramo, corridaCtrl); Date fechorSalidaOriginalH = null;
List<CorridaTramo> lsCorridaTramo = corridaTramosService.criaCorridaTramoList(esquemaCorrida.getAutoBus(), dataGeracao, fechorSalidaOriginalH, lsEsquemaTramo, corridaCtrl.getNodo(), corrida.getClaseServicio(), esquemaCorrida.getStatusCorrida());
for (CorridaTramo corridaTramo : lsCorridaTramo) {
corridaTramo.setCorrida(corrida);
}
corrida.setCorridaTramoList(lsCorridaTramo); corrida.setCorridaTramoList(lsCorridaTramo);
@ -600,108 +605,7 @@ public class CorridaServiceImpl implements CorridaService {
return corridaCtrl; return corridaCtrl;
} }
private List<CorridaTramo> criaCorridaTramoList(EsquemaCorrida esquemaCorrida, Date dataGeracao, Corrida corrida,
List<EsquemaTramo> lsEsquemaTramo, CorridaCtrl corridaCtrl) {
List<CorridaTramo> lsCorridaTramo = new ArrayList<CorridaTramo>();
Date horaChegadaAnterior = null;
Date husoHorVeranoLlegadaAnterior = null;
Integer numSec = 1;
for (EsquemaTramo esquemaTramo : lsEsquemaTramo) {
CorridaTramo corridaTramo = new CorridaTramo();
corridaTramo.setAutobus(esquemaCorrida.getAutoBus()!= null ? esquemaCorrida.getAutoBus() : null);
corridaTramo.setConductor(null);
corridaTramo.setConductor1(null);
corridaTramo.setPlataforma(esquemaTramo.getPlataforma());
corridaTramo.setTipoPassagem(esquemaTramo.getTipoPassagem());
corridaTramo.setTiempoEstancia(esquemaTramo.getTiempoEstancia());
// numSec: 1-2, 2-3, 3-4...
corridaTramo.setNumsecorigen(numSec.shortValue());
numSec = numSec + 1;
corridaTramo.setNumsecdestino(numSec.shortValue());
Date fecHorSalida = calcularFechorsalida(esquemaTramo, dataGeracao, horaChegadaAnterior, esquemaTramo.getTiempoEstancia());
corridaTramo.setFechorsalida( getCalendarFechorSalida(fecHorSalida).getTime());
Date fecHorallegada = calcularFechorllegada(esquemaTramo, corrida.getClaseServicio(), dataGeracao, fecHorSalida);
corridaTramo.setFechorllegada(getCalendarFechorllegada(fecHorallegada).getTime());
horaChegadaAnterior = fecHorallegada;
corridaTramo.setFechortarjetaviaje(null);
corridaTramo.setNodo(corridaCtrl.getNodo());
corridaTramo.setNumsecuencia(esquemaTramo.getNumsecuencia());
Tramo tramo = esquemaTramo.getTramo();
if (tramo != null) {
corridaTramo.setOrigem(tramo.getOrigem());
corridaTramo.setDestino(tramo.getDestino());
}
corridaTramo.setTramo(tramo);
corridaTramo.setUsuariotarjetaviajeId(null);
Date excepcionTiempo = arreglaExcepcionTiempo(corridaTramo, corrida.getClaseServicio());
if (excepcionTiempo != null) {
corridaTramo.setFechorllegada(excepcionTiempo);
horaChegadaAnterior = excepcionTiempo;
}
if (esquemaCorrida.getStatusCorrida().equals("A")) {
corridaTramo.setActivo(ActivoUtil.ATIVO);
} else if (esquemaCorrida.getStatusCorrida().equals("L")) {
corridaTramo.setActivo(ActivoUtil.INATIVO);
}
//
corridaTramo.setFecmodif(Calendar.getInstance().getTime());
if (UsuarioLogado.getUsuarioLogado() != null) {
corridaTramo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
}
corridaTramo.setCorrida(corrida);
corridaTramo.setFechorSalidaOriginal(fecHorSalida);
if (husoHorVeranoLlegadaAnterior == null) {
corridaTramo.setFechorsalidaH(corridaTramo.getFechorsalida());
} else {
// Ajusta tambem o tempo de instancia do calculo do horario de verao
if (esquemaTramo.getTiempoEstancia() != null) {
GregorianCalendar tmp = new GregorianCalendar();
tmp.setTime(husoHorVeranoLlegadaAnterior);
tmp.add(Calendar.MINUTE, esquemaTramo.getTiempoEstancia().getMinutes());
tmp.add(Calendar.HOUR_OF_DAY, esquemaTramo.getTiempoEstancia().getHours());
log.debug("Tempo Recorrido H + Estancia: " + sdf.format(tmp.getTime()));
husoHorVeranoLlegadaAnterior = tmp.getTime();
}
corridaTramo.setFechorsalidaH(husoHorVeranoLlegadaAnterior);
}
husoHorVeranoLlegadaAnterior = calcularHusoHorVeranoLlegada(esquemaTramo, corridaTramo);
if (husoHorVeranoLlegadaAnterior != null) {
corridaTramo.setFechorllegadaH(husoHorVeranoLlegadaAnterior);
corridaTramo.setFechorSalidaOriginalH(husoHorVeranoLlegadaAnterior);
} else {
corridaTramo.setFechorllegadaH(corridaTramo.getFechorllegada());
corridaTramo.setFechorSalidaOriginalH(corridaTramo.getFechorSalidaOriginal());
}
if (numSec == 1) {
corrida.setFechorSalidaOriginalH(corridaTramo.getFechorsalidaH());
}
lsCorridaTramo.add(corridaTramo);
}
return lsCorridaTramo;
}
private void validaFlexBus(EsquemaCorrida esquemaCorrida, Corrida corrida) { private void validaFlexBus(EsquemaCorrida esquemaCorrida, Corrida corrida) {
if(esquemaCorrida.getIsFlexBus()) { if(esquemaCorrida.getIsFlexBus()) {
@ -1355,7 +1259,6 @@ public class CorridaServiceImpl implements CorridaService {
fecCorrida.setTime(corridaTramo.getFechorllegada()); fecCorrida.setTime(corridaTramo.getFechorllegada());
if (diasSemana.contains(fecCorrida.get(Calendar.DAY_OF_WEEK))) { if (diasSemana.contains(fecCorrida.get(Calendar.DAY_OF_WEEK))) {
log.info("Hay Excepcione de tiempo");
Calendar fechorsalida = Calendar.getInstance(); Calendar fechorsalida = Calendar.getInstance();
fechorsalida.setTime(corridaTramo.getFechorsalida()); fechorsalida.setTime(corridaTramo.getFechorsalida());
@ -1622,7 +1525,7 @@ public class CorridaServiceImpl implements CorridaService {
calendarData.setTime(dataConstanteFim); calendarData.setTime(dataConstanteFim);
dataAte = DateUtil.normalizarToFecha(calendarData.getTime()); dataAte = DateUtil.normalizarToFecha(calendarData.getTime());
} }
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
log.debug("Periodo generacion = " + sdf.format(dataInicial) + " hasta " + sdf.format(dataAte)); log.debug("Periodo generacion = " + sdf.format(dataInicial) + " hasta " + sdf.format(dataAte));
if (DateUtil.compareOnlyDate(dataAte, esquemaCorrida.getEsquemaOperacional().getFecfinvigencia()) > 0) { if (DateUtil.compareOnlyDate(dataAte, esquemaCorrida.getEsquemaOperacional().getFecfinvigencia()) > 0) {

View File

@ -1,20 +1,65 @@
package com.rjconsultores.ventaboletos.service.impl; package com.rjconsultores.ventaboletos.service.impl;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List; import java.util.List;
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.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.rjconsultores.ventaboletos.dao.CorridaTramoDAO; import com.rjconsultores.ventaboletos.dao.CorridaTramoDAO;
import com.rjconsultores.ventaboletos.dao.TramoTiempoDAO;
import com.rjconsultores.ventaboletos.entidad.Autobus;
import com.rjconsultores.ventaboletos.entidad.Ciudad;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.Corrida;
import com.rjconsultores.ventaboletos.entidad.CorridaTramo; import com.rjconsultores.ventaboletos.entidad.CorridaTramo;
import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida;
import com.rjconsultores.ventaboletos.entidad.EsquemaTramo;
import com.rjconsultores.ventaboletos.entidad.Estado;
import com.rjconsultores.ventaboletos.entidad.Nodo;
import com.rjconsultores.ventaboletos.entidad.Tramo;
import com.rjconsultores.ventaboletos.entidad.TramoServicio;
import com.rjconsultores.ventaboletos.entidad.TramoTiempo;
import com.rjconsultores.ventaboletos.service.CorridaService;
import com.rjconsultores.ventaboletos.service.CorridaTramoService; import com.rjconsultores.ventaboletos.service.CorridaTramoService;
import com.rjconsultores.ventaboletos.service.TramoServicioService;
import com.rjconsultores.ventaboletos.utilerias.ActivoUtil;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.utilerias.HoraSistema;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.vo.esquemaoperacional.ItemEditarCorridaTramo;
@Service("corridaTramoService") @Service("corridaTramoService")
public class CorridaTramoServiceImpl implements CorridaTramoService { public class CorridaTramoServiceImpl implements CorridaTramoService {
Logger log;
@Autowired
private TramoServicioService tramoServicioService;
@Autowired
private CorridaService corridaService;
public CorridaTramoServiceImpl() {
super();
log = Logger.getLogger(CorridaTramoServiceImpl.class);
}
@Autowired @Autowired
private CorridaTramoDAO corridaTramoDAO; private CorridaTramoDAO corridaTramoDAO;
@Autowired
private TramoTiempoDAO tramoTiempoDAO;
@Override @Override
public List<CorridaTramo> obtenerTodos() { public List<CorridaTramo> obtenerTodos() {
return corridaTramoDAO.obtenerTodos(); return corridaTramoDAO.obtenerTodos();
@ -25,12 +70,14 @@ public class CorridaTramoServiceImpl implements CorridaTramoService {
return corridaTramoDAO.obtenerID(id); return corridaTramoDAO.obtenerID(id);
} }
@Override
@Transactional
public CorridaTramo suscribir(CorridaTramo entidad) { public CorridaTramo suscribir(CorridaTramo entidad) {
return corridaTramoDAO.suscribir(entidad); return corridaTramoDAO.suscribir(entidad);
} }
@Override @Override
@Transactional
public CorridaTramo actualizacion(CorridaTramo entidad) { public CorridaTramo actualizacion(CorridaTramo entidad) {
return corridaTramoDAO.actualizacion(entidad); return corridaTramoDAO.actualizacion(entidad);
} }
@ -44,4 +91,488 @@ public class CorridaTramoServiceImpl implements CorridaTramoService {
public List<CorridaTramo> obtenerTramoTarjetaEmitida() { public List<CorridaTramo> obtenerTramoTarjetaEmitida() {
return corridaTramoDAO.obtenerTramoTarjetaEmitida(); return corridaTramoDAO.obtenerTramoTarjetaEmitida();
} }
@Transactional
public boolean atualizaCorridaTramo(ItemEditarCorridaTramo itemEditarCorridaTramo) {
try {
CorridaTramo corridaTramo = corridaTramoDAO.buscaCorridaTramoByFecCorridaECorridaIdEdOrigemId(itemEditarCorridaTramo.getFecCorrida(), itemEditarCorridaTramo.getCorridaId(), false, itemEditarCorridaTramo.getParadaId());
if(corridaTramo !=null && corridaTramo.getOrigem()!=null && corridaTramo.getOrigem().getParadaId().intValue() == itemEditarCorridaTramo.getParadaId()) {
if(itemEditarCorridaTramo.getTempoEstancia()!=null) {
corridaTramo.setTiempoEstancia(itemEditarCorridaTramo.getTempoEstancia());
}
if(itemEditarCorridaTramo.getPlataforma()!=null) {
corridaTramo.setPlataforma(itemEditarCorridaTramo.getPlataforma());
}
if(itemEditarCorridaTramo.getTipoPassagem()!=null) {
corridaTramo.setTipoPassagem(itemEditarCorridaTramo.getTipoPassagem());
}
if(itemEditarCorridaTramo.getTempoExcecao()!=null) {
corridaTramo.setFechorllegada(calcularFechorllegada(corridaTramo.getFechorllegada(), itemEditarCorridaTramo.getTempoExcecao()));
corridaTramo.setFechorllegadaH(calcularFechorllegada(corridaTramo.getFechorllegadaH(), itemEditarCorridaTramo.getTempoExcecao()));
}
if(actualizacion(corridaTramo)!=null) {
return true;
}
}
}catch (Exception e) {
log.error("Erro ao atualizar CorridaTramo para corridaId:" + itemEditarCorridaTramo.getCorridaId() + " feccorrida:" + DateUtil.getStringDate24Hour(itemEditarCorridaTramo.getFecCorrida()) + " paradaId:" + itemEditarCorridaTramo.getParadaId(), e);
}
return false;
}
private Date calcularFechorllegada( Date horaChegada, Date tempoExcecao ) {
try {
if(horaChegada !=null) {
GregorianCalendar gHoraChegada = new GregorianCalendar();
gHoraChegada.setTime(horaChegada);
HoraSistema hs = null;
if (tempoExcecao != null) {
hs = new HoraSistema(tempoExcecao);
gHoraChegada.add(Calendar.HOUR_OF_DAY, hs.getHora());
gHoraChegada.add(Calendar.MINUTE, hs.getMinuto());
}
return gHoraChegada.getTime();
}
}catch(Exception e) {
log.error("Erro ao calcular fechorLhegada com tempo de exceção ao atualizar corridatramo", e);
}
return horaChegada;
}
@Override
@Transactional
public void adicionaCorridaTramo(ItemEditarCorridaTramo itemEditarCorridaTramo, EsquemaCorrida esquemaCorrida, Date dataCorrida) {
//Busca todas as corridas tramo
List<CorridaTramo> corridaTramoList = corridaTramoDAO.buscaCorridaTramoByFecCorridaECorridaId(itemEditarCorridaTramo.getFecCorrida(), itemEditarCorridaTramo.getCorridaId(), false);
//Monta lista de paradas que não foram excluidas
List<Integer> paradasIdItinerario = carregaParadaIdItinerario(corridaTramoList);
//Monta lista de paradas excluidas
List<Integer> paradasAdicionadas = new ArrayList<Integer>();
paradasAdicionadas.add(itemEditarCorridaTramo.getParadaId());
List<Integer> paradasIdItinerarioNovo = carregaParadaIdItinerario(corridaTramoList);
paradasIdItinerarioNovo.addAll(paradasIdItinerario);
paradasIdItinerarioNovo.add(itemEditarCorridaTramo.getSecuencia()-1, itemEditarCorridaTramo.getParadaId());
inativaCorridasTramos(corridaTramoList);
Date fechorSalidaOriginalH = null;
List<CorridaTramo> lsCorridaTramo = criaCorridaTramoList(itemEditarCorridaTramo.getAutobus(), itemEditarCorridaTramo.getFecCorrida(), fechorSalidaOriginalH, itemEditarCorridaTramo.getLsEsquemaTramoNova(), itemEditarCorridaTramo.getNodo(), itemEditarCorridaTramo.getClaseServicio(), itemEditarCorridaTramo.getStatusCorrida());
for (CorridaTramo corridaTramo : lsCorridaTramo) {
corridaTramoDAO.suscribir(corridaTramo);
}
}
@Override
@Transactional
public void excluiCorridaTramo(ItemEditarCorridaTramo itemEditarCorridaTramo) {
//Busca todas as corridas tramo
List<CorridaTramo> corridaTramoList = corridaTramoDAO.buscaCorridaTramoByFecCorridaECorridaId(itemEditarCorridaTramo.getFecCorrida(), itemEditarCorridaTramo.getCorridaId(), false);
//Inativas Corridas Tramos e cria uma nova lista a ser salva
inativaCorridasTramosInstanciaNovasCorridasTramos(itemEditarCorridaTramo, corridaTramoList);
Date fechorSalidaOriginalH = null;
List<CorridaTramo> lsCorridaTramo = criaCorridaTramoList(itemEditarCorridaTramo.getAutobus(), itemEditarCorridaTramo.getFecCorrida(), fechorSalidaOriginalH, itemEditarCorridaTramo.getLsEsquemaTramoNova(), itemEditarCorridaTramo.getNodo(), itemEditarCorridaTramo.getClaseServicio(), itemEditarCorridaTramo.getStatusCorrida());
for (CorridaTramo corridaTramo : lsCorridaTramo) {
Corrida corrida = corridaService.buscarCorridaAtivaPorId(new Corrida.Id(itemEditarCorridaTramo.getCorridaId(),itemEditarCorridaTramo.getFecCorrida() ));
corridaTramo.setCorrida(corrida);
suscribir(corridaTramo);
}
}
/**
* Verifica se hay una excepcione de tiempo para el tramo informado.
*
* @param corridaTramo
* @param claseServicio
* @return - Si existe una excepcion, regresa la nueva fecLlegada para el tramo, sino, regreso null
*/
private Date arreglaExcepcionTiempo(CorridaTramo corridaTramo, ClaseServicio claseServicio) {
Date nuevaFecLlegada = null;
Tramo tramo = corridaTramo.getTramo();
List<TramoTiempo> lsExcepciones = tramoTiempoDAO.buscar(tramo, claseServicio, corridaTramo.getFechorsalida(), corridaTramo.getFechorllegada());
if (!lsExcepciones.isEmpty()) {
TramoTiempo tramoTiempo = lsExcepciones.get(0);
List<Integer> diasSemana = getDiaDeLaSemana(tramoTiempo);
Calendar fecCorrida = Calendar.getInstance();
fecCorrida.setTime(corridaTramo.getFechorllegada());
if (diasSemana.contains(fecCorrida.get(Calendar.DAY_OF_WEEK))) {
Calendar fechorsalida = Calendar.getInstance();
fechorsalida.setTime(corridaTramo.getFechorsalida());
HoraSistema horaSistema = new HoraSistema(tramoTiempo.getTiemporecorrido());
fechorsalida.add(Calendar.HOUR, horaSistema.getHora());
fechorsalida.add(Calendar.MINUTE, horaSistema.getMinuto());
nuevaFecLlegada = fechorsalida.getTime();
}
}
return nuevaFecLlegada;
}
private Date calcularFechorllegada(EsquemaTramo esquemaTramo, ClaseServicio clase, Date dataGeracao, Date horaChegada) {
GregorianCalendar gHoraChegada = new GregorianCalendar();
gHoraChegada.setTime(horaChegada);
HoraSistema hs = null;
if (esquemaTramo.getExcepcionRecorrido() != null) {
hs = new HoraSistema(esquemaTramo.getExcepcionRecorrido());
gHoraChegada.add(Calendar.HOUR_OF_DAY, hs.getHora());
gHoraChegada.add(Calendar.MINUTE, hs.getMinuto());
} else {
Tramo tramo = esquemaTramo.getTramo();
List<TramoServicio> lsTramoServicio = tramoServicioService.buscarPorTramoServico(tramo, clase);
for (TramoServicio ts : lsTramoServicio) {
hs = new HoraSistema(ts.getTiemporecorrido());
gHoraChegada.add(Calendar.HOUR_OF_DAY, hs.getHora());
gHoraChegada.add(Calendar.MINUTE, hs.getMinuto());
}
}
return gHoraChegada.getTime();
}
private Calendar getCalendarFechorllegada(Date fecHorallegada) {
Calendar llegada = Calendar.getInstance();
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);
return llegada;
}
private Calendar getCalendarFechorSalida(Date fecHorSalida) {
Calendar salida = Calendar.getInstance();
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);
return salida;
}
private Date calcularHusoHorVeranoLlegada(EsquemaTramo esquemaTramo, CorridaTramo corridaTramo) {
Ciudad ciudadOrigen = esquemaTramo.getTramo().getOrigem().getCiudad();
Estado estadoOrigen = ciudadOrigen.getEstado();
int tiempoOrigen = estadoOrigen.getTiempoHorHuso() == null ? 0 : estadoOrigen.getTiempoHorHuso();
Date fecInicioHorVerano = estadoOrigen.getFecInicioHorVerano();
Date fecFinHorVerano = estadoOrigen.getFecFinoHorVerano();
if ((fecInicioHorVerano != null) && (fecFinHorVerano != null)) {
if ((DateUtil.compareOnlyDate(fecInicioHorVerano, corridaTramo.getFechorsalida()) <= 0) && (DateUtil.compareOnlyDate(fecFinHorVerano, corridaTramo.getFechorsalida()) >= 0)) {
tiempoOrigen += estadoOrigen.getTiempoHorVerano();
}
}
// 21688
Ciudad ciudadDestino = esquemaTramo.getTramo().getDestino().getCiudad();
Estado estadoDestino = ciudadDestino.getEstado();
int tiempoDestino = 0;
if (!estadoDestino.equals(estadoOrigen)) {
tiempoDestino = estadoDestino.getTiempoHorHuso() == null ? 0 : estadoDestino.getTiempoHorHuso();
Date fecInicioHorVeranoDestino = estadoDestino.getFecInicioHorVerano();
Date fecFinHorVeranDestino = estadoDestino.getFecFinoHorVerano();
if ((fecInicioHorVeranoDestino != null) && (fecFinHorVeranDestino != null)) {
if ((DateUtil.compareOnlyDate(fecInicioHorVeranoDestino, corridaTramo.getFechorllegada()) <= 0) && (DateUtil.compareOnlyDate(fecFinHorVeranDestino, corridaTramo.getFechorllegada()) >= 0)) {
tiempoDestino += estadoDestino.getTiempoHorVerano();
}
}
} else {
tiempoDestino =0;
tiempoOrigen=0;
}
//Consideração do fuso por cidade.
//Nesse caso, é mandatório em relação ao estado.Ou seja, equanto que no fuso do estado,
//tem que haver Mudança de estado, para a cidade NÃO, pois pode-se considerar cada cidade
//como um único estado. Sendo assim, devendo ser considerado sempre quando preenchido
if ( (ciudadOrigen.getZonaHoraria() != null) && (ciudadOrigen.getZonaHoraria() != 0 )){
log.info("Fuso da cidade origem " + ciudadOrigen.getNombciudad() + " : " + ciudadOrigen.getZonaHoraria());
tiempoOrigen += ciudadOrigen.getZonaHoraria();
}
if ( (ciudadDestino.getZonaHoraria() != null) && (ciudadDestino.getZonaHoraria() != 0 )){
log.info("Fuso da cidade destino " + ciudadDestino.getNombciudad() + " : " + ciudadDestino.getZonaHoraria());
tiempoDestino += ciudadDestino.getZonaHoraria();
}
//Fim consideração fuso por cidade
Calendar horLlegada = null;
long elapsedMinutes = DateUtil.getElapsedMinutos(corridaTramo.getFechorsalida(), corridaTramo.getFechorllegada());
horLlegada = Calendar.getInstance();
horLlegada.setTime(corridaTramo.getFechorsalidaH());
horLlegada.add(Calendar.MINUTE, (int) elapsedMinutes);
// Si los tiempos son distintos, hube cambio de huso horario/horario de verano
if (tiempoOrigen != tiempoDestino) {
horLlegada.add(Calendar.HOUR, (tiempoDestino - tiempoOrigen));
}
return (horLlegada == null) ? null : horLlegada.getTime();
}
@SuppressWarnings("deprecation")
private Date calcularFechorsalida(EsquemaTramo esquemaTramo, Date dataGeracao, Date horaChegadaAnterior, java.util.Date tiempoEstanciaAnterior) {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date horaSaida;
if (horaChegadaAnterior == null) {
horaSaida = truncarDataHora(dataGeracao, esquemaTramo.getEsquemaCorrida().getHorasalida());
} else {
GregorianCalendar gHoraSaidaProximo = new GregorianCalendar();
gHoraSaidaProximo.setTime(horaChegadaAnterior);
log.debug("Tempo Recorrido : " + sdf.format(gHoraSaidaProximo.getTime()));
if (tiempoEstanciaAnterior != null) {
gHoraSaidaProximo.add(Calendar.MINUTE, tiempoEstanciaAnterior.getMinutes());
gHoraSaidaProximo.add(Calendar.HOUR_OF_DAY, tiempoEstanciaAnterior.getHours());
log.debug("Tempo Recorrido + Estancia: " + sdf.format(gHoraSaidaProximo.getTime()));
}
horaSaida = gHoraSaidaProximo.getTime();
}
GregorianCalendar gHoraSaida = new GregorianCalendar();
gHoraSaida.setTime(horaSaida);
return gHoraSaida.getTime();
}
/**
* Adiciciona as horas do parametro hora na data dataGeracao.
*
* Alem disso eh zerado os campos segundos e milisegundos.
*
* @param dataGeracao
* @param hora
* @return
*/
private Date truncarDataHora(Date dataGeracao, Date hora) {
Date dataCorreta = new Date();
GregorianCalendar gAux = new GregorianCalendar();
gAux.setTime(hora);
GregorianCalendar gcalendar = new GregorianCalendar();
gcalendar.setTime(dataGeracao);
gcalendar.set(Calendar.HOUR_OF_DAY, gAux.get(Calendar.HOUR_OF_DAY));
gcalendar.set(Calendar.MINUTE, gAux.get(Calendar.MINUTE));
gcalendar.set(Calendar.SECOND, 0);
gcalendar.set(Calendar.MILLISECOND, 0);
dataCorreta = gcalendar.getTime();
return dataCorreta;
}
private void inativaCorridasTramos(List<CorridaTramo> corridaTramoList) {
//Inativa corrida tramo
for (CorridaTramo corridaTramo : corridaTramoList) {
corridaTramo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
corridaTramo.setFecmodif(new Date());
corridaTramo.setActivo(0);
corridaTramoDAO.suscribir(corridaTramo);
}
}
private List<CorridaTramo> inativaCorridasTramosInstanciaNovasCorridasTramos(ItemEditarCorridaTramo itemEditarCorridaTramo,
List<CorridaTramo> corridaTramoList) {
//Inativa corrida tramo
List<CorridaTramo> corridaTramoListNovo = new ArrayList<CorridaTramo>();
for (CorridaTramo corridaTramo : corridaTramoList) {
corridaTramo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
corridaTramo.setFecmodif(new Date());
corridaTramo.setActivo(0);
corridaTramoDAO.actualizacion(corridaTramo);
}
return corridaTramoListNovo;
}
private List<Integer> getDiaDeLaSemana(TramoTiempo tramoTiempo) {
List<Integer> diasValidos = new ArrayList<Integer>();
if (tramoTiempo.getIndapliclun()) {
diasValidos.add(Calendar.MONDAY);
}
if (tramoTiempo.getIndaplicmar()) {
diasValidos.add(Calendar.TUESDAY);
}
if (tramoTiempo.getIndaplicmie()) {
diasValidos.add(Calendar.WEDNESDAY);
}
if (tramoTiempo.getIndaplicjue()) {
diasValidos.add(Calendar.THURSDAY);
}
if (tramoTiempo.getIndaplicvie()) {
diasValidos.add(Calendar.FRIDAY);
}
if (tramoTiempo.getIndaplicsab()) {
diasValidos.add(Calendar.SATURDAY);
}
if (tramoTiempo.getIndaplicdom()) {
diasValidos.add(Calendar.SUNDAY);
}
return diasValidos;
}
private List<Integer> carregaParadaIdItinerario(List<CorridaTramo> miListTramos) {
List<Integer> paradasIdItinerario = new ArrayList<Integer>();
for (CorridaTramo corridaTramo : miListTramos) {
if (!paradasIdItinerario.contains(corridaTramo.getOrigem().getParadaId())) {
paradasIdItinerario.add(corridaTramo.getOrigem().getParadaId());
}
if (!paradasIdItinerario.contains(corridaTramo.getDestino().getParadaId())) {
paradasIdItinerario.add(corridaTramo.getDestino().getParadaId());
}
}
return paradasIdItinerario;
}
@Override
public List<CorridaTramo> criaCorridaTramoList(Autobus autobus, Date dataGeracao, Date fechorSalidaOriginalH ,
List<EsquemaTramo> lsEsquemaTramo, Nodo nodo, ClaseServicio claseServicio, String statusCorrida) {
List<CorridaTramo> lsCorridaTramo = new ArrayList<CorridaTramo>();
Date horaChegadaAnterior = null;
Date husoHorVeranoLlegadaAnterior = null;
Integer numSec = 1;
for (EsquemaTramo esquemaTramo : lsEsquemaTramo) {
CorridaTramo corridaTramo = new CorridaTramo();
corridaTramo.setAutobus(autobus!= null ? autobus : null);
corridaTramo.setConductor(null);
corridaTramo.setConductor1(null);
corridaTramo.setPlataforma(esquemaTramo.getPlataforma());
corridaTramo.setTipoPassagem(esquemaTramo.getTipoPassagem());
corridaTramo.setTiempoEstancia(esquemaTramo.getTiempoEstancia());
// numSec: 1-2, 2-3, 3-4...
corridaTramo.setNumsecorigen(numSec.shortValue());
numSec = numSec + 1;
corridaTramo.setNumsecdestino(numSec.shortValue());
Date fecHorSalida = calcularFechorsalida(esquemaTramo, dataGeracao, horaChegadaAnterior, esquemaTramo.getTiempoEstancia());
corridaTramo.setFechorsalida( getCalendarFechorSalida(fecHorSalida).getTime());
Date fecHorallegada = calcularFechorllegada(esquemaTramo, claseServicio, dataGeracao, fecHorSalida);
corridaTramo.setFechorllegada(getCalendarFechorllegada(fecHorallegada).getTime());
horaChegadaAnterior = fecHorallegada;
corridaTramo.setFechortarjetaviaje(null);
corridaTramo.setNodo(nodo);
corridaTramo.setNumsecuencia(esquemaTramo.getNumsecuencia());
Tramo tramo = esquemaTramo.getTramo();
if (tramo != null) {
corridaTramo.setOrigem(tramo.getOrigem());
corridaTramo.setDestino(tramo.getDestino());
}
corridaTramo.setTramo(tramo);
corridaTramo.setUsuariotarjetaviajeId(null);
Date excepcionTiempo = arreglaExcepcionTiempo(corridaTramo, claseServicio);
if (excepcionTiempo != null) {
corridaTramo.setFechorllegada(excepcionTiempo);
horaChegadaAnterior = excepcionTiempo;
}
if ("A".equals(statusCorrida)) {
corridaTramo.setActivo(ActivoUtil.ATIVO);
} else if ("L".equals(statusCorrida)) {
corridaTramo.setActivo(ActivoUtil.INATIVO);
}
//
corridaTramo.setFecmodif(Calendar.getInstance().getTime());
if (UsuarioLogado.getUsuarioLogado() != null) {
corridaTramo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
}
//corridaTramo.setCorrida(corrida);
corridaTramo.setFechorSalidaOriginal(fecHorSalida);
if (husoHorVeranoLlegadaAnterior == null) {
corridaTramo.setFechorsalidaH(corridaTramo.getFechorsalida());
} else {
// Ajusta tambem o tempo de instancia do calculo do horario de verao
if (esquemaTramo.getTiempoEstancia() != null) {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
GregorianCalendar tmp = new GregorianCalendar();
tmp.setTime(husoHorVeranoLlegadaAnterior);
tmp.add(Calendar.MINUTE, esquemaTramo.getTiempoEstancia().getMinutes());
tmp.add(Calendar.HOUR_OF_DAY, esquemaTramo.getTiempoEstancia().getHours());
log.debug("Tempo Recorrido H + Estancia: " + sdf.format(tmp.getTime()));
husoHorVeranoLlegadaAnterior = tmp.getTime();
}
corridaTramo.setFechorsalidaH(husoHorVeranoLlegadaAnterior);
}
husoHorVeranoLlegadaAnterior = calcularHusoHorVeranoLlegada(esquemaTramo, corridaTramo);
if (husoHorVeranoLlegadaAnterior != null) {
corridaTramo.setFechorllegadaH(husoHorVeranoLlegadaAnterior);
corridaTramo.setFechorSalidaOriginalH(husoHorVeranoLlegadaAnterior);
} else {
corridaTramo.setFechorllegadaH(corridaTramo.getFechorllegada());
corridaTramo.setFechorSalidaOriginalH(corridaTramo.getFechorSalidaOriginal());
}
if (numSec == 1) {
fechorSalidaOriginalH = corridaTramo.getFechorsalidaH();
//corrida.setFechorSalidaOriginalH(corridaTramo.getFechorsalidaH());
}
lsCorridaTramo.add(corridaTramo);
}
return lsCorridaTramo;
}
} }

View File

@ -0,0 +1,286 @@
package com.rjconsultores.ventaboletos.vo.esquemaoperacional;
import java.util.Date;
import java.util.List;
import com.rjconsultores.ventaboletos.entidad.Autobus;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.EsquemaTramo;
import com.rjconsultores.ventaboletos.entidad.Nodo;
public class ItemEditarCorridaTramo {
private Integer secuencia;
private String descParada;
private Integer paradaId;
private String estancia;
private String estado;
private Integer estadoId;
private Date tempoEstancia;
private Date tempoExcecao;
private String msgError;
private Date fechortarjetaviaje;
private String plataforma;
private String fechorllegada;
private Date fechaLlegada;
private Date fechaLlegadaNormal;
private Integer difFuso;
private String tipoPassagem;
private String fechorllegadaHusoVerano;
private Date fechaLlegadaHusoVerano;
private Date periodoInicial;
private Date periodoFinal;
private boolean isTramoEditado;
private boolean isExcluido;
private boolean isAdicionado;
private Date fecCorrida;
private Integer corridaId;
private Autobus autobus;
private List<EsquemaTramo> lsEsquemaTramoNova;
private ClaseServicio claseServicio;
private String statusCorrida;
private Nodo nodo;
public List<EsquemaTramo> getLsEsquemaTramoNova() {
return lsEsquemaTramoNova;
}
public void setLsEsquemaTramoNova(List<EsquemaTramo> lsEsquemaTramoNova) {
this.lsEsquemaTramoNova = lsEsquemaTramoNova;
}
public Date getFecCorrida() {
return fecCorrida;
}
public void setFecCorrida(Date fecCorrida) {
this.fecCorrida = fecCorrida;
}
public Integer getCorridaId() {
return corridaId;
}
public void setCorridaId(Integer corridaId) {
this.corridaId = corridaId;
}
public boolean isExcluido() {
return isExcluido;
}
public void setExcluido(boolean isExcluido) {
this.isExcluido = isExcluido;
}
public boolean isAdicionado() {
return isAdicionado;
}
public void setAdicionado(boolean isAdicionado) {
this.isAdicionado = isAdicionado;
}
public boolean isTramoEditado() {
return isTramoEditado;
}
public void setTramoEditado(boolean isTramoEditado) {
this.isTramoEditado = isTramoEditado;
}
public Integer getSecuencia() {
return secuencia;
}
public void setSecuencia(Integer secuencia) {
this.secuencia = secuencia;
}
public String getDescParada() {
return descParada;
}
public void setDescParada(String descParada) {
this.descParada = descParada;
}
public Integer getParadaId() {
return paradaId;
}
public void setParadaId(Integer paradaId) {
this.paradaId = paradaId;
}
public String getEstancia() {
return estancia;
}
public void setEstancia(String estancia) {
this.estancia = estancia;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
public Integer getEstadoId() {
return estadoId;
}
public void setEstadoId(Integer estadoId) {
this.estadoId = estadoId;
}
public Date getTempoEstancia() {
return tempoEstancia;
}
public void setTempoEstancia(Date tempoEstancia) {
this.tempoEstancia = tempoEstancia;
}
public Date getTempoExcecao() {
return tempoExcecao;
}
public void setTempoExcecao(Date tempoExcecao) {
this.tempoExcecao = tempoExcecao;
}
public String getMsgError() {
return msgError;
}
public void setMsgError(String msgError) {
this.msgError = msgError;
}
public Date getFechortarjetaviaje() {
return fechortarjetaviaje;
}
public void setFechortarjetaviaje(Date fechortarjetaviaje) {
this.fechortarjetaviaje = fechortarjetaviaje;
}
public String getPlataforma() {
return plataforma;
}
public void setPlataforma(String plataforma) {
this.plataforma = plataforma;
}
public String getFechorllegada() {
return fechorllegada;
}
public void setFechorllegada(String fechorllegada) {
this.fechorllegada = fechorllegada;
}
public Date getFechaLlegada() {
return fechaLlegada;
}
public void setFechaLlegada(Date fechaLlegada) {
this.fechaLlegada = fechaLlegada;
}
public Date getFechaLlegadaNormal() {
return fechaLlegadaNormal;
}
public void setFechaLlegadaNormal(Date fechaLlegadaNormal) {
this.fechaLlegadaNormal = fechaLlegadaNormal;
}
public Integer getDifFuso() {
return difFuso;
}
public void setDifFuso(Integer difFuso) {
this.difFuso = difFuso;
}
public String getTipoPassagem() {
return tipoPassagem;
}
public void setTipoPassagem(String tipoPassagem) {
this.tipoPassagem = tipoPassagem;
}
public String getFechorllegadaHusoVerano() {
return fechorllegadaHusoVerano;
}
public void setFechorllegadaHusoVerano(String fechorllegadaHusoVerano) {
this.fechorllegadaHusoVerano = fechorllegadaHusoVerano;
}
public Date getFechaLlegadaHusoVerano() {
return fechaLlegadaHusoVerano;
}
public void setFechaLlegadaHusoVerano(Date fechaLlegadaHusoVerano) {
this.fechaLlegadaHusoVerano = fechaLlegadaHusoVerano;
}
public Date getPeriodoInicial() {
return periodoInicial;
}
public void setPeriodoInicial(Date periodoInicial) {
this.periodoInicial = periodoInicial;
}
public Date getPeriodoFinal() {
return periodoFinal;
}
public void setPeriodoFinal(Date periodoFinal) {
this.periodoFinal = periodoFinal;
}
public Autobus getAutobus() {
return autobus;
}
public void setAutobus(Autobus autobus) {
this.autobus = autobus;
}
public ClaseServicio getClaseServicio() {
return claseServicio;
}
public void setClaseServicio(ClaseServicio claseServicio) {
this.claseServicio = claseServicio;
}
public String getStatusCorrida() {
return statusCorrida;
}
public void setStatusCorrida(String statusCorrida) {
this.statusCorrida = statusCorrida;
}
public Nodo getNodo() {
return nodo;
}
public void setNodo(Nodo nodo) {
this.nodo = nodo;
}
}