From 0eef121c786c60f90e6ff96cfe2f80c000644975 Mon Sep 17 00:00:00 2001 From: julio Date: Fri, 7 Oct 2022 18:58:28 +0000 Subject: [PATCH] fixes bug#AL-1407 dev: Wallace qua: git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@114650 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../service/impl/CorridaServiceImpl.java | 130 +++++++++++++++++- 1 file changed, 128 insertions(+), 2 deletions(-) diff --git a/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java index e2e80e21b..3e49f434d 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java @@ -7,6 +7,7 @@ package com.rjconsultores.ventaboletos.service.impl; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; @@ -855,8 +856,8 @@ public class CorridaServiceImpl implements CorridaService { return b - a; } - private void generarCorrida(Date dataGeracao, List lsEsquemaCorrida, boolean isGeracaoAutomaticaCorrida) { - + private Boolean generarCorrida(Date dataGeracao, List lsEsquemaCorrida, boolean isGeracaoAutomaticaCorrida) { + DefaultTransactionDefinition def = new DefaultTransactionDefinition(DefaultTransactionDefinition.PROPAGATION_REQUIRES_NEW); // TODO: Melhorar o tratamento às transações manuais em caso de erro,etc @@ -869,6 +870,8 @@ public class CorridaServiceImpl implements CorridaService { Integer unPuntoVenta= constanteService.buscarValorConstantePorNomeConstante("PUNTOVENTA_RESERVA_CLIENTES"); Integer estacionId = constanteService.buscarValorConstantePorNomeConstante("ESTACION_RESERVA_CLIENTES"); + boolean corridaGerada = true; + Corrida corrida = null; try { @@ -884,6 +887,7 @@ public class CorridaServiceImpl implements CorridaService { //Nessas duas condições, o "filho" só é gerado a partir do esquema corrida "pai" if (esHijoRebote || esSegundoPiso) { log.info(String.format("Esquema nao gerado. esHijoRebote:%s ; esSegundoPiso: %s",esHijoRebote,esSegundoPiso)); + corridaGerada = false; continue; } } @@ -895,6 +899,7 @@ public class CorridaServiceImpl implements CorridaService { 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); + corridaGerada = false; continue; } @@ -1030,6 +1035,8 @@ public class CorridaServiceImpl implements CorridaService { validaCriaReservaCliente(corrida, unUsuarioId, unPuntoVenta, estacionId); } } + + return corridaGerada; } private void validaCriaReservaCliente(Corrida corrida, Integer unUsuarioId, Integer unPuntoVenta, Integer estacionId) { @@ -1228,9 +1235,29 @@ public class CorridaServiceImpl implements CorridaService { return dataAte; } + + private boolean generaCorridaAprimorada() { + try { + Constante constante = constanteService.buscarPorNomeConstante("GENERACION_CORRIDA_APRIMORADA"); + return (constante != null && StringUtils.isNotBlank(constante.getValorconstante()) + && Boolean.valueOf(constante.getValorconstante())) ? Boolean.TRUE : Boolean.FALSE; + } catch (Exception e) { + } + + return Boolean.FALSE; + } @Transactional(readOnly = true, propagation = Propagation.SUPPORTS) public boolean generarCorridaAutomatica() { + + if (generaCorridaAprimorada()) { + return generarCorridaAutomaticaAprimorada(); + } else { + return generarCorridaAutomaticaPadrao(); + } + } + + private boolean generarCorridaAutomaticaPadrao() { feriadoCache.limpar(); Date dataDe = Calendar.getInstance().getTime(); @@ -1246,6 +1273,19 @@ public class CorridaServiceImpl implements CorridaService { return hayErroConstante && hayErroQtdeDias; } + + private boolean generarCorridaAutomaticaAprimorada() { + feriadoCache.limpar(); + + Date dataDe = Calendar.getInstance().getTime(); + + Date dataAteConstante = calcularDataFinalGeneracionCorrida(); + Boolean hayErroConstante = !generarCorridaAutomaticaAprimorada(dataDe, dataAteConstante); + + log.debug("corrida generadas aprimorada por la cant de dias.hayError=" + hayErroConstante); + + return hayErroConstante; + } private boolean generarCorridaAutomaticaQtdeDias(Date dataDeOriginal) { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); @@ -1353,6 +1393,92 @@ public class CorridaServiceImpl implements CorridaService { return generacionExitosa; } + + private boolean generarCorridaAutomaticaAprimorada(final Date dataInicial, final Date dataConstanteFim) { + boolean generacionExitosa = true; + SimpleDateFormat sdfData = new SimpleDateFormat("dd/MM/yyyy"); + + log.debug("** AUTO - Data De: " + sdfData.format(dataInicial) + " **Data Ateh: " + sdfData.format(dataConstanteFim)); + + // TODO: Melhorar o tratamento às transações manuais em caso de erro,etc + DefaultTransactionDefinition def = new DefaultTransactionDefinition(DefaultTransactionDefinition.PROPAGATION_REQUIRES_NEW); + TransactionStatus status = transactionManager.getTransaction(def); + + Calendar calendarData = Calendar.getInstance(); + calendarData.setTime(dataConstanteFim); + + Date dataAte = calendarData.getTime(); + + try { + log.debug("*** Data: " + sdfData.format(dataAte)); + List lsEsquemaCorrida = esquemaCorridaService.buscaDentroVigencia(dataInicial); + + Boolean dentroVigenciaEsquemaOperacional = !lsEsquemaCorrida.isEmpty(); + if (dentroVigenciaEsquemaOperacional) { + + for (EsquemaCorrida esquemaCorrida : lsEsquemaCorrida) { + log.debug("esquemaCorrida=" + esquemaCorrida.getEsquemacorridaId()); + + Integer qtdeDiasGerar = esquemaCorrida.getCantDiasGeneracion(); + + if (qtdeDiasGerar != null && qtdeDiasGerar >= 0) { + log.debug("cantDiasGenerar=" + qtdeDiasGerar); + + Calendar calendarDiasGenerar = Calendar.getInstance(); + calendarDiasGenerar.setTime(dataInicial); + calendarDiasGenerar.add(Calendar.DATE, qtdeDiasGerar); + dataAte = calendarDiasGenerar.getTime(); + } else { + calendarData.setTime(dataConstanteFim); + dataAte = calendarData.getTime(); + } + + log.debug("Periodo generacion = " + sdf.format(dataInicial) + " hasta " + sdf.format(dataAte)); + + if (DateUtil.compareOnlyDate(dataAte, esquemaCorrida.getEsquemaOperacional().getFecfinvigencia()) > 0) { + log.info("Cant dias excede final de la vigencia"); + dataAte = esquemaCorrida.getEsquemaOperacional().getFecfinvigencia(); + } + + try { + while (DateUtil.compareOnlyDate(dataAte, dataInicial) >= 0) { + + boolean corridaGerada = this.generarCorrida(dataAte, Arrays.asList(esquemaCorrida), false); + if (corridaGerada) { + calendarData.setTime(dataAte); + calendarData.add(Calendar.DATE, -1); + dataAte = calendarData.getTime(); + + } else { + log.info("Corrida do dia: " + sdfData.format(dataAte) + " já gerada"); + break; + } + + } + + log.info("commit bloco corridas"); + + transactionManager.commit(status); + status = transactionManager.getTransaction(def); + } catch (Exception ex) { + log.error("", ex); + log.error(" Erro ao gerar corrida = " + esquemaCorrida.getNumCorrida() + " esquemaCorrida = " + esquemaCorrida.getEsquemacorridaId()); + transactionManager.rollback(status); + status = transactionManager.getTransaction(def); + } + } + + } else { + log.info("No hay esquema vigente para la fecha " + sdfData.format(dataInicial)); + } + + } catch (Exception ex) { + log.error("Erro ao gerar corridas: " + ex, ex); + generacionExitosa = false; + } + + return generacionExitosa; + } private int cantDiasMaxGerarCorridasManual() {