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 java.util.List;
|
||||||
|
|
||||||
|
import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida;
|
||||||
import com.rjconsultores.ventaboletos.entidad.Parada;
|
import com.rjconsultores.ventaboletos.entidad.Parada;
|
||||||
import com.rjconsultores.ventaboletos.entidad.Ruta;
|
import com.rjconsultores.ventaboletos.entidad.Ruta;
|
||||||
import com.rjconsultores.ventaboletos.entidad.RutaSecuencia;
|
import com.rjconsultores.ventaboletos.entidad.RutaSecuencia;
|
||||||
|
@ -30,4 +31,24 @@ public interface RutaSecuenciaDAO extends GenericDAO<RutaSecuencia, Integer> {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public boolean paradaSecuenciaValida(Ruta ruta, Parada origen,Parada destino);
|
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;
|
package com.rjconsultores.ventaboletos.dao.hibernate;
|
||||||
|
|
||||||
import com.rjconsultores.ventaboletos.dao.RutaSecuenciaDAO;
|
import com.rjconsultores.ventaboletos.dao.RutaSecuenciaDAO;
|
||||||
|
import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida;
|
||||||
import com.rjconsultores.ventaboletos.entidad.Parada;
|
import com.rjconsultores.ventaboletos.entidad.Parada;
|
||||||
import com.rjconsultores.ventaboletos.entidad.Ruta;
|
import com.rjconsultores.ventaboletos.entidad.Ruta;
|
||||||
import com.rjconsultores.ventaboletos.entidad.RutaSecuencia;
|
import com.rjconsultores.ventaboletos.entidad.RutaSecuencia;
|
||||||
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
|
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.hibernate.Criteria;
|
import org.hibernate.Criteria;
|
||||||
import org.hibernate.Query;
|
import org.hibernate.Query;
|
||||||
import org.hibernate.SessionFactory;
|
import org.hibernate.SessionFactory;
|
||||||
|
@ -99,4 +104,85 @@ public class RutaSecuenciaHibernateDAO extends GenericHibernateDAO<RutaSecuencia
|
||||||
|
|
||||||
return false;
|
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;
|
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.Ruta;
|
||||||
import com.rjconsultores.ventaboletos.entidad.RutaSecuencia;
|
import com.rjconsultores.ventaboletos.entidad.RutaSecuencia;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -19,4 +21,23 @@ public interface RutaSecuenciaService extends GenericService<RutaSecuencia,Integ
|
||||||
|
|
||||||
public int borrarSecuencias(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.EsquemaAsiento;
|
||||||
import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida;
|
import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida;
|
||||||
import com.rjconsultores.ventaboletos.entidad.Parada;
|
import com.rjconsultores.ventaboletos.entidad.Parada;
|
||||||
|
import com.rjconsultores.ventaboletos.entidad.Ruta;
|
||||||
import com.rjconsultores.ventaboletos.exception.BusinessException;
|
import com.rjconsultores.ventaboletos.exception.BusinessException;
|
||||||
import com.rjconsultores.ventaboletos.service.DiagramaAutobusService;
|
import com.rjconsultores.ventaboletos.service.DiagramaAutobusService;
|
||||||
import com.rjconsultores.ventaboletos.service.EsquemaAsientoService;
|
import com.rjconsultores.ventaboletos.service.EsquemaAsientoService;
|
||||||
|
import com.rjconsultores.ventaboletos.service.RutaSecuenciaService;
|
||||||
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
|
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -37,13 +39,19 @@ public class EsquemaAsientoServiceImpl implements EsquemaAsientoService {
|
||||||
private static Logger log = LoggerFactory.getLogger(EsquemaAsientoServiceImpl.class);
|
private static Logger log = LoggerFactory.getLogger(EsquemaAsientoServiceImpl.class);
|
||||||
private static final String BLOQUEO_EXCLUSIVO = "BLOQUEO_EXCLUSIVO";
|
private static final String BLOQUEO_EXCLUSIVO = "BLOQUEO_EXCLUSIVO";
|
||||||
private static final String BLOQUEO_OCUPACION = "BLOQUEO_OCUPACION";
|
private static final String BLOQUEO_OCUPACION = "BLOQUEO_OCUPACION";
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private EsquemaAsientoDAO esquemaAsientoDAO;
|
private EsquemaAsientoDAO esquemaAsientoDAO;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private RutaSecuenciaDAO rutaSecuenciaDAO;
|
private RutaSecuenciaDAO rutaSecuenciaDAO;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DiagramaAutobusService diagramaAutobusService;
|
private DiagramaAutobusService diagramaAutobusService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RutaSecuenciaService rutaSecuenciaService;
|
||||||
|
|
||||||
private EsquemaAsiento suscribir(EsquemaAsiento entidad) {
|
private EsquemaAsiento suscribir(EsquemaAsiento entidad) {
|
||||||
entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
||||||
entidad.setFecmodif(Calendar.getInstance().getTime());
|
entidad.setFecmodif(Calendar.getInstance().getTime());
|
||||||
|
@ -103,6 +111,11 @@ public class EsquemaAsientoServiceImpl implements EsquemaAsientoService {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vende) {
|
if (vende) {
|
||||||
|
|
||||||
|
if (reviseAsientoBloqueado(asiento, esquemaCorrida, origen, destino)) {
|
||||||
|
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.poltronaJahConfigurada", new Object[] { asiento });
|
||||||
|
}
|
||||||
|
|
||||||
EsquemaAsiento es = new EsquemaAsiento();
|
EsquemaAsiento es = new EsquemaAsiento();
|
||||||
es.setActivo(Boolean.TRUE);
|
es.setActivo(Boolean.TRUE);
|
||||||
es.setFecmodif(Calendar.getInstance().getTime());
|
es.setFecmodif(Calendar.getInstance().getTime());
|
||||||
|
@ -121,9 +134,6 @@ public class EsquemaAsientoServiceImpl implements EsquemaAsientoService {
|
||||||
}
|
}
|
||||||
|
|
||||||
es.setEsquemaCorrida(esquemaCorrida);
|
es.setEsquemaCorrida(esquemaCorrida);
|
||||||
|
|
||||||
EsquemaAsiento esquemaAsientoBusqueda = obtenerPorCorridaeAsiento(esquemaCorrida, asiento);
|
|
||||||
if (esquemaAsientoBusqueda.getEsquemaasientoId() == null) {
|
|
||||||
es = suscribir(es);
|
es = suscribir(es);
|
||||||
|
|
||||||
// validação extra para garantir que salvou corretamente
|
// validação extra para garantir que salvou corretamente
|
||||||
|
@ -140,9 +150,6 @@ public class EsquemaAsientoServiceImpl implements EsquemaAsientoService {
|
||||||
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.validacionGrabacion");
|
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.validacionGrabacion");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.poltronaJahConfigurada", new Object[] { asiento });
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.poltronaNoVendible", new Object[] { asiento });
|
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.poltronaNoVendible", new Object[] { asiento });
|
||||||
|
@ -152,6 +159,20 @@ public class EsquemaAsientoServiceImpl implements EsquemaAsientoService {
|
||||||
return true;
|
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)
|
@Transactional(rollbackFor = BusinessException.class)
|
||||||
@Override
|
@Override
|
||||||
public void bloqueoAsientoOcupacion(EsquemaCorrida esquemaCorrida, String strAsiento, Parada origen, Parada destino, Integer tiempoLiberacion, String motivoOcupacion) throws BusinessException {
|
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;
|
return todosAsientos;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
package com.rjconsultores.ventaboletos.service.impl;
|
package com.rjconsultores.ventaboletos.service.impl;
|
||||||
|
|
||||||
import com.rjconsultores.ventaboletos.dao.RutaSecuenciaDAO;
|
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.Ruta;
|
||||||
import com.rjconsultores.ventaboletos.entidad.RutaSecuencia;
|
import com.rjconsultores.ventaboletos.entidad.RutaSecuencia;
|
||||||
import com.rjconsultores.ventaboletos.service.RutaSecuenciaService;
|
import com.rjconsultores.ventaboletos.service.RutaSecuenciaService;
|
||||||
|
@ -66,4 +68,14 @@ public class RutaSecuenciaServiceImpl implements RutaSecuenciaService {
|
||||||
public int borrarSecuencias(Ruta ruta) {
|
public int borrarSecuencias(Ruta ruta) {
|
||||||
return rutaSecuenciaDAO.borrarSecuencias(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