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
master
julio 2022-10-07 18:58:28 +00:00
parent a53f5f12c7
commit 0eef121c78
1 changed files with 128 additions and 2 deletions

View File

@ -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<EsquemaCorrida> lsEsquemaCorrida, boolean isGeracaoAutomaticaCorrida) {
private Boolean generarCorrida(Date dataGeracao, List<EsquemaCorrida> 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<EsquemaCorrida> 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() {