fixes bug#8718
git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@66456 d1611594-4594-4d17-8e1d-87c2c4800839master
parent
01c08f02b4
commit
c1e9250302
|
@ -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<RutaSecuencia, Integer> {
|
|||
* @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<Short> 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<Integer> obtenerNumRutaSecuenciaOcupadaPorCorridaAsiento(EsquemaCorrida esquemaCorrida, String asiento);
|
||||
|
||||
}
|
||||
|
|
|
@ -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<RutaSecuencia
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<Short> 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<Integer> 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<Integer> numSecuenciaOcupada = new ArrayList<Integer>();
|
||||
List<Object[]> resultList = query.list();
|
||||
|
||||
HashMap<Integer, List<Object[]>> mapObjectsByEsquema = new HashMap<Integer, List<Object[]>>();
|
||||
for (Object[] result : resultList) {
|
||||
Integer esquemaasientoId = (Integer) result[0];
|
||||
if (mapObjectsByEsquema.containsKey(esquemaasientoId)) {
|
||||
mapObjectsByEsquema.get(esquemaasientoId).add(result);
|
||||
} else {
|
||||
List<Object[]> numSecuenciaOcupadaList = new ArrayList<Object[]>();
|
||||
numSecuenciaOcupadaList.add(result);
|
||||
mapObjectsByEsquema.put(esquemaasientoId, numSecuenciaOcupadaList);
|
||||
}
|
||||
}
|
||||
|
||||
for (Integer esquemaasientoId : mapObjectsByEsquema.keySet()) {
|
||||
|
||||
List<Object[]> 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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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<RutaSecuencia,Integ
|
|||
public List<RutaSecuencia> 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<Short> 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<Integer> obtenerNumRutaSecuenciaOcupadaPorCorridaAsiento(EsquemaCorrida esquemaCorrida, String asiento);
|
||||
|
||||
}
|
||||
|
|
|
@ -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<Integer> numSequenciaOcupada = rutaSecuenciaService.obtenerNumRutaSecuenciaOcupadaPorCorridaAsiento(esquemaCorrida, asiento);
|
||||
List<Short> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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<Short> obtenerNumRutaSecuenciaPorCorridaOrigemDestino(EsquemaCorrida esquemaCorrida, Parada origem, Parada destino) {
|
||||
return rutaSecuenciaDAO.obtenerNumRutaSecuenciaPorCorridaOrigemDestino(esquemaCorrida, origem, destino);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Integer> obtenerNumRutaSecuenciaOcupadaPorCorridaAsiento(EsquemaCorrida esquemaCorrida, String asiento) {
|
||||
return rutaSecuenciaDAO.obtenerNumRutaSecuenciaOcupadaPorCorridaAsiento(esquemaCorrida, asiento);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue