AdmMono/src/com/rjconsultores/ventaboletos/service/impl/EsquemaAsientoServiceImpl.java

214 lines
7.5 KiB
Java
Raw Blame History

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.rjconsultores.ventaboletos.service.impl;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.rjconsultores.ventaboletos.dao.EsquemaAsientoDAO;
import com.rjconsultores.ventaboletos.dao.RutaSecuenciaDAO;
import com.rjconsultores.ventaboletos.entidad.DetDiagramaAutobus;
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.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.DiagramaAutobusService;
import com.rjconsultores.ventaboletos.service.EsquemaAsientoService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
/**
*
* @author Rafius
*/
@Service("esquemaAsientoService")
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;
private EsquemaAsiento suscribir(EsquemaAsiento entidad) {
entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
entidad.setFecmodif(Calendar.getInstance().getTime());
entidad.setActivo(Boolean.TRUE);
return esquemaAsientoDAO.suscribir(entidad);
}
@Transactional
public void borrar(EsquemaAsiento entidad) {
entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
entidad.setFecmodif(Calendar.getInstance().getTime());
entidad.setActivo(Boolean.FALSE);
esquemaAsientoDAO.actualizacion(entidad);
}
public List<EsquemaAsiento> obtenerPorCorrida(EsquemaCorrida esquemaCorrida) {
return esquemaAsientoDAO.obtenerPorCorrida(esquemaCorrida);
}
public EsquemaAsiento obtenerPorCorridaeAsiento(EsquemaCorrida esquemaCorrida, String asiento) {
return esquemaAsientoDAO.obtenerPorCorridaeAsiento(esquemaCorrida, asiento);
}
@Transactional(rollbackFor = BusinessException.class)
@Override
public void bloqueoAsientoExclusivo(EsquemaCorrida esquemaCorrida, String strAsiento, Parada origen, Integer tiempoLiberacion) throws BusinessException {
if (origen == null) {
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.origenObligatoria");
}
hacerBloqueo(BLOQUEO_EXCLUSIVO, esquemaCorrida, strAsiento, origen, null, null, tiempoLiberacion);
}
private boolean hacerBloqueo(String tipoBloqueo, EsquemaCorrida esquemaCorrida, String strAsiento, Parada origen, Parada destino, String motivoOcupacion, Integer tiempoLiberacion) throws BusinessException {
List<String> asientos = cargarAsientos(strAsiento);
DiagramaAutobus da = diagramaAutobusService.obtenerID(esquemaCorrida.getRolOperativo().getDiagramaAutobus().getDiagramaautobusId());
for (String asiento : asientos) {
boolean vende = true;
boolean existe = false;
List<DetDiagramaAutobus> listDda = da.getDetDiagramaAutobusList();
for (DetDiagramaAutobus dd : listDda) {
if (dd.getAsiento().equals(asiento)) {
existe = true;
if (!dd.getVendible()) {
vende = false;
}
}
}
if (!existe) {
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.invalido");
}
if (vende) {
EsquemaAsiento es = new EsquemaAsiento();
es.setActivo(Boolean.TRUE);
es.setFecmodif(Calendar.getInstance().getTime());
es.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
es.setNumasiento(asiento.toString());
if (tipoBloqueo.equals(BLOQUEO_EXCLUSIVO)) {
es.setIndvendible(Boolean.TRUE);
es.setParada(origen);
es.setTiempoLiberacion(tiempoLiberacion);
} else {
es.setIndvendible(Boolean.FALSE);
es.setParada(origen);
es.setDestino(destino);
es.setMotivobloqueo(motivoOcupacion);
}
es.setEsquemaCorrida(esquemaCorrida);
EsquemaAsiento esquemaAsientoBusqueda = obtenerPorCorridaeAsiento(esquemaCorrida, asiento);
if (esquemaAsientoBusqueda.getEsquemaasientoId() == null) {
es = suscribir(es);
// valida<64><61>o extra para garantir que salvou corretamente
if (tipoBloqueo.equals(BLOQUEO_EXCLUSIVO)) {
if (!(es.getIndvendible() && (es.getParada() != null) && (es.getDestino() == null))) {
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.validacionGrabacion");
}
} else {
// valida<64><61>o extra para garantir que salvou corretamente
if (!(!es.getIndvendible() && (es.getParada() != null) && (es.getDestino() != null))) {
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.validacionGrabacion");
}
}
} else {
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.poltronaJahConfigurada", new Object[] { asiento });
}
} else {
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.poltronaNoVendible", new Object[] { asiento });
}
}
return true;
}
@Transactional(rollbackFor = BusinessException.class)
@Override
public void bloqueoAsientoOcupacion(EsquemaCorrida esquemaCorrida, String strAsiento, Parada origen, Parada destino, String motivoOcupacion) throws BusinessException {
if (origen == null) {
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.origenObligatoria");
}
if (destino == null) {
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.destinoObligatoria");
}
if (StringUtils.isBlank(motivoOcupacion)) {
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.motivo");
}
if (!rutaSecuenciaDAO.paradaSecuenciaValida(esquemaCorrida.getRuta(), origen, destino)) {
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.tramo");
}
hacerBloqueo(BLOQUEO_OCUPACION, esquemaCorrida, strAsiento, origen, destino, motivoOcupacion, null);
}
/**
* Hace la conversion de la string strAsientos en una lista de asientos v<>lidos<br/>
*
* @param strAsientos
* @return
* @throws BusinessException
*/
private List<String> cargarAsientos(String strAsientos) throws BusinessException {
List<String> todosAsientos = new ArrayList<String>();
try {
String asientos[] = strAsientos.split(",");
for (int i = 0; i < asientos.length; i++) {
if (asientos[i].contains("-")) {
String intervalo[] = asientos[i].split("-");
Integer ini = Integer.parseInt(intervalo[0]);
Integer fim = Integer.parseInt(intervalo[1]);
while (ini <= fim) {
todosAsientos.add(ini.toString());
ini++;
}
} else {
Integer.parseInt(asientos[i]);// para validar
todosAsientos.add(asientos[i]);
}
}
} catch (NumberFormatException t) {
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.invalido");
} catch (Throwable t) {
log.error("", t);
throw new BusinessException("editarConfiguracionCorridaAsientoController.MSG.invalido");
}
return todosAsientos;
}
}