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-87c2c4800839master
parent
a53f5f12c7
commit
0eef121c78
|
@ -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,7 +856,7 @@ 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);
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -1229,8 +1236,28 @@ 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();
|
||||
|
@ -1247,6 +1274,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");
|
||||
|
||||
|
@ -1354,6 +1394,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() {
|
||||
|
||||
Constante constante = constanteService.buscarPorNomeConstante("CANT_MAX_CORRIDA_GERA_MANUAL");
|
||||
|
|
Loading…
Reference in New Issue