From 50c97f60d133e1254967ff1885522bdb83eb03c9 Mon Sep 17 00:00:00 2001 From: gleimar Date: Tue, 18 Aug 2015 22:36:22 +0000 Subject: [PATCH] =?UTF-8?q?Ajustes=20na=20gera=C3=A7=C3=A3o=20de=20corrida?= =?UTF-8?q?s:=20fixes=20bug#6566?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@46907 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../ventaboletos/service/CorridaService.java | 4 +- .../service/impl/CorridaServiceImpl.java | 48 ++++++++++++++++++- .../ventaboletos/utilerias/DateUtil.java | 5 ++ 3 files changed, 54 insertions(+), 3 deletions(-) diff --git a/src/com/rjconsultores/ventaboletos/service/CorridaService.java b/src/com/rjconsultores/ventaboletos/service/CorridaService.java index 831bf6754..cf35e7ed0 100644 --- a/src/com/rjconsultores/ventaboletos/service/CorridaService.java +++ b/src/com/rjconsultores/ventaboletos/service/CorridaService.java @@ -13,6 +13,7 @@ import com.rjconsultores.ventaboletos.entidad.DiagramaAutobus; import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida; import com.rjconsultores.ventaboletos.entidad.Estado; import com.rjconsultores.ventaboletos.entidad.Parada; +import com.rjconsultores.ventaboletos.exception.BusinessException; /** * @@ -57,8 +58,9 @@ public interface CorridaService extends GenericService { * @param dataDe * @param dataAte * @return A quantidade de corridas geradas + * @throws BusinessException */ - public Long generarCorridasSelecionadas(List lsEsquemaCorrida, Date dataDe, Date dataAte); + public Long generarCorridasSelecionadas(List lsEsquemaCorrida, Date dataDe, Date dataAte) throws BusinessException; public List buscarGroupCorrridaId(Integer corridaId, Date dateInicio, Date dateFin); diff --git a/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java index 42724a658..c1d19f713 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java @@ -13,6 +13,7 @@ import java.util.List; import javax.persistence.Transient; +import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -48,6 +49,7 @@ import com.rjconsultores.ventaboletos.entidad.RutaSecuencia; import com.rjconsultores.ventaboletos.entidad.Tramo; import com.rjconsultores.ventaboletos.entidad.TramoServicio; import com.rjconsultores.ventaboletos.entidad.TramoTiempo; +import com.rjconsultores.ventaboletos.exception.BusinessException; import com.rjconsultores.ventaboletos.service.AsientoExclusivoService; import com.rjconsultores.ventaboletos.service.ConstanteService; import com.rjconsultores.ventaboletos.service.CorridaCtrlService; @@ -73,6 +75,7 @@ import com.rjconsultores.ventaboletos.utilerias.UtileriasFiscal; @Service("corridaService") public class CorridaServiceImpl implements CorridaService { + private static int CANT_MAX_CORRIDA_GERA_MANUAL = 40; @Autowired private CorridaDAO corridaDAO; @Autowired @@ -757,6 +760,7 @@ public class CorridaServiceImpl implements CorridaService { private void generarCorrida(Date dataGeracao, List lsEsquemaCorrida) { DefaultTransactionDefinition def = new DefaultTransactionDefinition(DefaultTransactionDefinition.PROPAGATION_REQUIRES_NEW); + //TODO: Melhorar o tratamento às transações manuais em caso de erro,etc TransactionStatus status = transactionManager.getTransaction(def); cantCorridaGenerada = 0; cantCorridaCommit = 1; @@ -1010,6 +1014,7 @@ public class CorridaServiceImpl implements CorridaService { log.debug(" Generacion cant dias " + sdf.format(dataDeOriginal)); + //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); @@ -1052,9 +1057,17 @@ public class CorridaServiceImpl implements CorridaService { calendarData.add(Calendar.DATE, 1); dataDe = calendarData.getTime(); } + + log.info("commit bloco corridas"); + + transactionManager.commit(status); + status = transactionManager.getTransaction(def); + } if (!status.isCompleted()) { + log.info("commit bloco final"); + transactionManager.commit(status); } @@ -1079,7 +1092,10 @@ public class CorridaServiceImpl implements CorridaService { Boolean dentroVigenciaEsquemaOperacional = !lsEsquemaCorrida.isEmpty(); if (dentroVigenciaEsquemaOperacional) { + log.debug("Geracao de servicos sem cant dias especifico. Adotando o padrao"); + this.generarCorrida(dataDe, lsEsquemaCorrida); + } else { log.info("No hay esquema vigente para la fecha " + sdfData.format(dataDe)); } @@ -1096,8 +1112,36 @@ public class CorridaServiceImpl implements CorridaService { return generacionExitosa; } - @Transactional(readOnly = true, propagation = Propagation.SUPPORTS) - public Long generarCorridasSelecionadas(List lsEsquemaCorrida, Date dataDe, Date dataAte) { + + private int cantDiasMaxGerarCorridasManual(){ + + Constante constante = constanteService.buscarPorNomeConstante("CANT_MAX_CORRIDA_GERA_MANUAL"); + + if ((constante == null) ||(StringUtils.isBlank(constante.getValorconstante()))){ + return CANT_MAX_CORRIDA_GERA_MANUAL; + } + + return Integer.valueOf(constante.getValorconstante()); + + } + @Transactional(readOnly = true, propagation = Propagation.SUPPORTS,rollbackFor=BusinessException.class) + public Long generarCorridasSelecionadas(List lsEsquemaCorrida, Date dataDe, Date dataAte) throws BusinessException { + + if ( (DateUtil.compareOnlyDate(dataDe) < 0) || (DateUtil.compareOnlyDate(dataAte) < 0)){ + throw new BusinessException("corridaServiceImpl.geracaoCorrida.dataMenorQueAtual"); + } + + int cantDiasGeneracion = DateUtil.getElapsedDias(dataDe, dataAte); + + int cantDiasMaxGerarCorridasManual = cantDiasMaxGerarCorridasManual(); + + log.info("cantDiasGeneracion="+cantDiasGeneracion); + log.info("cantDiasMaxGerarCorridasManual="+cantDiasMaxGerarCorridasManual); + + if (cantDiasGeneracion > cantDiasMaxGerarCorridasManual()){ + throw new BusinessException("corridaServiceImpl.geracaoCorrida.cantDiasManual", new Object[]{cantDiasMaxGerarCorridasManual}); + } + SimpleDateFormat sdfData = new SimpleDateFormat("dd/MM/yyyy"); log.info("** SELECIONADOS - Data De: " + sdfData.format(dataDe) + " **Data Ateh: " + sdfData.format(dataAte)); diff --git a/src/com/rjconsultores/ventaboletos/utilerias/DateUtil.java b/src/com/rjconsultores/ventaboletos/utilerias/DateUtil.java index a96441464..0fb8de2c5 100644 --- a/src/com/rjconsultores/ventaboletos/utilerias/DateUtil.java +++ b/src/com/rjconsultores/ventaboletos/utilerias/DateUtil.java @@ -187,6 +187,11 @@ public final class DateUtil { return compareDate(d1, new java.util.Date()); } + /** + * Compara a data atual com d1 de forma que a chama fica compareOnlyDate(d1, new java.util.Date()); + * + * {@link #compareOnlyDate(Date, Date)} + */ public static int compareOnlyDate(java.util.Date d1) { return compareOnlyDate(d1, new java.util.Date()); }