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.math.BigDecimal;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.GregorianCalendar;
|
import java.util.GregorianCalendar;
|
||||||
|
@ -855,8 +856,8 @@ public class CorridaServiceImpl implements CorridaService {
|
||||||
return b - a;
|
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);
|
DefaultTransactionDefinition def = new DefaultTransactionDefinition(DefaultTransactionDefinition.PROPAGATION_REQUIRES_NEW);
|
||||||
|
|
||||||
// TODO: Melhorar o tratamento às transações manuais em caso de erro,etc
|
// 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 unPuntoVenta= constanteService.buscarValorConstantePorNomeConstante("PUNTOVENTA_RESERVA_CLIENTES");
|
||||||
Integer estacionId = constanteService.buscarValorConstantePorNomeConstante("ESTACION_RESERVA_CLIENTES");
|
Integer estacionId = constanteService.buscarValorConstantePorNomeConstante("ESTACION_RESERVA_CLIENTES");
|
||||||
|
|
||||||
|
boolean corridaGerada = true;
|
||||||
|
|
||||||
Corrida corrida = null;
|
Corrida corrida = null;
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
@ -884,6 +887,7 @@ public class CorridaServiceImpl implements CorridaService {
|
||||||
//Nessas duas condições, o "filho" só é gerado a partir do esquema corrida "pai"
|
//Nessas duas condições, o "filho" só é gerado a partir do esquema corrida "pai"
|
||||||
if (esHijoRebote || esSegundoPiso) {
|
if (esHijoRebote || esSegundoPiso) {
|
||||||
log.info(String.format("Esquema nao gerado. esHijoRebote:%s ; esSegundoPiso: %s",esHijoRebote,esSegundoPiso));
|
log.info(String.format("Esquema nao gerado. esHijoRebote:%s ; esSegundoPiso: %s",esHijoRebote,esSegundoPiso));
|
||||||
|
corridaGerada = false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -895,6 +899,7 @@ public class CorridaServiceImpl implements CorridaService {
|
||||||
if (corrida == null) {// Si no genera la corrida, no va a
|
if (corrida == null) {// Si no genera la corrida, no va a
|
||||||
// generar el rebote
|
// generar el rebote
|
||||||
log.info("No fue generado corrida. Esquema " + esquemaCorrida.getEsquemacorridaId() + " Data" + dataGeracao);
|
log.info("No fue generado corrida. Esquema " + esquemaCorrida.getEsquemacorridaId() + " Data" + dataGeracao);
|
||||||
|
corridaGerada = false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1030,6 +1035,8 @@ public class CorridaServiceImpl implements CorridaService {
|
||||||
validaCriaReservaCliente(corrida, unUsuarioId, unPuntoVenta, estacionId);
|
validaCriaReservaCliente(corrida, unUsuarioId, unPuntoVenta, estacionId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return corridaGerada;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validaCriaReservaCliente(Corrida corrida, Integer unUsuarioId, Integer unPuntoVenta, Integer estacionId) {
|
private void validaCriaReservaCliente(Corrida corrida, Integer unUsuarioId, Integer unPuntoVenta, Integer estacionId) {
|
||||||
|
@ -1228,9 +1235,29 @@ public class CorridaServiceImpl implements CorridaService {
|
||||||
|
|
||||||
return dataAte;
|
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)
|
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
|
||||||
public boolean generarCorridaAutomatica() {
|
public boolean generarCorridaAutomatica() {
|
||||||
|
|
||||||
|
if (generaCorridaAprimorada()) {
|
||||||
|
return generarCorridaAutomaticaAprimorada();
|
||||||
|
} else {
|
||||||
|
return generarCorridaAutomaticaPadrao();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean generarCorridaAutomaticaPadrao() {
|
||||||
feriadoCache.limpar();
|
feriadoCache.limpar();
|
||||||
|
|
||||||
Date dataDe = Calendar.getInstance().getTime();
|
Date dataDe = Calendar.getInstance().getTime();
|
||||||
|
@ -1246,6 +1273,19 @@ public class CorridaServiceImpl implements CorridaService {
|
||||||
|
|
||||||
return hayErroConstante && hayErroQtdeDias;
|
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) {
|
private boolean generarCorridaAutomaticaQtdeDias(Date dataDeOriginal) {
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
|
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
|
||||||
|
@ -1353,6 +1393,92 @@ public class CorridaServiceImpl implements CorridaService {
|
||||||
|
|
||||||
return generacionExitosa;
|
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() {
|
private int cantDiasMaxGerarCorridasManual() {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue