diff --git a/pom.xml b/pom.xml
index fd75f5483..207c60083 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
br.com.rjconsultores
ModelWeb
- 1.17.1
+ 1.17.2
diff --git a/src/com/rjconsultores/ventaboletos/dao/EsquemaCorridaDAO.java b/src/com/rjconsultores/ventaboletos/dao/EsquemaCorridaDAO.java
index 2622261ff..6ba98fc9b 100644
--- a/src/com/rjconsultores/ventaboletos/dao/EsquemaCorridaDAO.java
+++ b/src/com/rjconsultores/ventaboletos/dao/EsquemaCorridaDAO.java
@@ -82,4 +82,36 @@ public interface EsquemaCorridaDAO extends GenericDAO {
public Integer atualizaServicoIntegracaoTotvs(Marca marca, Integer corridaId) throws BusinessException;
+ /**
+ * Buscar corrida primeiro piso, a partir do segundo
+ *
+ * @param esquemaCorrida
+ * @return
+ */
+ public EsquemaCorrida buscarPrimeiroPisoPeloSegundo(EsquemaCorrida esquemaCorrida);
+
+ /**
+ * Indica se o esquema é o indicado como terceiro piso nas configuações de doble piso
+ *
+ * @param esquemaCorrida
+ * @return
+ */
+ public boolean esTerceiroPiso(EsquemaCorrida esquemaCorrida);
+
+ /**
+ * Buscar corrida primeiro piso, a partir do terceiro
+ *
+ * @param esquemaCorrida
+ * @return
+ */
+ public EsquemaCorrida buscarPrimeiroPisoPeloTerceiro(EsquemaCorrida esquemaCorrida);
+
+ /**
+ * Buscar corrida, a partir do HijoRebote
+ *
+ * @param esquemaCorrida
+ * @return
+ */
+ public EsquemaCorrida buscarEsquemaPeloHijoRebote(EsquemaCorrida esquemaCorrida);
+
}
diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/EsquemaCorridaHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/EsquemaCorridaHibernateDAO.java
index 747372a0b..5787d3d52 100644
--- a/src/com/rjconsultores/ventaboletos/dao/hibernate/EsquemaCorridaHibernateDAO.java
+++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/EsquemaCorridaHibernateDAO.java
@@ -125,6 +125,28 @@ public class EsquemaCorridaHibernateDAO extends GenericHibernateDAO 0);
}
+
+ /**
+ * Buscar corrida, a partir do HijoRebote
+ *
+ * @param esquemaCorrida
+ * @return
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public EsquemaCorrida buscarEsquemaPeloHijoRebote(EsquemaCorrida esquemaCorrida) {
+ Criteria c = makeCriteria();
+ c.add(Restrictions.eq("activo", Boolean.TRUE));
+ c.add(Restrictions.eq("esquemaCorridaRebote", esquemaCorrida.getNumCorrida()));
+
+ List primeiroPiso = c.list();
+
+ if(primeiroPiso != null && !primeiroPiso.isEmpty()) {
+ return primeiroPiso.get(0);
+ }
+
+ return null;
+ }
/**
* Indica se o esquema é o indicado como segundo piso nas configuações de doble piso
@@ -143,6 +165,68 @@ public class EsquemaCorridaHibernateDAO extends GenericHibernateDAO 0);
}
+
+ /**
+ * Indica se o esquema é o indicado como terceiro piso nas configuações de doble piso
+ *
+ * @param esquemaCorrida
+ * @return
+ */
+ @Override
+ public boolean esTerceiroPiso(EsquemaCorrida esquemaCorrida) {
+ Criteria c = makeCriteria();
+ c.setProjection(Projections.rowCount());
+ c.add(Restrictions.eq("activo", Boolean.TRUE));
+ c.add(Restrictions.eq("numCorridaPisoExtra2", esquemaCorrida.getNumCorrida()));
+
+ Long cant = HibernateFix.count(c.list());
+
+ return (cant > 0);
+ }
+
+ /**
+ * Buscar corrida primeiro piso, a partir do segundo
+ *
+ * @param esquemaCorrida
+ * @return
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public EsquemaCorrida buscarPrimeiroPisoPeloSegundo(EsquemaCorrida esquemaCorrida) {
+ Criteria c = makeCriteria();
+ c.add(Restrictions.eq("activo", Boolean.TRUE));
+ c.add(Restrictions.eq("numCorridaPisoExtra", esquemaCorrida.getNumCorrida()));
+
+ List primeiroPiso = c.list();
+
+ if(primeiroPiso != null && !primeiroPiso.isEmpty()) {
+ return primeiroPiso.get(0);
+ }
+
+ return null;
+ }
+
+ /**
+ * Buscar corrida primeiro piso, a partir do segundo
+ *
+ * @param esquemaCorrida
+ * @return
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public EsquemaCorrida buscarPrimeiroPisoPeloTerceiro(EsquemaCorrida esquemaCorrida) {
+ Criteria c = makeCriteria();
+ c.add(Restrictions.eq("activo", Boolean.TRUE));
+ c.add(Restrictions.eq("numCorridaPisoExtra", esquemaCorrida.getNumCorrida()));
+
+ List primeiroPiso = c.list();
+
+ if(primeiroPiso != null && !primeiroPiso.isEmpty()) {
+ return primeiroPiso.get(0);
+ }
+
+ return null;
+ }
@Override
public List buscaDentroVigencia(Date dataGeracao) {
diff --git a/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java
index f9a55b398..6354e7f80 100644
--- a/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java
+++ b/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java
@@ -942,10 +942,11 @@ public class CorridaServiceImpl implements CorridaService {
try {
for (EsquemaCorrida esquemaCorrida : lsEsquemaCorrida) {
- Boolean isFeriado = this.isFeriado(data, esquemaCorrida);
-
log.info("esquema=" + esquemaCorrida.getEsquemacorridaId() + " numCorrida=" + esquemaCorrida.getNumCorrida());
-
+
+ //Usado para validar se deve buscar o primeiro piso e vincular com o segungo/terceiro caso ele ja esteja criado
+ boolean isSegundoOuTerceiroPiso = false;
+
if (isGeracaoAutomaticaCorrida) {
boolean esHijoRebote = esquemaCorridaDAO.esHijoRebote(esquemaCorrida);
boolean esSegundoPiso = esquemaCorridaDAO.esSegundoPiso(esquemaCorrida);
@@ -956,9 +957,60 @@ public class CorridaServiceImpl implements CorridaService {
corridaGerada = false;
continue;
}
+ } else {
+ // Caso nao seja automatico e o segundo piso seja enviado, busca o primeiro piso e geram os dois (ou tres pisos),
+ // caso o primeiro piso ja exista, o segundo e gerado e os dois sao vinculados
+ boolean esHijoRebote = esquemaCorridaDAO.esHijoRebote(esquemaCorrida);
+
+ //Nessas tres condições, o "filho" só é gerado a partir do esquema corrida "pai"
+ if (esHijoRebote) {
+ log.info("E segundo HijoRebote, procurando a corrida Pai. ");
+
+ esquemaCorrida = esquemaCorridaDAO.buscarEsquemaPeloHijoRebote(esquemaCorrida);
+
+ if(esquemaCorrida == null) {
+ log.info(String.format("Esquema nao gerado. esHijoRebote:%s ; ",esHijoRebote));
+ corridaGerada = false;
+ continue;
+ }
+ log.info("Corrida Pai esquema=" + esquemaCorrida.getEsquemacorridaId() + " numCorrida=" + esquemaCorrida.getNumCorrida());
+ }
+
+ boolean esSegundoPiso = esquemaCorridaDAO.esSegundoPiso(esquemaCorrida);
+
+ if(esSegundoPiso) {
+ isSegundoOuTerceiroPiso = true;
+ log.info("E segundo Piso, procurando o primeiro piso para gerar. ");
+ esquemaCorrida = esquemaCorridaDAO.buscarPrimeiroPisoPeloSegundo(esquemaCorrida);
+
+ if(esquemaCorrida == null) {
+ log.info("Primeiro piso nao encontrado, nao ira gerar o servico: " );
+ corridaGerada = false;
+ continue;
+ }
+
+ log.info("Primeiro Piso esquema=" + esquemaCorrida.getEsquemacorridaId() + " numCorrida=" + esquemaCorrida.getNumCorrida());
+ }
+
+ boolean esTerceiroPiso = esquemaCorridaDAO.esTerceiroPiso(esquemaCorrida);
+
+ if(esTerceiroPiso) {
+ isSegundoOuTerceiroPiso = true;
+ log.info("E terceiro Piso, procurando o primeiro piso para gerar. ");
+ esquemaCorrida = esquemaCorridaDAO.buscarPrimeiroPisoPeloTerceiro(esquemaCorrida);
+
+ if(esquemaCorrida == null) {
+ log.info("Primeiro piso nao encontrado, nao ira gerar o servico: " );
+ corridaGerada = false;
+ continue;
+ }
+ log.info("Primeiro Piso esquema=" + esquemaCorrida.getEsquemacorridaId() + " numCorrida=" + esquemaCorrida.getNumCorrida());
+ }
}
+ Boolean isFeriado = this.isFeriado(data, esquemaCorrida);
corrida = generarCorrida(esquemaCorrida, dataGeracao, false, isFeriado);
+
if(corrida != null) {
generarCorridaInfo(corrida, esquemaCorrida);
}
@@ -966,9 +1018,19 @@ public class CorridaServiceImpl implements CorridaService {
corridaPisoExtra = null;
corridaPisoExtra2 = null;
- if (corrida == null) {
+ if (corrida == null && !isSegundoOuTerceiroPiso) {
corridaGerada = false;
continue;
+
+ } else if(corrida == null && isSegundoOuTerceiroPiso) {
+ log.info(" Primeiro piso ja existe, buscando corrida para vincular ao piso extra");
+ corrida = corridaDAO.buscarPorId(criarIdCorrida(dataGeracao, esquemaCorrida));
+
+ if (corrida == null) {
+ log.info("Nao foi encontrada corrida original, nao sera gerado o segundo/terceiro piso");
+ corridaGerada = false;
+ continue;
+ }
}
// PISO EXTRA
@@ -1054,6 +1116,14 @@ public class CorridaServiceImpl implements CorridaService {
return corridaGerada;
}
+ private Id criarIdCorrida(Date dataGeracao, EsquemaCorrida esquemaCorrida) {
+ Corrida.Id id = new Corrida.Id();
+ id.setCorridaId(esquemaCorrida.getNumCorrida());
+ id.setFeccorrida(DateUtil.normalizarToFecha(dataGeracao));
+
+ return id;
+ }
+
private void criaCorridaRebote(Date dataGeracao, Corrida corrida, Corrida corridaPisoExtra,
Corrida corridaPisoExtra2, EsquemaCorrida esquemaCorrida, Boolean isFeriado) {
log.info("Corrida Rebote=" + esquemaCorrida.getEsquemacorridaId());