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());