gleimar 2017-09-19 01:16:23 +00:00
parent 5d9647f3f9
commit 88794f9039
4 changed files with 139 additions and 142 deletions

View File

@ -64,4 +64,14 @@ public interface EsquemaCorridaDAO extends GenericDAO<EsquemaCorrida, Integer> {
public List<EsquemaCorrida> buscaDentroVigenciaQtdeDiasNull(Date dataGeracao);
public List<EsquemaCorrida> buscaDentroVigenciaQtdeDiasNotNull(Date dataDe);
/**
* Indica se o esquema é o indicado como segundo piso nas configuações de doble piso
*
* @param esquemaCorrida
* @return
*/
public boolean esSegundoPiso(EsquemaCorrida esquemaCorrida);
EsquemaCorrida buscarPeloNumCorrida(Integer numCorrida);
}

View File

@ -106,6 +106,22 @@ public class EsquemaCorridaHibernateDAO extends GenericHibernateDAO<EsquemaCorri
return (cant > 0);
}
/**
* Indica se o esquema é o indicado como segundo piso nas configuações de doble piso
*
* @param esquemaCorrida
* @return
*/
public boolean esSegundoPiso(EsquemaCorrida esquemaCorrida) {
Criteria c = makeCriteria();
c.setProjection(Projections.rowCount());
c.add(Restrictions.eq("activo", Boolean.TRUE));
c.add(Restrictions.eq("numCorridaPisoExtra", esquemaCorrida.getNumCorrida()));
Long cant = HibernateFix.count(c.list());
return (cant > 0);
}
@Override
public List<EsquemaCorrida> buscaDentroVigencia(Date dataGeracao) {
@ -190,9 +206,8 @@ public class EsquemaCorridaHibernateDAO extends GenericHibernateDAO<EsquemaCorri
Disjunction or = Restrictions.disjunction();
if(isDoublePiso){
or.add(Restrictions.or(Restrictions.eq("numCorridaPisoExtra", numCorridaPisoExtra), Restrictions.eq("numCorrida", numCorrida)));
or.add(Restrictions.eq("numCorrida", numCorridaPisoExtra));
or.add(Restrictions.or(Restrictions.eq("numCorridaPisoExtra", numCorridaPisoExtra), Restrictions.eq("numCorrida", numCorrida)));
or.add(Restrictions.eq("numCorrida", numCorridaPisoExtra));
}else{
or.add(Restrictions.eq("numCorrida", numCorrida));
}
@ -206,6 +221,16 @@ public class EsquemaCorridaHibernateDAO extends GenericHibernateDAO<EsquemaCorri
}
}
@Override
public EsquemaCorrida buscarPeloNumCorrida(Integer numCorrida) {
Criteria c = getSession().createCriteria(getPersistentClass());
c.add(Restrictions.eq("activo", Boolean.TRUE));
c.add(Restrictions.eq("numCorrida", numCorrida));
return (EsquemaCorrida) c.uniqueResult();
}
@Override
public List<EsquemaCorrida> buscaDentroVigenciaQtdeDiasNotNull(Date dataGeracao) {
Criteria c = makeCriteria();

View File

@ -74,9 +74,6 @@ public class EsquemaCorrida implements Serializable {
@JoinColumn(name = "ROLOPERATIVO_ID", referencedColumnName = "ROLOPERATIVO_ID")
@ManyToOne(cascade = CascadeType.ALL)
private RolOperativo rolOperativo;
@JoinColumn(name = "ROLOPERATIVO2_ID", referencedColumnName = "ROLOPERATIVO_ID")
@ManyToOne(cascade = CascadeType.ALL)
private RolOperativo rolOperativo2;
@JoinColumn(name = "MARCA_ID", referencedColumnName = "MARCA_ID")
@ManyToOne
private Marca marca;
@ -92,9 +89,6 @@ public class EsquemaCorrida implements Serializable {
@JoinColumn(name = "CLASESERVICIO_ID", referencedColumnName = "CLASESERVICIO_ID")
@ManyToOne(cascade = CascadeType.ALL)
private ClaseServicio claseServicio;
@JoinColumn(name = "CLASESERVICIO2_ID", referencedColumnName = "CLASESERVICIO_ID")
@ManyToOne(cascade = CascadeType.ALL)
private ClaseServicio claseServicio2;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "ESQUEMACORRIDA_ID", referencedColumnName = "ESQUEMACORRIDA_ID")
private List<EsquemaTramo> esquemaTramoList;
@ -417,21 +411,6 @@ public class EsquemaCorrida implements Serializable {
this.esquemaCorridaRebote = esquemaCorridaRebote;
}
public ClaseServicio getClaseServicio2() {
return claseServicio2;
}
public void setClaseServicio2(ClaseServicio claseServicio2) {
this.claseServicio2 = claseServicio2;
}
public RolOperativo getRolOperativo2() {
return rolOperativo2;
}
public void setRolOperativo2(RolOperativo rolOperativo2) {
this.rolOperativo2 = rolOperativo2;
}
public Integer getNumCorrida() {
return numCorrida;

View File

@ -44,7 +44,6 @@ import com.rjconsultores.ventaboletos.entidad.EsquemaTramo;
import com.rjconsultores.ventaboletos.entidad.Estado;
import com.rjconsultores.ventaboletos.entidad.Marca;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.RolOperativo;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.entidad.RutaSecuencia;
import com.rjconsultores.ventaboletos.entidad.Tramo;
@ -450,7 +449,7 @@ public class CorridaServiceImpl implements CorridaService {
Marca marca = esquemaCorrida.getMarca();
Date horario = esquemaCorrida.getHorasalida();
horario = DateUtil.normalizar(horario);
Integer numCorrida = (!isPisoExtra) ? esquemaCorrida.getNumCorrida() : esquemaCorrida.getNumCorridaPisoExtra();
Integer numCorrida = esquemaCorrida.getNumCorrida();
Corrida.Id id = new Corrida.Id();
@ -560,12 +559,6 @@ public class CorridaServiceImpl implements CorridaService {
corrida.setRolOperativo(esquemaCorrida.getRolOperativo());
corrida.setZona(null);
boolean hayCorrida = corridaDAO.count(corrida.getOrigem(), corrida.getDestino(), corrida.getId().getFeccorrida(), corrida.getClaseServicio(), isPisoExtra);
if (hayCorrida) {
return null;
}
// corrida Tramo:
List<CorridaTramo> lsCorridaTramo = new ArrayList<CorridaTramo>();
Integer numSec = 1;
@ -837,127 +830,117 @@ public class CorridaServiceImpl implements CorridaService {
log.info("esquema=" + esquemaCorrida.getEsquemacorridaId() + " numCorrida=" + esquemaCorrida.getNumCorrida());
if (!esquemaCorridaDAO.esHijoRebote(esquemaCorrida)) {
Corrida corrida = generarCorrida(esquemaCorrida, dataGeracao, false, isFeriado);
Corrida corridaPisoExtra = null;
boolean esHijoRebote = esquemaCorridaDAO.esHijoRebote(esquemaCorrida);
boolean esSegundoPiso = esquemaCorridaDAO.esSegundoPiso(esquemaCorrida);
if (corrida == null) {// Si no genera la corrida, no va a
// generar el rebote
log.info("No fue generado corrida. Esquema " + esquemaCorrida.getEsquemacorridaId() + " Data" + dataGeracao);
continue;
}
//Nessas duas condições, o "filho" só é gerado a partir do esquema corrida "pai"
if (esHijoRebote || esSegundoPiso) {
log.info(String.format("Esquema nao gerado. esHijoRebote:%s ; esSegundoPiso: %s",esHijoRebote,esSegundoPiso));
continue;
}
// PISO EXTRA
if (esquemaCorrida.getPisoExtra() != null && esquemaCorrida.getPisoExtra()) {
// Invertendo RolOperativo e Classe de Servico para o Piso
// Extra
RolOperativo ro = esquemaCorrida.getRolOperativo();
ClaseServicio cs = esquemaCorrida.getClaseServicio();
Corrida corrida = generarCorrida(esquemaCorrida, dataGeracao, false, isFeriado);
Corrida corridaPisoExtra = null;
esquemaCorrida.setRolOperativo(esquemaCorrida.getRolOperativo2());
esquemaCorrida.setClaseServicio(esquemaCorrida.getClaseServicio2());
if (corrida == null) {// Si no genera la corrida, no va a
// generar el rebote
log.info("No fue generado corrida. Esquema " + esquemaCorrida.getEsquemacorridaId() + " Data" + dataGeracao);
continue;
}
corridaPisoExtra = generarCorrida(esquemaCorrida, dataGeracao, true, isFeriado);
if (corrida != null && corridaPisoExtra != null) {
// Voltando RolOperativo e Classe de Servico
esquemaCorrida.setRolOperativo(ro);
esquemaCorrida.setClaseServicio(cs);
// PISO EXTRA
if (esquemaCorrida.getPisoExtra() != null && esquemaCorrida.getPisoExtra()) {
// Salvando Referencia da Corrida no piso extra
corridaPisoExtra.setCorridaPiso(corrida);
corridaPisoExtra.setNumPiso(2);
corridaPisoExtra = corridaDAO.actualizacion(corridaPisoExtra);
EsquemaCorrida esquemaCorridaSegundoPiso = esquemaCorridaDAO.buscarPeloNumCorrida(esquemaCorrida.getNumCorridaPisoExtra());
// Referencia do Piso extra na Corrida
corrida.setCorridaPiso(corridaPisoExtra);
corrida.setNumPiso(1);
corrida = corridaDAO.actualizacion(corrida);
} else {
// Voltando RolOperativo e Classe de Servico
// estava dando problema porque não estava voltando o roloperativo e nem a classe.
// daí, no caso de double piso, passava a gerar os próximos com classe errada. mantis 7075
esquemaCorrida.setRolOperativo(ro);
esquemaCorrida.setClaseServicio(cs);
}
}
log.info(String.format("Esquema/Corrida primeiro piso: %s/%s ; Esquema/Corrida segundo piso: %s/%s ",esquemaCorrida.getEsquemacorridaId(),esquemaCorrida.getNumCorrida(), esquemaCorridaSegundoPiso.getEsquemacorridaId(),esquemaCorridaSegundoPiso.getNumCorrida() ));
if (esquemaCorrida.getEsquemaCorridaRebote() != null) {
log.info("Corrida Rebote=" + esquemaCorrida.getEsquemacorridaId());
corridaPisoExtra = generarCorrida(esquemaCorridaSegundoPiso, dataGeracao, true, isFeriado);
Corrida corridaRebote = generarCorrida(esquemaCorrida.getEsquemaCorridaRebote(), dataGeracao, false, isFeriado);
Corrida corridaPisoExtraRebote = null;
boolean generaReboteDiaSeguinte = false;
if (corrida != null && corridaPisoExtra != null) {
if (corridaRebote != null) {
EsquemaCorrida ecRebote = esquemaCorrida.getEsquemaCorridaRebote();
if (ecRebote.getPisoExtra() != null && ecRebote.getPisoExtra()) {
// Invertendo RolOperativo e Classe de Servico
// para
// o Piso Extra
RolOperativo ro = ecRebote.getRolOperativo();
ClaseServicio cs = ecRebote.getClaseServicio();
// Salvando Referencia da Corrida no piso extra
corridaPisoExtra.setCorridaPiso(corrida);
corridaPisoExtra.setNumPiso(2);
corridaPisoExtra = corridaDAO.actualizacion(corridaPisoExtra);
ecRebote.setRolOperativo(ecRebote.getRolOperativo2());
ecRebote.setClaseServicio(ecRebote.getClaseServicio2());
corridaPisoExtraRebote = generarCorrida(ecRebote, dataGeracao, true, isFeriado);
if (corridaRebote != null && corridaPisoExtraRebote != null) {
// Salvando Referencia da Corrida no piso extra
corridaPisoExtraRebote.setCorridaPiso(corridaRebote);
corridaPisoExtraRebote.setNumPiso(2);
corridaPisoExtraRebote = corridaDAO.actualizacion(corridaPisoExtraRebote);
// Voltando RolOperativo e Classe de Servico
ecRebote.setRolOperativo(ro);
ecRebote.setClaseServicio(cs);
// Referencia do Piso extra na Corrida
corridaRebote.setCorridaPiso(corridaPisoExtraRebote);
corridaRebote.setNumPiso(1);
corridaRebote = corridaDAO.actualizacion(corridaRebote);
}
}
// RebotePisoExtra
if (DateUtil.compareDate(corrida.getFechorsalida(), corridaRebote.getFechorsalida()) > 0) {
generaReboteDiaSeguinte = true; // si fue generado
// con una
// fechamenor tienes
// que generar para
// el dia seguinte
}
} else {
generaReboteDiaSeguinte = true;// si no fue encontrado
// para el dia de
// hoy,genera para
// manhana
}
if (generaReboteDiaSeguinte) {
log.info("Haciendo la busqueda por el esquema rebote para el dia seguiente pues ya existe al dia de hoy");
corridaRebote = generarReboteDiaSeguinte(esquemaCorrida, dataGeracao);
if (corridaPisoExtraRebote != null) {
corridaPisoExtraRebote = generarReboteDiaSeguinte(esquemaCorrida, dataGeracao);
}
if (corridaRebote == null) {
log.info("No fue posible generar la corrida rebote. No fue encontrado esquema para la fecha del dia seguinte a " + dataGeracao);
}
}
if (corridaRebote != null) {
log.info("Rebote generado=" + corridaRebote.getId());
corrida.setCorridaRebote(corridaRebote);
corridaDAO.actualizacion(corrida);
}
if (corridaPisoExtraRebote != null && corridaPisoExtra != null) {
log.info("Rebote Piso Extra Generado=" + corridaPisoExtraRebote.getId());
corridaPisoExtra.setCorridaRebote(corridaPisoExtraRebote);
corridaDAO.actualizacion(corridaPisoExtra);
}
// Referencia do Piso extra na Corrida
corrida.setCorridaPiso(corridaPisoExtra);
corrida.setNumPiso(1);
corrida = corridaDAO.actualizacion(corrida);
}
}
if (esquemaCorrida.getEsquemaCorridaRebote() != null) {
log.info("Corrida Rebote=" + esquemaCorrida.getEsquemacorridaId());
Corrida corridaRebote = generarCorrida(esquemaCorrida.getEsquemaCorridaRebote(), dataGeracao, false, isFeriado);
Corrida corridaPisoExtraRebote = null;
boolean generaReboteDiaSeguinte = false;
if (corridaRebote != null) {
EsquemaCorrida ecRebote = esquemaCorrida.getEsquemaCorridaRebote();
if (ecRebote.getPisoExtra() != null && ecRebote.getPisoExtra()) {
EsquemaCorrida esquemaCorridaSegundoPiso = esquemaCorridaDAO.buscarPeloNumCorrida(ecRebote.getNumCorridaPisoExtra());
log.info(String.format("Esquema/Corrida primeiro piso: %s/%s ; Esquema/Corrida segundo piso: %s/%s ",ecRebote.getEsquemacorridaId(),ecRebote.getNumCorrida(), esquemaCorridaSegundoPiso.getEsquemacorridaId(),esquemaCorridaSegundoPiso.getNumCorrida() ));
corridaPisoExtraRebote = generarCorrida(esquemaCorridaSegundoPiso, dataGeracao, true, isFeriado);
if (corridaRebote != null && corridaPisoExtraRebote != null) {
// Salvando Referencia da Corrida no piso extra
corridaPisoExtraRebote.setCorridaPiso(corridaRebote);
corridaPisoExtraRebote.setNumPiso(2);
corridaPisoExtraRebote = corridaDAO.actualizacion(corridaPisoExtraRebote);
// Referencia do Piso extra na Corrida
corridaRebote.setCorridaPiso(corridaPisoExtraRebote);
corridaRebote.setNumPiso(1);
corridaRebote = corridaDAO.actualizacion(corridaRebote);
}
}
// RebotePisoExtra
if (DateUtil.compareDate(corrida.getFechorsalida(), corridaRebote.getFechorsalida()) > 0) {
generaReboteDiaSeguinte = true; // si fue generado
// con una
// fechamenor tienes
// que generar para
// el dia seguinte
}
} else {
generaReboteDiaSeguinte = true;// si no fue encontrado
// para el dia de
// hoy,genera para
// manhana
}
if (generaReboteDiaSeguinte) {
log.info("Haciendo la busqueda por el esquema rebote para el dia seguiente pues ya existe al dia de hoy");
corridaRebote = generarReboteDiaSeguinte(esquemaCorrida, dataGeracao);
if (corridaPisoExtraRebote != null) {
corridaPisoExtraRebote = generarReboteDiaSeguinte(esquemaCorrida, dataGeracao);
}
if (corridaRebote == null) {
log.info("No fue posible generar la corrida rebote. No fue encontrado esquema para la fecha del dia seguinte a " + dataGeracao);
}
}
if (corridaRebote != null) {
log.info("Rebote generado=" + corridaRebote.getId());
corrida.setCorridaRebote(corridaRebote);
corridaDAO.actualizacion(corrida);
}
if (corridaPisoExtraRebote != null && corridaPisoExtra != null) {
log.info("Rebote Piso Extra Generado=" + corridaPisoExtraRebote.getId());
corridaPisoExtra.setCorridaRebote(corridaPisoExtraRebote);
corridaDAO.actualizacion(corridaPisoExtra);
}
}
if (cantCorridaGenerada >= cantCorridaCommit) {
cantCorridaGenerada = 0;
transactionManager.commit(status);