From c1e92503025ac09c19af40bac2f473edab8a6831 Mon Sep 17 00:00:00 2001 From: "lucas.calixto" Date: Tue, 7 Mar 2017 17:10:58 +0000 Subject: [PATCH] fixes bug#8718 git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@66456 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../ventaboletos/dao/RutaSecuenciaDAO.java | 21 +++++ .../hibernate/RutaSecuenciaHibernateDAO.java | 86 +++++++++++++++++++ .../service/RutaSecuenciaService.java | 21 +++++ .../impl/EsquemaAsientoServiceImpl.java | 54 ++++++++---- .../impl/RutaSecuenciaServiceImpl.java | 12 +++ 5 files changed, 178 insertions(+), 16 deletions(-) diff --git a/src/com/rjconsultores/ventaboletos/dao/RutaSecuenciaDAO.java b/src/com/rjconsultores/ventaboletos/dao/RutaSecuenciaDAO.java index b4140e875..3a1d278df 100644 --- a/src/com/rjconsultores/ventaboletos/dao/RutaSecuenciaDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/RutaSecuenciaDAO.java @@ -6,6 +6,7 @@ package com.rjconsultores.ventaboletos.dao; import java.util.List; +import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida; import com.rjconsultores.ventaboletos.entidad.Parada; import com.rjconsultores.ventaboletos.entidad.Ruta; import com.rjconsultores.ventaboletos.entidad.RutaSecuencia; @@ -30,4 +31,24 @@ public interface RutaSecuenciaDAO extends GenericDAO { * @return */ public boolean paradaSecuenciaValida(Ruta ruta, Parada origen,Parada destino); + + /** + * Devolver los números de secuencia de ruta en la raza, el origen y el destino. + * + * @param esquemaCorrida + * @param origem + * @param destino + * @return secuencia de pares -> 3, 6 + */ + List obtenerNumRutaSecuenciaPorCorridaOrigemDestino(EsquemaCorrida esquemaCorrida, Parada origem, Parada destino); + + /** + * Devolver los números de secuencia ocupada de ruta en la raza, el origen y el destino. + * + * @param esquemaCorrida + * @param asiento + * @return todas las secuencias ocupados ordenadas -> 3, 4, 5, 7 + */ + List obtenerNumRutaSecuenciaOcupadaPorCorridaAsiento(EsquemaCorrida esquemaCorrida, String asiento); + } diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/RutaSecuenciaHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/RutaSecuenciaHibernateDAO.java index fb8438e85..badad716e 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/RutaSecuenciaHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/RutaSecuenciaHibernateDAO.java @@ -5,12 +5,17 @@ package com.rjconsultores.ventaboletos.dao.hibernate; import com.rjconsultores.ventaboletos.dao.RutaSecuenciaDAO; +import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida; import com.rjconsultores.ventaboletos.entidad.Parada; import com.rjconsultores.ventaboletos.entidad.Ruta; import com.rjconsultores.ventaboletos.entidad.RutaSecuencia; import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; + +import org.apache.commons.collections.CollectionUtils; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.SessionFactory; @@ -99,4 +104,85 @@ public class RutaSecuenciaHibernateDAO extends GenericHibernateDAO obtenerNumRutaSecuenciaPorCorridaOrigemDestino(EsquemaCorrida esquemaCorrida, Parada origem, Parada destino) { + + String queryString = "SELECT rs.numsecuencia " + + "FROM EsquemaCorrida ec " + + "JOIN ec.ruta r " + + "JOIN r.rutaSecuenciaList rs " + + "JOIN rs.tramo t " + + "WHERE (t.origem = :origem OR t.destino = :destino) " + + "AND ec = :esquemaCorrida"; + + Query query = getSession().createQuery(queryString); + query.setParameter("esquemaCorrida", esquemaCorrida); + query.setParameter("origem", origem); + query.setParameter("destino", destino); + + return query.list(); + + } + + @SuppressWarnings("unchecked") + public List obtenerNumRutaSecuenciaOcupadaPorCorridaAsiento(EsquemaCorrida esquemaCorrida, String asiento) { + + String queryString = "SELECT ea.esquemaasientoId, rs.numsecuencia, ea.indvendible, " + + "(SELECT MAX(rs2.numsecuencia) FROM RutaSecuencia rs2 WHERE rs2.ruta = r) " + + "FROM EsquemaAsiento ea " + + "JOIN ea.esquemaCorrida ec " + + "JOIN ec.ruta r " + + "JOIN r.rutaSecuenciaList rs " + + "JOIN rs.tramo t " + + "WHERE ea.numasiento = :asiento " + + "AND (t.origem = ea.parada " + + "OR t.destino = ea.destino) " + + "AND ec = :esquemaCorrida " + + "ORDER BY rs.numsecuencia"; + + Query query = getSession().createQuery(queryString); + query.setParameter("asiento", asiento); + query.setParameter("esquemaCorrida", esquemaCorrida); + + List numSecuenciaOcupada = new ArrayList(); + List resultList = query.list(); + + HashMap> mapObjectsByEsquema = new HashMap>(); + for (Object[] result : resultList) { + Integer esquemaasientoId = (Integer) result[0]; + if (mapObjectsByEsquema.containsKey(esquemaasientoId)) { + mapObjectsByEsquema.get(esquemaasientoId).add(result); + } else { + List numSecuenciaOcupadaList = new ArrayList(); + numSecuenciaOcupadaList.add(result); + mapObjectsByEsquema.put(esquemaasientoId, numSecuenciaOcupadaList); + } + } + + for (Integer esquemaasientoId : mapObjectsByEsquema.keySet()) { + + List listObjects = mapObjectsByEsquema.get(esquemaasientoId); + Short numsecuenciaOrigem = (Short) listObjects.get(0)[1]; + Boolean indvendible = (Boolean) listObjects.get(0)[2]; + Short ultimoNumsecuencia = (Short) listObjects.get(0)[3]; + Short numsecuenciaDestino = numsecuenciaOrigem; + if (Boolean.TRUE.equals(indvendible)) { + numsecuenciaDestino = ultimoNumsecuencia; + } else if (listObjects.size() > 1) { + numsecuenciaDestino = (Short) listObjects.get(1)[1]; + } + + Integer min = Math.min(numsecuenciaOrigem, numsecuenciaDestino); + Integer max = Math.max(numsecuenciaOrigem, numsecuenciaDestino); + for (int j = min; j <= max; j++) { + numSecuenciaOcupada.add(j); + } + + } + + return numSecuenciaOcupada; + + } + } diff --git a/src/com/rjconsultores/ventaboletos/service/RutaSecuenciaService.java b/src/com/rjconsultores/ventaboletos/service/RutaSecuenciaService.java index ee87da0ff..ca882f5ca 100644 --- a/src/com/rjconsultores/ventaboletos/service/RutaSecuenciaService.java +++ b/src/com/rjconsultores/ventaboletos/service/RutaSecuenciaService.java @@ -5,6 +5,8 @@ package com.rjconsultores.ventaboletos.service; +import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida; +import com.rjconsultores.ventaboletos.entidad.Parada; import com.rjconsultores.ventaboletos.entidad.Ruta; import com.rjconsultores.ventaboletos.entidad.RutaSecuencia; import java.util.List; @@ -18,5 +20,24 @@ public interface RutaSecuenciaService extends GenericService buscarSecuenciaOrdenado(Ruta ruta); public int borrarSecuencias(Ruta ruta); + + /** + * Devolver los números de secuencia de ruta en la raza, el origen y el destino. + * + * @param esquemaCorrida + * @param origem + * @param destino + * @return secuencia de pares -> 3, 6 + */ + List obtenerNumRutaSecuenciaPorCorridaOrigemDestino(EsquemaCorrida esquemaCorrida, Parada origem, Parada destino); + + /** + * Devolver los números de secuencia ocupada de ruta en la raza, el origen y el destino. + * + * @param esquemaCorrida + * @param asiento + * @return todas las secuencias ocupados ordenadas -> 3, 4, 5, 7 + */ + List obtenerNumRutaSecuenciaOcupadaPorCorridaAsiento(EsquemaCorrida esquemaCorrida, String asiento); } diff --git a/src/com/rjconsultores/ventaboletos/service/impl/EsquemaAsientoServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/EsquemaAsientoServiceImpl.java index 5e3fb42b2..008d597bb 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/EsquemaAsientoServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/EsquemaAsientoServiceImpl.java @@ -22,9 +22,11 @@ import com.rjconsultores.ventaboletos.entidad.DiagramaAutobus; import com.rjconsultores.ventaboletos.entidad.EsquemaAsiento; import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida; import com.rjconsultores.ventaboletos.entidad.Parada; +import com.rjconsultores.ventaboletos.entidad.Ruta; import com.rjconsultores.ventaboletos.exception.BusinessException; import com.rjconsultores.ventaboletos.service.DiagramaAutobusService; import com.rjconsultores.ventaboletos.service.EsquemaAsientoService; +import com.rjconsultores.ventaboletos.service.RutaSecuenciaService; import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; /** @@ -37,12 +39,18 @@ public class EsquemaAsientoServiceImpl implements EsquemaAsientoService { private static Logger log = LoggerFactory.getLogger(EsquemaAsientoServiceImpl.class); private static final String BLOQUEO_EXCLUSIVO = "BLOQUEO_EXCLUSIVO"; private static final String BLOQUEO_OCUPACION = "BLOQUEO_OCUPACION"; + @Autowired private EsquemaAsientoDAO esquemaAsientoDAO; + @Autowired private RutaSecuenciaDAO rutaSecuenciaDAO; + @Autowired private DiagramaAutobusService diagramaAutobusService; + + @Autowired + private RutaSecuenciaService rutaSecuenciaService; private EsquemaAsiento suscribir(EsquemaAsiento entidad) { entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); @@ -103,6 +111,11 @@ public class EsquemaAsientoServiceImpl implements EsquemaAsientoService { } if (vende) { + + if (reviseAsientoBloqueado(asiento, esquemaCorrida, origen, destino)) { + throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.poltronaJahConfigurada", new Object[] { asiento }); + } + EsquemaAsiento es = new EsquemaAsiento(); es.setActivo(Boolean.TRUE); es.setFecmodif(Calendar.getInstance().getTime()); @@ -121,27 +134,21 @@ public class EsquemaAsientoServiceImpl implements EsquemaAsientoService { } es.setEsquemaCorrida(esquemaCorrida); + es = suscribir(es); - EsquemaAsiento esquemaAsientoBusqueda = obtenerPorCorridaeAsiento(esquemaCorrida, asiento); - if (esquemaAsientoBusqueda.getEsquemaasientoId() == null) { - es = suscribir(es); + // validação extra para garantir que salvou corretamente + if (tipoBloqueo.equals(BLOQUEO_EXCLUSIVO)) { - // validação extra para garantir que salvou corretamente - if (tipoBloqueo.equals(BLOQUEO_EXCLUSIVO)) { + if (!(es.getIndvendible() && (es.getParada() != null) && (es.getDestino() == null))) { - if (!(es.getIndvendible() && (es.getParada() != null) && (es.getDestino() == null))) { - - throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.validacionGrabacion"); - } - - } else { - // validação extra para garantir que salvou corretamente - if (!(!es.getIndvendible() && (es.getParada() != null) && (es.getDestino() != null))) { - throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.validacionGrabacion"); - } + throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.validacionGrabacion"); } + } else { - throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.poltronaJahConfigurada", new Object[] { asiento }); + // validação extra para garantir que salvou corretamente + if (!(!es.getIndvendible() && (es.getParada() != null) && (es.getDestino() != null))) { + throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.validacionGrabacion"); + } } } else { @@ -152,6 +159,20 @@ public class EsquemaAsientoServiceImpl implements EsquemaAsientoService { return true; } + private boolean reviseAsientoBloqueado(String asiento, EsquemaCorrida esquemaCorrida, Parada origen, Parada destino) { + + List numSequenciaOcupada = rutaSecuenciaService.obtenerNumRutaSecuenciaOcupadaPorCorridaAsiento(esquemaCorrida, asiento); + List numSequenciaSeleccionado = rutaSecuenciaService.obtenerNumRutaSecuenciaPorCorridaOrigemDestino(esquemaCorrida, origen, destino); + for (Short numSequencia : numSequenciaSeleccionado) { + if (numSequenciaOcupada.contains(numSequencia.intValue())) { + return true; + } + } + + return false; + + } + @Transactional(rollbackFor = BusinessException.class) @Override public void bloqueoAsientoOcupacion(EsquemaCorrida esquemaCorrida, String strAsiento, Parada origen, Parada destino, Integer tiempoLiberacion, String motivoOcupacion) throws BusinessException { @@ -211,4 +232,5 @@ public class EsquemaAsientoServiceImpl implements EsquemaAsientoService { return todosAsientos; } + } diff --git a/src/com/rjconsultores/ventaboletos/service/impl/RutaSecuenciaServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/RutaSecuenciaServiceImpl.java index 53f3dbb8c..fca372784 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/RutaSecuenciaServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/RutaSecuenciaServiceImpl.java @@ -5,6 +5,8 @@ package com.rjconsultores.ventaboletos.service.impl; import com.rjconsultores.ventaboletos.dao.RutaSecuenciaDAO; +import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida; +import com.rjconsultores.ventaboletos.entidad.Parada; import com.rjconsultores.ventaboletos.entidad.Ruta; import com.rjconsultores.ventaboletos.entidad.RutaSecuencia; import com.rjconsultores.ventaboletos.service.RutaSecuenciaService; @@ -66,4 +68,14 @@ public class RutaSecuenciaServiceImpl implements RutaSecuenciaService { public int borrarSecuencias(Ruta ruta) { return rutaSecuenciaDAO.borrarSecuencias(ruta); } + + @Override + public List obtenerNumRutaSecuenciaPorCorridaOrigemDestino(EsquemaCorrida esquemaCorrida, Parada origem, Parada destino) { + return rutaSecuenciaDAO.obtenerNumRutaSecuenciaPorCorridaOrigemDestino(esquemaCorrida, origem, destino); + } + + @Override + public List obtenerNumRutaSecuenciaOcupadaPorCorridaAsiento(EsquemaCorrida esquemaCorrida, String asiento) { + return rutaSecuenciaDAO.obtenerNumRutaSecuenciaOcupadaPorCorridaAsiento(esquemaCorrida, asiento); + } }