lucas.calixto 2017-03-07 17:10:58 +00:00
parent 01c08f02b4
commit c1e9250302
5 changed files with 178 additions and 16 deletions

View File

@ -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);
} }

View File

@ -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;
}
} }

View File

@ -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);
} }

View File

@ -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;
} }
} }

View File

@ -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);
}
} }