diff --git a/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java index 2d63dd7ee..e51b5df6e 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java @@ -443,332 +443,43 @@ public class CorridaServiceImpl implements CorridaService { @SuppressWarnings("deprecation") private Corrida generarCorrida(EsquemaCorrida esquemaCorrida, Date dataGeracao, boolean isPisoExtra, Boolean isFeriado) { - GregorianCalendar calendario = new GregorianCalendar(); - calendario.setTime(dataGeracao); - Integer diaSemana = calendario.get(Calendar.DAY_OF_WEEK); Corrida corrida = null; - - if (!vigenciaValida(esquemaCorrida, dataGeracao)) { - log.info("vigencia invalida=" + dataGeracao); - - return null; - } - - if (!((esquemaCorrida.getStatusCorrida() != null) && (esquemaCorrida.getStatusCorrida().equals("A") || esquemaCorrida.getStatusCorrida().equals("L")))) { - log.info("status corrida invalido=" + esquemaCorrida.getStatusCorrida()); - - return null; - } - - if (esquemaCorrida.getIndDiaSimDiaNao() == null || esquemaCorrida.getIndDiaSimDiaNao() == Boolean.FALSE) { - if (!temCorridaDiaSemana(diaSemana, esquemaCorrida, isFeriado)) { - log.info("dia semana no valido=" + diaSemana); - return null; - } - } - - if (!tramoServicioService.existenTiemposTramosEsquema(esquemaCorrida.getEsquemacorridaId())) { - log.info("nao foi cadastrado o tempo de todos os trechos do esquema corrida=" + esquemaCorrida.getEsquemacorridaId()); - return null; - } - try { - + + GregorianCalendar calendario = new GregorianCalendar(); + calendario.setTime(dataGeracao); + Integer diaSemana = calendario.get(Calendar.DAY_OF_WEEK); Ruta ruta = esquemaCorrida.getRuta(); ClaseServicio claseServicio = esquemaCorrida.getClaseServicio(); Marca marca = esquemaCorrida.getMarca(); Date horario = esquemaCorrida.getHorasalida(); horario = DateUtil.normalizar(horario); Integer numCorrida = esquemaCorrida.getNumCorrida(); - Corrida.Id id = new Corrida.Id(); - id.setCorridaId(numCorrida); id.setFeccorrida(DateUtil.normalizarToFecha(dataGeracao)); - - if (esquemaCorrida.getIndDiaSimDiaNao() != null && esquemaCorrida.getIndDiaSimDiaNao()) { - Calendar calendarData = Calendar.getInstance(); - calendarData.setTime(dataGeracao); - calendarData.add(Calendar.DATE, -1); - - Corrida.Id corridaOntem = new Corrida.Id(); - - corridaOntem.setCorridaId(numCorrida); - corridaOntem.setFeccorrida(DateUtil.normalizarToFecha(calendarData.getTime())); - - if (corridaDAO.existe(corridaOntem)) { - log.info("Esquema configurado para gerar dia sim dia não e já possui corrida gerado no dia anterior, por isso não está data: " + DateUtil.getStringDate(dataGeracao)); - return null; - } - } - - if (corridaDAO.existe(id)) { - log.info("corrida existe = " + numCorrida + ";" + ruta.getDescruta() + ";" + DateUtil.getStringDate(dataGeracao) + ";" + DateUtil.getStringDate(horario, "HH:mm") + ";" + claseServicio.getDescclase() + ";" + marca.getDescmarca() + " Piso: " + isPisoExtra); - return null; - } - - // Como o numCorrida corresponde ao corrida_id do corridaCtrl, ou seja, é chave primaria, temos que buscar somente por esse campo - // Caso o registro já exista, atualizamos os dados dele. - // Sendo assim, o que vai indicar a "duplicidade" de uma corrida será apenas o número dela e não mais o conjunto : clase + marca + horario + ruta - - CorridaCtrl corridaCtrl = corridaCtrlService.obtenerID(numCorrida); - - boolean novoRegistro = false; - - if (corridaCtrl == null) { - corridaCtrl = new CorridaCtrl(); - novoRegistro = true; - } - - corridaCtrl.setCorridaId(numCorrida); - corridaCtrl.setMarca(marca); - corridaCtrl.setRuta(ruta); - corridaCtrl.setClaseServicio(claseServicio); - corridaCtrl.setHorario(horario); - - // parada origem - Parada origen = rutaService.getOrigem(ruta); - if (origen == null) { - log.info("origen nao encontrado para a ruta = " + ruta.getRutaId()); - } - corridaCtrl.setNodo((origen == null) ? null : origen.getNodo()); - - corridaCtrl.setActivo(Boolean.TRUE); - corridaCtrl.setFecmodif(Calendar.getInstance().getTime()); - - if (UsuarioLogado.getUsuarioLogado() != null) { - corridaCtrl.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); - } - - corridaCtrl.setPisoExtra(isPisoExtra); - if (novoRegistro) { - corridaCtrl = corridaCtrlService.suscribir(corridaCtrl); - } else { - corridaCtrl = corridaCtrlService.actualizacion(corridaCtrl); - } - - corrida = new Corrida(); - corrida.setId(id); - corrida.setEsquemaCorrida(esquemaCorrida); - corrida.setCorridaCtrl(corridaCtrl); - corrida.setAutobus(esquemaCorrida.getAutoBus()!= null ? esquemaCorrida.getAutoBus() : null); - corrida.setClaseServicio(corridaCtrl.getClaseServicio()); - corrida.setConductor(null); - if (esquemaCorrida.getIndCorridaExtra()) { - corrida.setTipoServicio(new Short("2")); - } else { - corrida.setTipoServicio(new Short("1")); - } - corrida.setInfoCorrida(esquemaCorrida.getInfoCorrida()); - Integer cantparados = esquemaCorrida.getCantparados(); - if (cantparados != null) { - corrida.setCantParados(cantparados.shortValue()); - } - - corrida.setEsquemaAgrupacionId(esquemaCorrida.getEsquemaAgrupacionId()); - - corrida.setEmpresa(esquemaCorrida.getEmpresa()); - corrida.setEmpresa1(esquemaCorrida.getEmpresa1()); - - corrida.setFechorsalida(truncarDataHora(dataGeracao, esquemaCorrida.getHorasalida())); - corrida.setFechorSalidaOriginal(corrida.getFechorsalida()); - - if (esquemaCorrida.getStatusCorrida().equals("A")) { - corrida.setIndstatuscorrida("H"); - corrida.setActivo(ActivoUtil.ATIVO); - } else if (esquemaCorrida.getStatusCorrida().equals("L")) { - corrida.setIndstatuscorrida("P"); - corrida.setActivo(ActivoUtil.INATIVO); - } - - corrida.setMarca(esquemaCorrida.getMarca()); - corrida.setNodo(corridaCtrl.getNodo()); - corrida.setDivision(esquemaCorrida.getDivision()); - corrida.setRuta(esquemaCorrida.getRuta()); - -// corrida.setRuta(corridaCtrl.getRuta()); - corrida.setRolOperativo(esquemaCorrida.getRolOperativo()); - corrida.setZona(null); - - // corrida Tramo: - List lsCorridaTramo = new ArrayList(); - Integer numSec = 1; List lsEsquemaTramo = esquemaTramoService.obtenerPorEsquemaCorridaOrderNumSec(esquemaCorrida); - Date horaChegadaAnterior = null; - - Date husoHorVeranoLlegadaAnterior = null; - - if (lsEsquemaTramo == null) { - return null; - } - - EsquemaTramo primeiro = lsEsquemaTramo.get(0); - Parada origem = primeiro.getTramo().getOrigem(); - if (origem == null) { - return null; - } - corrida.setOrigem(origem); - - EsquemaTramo ultimo = lsEsquemaTramo.get(lsEsquemaTramo.size() - 1); - Parada destino = ultimo.getTramo().getDestino(); - if (destino == null) { - return null; - } - corrida.setDestino(destino); - if(esquemaCorrida.getIsFlexBus()) { - corrida.setOcupacaoMinima(esquemaCorrida.getOcupacaoMinima()); - corrida.setHorasParaConfirmacao(esquemaCorrida.getHorasParaConfirmacao()); - corrida.setMinutosParaConfirmacao(esquemaCorrida.getMinutosParaConfirmacao()); - corrida.setIsFlexBus(Boolean.TRUE); - - corrida.setStatusFlexBus(StatusFlexBus.EM_RESERVA.getStatus()); + if(!realizaValidacoesGerais(esquemaCorrida, dataGeracao, diaSemana, isFeriado, ruta, id, numCorrida, horario, claseServicio, marca, isPisoExtra, lsEsquemaTramo)) { + return null; } - - for (EsquemaTramo esquemaTramo : lsEsquemaTramo) { - - CorridaTramo corridaTramo = new CorridaTramo(); - corridaTramo.setAutobus(esquemaCorrida.getAutoBus()!= null ? esquemaCorrida.getAutoBus() : null); - corridaTramo.setConductor(null); - corridaTramo.setConductor1(null); - corridaTramo.setPlataforma(esquemaTramo.getPlataforma()); - corridaTramo.setTipoPassagem(esquemaTramo.getTipoPassagem()); + Parada origemCorrida = lsEsquemaTramo.get(0).getTramo().getOrigem(); + + Parada destinoCorrida = lsEsquemaTramo.get(lsEsquemaTramo.size() - 1).getTramo().getDestino(); - corridaTramo.setTiempoEstancia(esquemaTramo.getTiempoEstancia()); + /* Como o numCorrida corresponde ao corrida_id do corridaCtrl, ou seja, é chave primaria, temos que buscar somente por esse campo + Caso o registro já exista, atualizamos os dados dele. Sendo assim, o que vai indicar a "duplicidade" de uma corrida será apenas o número dela e não mais o conjunto : clase + marca + horario + ruta*/ - // numSec: 1-2, 2-3, 3-4... - corridaTramo.setNumsecorigen(numSec.shortValue()); - numSec = numSec + 1; - corridaTramo.setNumsecdestino(numSec.shortValue()); + CorridaCtrl corridaCtrl = criaCorridaCtrl(isPisoExtra, ruta, claseServicio, marca, horario, numCorrida); - Calendar salida = Calendar.getInstance(); - Date fecHorSalida = calcularFechorsalida(esquemaTramo, dataGeracao, horaChegadaAnterior, esquemaTramo.getTiempoEstancia()); - salida.setTime(fecHorSalida); - salida.set(salida.get(Calendar.YEAR), salida.get(Calendar.MONTH), salida.get(Calendar.DATE), - salida.get(Calendar.HOUR_OF_DAY), salida.get(Calendar.MINUTE), NumberUtils.INTEGER_ZERO); - corridaTramo.setFechorsalida(salida.getTime()); - - Calendar llegada = Calendar.getInstance(); - Date fecHorallegada = calcularFechorllegada(esquemaTramo, corrida.getClaseServicio(), dataGeracao, fecHorSalida); - llegada.setTime(fecHorallegada); - llegada.set(llegada.get(Calendar.YEAR), llegada.get(Calendar.MONTH), llegada.get(Calendar.DATE), - llegada.get(Calendar.HOUR_OF_DAY), llegada.get(Calendar.MINUTE), NumberUtils.INTEGER_ZERO); - corridaTramo.setFechorllegada(llegada.getTime()); - - horaChegadaAnterior = fecHorallegada; - - corridaTramo.setFechortarjetaviaje(null); - corridaTramo.setNodo(corridaCtrl.getNodo()); - - corridaTramo.setNumsecuencia(esquemaTramo.getNumsecuencia()); - Tramo tramo = esquemaTramo.getTramo(); - if (tramo != null) { - corridaTramo.setOrigem(tramo.getOrigem()); - corridaTramo.setDestino(tramo.getDestino()); - } - corridaTramo.setTramo(tramo); - corridaTramo.setUsuariotarjetaviajeId(null); - - Date excepcionTiempo = arreglaExcepcionTiempo(corridaTramo, corrida.getClaseServicio()); - if (excepcionTiempo != null) { - corridaTramo.setFechorllegada(excepcionTiempo); - horaChegadaAnterior = excepcionTiempo; - } - - if (esquemaCorrida.getStatusCorrida().equals("A")) { - corridaTramo.setActivo(ActivoUtil.ATIVO); - } else if (esquemaCorrida.getStatusCorrida().equals("L")) { - corridaTramo.setActivo(ActivoUtil.INATIVO); - } - // - corridaTramo.setFecmodif(Calendar.getInstance().getTime()); - if (UsuarioLogado.getUsuarioLogado() != null) { - corridaTramo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); - } - corridaTramo.setCorrida(corrida); - corridaTramo.setFechorSalidaOriginal(fecHorSalida); - - if (husoHorVeranoLlegadaAnterior == null) { - corridaTramo.setFechorsalidaH(corridaTramo.getFechorsalida()); - } else { - - // Ajusta tambem o tempo de instancia do calculo do horario de verao - if (esquemaTramo.getTiempoEstancia() != null) { - GregorianCalendar tmp = new GregorianCalendar(); - tmp.setTime(husoHorVeranoLlegadaAnterior); - - tmp.add(Calendar.MINUTE, esquemaTramo.getTiempoEstancia().getMinutes()); - tmp.add(Calendar.HOUR_OF_DAY, esquemaTramo.getTiempoEstancia().getHours()); - - log.debug("Tempo Recorrido H + Estancia: " + sdf.format(tmp.getTime())); - - husoHorVeranoLlegadaAnterior = tmp.getTime(); - - } - - corridaTramo.setFechorsalidaH(husoHorVeranoLlegadaAnterior); - } - - husoHorVeranoLlegadaAnterior = calcularHusoHorVeranoLlegada(esquemaTramo, corridaTramo); - - if (husoHorVeranoLlegadaAnterior != null) { - corridaTramo.setFechorllegadaH(husoHorVeranoLlegadaAnterior); - corridaTramo.setFechorSalidaOriginalH(husoHorVeranoLlegadaAnterior); - } else { - corridaTramo.setFechorllegadaH(corridaTramo.getFechorllegada()); - corridaTramo.setFechorSalidaOriginalH(corridaTramo.getFechorSalidaOriginal()); - } - - if (numSec == 1) { - corrida.setFechorSalidaOriginalH(corridaTramo.getFechorsalidaH()); - } - - lsCorridaTramo.add(corridaTramo); - } - corrida.setCorridaTramoList(lsCorridaTramo); - // - corrida.setFecmodif(Calendar.getInstance().getTime()); - if (UsuarioLogado.getUsuarioLogado() != null) { - corrida.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); - } else { - corrida.setUsuarioId(1); - } - corrida.setIndTipoVenta(null); - corrida.setCodProdutoFiscal(UtiliteriasFiscal.defineCodigoProduto(corrida.getOrigem().getParadaId(), corrida.getDestino().getParadaId(), corrida.getRuta().getRutaId())); - corrida = corridaDAO.suscribir(corrida); + corrida = criaCorrida(esquemaCorrida, dataGeracao, id, lsEsquemaTramo, origemCorrida, destinoCorrida, + corridaCtrl); cantCorridaGenerada++; - List lsEsquemaAsiento = esquemaAsientoService.obtenerPorCorrida(esquemaCorrida); - for (EsquemaAsiento ea : lsEsquemaAsiento) { - DetDiagramaAutobus detDiagramaAutobus = detDiagramaAutobusService.obtenerPorDiagramaAutobusAsiento(esquemaCorrida.getDiagramaAutobusId(), ea.getNumasiento()); - if (detDiagramaAutobus != null && detDiagramaAutobus.getVendible()) { - AsientoExclusivo asientoExclusivo = new AsientoExclusivo(); - asientoExclusivo.setCorrida(corrida); - asientoExclusivo.setMotivobloqueo(null); - asientoExclusivo.setNodo(corrida.getNodo()); - asientoExclusivo.setNumasiento(ea.getNumasiento()); - asientoExclusivo.setVendible(ea.getIndvendible()); - asientoExclusivo.setParada(ea.getParada()); - asientoExclusivo.setTiempoLiberacion(ea.getTiempoLiberacion()); - if (ea.getIndvendible()) { - asientoExclusivo.setMotivobloqueo(null); - } else { - asientoExclusivo.setMotivobloqueo(ea.getMotivobloqueo()); - asientoExclusivo.setDestino(ea.getDestino()); - } - - asientoExclusivo.setActivo(Boolean.TRUE); - asientoExclusivo.setFecmodif(Calendar.getInstance().getTime()); - if (UsuarioLogado.getUsuarioLogado() != null) { - asientoExclusivo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); - } - - asientoExclusivo = asientoExclusivoService.suscribir(asientoExclusivo); - } - } + criaAssentoExclusivo(esquemaCorrida, corrida); } catch (Exception ex) { log.error("", ex); @@ -777,6 +488,354 @@ public class CorridaServiceImpl implements CorridaService { return corrida; } + private Corrida criaCorrida(EsquemaCorrida esquemaCorrida, Date dataGeracao, Corrida.Id id, + List lsEsquemaTramo, Parada origemCorrida, Parada destinoCorrida, CorridaCtrl corridaCtrl) { + Corrida corrida; + corrida = new Corrida(); + corrida.setId(id); + corrida.setEsquemaCorrida(esquemaCorrida); + corrida.setCorridaCtrl(corridaCtrl); + corrida.setAutobus(esquemaCorrida.getAutoBus()!= null ? esquemaCorrida.getAutoBus() : null); + corrida.setClaseServicio(corridaCtrl.getClaseServicio()); + corrida.setConductor(null); + if (esquemaCorrida.getIndCorridaExtra()) { + corrida.setTipoServicio(new Short("2")); + } else { + corrida.setTipoServicio(new Short("1")); + } + corrida.setInfoCorrida(esquemaCorrida.getInfoCorrida()); + Integer cantparados = esquemaCorrida.getCantparados(); + if (cantparados != null) { + corrida.setCantParados(cantparados.shortValue()); + } + + corrida.setEsquemaAgrupacionId(esquemaCorrida.getEsquemaAgrupacionId()); + + corrida.setEmpresa(esquemaCorrida.getEmpresa()); + corrida.setEmpresa1(esquemaCorrida.getEmpresa1()); + + corrida.setFechorsalida(truncarDataHora(dataGeracao, esquemaCorrida.getHorasalida())); + corrida.setFechorSalidaOriginal(corrida.getFechorsalida()); + + if (esquemaCorrida.getStatusCorrida().equals("A")) { + corrida.setIndstatuscorrida("H"); + corrida.setActivo(ActivoUtil.ATIVO); + } else if (esquemaCorrida.getStatusCorrida().equals("L")) { + corrida.setIndstatuscorrida("P"); + corrida.setActivo(ActivoUtil.INATIVO); + } + + corrida.setMarca(esquemaCorrida.getMarca()); + corrida.setNodo(corridaCtrl.getNodo()); + corrida.setDivision(esquemaCorrida.getDivision()); + corrida.setRuta(esquemaCorrida.getRuta()); + corrida.setRolOperativo(esquemaCorrida.getRolOperativo()); + corrida.setZona(null); + corrida.setOrigem(origemCorrida); + corrida.setDestino(destinoCorrida); + + validaFlexBus(esquemaCorrida, corrida); + + List lsCorridaTramo = criaCorridaTramoList(esquemaCorrida, dataGeracao, corrida, lsEsquemaTramo, corridaCtrl); + + corrida.setCorridaTramoList(lsCorridaTramo); + + corrida.setFecmodif(Calendar.getInstance().getTime()); + + if (UsuarioLogado.getUsuarioLogado() != null) { + corrida.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); + } else { + corrida.setUsuarioId(1); + } + corrida.setIndTipoVenta(null); + corrida.setCodProdutoFiscal(UtiliteriasFiscal.defineCodigoProduto(corrida.getOrigem().getParadaId(), corrida.getDestino().getParadaId(), corrida.getRuta().getRutaId())); + corrida = corridaDAO.suscribir(corrida); + return corrida; + } + + private CorridaCtrl criaCorridaCtrl(boolean isPisoExtra, Ruta ruta, ClaseServicio claseServicio, Marca marca, + Date horario, Integer numCorrida) { + CorridaCtrl corridaCtrl = corridaCtrlService.obtenerID(numCorrida); + + boolean novoRegistro = false; + + if (corridaCtrl == null) { + corridaCtrl = new CorridaCtrl(); + novoRegistro = true; + } + + corridaCtrl.setCorridaId(numCorrida); + corridaCtrl.setMarca(marca); + corridaCtrl.setRuta(ruta); + corridaCtrl.setClaseServicio(claseServicio); + corridaCtrl.setHorario(horario); + + // parada origem + Parada origen = rutaService.getOrigem(ruta); + if (origen == null) { + log.info("origen nao encontrado para a ruta = " + ruta.getRutaId()); + } + corridaCtrl.setNodo((origen == null) ? null : origen.getNodo()); + + corridaCtrl.setActivo(Boolean.TRUE); + corridaCtrl.setFecmodif(Calendar.getInstance().getTime()); + + if (UsuarioLogado.getUsuarioLogado() != null) { + corridaCtrl.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); + } + + corridaCtrl.setPisoExtra(isPisoExtra); + + if (novoRegistro) { + corridaCtrl = corridaCtrlService.suscribir(corridaCtrl); + } else { + corridaCtrl = corridaCtrlService.actualizacion(corridaCtrl); + } + return corridaCtrl; + } + + private List criaCorridaTramoList(EsquemaCorrida esquemaCorrida, Date dataGeracao, Corrida corrida, + List lsEsquemaTramo, CorridaCtrl corridaCtrl) { + List lsCorridaTramo = new ArrayList(); + Date horaChegadaAnterior = null; + Date husoHorVeranoLlegadaAnterior = null; + Integer numSec = 1; + for (EsquemaTramo esquemaTramo : lsEsquemaTramo) { + + CorridaTramo corridaTramo = new CorridaTramo(); + + corridaTramo.setAutobus(esquemaCorrida.getAutoBus()!= null ? esquemaCorrida.getAutoBus() : null); + corridaTramo.setConductor(null); + corridaTramo.setConductor1(null); + corridaTramo.setPlataforma(esquemaTramo.getPlataforma()); + corridaTramo.setTipoPassagem(esquemaTramo.getTipoPassagem()); + + corridaTramo.setTiempoEstancia(esquemaTramo.getTiempoEstancia()); + + // numSec: 1-2, 2-3, 3-4... + corridaTramo.setNumsecorigen(numSec.shortValue()); + numSec = numSec + 1; + corridaTramo.setNumsecdestino(numSec.shortValue()); + + Date fecHorSalida = calcularFechorsalida(esquemaTramo, dataGeracao, horaChegadaAnterior, esquemaTramo.getTiempoEstancia()); + corridaTramo.setFechorsalida( getCalendarFechorSalida(fecHorSalida).getTime()); + + Date fecHorallegada = calcularFechorllegada(esquemaTramo, corrida.getClaseServicio(), dataGeracao, fecHorSalida); + corridaTramo.setFechorllegada(getCalendarFechorllegada(fecHorallegada).getTime()); + + horaChegadaAnterior = fecHorallegada; + + corridaTramo.setFechortarjetaviaje(null); + corridaTramo.setNodo(corridaCtrl.getNodo()); + + corridaTramo.setNumsecuencia(esquemaTramo.getNumsecuencia()); + Tramo tramo = esquemaTramo.getTramo(); + if (tramo != null) { + corridaTramo.setOrigem(tramo.getOrigem()); + corridaTramo.setDestino(tramo.getDestino()); + } + corridaTramo.setTramo(tramo); + corridaTramo.setUsuariotarjetaviajeId(null); + + Date excepcionTiempo = arreglaExcepcionTiempo(corridaTramo, corrida.getClaseServicio()); + if (excepcionTiempo != null) { + corridaTramo.setFechorllegada(excepcionTiempo); + horaChegadaAnterior = excepcionTiempo; + } + + if (esquemaCorrida.getStatusCorrida().equals("A")) { + corridaTramo.setActivo(ActivoUtil.ATIVO); + } else if (esquemaCorrida.getStatusCorrida().equals("L")) { + corridaTramo.setActivo(ActivoUtil.INATIVO); + } + // + corridaTramo.setFecmodif(Calendar.getInstance().getTime()); + if (UsuarioLogado.getUsuarioLogado() != null) { + corridaTramo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); + } + corridaTramo.setCorrida(corrida); + corridaTramo.setFechorSalidaOriginal(fecHorSalida); + + if (husoHorVeranoLlegadaAnterior == null) { + corridaTramo.setFechorsalidaH(corridaTramo.getFechorsalida()); + } else { + + // Ajusta tambem o tempo de instancia do calculo do horario de verao + if (esquemaTramo.getTiempoEstancia() != null) { + GregorianCalendar tmp = new GregorianCalendar(); + tmp.setTime(husoHorVeranoLlegadaAnterior); + + tmp.add(Calendar.MINUTE, esquemaTramo.getTiempoEstancia().getMinutes()); + tmp.add(Calendar.HOUR_OF_DAY, esquemaTramo.getTiempoEstancia().getHours()); + + log.debug("Tempo Recorrido H + Estancia: " + sdf.format(tmp.getTime())); + + husoHorVeranoLlegadaAnterior = tmp.getTime(); + + } + + corridaTramo.setFechorsalidaH(husoHorVeranoLlegadaAnterior); + } + + husoHorVeranoLlegadaAnterior = calcularHusoHorVeranoLlegada(esquemaTramo, corridaTramo); + + if (husoHorVeranoLlegadaAnterior != null) { + corridaTramo.setFechorllegadaH(husoHorVeranoLlegadaAnterior); + corridaTramo.setFechorSalidaOriginalH(husoHorVeranoLlegadaAnterior); + } else { + corridaTramo.setFechorllegadaH(corridaTramo.getFechorllegada()); + corridaTramo.setFechorSalidaOriginalH(corridaTramo.getFechorSalidaOriginal()); + } + + if (numSec == 1) { + corrida.setFechorSalidaOriginalH(corridaTramo.getFechorsalidaH()); + } + + lsCorridaTramo.add(corridaTramo); + + } + return lsCorridaTramo; + } + + private void validaFlexBus(EsquemaCorrida esquemaCorrida, Corrida corrida) { + if(esquemaCorrida.getIsFlexBus()) { + corrida.setOcupacaoMinima(esquemaCorrida.getOcupacaoMinima()); + corrida.setHorasParaConfirmacao(esquemaCorrida.getHorasParaConfirmacao()); + corrida.setMinutosParaConfirmacao(esquemaCorrida.getMinutosParaConfirmacao()); + corrida.setIsFlexBus(Boolean.TRUE); + + corrida.setStatusFlexBus(StatusFlexBus.EM_RESERVA.getStatus()); + } + } + + private Boolean realizaValidacoesGerais(EsquemaCorrida esquemaCorrida, Date dataGeracao, Integer diaSemana, Boolean isFeriado, + Ruta ruta, Corrida.Id id, Integer numCorrida, Date horario, ClaseServicio claseServicio, Marca marca, Boolean isPisoExtra, List lsEsquemaTramo){ + Integer corridaId = esquemaCorrida.getNumCorrida(); + String fecCorrida = DateUtil.getStringDate(horario); + if (!vigenciaValida(esquemaCorrida, dataGeracao)) { + log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + " vigencia invalida=" + dataGeracao); + return Boolean.FALSE; + } + + if (!((esquemaCorrida.getStatusCorrida() != null) && (esquemaCorrida.getStatusCorrida().equals("A") || esquemaCorrida.getStatusCorrida().equals("L")))) { + log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + "status corrida invalido=" + esquemaCorrida.getStatusCorrida()); + return Boolean.FALSE; + } + + if (esquemaCorrida.getIndDiaSimDiaNao() == null || esquemaCorrida.getIndDiaSimDiaNao() == Boolean.FALSE) { + if (!temCorridaDiaSemana(diaSemana, esquemaCorrida, isFeriado)) { + log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + "dia semana no valido=" + diaSemana); + return Boolean.FALSE; + } + } + + if (!tramoServicioService.existenTiemposTramosEsquema(esquemaCorrida.getEsquemacorridaId())) { + log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida +". Nao foi cadastrado o tempo de todos os trechos do esquema corrida=" + esquemaCorrida.getEsquemacorridaId()); + return Boolean.FALSE; + } + + if(!validaCorridaDiaSimDiaNao(esquemaCorrida, dataGeracao, numCorrida)) { + return Boolean.FALSE; + } + + if (corridaDAO.existe(id)) { + log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". corrida existe = " + numCorrida + ";" + ruta.getDescruta() + ";" + DateUtil.getStringDate(dataGeracao) + ";" + DateUtil.getStringDate(horario, "HH:mm") + ";" + claseServicio.getDescclase() + ";" + marca.getDescmarca() + " Piso: " + isPisoExtra); + return Boolean.FALSE; + } + + if (lsEsquemaTramo == null || lsEsquemaTramo.isEmpty()) { + log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". Não contem trechos (EsquemaTramo nulo ou vazio)"); + return Boolean.FALSE; + } + + EsquemaTramo primeiroTrechoCorrida = lsEsquemaTramo.get(0); + Parada origemCorrida = primeiroTrechoCorrida.getTramo().getOrigem(); + if (origemCorrida == null) { + log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". Origem não preenchido (Primeiro trecho EsquemaTramo)"); + return Boolean.FALSE; + } + + EsquemaTramo ultimoTrechoCorrida = lsEsquemaTramo.get(lsEsquemaTramo.size() - 1); + Parada destinoCorrida = ultimoTrechoCorrida.getTramo().getDestino(); + if (destinoCorrida == null) { + log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". Destino não preenchido (Último trecho EsquemaTramo)"); + return Boolean.FALSE; + } + + if(marca !=null && Boolean.FALSE.equals(marca.getActivo())){ + log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". MarcaId=" + marca.getMarcaId() +" inativa, corrida não pode ser gerada"); + return Boolean.FALSE; + } + + return Boolean.TRUE; + } + + private Boolean validaCorridaDiaSimDiaNao(EsquemaCorrida esquemaCorrida, Date dataGeracao, Integer numCorrida ){ + if (Boolean.TRUE.equals(esquemaCorrida.getIndDiaSimDiaNao())) { + Calendar calendarData = Calendar.getInstance(); + calendarData.setTime(dataGeracao); + calendarData.add(Calendar.DATE, -1); + + Corrida.Id corridaOntem = new Corrida.Id(); + + corridaOntem.setCorridaId(numCorrida); + corridaOntem.setFeccorrida(DateUtil.normalizarToFecha(calendarData.getTime())); + + if (corridaDAO.existe(corridaOntem)) { + log.info("Esquema configurado para gerar dia sim dia não e já possui corrida gerado no dia anterior, por isso não está data: " + DateUtil.getStringDate(dataGeracao)); + return Boolean.FALSE; + } + } + return Boolean.TRUE; + } + + private Calendar getCalendarFechorllegada(Date fecHorallegada) { + Calendar llegada = Calendar.getInstance(); + llegada.setTime(fecHorallegada); + llegada.set(llegada.get(Calendar.YEAR), llegada.get(Calendar.MONTH), llegada.get(Calendar.DATE), + llegada.get(Calendar.HOUR_OF_DAY), llegada.get(Calendar.MINUTE), NumberUtils.INTEGER_ZERO); + return llegada; + } + + private Calendar getCalendarFechorSalida(Date fecHorSalida) { + Calendar salida = Calendar.getInstance(); + salida.setTime(fecHorSalida); + salida.set(salida.get(Calendar.YEAR), salida.get(Calendar.MONTH), salida.get(Calendar.DATE), + salida.get(Calendar.HOUR_OF_DAY), salida.get(Calendar.MINUTE), NumberUtils.INTEGER_ZERO); + return salida; + } + + private void criaAssentoExclusivo(EsquemaCorrida esquemaCorrida, Corrida corrida) { + List lsEsquemaAsiento = esquemaAsientoService.obtenerPorCorrida(esquemaCorrida); + for (EsquemaAsiento ea : lsEsquemaAsiento) { + DetDiagramaAutobus detDiagramaAutobus = detDiagramaAutobusService.obtenerPorDiagramaAutobusAsiento(esquemaCorrida.getDiagramaAutobusId(), ea.getNumasiento()); + if (detDiagramaAutobus != null && detDiagramaAutobus.getVendible()) { + AsientoExclusivo asientoExclusivo = new AsientoExclusivo(); + asientoExclusivo.setCorrida(corrida); + asientoExclusivo.setMotivobloqueo(null); + asientoExclusivo.setNodo(corrida.getNodo()); + asientoExclusivo.setNumasiento(ea.getNumasiento()); + asientoExclusivo.setVendible(ea.getIndvendible()); + asientoExclusivo.setParada(ea.getParada()); + asientoExclusivo.setTiempoLiberacion(ea.getTiempoLiberacion()); + if (ea.getIndvendible()) { + asientoExclusivo.setMotivobloqueo(null); + } else { + asientoExclusivo.setMotivobloqueo(ea.getMotivobloqueo()); + asientoExclusivo.setDestino(ea.getDestino()); + } + + asientoExclusivo.setActivo(Boolean.TRUE); + asientoExclusivo.setFecmodif(Calendar.getInstance().getTime()); + if (UsuarioLogado.getUsuarioLogado() != null) { + asientoExclusivo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); + } + + asientoExclusivo = asientoExclusivoService.suscribir(asientoExclusivo); + } + } + } + private Date calcularHusoHorVeranoLlegada(EsquemaTramo esquemaTramo, CorridaTramo corridaTramo) { Ciudad ciudadOrigen = esquemaTramo.getTramo().getOrigem().getCiudad(); @@ -898,9 +957,7 @@ public class CorridaServiceImpl implements CorridaService { corridaPisoExtra = null; corridaPisoExtra2 = null; - if (corrida == null) {// Si no genera la corrida, no va a - // generar el rebote - log.info("No fue generado corrida. Esquema " + esquemaCorrida.getEsquemacorridaId() + " Data" + dataGeracao); + if (corrida == null) { corridaGerada = false; continue; } @@ -957,78 +1014,8 @@ public class CorridaServiceImpl implements CorridaService { } if (esquemaCorrida.getEsquemaCorridaRebote() != null) { - log.info("Corrida Rebote=" + esquemaCorrida.getEsquemacorridaId()); - - Corrida corridaRebote = generarCorrida(esquemaCorrida.getEsquemaCorridaRebote(), dataGeracao, false, isFeriado); - Corrida corridaPisoExtraRebote = null; - boolean generaReboteDiaSeguinte = false; - - if (corridaRebote != null) { - EsquemaCorrida ecRebote = esquemaCorrida.getEsquemaCorridaRebote(); - if (ecRebote.getPisoExtra() != null && ecRebote.getPisoExtra()) { - - EsquemaCorrida esquemaCorridaSegundoPiso = esquemaCorridaDAO.buscarPeloNumCorrida(ecRebote.getNumCorridaPisoExtra()); - - log.info(String.format("Esquema/Corrida primeiro piso: %s/%s ; Esquema/Corrida segundo piso: %s/%s ",ecRebote.getEsquemacorridaId(),ecRebote.getNumCorrida(), esquemaCorridaSegundoPiso.getEsquemacorridaId(),esquemaCorridaSegundoPiso.getNumCorrida() )); - - corridaPisoExtraRebote = generarCorrida(esquemaCorridaSegundoPiso, dataGeracao, true, isFeriado); - - if (corridaRebote != null && corridaPisoExtraRebote != null) { - // Salvando Referencia da Corrida no piso extra - corridaPisoExtraRebote.setCorridaPiso(corridaRebote); - corridaPisoExtraRebote.setNumPiso(2); - corridaPisoExtraRebote = corridaDAO.actualizacion(corridaPisoExtraRebote); - - // Referencia do Piso extra na Corrida - corridaRebote.setCorridaPiso(corridaPisoExtraRebote); - corridaRebote.setNumPiso(1); - corridaRebote = corridaDAO.actualizacion(corridaRebote); - } - } - // RebotePisoExtra - if (DateUtil.compareDate(corrida.getFechorsalida(), corridaRebote.getFechorsalida()) > 0) { - generaReboteDiaSeguinte = true; // si fue generado - // con una - // fechamenor tienes - // que generar para - // el dia seguinte - } - } else { - generaReboteDiaSeguinte = true;// si no fue encontrado - // para el dia de - // hoy,genera para - // manhana - } - - if (generaReboteDiaSeguinte) { - log.info("Haciendo la busqueda por el esquema rebote para el dia seguiente pues ya existe al dia de hoy"); - - corridaRebote = generarReboteDiaSeguinte(esquemaCorrida, dataGeracao); - - if (corridaPisoExtraRebote != null) { - corridaPisoExtraRebote = generarReboteDiaSeguinte(esquemaCorrida, dataGeracao); - } - - if (corridaRebote == null) { - log.info("No fue posible generar la corrida rebote. No fue encontrado esquema para la fecha del dia seguinte a " + dataGeracao); - } - } - if (corridaRebote != null) { - log.info("Rebote generado=" + corridaRebote.getId()); - corrida.setCorridaRebote(corridaRebote); - corridaDAO.actualizacion(corrida); - } - if (corridaPisoExtraRebote != null && corridaPisoExtra != null) { - log.info("Rebote Piso Extra Generado=" + corridaPisoExtraRebote.getId()); - corridaPisoExtra.setCorridaRebote(corridaPisoExtraRebote); - corridaDAO.actualizacion(corridaPisoExtra); - } - - if (corridaPisoExtraRebote != null && corridaPisoExtra2 != null) { - log.info("Rebote Piso Extra Generado=" + corridaPisoExtraRebote.getId()); - corridaPisoExtra2.setCorridaRebote(corridaPisoExtraRebote); - corridaDAO.actualizacion(corridaPisoExtra2); - } + criaCorridaRebote(dataGeracao, corrida, corridaPisoExtra, corridaPisoExtra2, esquemaCorrida, + isFeriado); } @@ -1039,7 +1026,7 @@ public class CorridaServiceImpl implements CorridaService { status = transactionManager.getTransaction(def); } - } // for (EsquemaCorrida esquemaCorrida : lsEsquemaCorrida) + } } finally { if ((status != null) && (!status.isCompleted())) { transactionManager.commit(status); @@ -1055,6 +1042,76 @@ public class CorridaServiceImpl implements CorridaService { return corridaGerada; } + private void criaCorridaRebote(Date dataGeracao, Corrida corrida, Corrida corridaPisoExtra, + Corrida corridaPisoExtra2, EsquemaCorrida esquemaCorrida, Boolean isFeriado) { + log.info("Corrida Rebote=" + esquemaCorrida.getEsquemacorridaId()); + + Corrida corridaRebote = generarCorrida(esquemaCorrida.getEsquemaCorridaRebote(), dataGeracao, false, isFeriado); + Corrida corridaPisoExtraRebote = null; + boolean generaReboteDiaSeguinte = false; + + if (corridaRebote != null) { + EsquemaCorrida ecRebote = esquemaCorrida.getEsquemaCorridaRebote(); + if (ecRebote.getPisoExtra() != null && ecRebote.getPisoExtra()) { + + EsquemaCorrida esquemaCorridaSegundoPiso = esquemaCorridaDAO.buscarPeloNumCorrida(ecRebote.getNumCorridaPisoExtra()); + + log.info(String.format("Esquema/Corrida primeiro piso: %s/%s ; Esquema/Corrida segundo piso: %s/%s ",ecRebote.getEsquemacorridaId(),ecRebote.getNumCorrida(), esquemaCorridaSegundoPiso.getEsquemacorridaId(),esquemaCorridaSegundoPiso.getNumCorrida() )); + + corridaPisoExtraRebote = generarCorrida(esquemaCorridaSegundoPiso, dataGeracao, true, isFeriado); + + if (corridaRebote != null && corridaPisoExtraRebote != null) { + // Salvando Referencia da Corrida no piso extra + corridaPisoExtraRebote.setCorridaPiso(corridaRebote); + corridaPisoExtraRebote.setNumPiso(2); + corridaPisoExtraRebote = corridaDAO.actualizacion(corridaPisoExtraRebote); + + // Referencia do Piso extra na Corrida + corridaRebote.setCorridaPiso(corridaPisoExtraRebote); + corridaRebote.setNumPiso(1); + corridaRebote = corridaDAO.actualizacion(corridaRebote); + } + } + // RebotePisoExtra + if (DateUtil.compareDate(corrida.getFechorsalida(), corridaRebote.getFechorsalida()) > 0) { + generaReboteDiaSeguinte = true; // si fue generado con una fechamenor tienes que generar para el dia seguinte + } + } else { + generaReboteDiaSeguinte = true;// si no fue encontrado para el dia de hoy,genera para manhana + } + + if (generaReboteDiaSeguinte) { + log.info("Haciendo la busqueda por el esquema rebote para el dia seguiente pues ya existe al dia de hoy"); + + corridaRebote = generarReboteDiaSeguinte(esquemaCorrida, dataGeracao); + + if (corridaPisoExtraRebote != null) { + corridaPisoExtraRebote = generarReboteDiaSeguinte(esquemaCorrida, dataGeracao); + } + + if (corridaRebote == null) { + log.info("No fue posible generar la corrida rebote. No fue encontrado esquema para la fecha del dia seguinte a " + dataGeracao); + } + } + if (corridaRebote != null) { + log.info("Rebote generado=" + corridaRebote.getId()); + corrida.setCorridaRebote(corridaRebote); + corridaDAO.actualizacion(corrida); + } + + if (corridaPisoExtraRebote != null && corridaPisoExtra != null) { + log.info("Rebote Piso Extra Generado=" + corridaPisoExtraRebote.getId()); + corridaPisoExtra.setCorridaRebote(corridaPisoExtraRebote); + corridaDAO.actualizacion(corridaPisoExtra); + } + + if (corridaPisoExtraRebote != null && corridaPisoExtra2 != null) { + log.info("Rebote Piso Extra Generado=" + corridaPisoExtraRebote.getId()); + corridaPisoExtra2.setCorridaRebote(corridaPisoExtraRebote); + corridaDAO.actualizacion(corridaPisoExtra2); + } + } + private void validaCriaReservaCliente(Corrida corrida, Integer unUsuarioId, Integer unPuntoVenta, Integer estacionId) { try { List reservaEspecialClienteList = reservaEspecialClientService.bucarReservaEspecialByCorridaId(corrida.getId().getCorridaId().longValue()) ; diff --git a/src/com/rjconsultores/ventaboletos/utilerias/DateUtil.java b/src/com/rjconsultores/ventaboletos/utilerias/DateUtil.java index dfff77850..3bebbd3d3 100644 --- a/src/com/rjconsultores/ventaboletos/utilerias/DateUtil.java +++ b/src/com/rjconsultores/ventaboletos/utilerias/DateUtil.java @@ -304,7 +304,11 @@ public final class DateUtil { return null; } public static String getStringDate(java.util.Date d) { - return getStringDate(d, "dd/MM/yyyy"); + try { + return getStringDate(d, "dd/MM/yyyy"); + }catch(Exception e) { + return null; + } } public static String getStringDate(java.sql.Date d) {