- correção na geração de corridas: Validação para não permitir gerar serviço que não tenha vigência válida

- melhoria nos logs de debug durante a geração
- remoção de classe/zul que não é mais usado

git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@25694 d1611594-4594-4d17-8e1d-87c2c4800839
master
gleimar 2013-04-11 18:30:03 +00:00
parent f0fb7ae218
commit 3a4932ba14
1 changed files with 249 additions and 222 deletions

View File

@ -249,7 +249,7 @@ public class CorridaServiceImpl implements CorridaService {
} else if (esquemaCorrida.getIndGeneraFeriado().equals("N")) { } else if (esquemaCorrida.getIndGeneraFeriado().equals("N")) {
retorno = geraDiaSemana(diaSemana, esquemaCorrida); retorno = geraDiaSemana(diaSemana, esquemaCorrida);
} }
}else{ } else {
retorno = geraDiaSemana(diaSemana, esquemaCorrida); retorno = geraDiaSemana(diaSemana, esquemaCorrida);
} }
@ -333,10 +333,29 @@ public class CorridaServiceImpl implements CorridaService {
} }
/** /**
* Genera una corrida para el esquemaCorrida informado en el dia y fecha * Indica si el esquemaCorrida informado tiene una vigencia válida para la data de generacion
* informados. *
* @param esquemaCorrida
* @param dataGeracao
* @return
*/
private boolean vigenciaValida(EsquemaCorrida esquemaCorrida, Date dataGeracao) {
if ((DateUtil.compareOnlyDate(dataGeracao, esquemaCorrida.getEsquemaOperacional().getFecfinvigencia()) <= 0) &&
(DateUtil.compareOnlyDate(dataGeracao, esquemaCorrida.getEsquemaOperacional().getFecniciovigencia()) >= 0)) {
return true;
}
return false;
}
/**
* Genera una corrida para el esquemaCorrida informado en el dia y fecha informados.<br/>
*
* Cuando la corrida no es generada : <br/>
* - corrida ya existe : eso es checado por el numCorrida e dataGeneracion <br/>
* - la fecha de generacion no tiene una vigencia válida <br/>
* - el status del esquema corrida no es autorizado ("A") <br/>
* *
* Es validado si la corrida ya existe
* *
* @param esquemaCorrida * @param esquemaCorrida
* @param diaSemana * @param diaSemana
@ -349,15 +368,32 @@ public class CorridaServiceImpl implements CorridaService {
Integer diaSemana = calendario.get(Calendar.DAY_OF_WEEK); Integer diaSemana = calendario.get(Calendar.DAY_OF_WEEK);
Corrida corrida = null; Corrida corrida = null;
if ((esquemaCorrida.getStatusCorrida() != null) && (esquemaCorrida.getStatusCorrida().equals("A"))) {
if (temCorridaDiaSemana(diaSemana, esquemaCorrida, isFeriado)) { if (!vigenciaValida(esquemaCorrida, dataGeracao)) {
log.debug("vigencia invalida=" + dataGeracao);
return null;
}
if (!((esquemaCorrida.getStatusCorrida() != null) && (esquemaCorrida.getStatusCorrida().equals("A")))) {
log.debug("status corrida invalido=" + esquemaCorrida.getStatusCorrida());
return null;
}
if (!temCorridaDiaSemana(diaSemana, esquemaCorrida, isFeriado)) {
log.debug("dia semana no valido=" + diaSemana);
return null;
}
try { try {
Ruta ruta = esquemaCorrida.getRuta(); Ruta ruta = esquemaCorrida.getRuta();
ClaseServicio claseServicio = esquemaCorrida.getClaseServicio(); ClaseServicio claseServicio = esquemaCorrida.getClaseServicio();
Marca marca = esquemaCorrida.getMarca(); Marca marca = esquemaCorrida.getMarca();
Date horario = esquemaCorrida.getHorasalida(); Date horario = esquemaCorrida.getHorasalida();
horario = DateUtil.normalizar(horario); horario = DateUtil.normalizar(horario);
Integer numCorrida = (!isPisoExtra)?esquemaCorrida.getNumCorrida():esquemaCorrida.getNumCorridaPisoExtra(); Integer numCorrida = (!isPisoExtra) ? esquemaCorrida.getNumCorrida() : esquemaCorrida.getNumCorridaPisoExtra();
Corrida.Id id = new Corrida.Id(); Corrida.Id id = new Corrida.Id();
@ -365,13 +401,13 @@ public class CorridaServiceImpl implements CorridaService {
id.setFeccorrida(DateUtil.normalizarToFecha(dataGeracao)); id.setFeccorrida(DateUtil.normalizarToFecha(dataGeracao));
if (corridaDAO.existe(id)) { 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); log.info("corrida existe = " + numCorrida + ";" + ruta.getDescruta() + ";" + DateUtil.getStringDate(dataGeracao) + ";" + DateUtil.getStringDate(horario, "HH:mm") + ";" + claseServicio.getDescclase() + ";" + marca.getDescmarca() + " Piso: " + isPisoExtra);
return null; return null;
} }
//Como o numCorrida corresponde ao corrida_id do corridaCtrl, ou seja, à chave primaria, temos que buscar somente por esse campo // 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. // 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 // 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); CorridaCtrl corridaCtrl = corridaCtrlService.obtenerID(numCorrida);
@ -403,9 +439,9 @@ public class CorridaServiceImpl implements CorridaService {
} }
corridaCtrl.setPisoExtra(isPisoExtra); corridaCtrl.setPisoExtra(isPisoExtra);
if (novoRegistro){ if (novoRegistro) {
corridaCtrl = corridaCtrlService.suscribir(corridaCtrl); corridaCtrl = corridaCtrlService.suscribir(corridaCtrl);
}else{ } else {
corridaCtrl = corridaCtrlService.actualizacion(corridaCtrl); corridaCtrl = corridaCtrlService.actualizacion(corridaCtrl);
} }
@ -459,12 +495,7 @@ public class CorridaServiceImpl implements CorridaService {
Integer numSec = 1; Integer numSec = 1;
List<EsquemaTramo> lsEsquemaTramo = esquemaTramoService.obtenerPorEsquemaCorridaOrderNumSec(esquemaCorrida); List<EsquemaTramo> lsEsquemaTramo = esquemaTramoService.obtenerPorEsquemaCorridaOrderNumSec(esquemaCorrida);
Date horaChegadaAnterior = null; Date horaChegadaAnterior = null;
Date tiempoInstanciaAnterior = null; // indica o tempo Date tiempoInstanciaAnterior = null; // indica o tempo de instancia que fica no tramo anterior ao atual
// de instancia
// que fica no
// tramo
// anterior ao
// atual
for (EsquemaTramo esquemaTramo : lsEsquemaTramo) { for (EsquemaTramo esquemaTramo : lsEsquemaTramo) {
CorridaTramo corridaTramo = new CorridaTramo(); CorridaTramo corridaTramo = new CorridaTramo();
corridaTramo.setAutobus(null); corridaTramo.setAutobus(null);
@ -559,8 +590,6 @@ public class CorridaServiceImpl implements CorridaService {
} catch (org.springframework.dao.DataIntegrityViolationException ex) { } catch (org.springframework.dao.DataIntegrityViolationException ex) {
log.error(ex); log.error(ex);
} }
} // if (temCorridaDiaSemana(diaSemana, esquemaCorrida))
} // if (esquemaCorrida.getStatusCorrida().equals("A"))
return corrida; return corrida;
} }
@ -710,8 +739,7 @@ public class CorridaServiceImpl implements CorridaService {
* *
* @param corridaTramo * @param corridaTramo
* @param claseServicio * @param claseServicio
* @return - Si existe una excepcion, regresa la nueva fecLlegada para el * @return - Si existe una excepcion, regresa la nueva fecLlegada para el tramo, sino, regreso null
* tramo, sino, regreso null
*/ */
private Date arreglaExcepcionTiempo(CorridaTramo corridaTramo, ClaseServicio claseServicio) { private Date arreglaExcepcionTiempo(CorridaTramo corridaTramo, ClaseServicio claseServicio) {
Date nuevaFecLlegada = null; Date nuevaFecLlegada = null;
@ -817,41 +845,41 @@ public class CorridaServiceImpl implements CorridaService {
private boolean generarCorridaAutomaticaQtdeDias(Date dataDeOriginal) { private boolean generarCorridaAutomaticaQtdeDias(Date dataDeOriginal) {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
log.debug(" Generacion cant dias "+ sdf.format(dataDeOriginal)); log.debug(" Generacion cant dias " + sdf.format(dataDeOriginal));
DefaultTransactionDefinition def = new DefaultTransactionDefinition(DefaultTransactionDefinition.PROPAGATION_REQUIRES_NEW); DefaultTransactionDefinition def = new DefaultTransactionDefinition(DefaultTransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus status = transactionManager.getTransaction(def); TransactionStatus status = transactionManager.getTransaction(def);
List<EsquemaCorrida> lsEsquemaCorrida = esquemaCorridaService.buscaDentroVigenciaQtdeDiasNotNull(dataDeOriginal); List<EsquemaCorrida> lsEsquemaCorrida = esquemaCorridaService.buscaDentroVigenciaQtdeDiasNotNull(dataDeOriginal);
for (EsquemaCorrida esquemaCorrida : lsEsquemaCorrida) { for (EsquemaCorrida esquemaCorrida : lsEsquemaCorrida) {
log.debug("esquemaCorrida="+esquemaCorrida.getEsquemacorridaId()); log.debug("esquemaCorrida=" + esquemaCorrida.getEsquemacorridaId());
Integer qtdeDiasGerar = esquemaCorrida.getCantDiasGeneracion(); Integer qtdeDiasGerar = esquemaCorrida.getCantDiasGeneracion();
if (qtdeDiasGerar <=0){ if (qtdeDiasGerar <= 0) {
log.debug("cant dias <=0"); log.debug("cant dias <=0");
continue; continue;
} }
log.debug("cantDiasGenerar="+qtdeDiasGerar); log.debug("cantDiasGenerar=" + qtdeDiasGerar);
Calendar calendarData = Calendar.getInstance(); Calendar calendarData = Calendar.getInstance();
calendarData.setTime(dataDeOriginal); calendarData.setTime(dataDeOriginal);
calendarData.add(Calendar.DATE, qtdeDiasGerar-1); calendarData.add(Calendar.DATE, qtdeDiasGerar - 1);
Date dataAte = calendarData.getTime(); Date dataAte = calendarData.getTime();
Date dataDe = new Date(dataDeOriginal.getTime()); Date dataDe = new Date(dataDeOriginal.getTime());
log.debug("Periodo generacion = " + sdf.format(dataDe) + " hasta " + sdf.format(dataAte)); log.debug("Periodo generacion = " + sdf.format(dataDe) + " hasta " + sdf.format(dataAte));
if(DateUtil.compareOnlyDate(dataAte, esquemaCorrida.getEsquemaOperacional().getFecfinvigencia()) > 0){ if (DateUtil.compareOnlyDate(dataAte, esquemaCorrida.getEsquemaOperacional().getFecfinvigencia()) > 0) {
log.info("Cant dias excede final de la vigencia"); log.info("Cant dias excede final de la vigencia");
dataAte = esquemaCorrida.getEsquemaOperacional().getFecfinvigencia(); dataAte = esquemaCorrida.getEsquemaOperacional().getFecfinvigencia();
} }
while (DateUtil.compareOnlyDate(dataDe,dataAte) <= 0) { while (DateUtil.compareOnlyDate(dataDe, dataAte) <= 0) {
Boolean isFeriado = this.isFeriado(new java.sql.Date(dataDe.getTime())); Boolean isFeriado = this.isFeriado(new java.sql.Date(dataDe.getTime()));
@ -916,7 +944,7 @@ public class CorridaServiceImpl implements CorridaService {
Long cantInicio = corridaDAO.cantCorridaGeneradasHoy(); Long cantInicio = corridaDAO.cantCorridaGeneradasHoy();
while (DateUtil.compareOnlyDate(dataDe,dataAte) <= 0) { while (DateUtil.compareOnlyDate(dataDe, dataAte) <= 0) {
log.info("*** Data: " + sdfData.format(dataDe)); log.info("*** Data: " + sdfData.format(dataDe));
this.generarCorrida(dataDe, lsEsquemaCorrida); this.generarCorrida(dataDe, lsEsquemaCorrida);
@ -927,7 +955,6 @@ public class CorridaServiceImpl implements CorridaService {
Long cantFim = corridaDAO.cantCorridaGeneradasHoy(); Long cantFim = corridaDAO.cantCorridaGeneradasHoy();
return cantFim - cantInicio; return cantFim - cantInicio;
} }
} }