From eb32b0ba65ae623191b720518dd5a3d7406e1a63 Mon Sep 17 00:00:00 2001 From: "eduardo.dicarde" Date: Tue, 6 Jun 2017 12:47:45 +0000 Subject: [PATCH] fixes bug #9015 git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@69689 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../ParadaSecuenciaCombinacaoLinha.java | 26 ++++ .../ventaboletos/entidad/Ruta.java | 3 + .../service/impl/RutaServiceImpl.java | 3 + .../service/impl/TramoRutaServiceImpl.java | 114 ++++++++++++++++-- .../ventaboletos/utilerias/DateUtil.java | 12 +- 5 files changed, 148 insertions(+), 10 deletions(-) diff --git a/src/com/rjconsultores/ventaboletos/entidad/ParadaSecuenciaCombinacaoLinha.java b/src/com/rjconsultores/ventaboletos/entidad/ParadaSecuenciaCombinacaoLinha.java index 66a99ac50..120148d98 100644 --- a/src/com/rjconsultores/ventaboletos/entidad/ParadaSecuenciaCombinacaoLinha.java +++ b/src/com/rjconsultores/ventaboletos/entidad/ParadaSecuenciaCombinacaoLinha.java @@ -11,7 +11,33 @@ public class ParadaSecuenciaCombinacaoLinha { private ParadaSecuencia origem; private List destinos; private Via via; + private String kmReal = ""; + private String kmEntradaSaida = ""; + private String tempoReal = ""; + public String getKmReal() { + return kmReal; + } + + public void setKmReal(String kmReal) { + this.kmReal = kmReal; + } + + public String getKmEntradaSaida() { + return kmEntradaSaida; + } + + public void setKmEntradaSaida(String kmEntradaSaida) { + this.kmEntradaSaida = kmEntradaSaida; + } + + public String getTempoReal() { + return tempoReal; + } + + public void setTempoReal(String tempoReal) { + this.tempoReal = tempoReal; + } public ParadaSecuencia getOrigem() { return origem; diff --git a/src/com/rjconsultores/ventaboletos/entidad/Ruta.java b/src/com/rjconsultores/ventaboletos/entidad/Ruta.java index 271b858fd..ece3071dd 100644 --- a/src/com/rjconsultores/ventaboletos/entidad/Ruta.java +++ b/src/com/rjconsultores/ventaboletos/entidad/Ruta.java @@ -137,12 +137,14 @@ public class Ruta implements Serializable, Comparable { indRutaCancelada = false; indBloqueoVtaAbierta = false; indSentidoIda = true; + indRutaInternacional = false; } public Ruta(Integer rutaId, String descruta) { this(); this.rutaId = rutaId; this.descruta = descruta; + indRutaInternacional = false; } public static Ruta clone(Ruta other) { @@ -239,6 +241,7 @@ public class Ruta implements Serializable, Comparable { public Ruta(Integer rutaId) { this(); this.rutaId = rutaId; + this.indRutaInternacional = false; } public Integer getRutaId() { diff --git a/src/com/rjconsultores/ventaboletos/service/impl/RutaServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/RutaServiceImpl.java index 0ab78853a..b002d1487 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/RutaServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/RutaServiceImpl.java @@ -524,6 +524,9 @@ public class RutaServiceImpl implements RutaService { paradaSecuenciaCombinacaoLinha.setOrigem(sequenciaInformada); paradaSecuenciaCombinacaoLinha.setVia(via); paradaSecuenciaCombinacaoLinha.setDestinos(new ArrayList()); + paradaSecuenciaCombinacaoLinha.setKmReal(sequenciaInformada.getKmReal()); + paradaSecuenciaCombinacaoLinha.setKmEntradaSaida(sequenciaInformada.getKmEntradaSaida()); + paradaSecuenciaCombinacaoLinha.setTempoReal(sequenciaInformada.getTempoReal()); for (ParadaSecuencia sequenciaExistente : lsParadasSecuencia) { if (sequenciaInformada.getParada().getParadaId() == sequenciaExistente.getParada().getParadaId()) { diff --git a/src/com/rjconsultores/ventaboletos/service/impl/TramoRutaServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/TramoRutaServiceImpl.java index d2049f60c..e5abdfcce 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/TramoRutaServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/TramoRutaServiceImpl.java @@ -40,6 +40,7 @@ import com.rjconsultores.ventaboletos.service.RutaSecuenciaService; import com.rjconsultores.ventaboletos.service.TramoRutaService; import com.rjconsultores.ventaboletos.service.TramoService; import com.rjconsultores.ventaboletos.service.TramoServicioService; +import com.rjconsultores.ventaboletos.utilerias.DateUtil; import com.rjconsultores.ventaboletos.utilerias.HoraSistema; import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; import com.rjconsultores.ventaboletos.vo.esquemaoperacional.RutaTramoVO; @@ -94,8 +95,9 @@ public class TramoRutaServiceImpl implements TramoRutaService { continue; } if ((s.getOrigen() == null) || (s.getDestino() == null) || (s.getVia() == null) - || (s.getKmReal() == null) || (s.getSecuencia() == null) || (s.getTiempoRecorrido() == null) - || (!rutaTramoVO.getOrgaoConcedente().getOrgaoConcedenteId().equals(21) && ((s.getCoeficienteTarifa1() == null) || (s.getKmCoeficiente1() == null) || (s.getKmCoeficiente1() == BigDecimal.ZERO)))) { + || (s.getKmReal() == null) || (s.getSecuencia() == null) || (s.getTiempoRecorrido() == null) + || ((rutaTramoVO.getOrgaoConcedente() == null || !rutaTramoVO.getOrgaoConcedente().getOrgaoConcedenteId().equals(21) + && ((s.getCoeficienteTarifa1() == null) || (s.getKmCoeficiente1() == null) || (s.getKmCoeficiente1() == BigDecimal.ZERO))))) { throw new BusinessException("tramoRutaServiceImpl.msg.cambosObligatoriosCombinacion", new Object[] { s.getOrigen(), s.getDestino() }); } @@ -447,24 +449,66 @@ public class TramoRutaServiceImpl implements TramoRutaService { List lsSecuenciaCombinacionRutaTramoVO = new ArrayList(); - for (ParadaSecuenciaCombinacaoLinha secuencia: rutaTramoVO.getLsParadaSecuenciaCombinacaoLinhas()){ + List secuencias = rutaTramoVO.getLsParadaSecuenciaCombinacaoLinhas(); + + for (ParadaSecuenciaCombinacaoLinha secuencia: secuencias){ Parada origem = secuencia.getOrigem().getParada(); Via via = secuencia.getVia(); - BigDecimal kmReal = new BigDecimal(secuencia.getOrigem().getKmReal() != null && !secuencia.getOrigem().getKmReal().isEmpty() ? secuencia.getOrigem().getKmReal() : "0"); - for (ParadaSecuencia secuenciaDestino: secuencia.getDestinos()){ + BigDecimal totalKmsReal = new BigDecimal(0); + + BigDecimal kmsRealOrigem = secuencia.getKmReal() == null || secuencia.getKmReal().isEmpty() ? new BigDecimal("0.0") : + new BigDecimal(secuencia.getKmReal()); + + totalKmsReal = totalKmsReal.add(kmsRealOrigem); + HoraSistema tempoTotalOrigemDestino = secuencia.getTempoReal().isEmpty() ? new HoraSistema() : new HoraSistema(DateUtil.getDataTempoDecorrido(secuencia.getTempoReal()));; + + for (ParadaSecuencia secuenciaDestino : secuencia.getDestinos()) { + + //O processo não é realizado na ordem inversa (em que a sequencia da origem é maior que a sequencia de seus destinos), considerando que esse é o processo inversa a ida ou a volta. + if (secuencia.getOrigem().getSecuencia() > secuenciaDestino.getSecuencia()){ + continue; + } Parada destino = secuenciaDestino.getParada(); - SecuenciaRutaTramoCoeficienteVO nuevaSecuencia = new SecuenciaRutaTramoCoeficienteVO(origem, destino, via, - secuencia.getOrigem().getSecuencia().intValue(), kmReal, new HoraSistema(), rutaTramoVO.getNumRuta()); + //A primeira seguencia sempre será a origem + //A segunda sequencia sempre recebe a km e o tempo da origem + if (secuenciaDestino.getSecuencia() > 2) { + tempoTotalOrigemDestino = calcularTempoTotalDestino(secuencia, secuenciaDestino.getSecuencia()); + totalKmsReal = calcularKmDestino(secuencia, secuenciaDestino.getSecuencia()); + } + SecuenciaRutaTramoCoeficienteVO nuevaSecuencia = new SecuenciaRutaTramoCoeficienteVO(origem, destino, via, + secuencia.getOrigem().getSecuencia().intValue(), totalKmsReal, tempoTotalOrigemDestino, rutaTramoVO.getNumRuta()); + + if (via != null) { + TramoServicio tramoServicio = tramoServicioService.buscar(origem, destino, via, rutaTramoVO.getClaseServicio()); + if (tramoServicio != null) { + log.debug("TRAMO EXISTE"); + + nuevaSecuencia.setKmReal(tramoServicio.getTramo().getKmReal()); + + nuevaSecuencia.setTiempoRecorrido(new HoraSistema(tramoServicio.getTiemporecorrido())); + nuevaSecuencia.setTramoId(tramoServicio.getTramo().getTramoId()); + nuevaSecuencia.setTramoServicioId(tramoServicio.getTramoservicioId()); + } + OrgaoTramo orgaoTramo = orgaoTramoDAO.buscar(origem.getParadaId(), destino.getParadaId(), via.getViaId(), rutaTramoVO.getOrgaoConcedente().getOrgaoConcedenteId(), rutaTramoVO.getClaseServicio().getClaseservicioId()); + if (orgaoTramo != null) { + nuevaSecuencia.setCoeficienteTarifa1(orgaoTramo.getCoeficienteTarifa1()); + nuevaSecuencia.setKmCoeficiente1(orgaoTramo.getKmCoeficiente1()); + nuevaSecuencia.setCoeficienteTarifa2(orgaoTramo.getCoeficienteTarifa2()); + nuevaSecuencia.setKmCoeficiente2(orgaoTramo.getKmCoeficiente2()); + nuevaSecuencia.setOrgaoTramoId(orgaoTramo.getOrgaoTramoId()); + } + } + if (nuevaSecuencia.getKmCoeficiente1() == null) { nuevaSecuencia.setKmCoeficiente1(nuevaSecuencia.getKmReal()); } - + nuevaSecuencia.setNumRuta(rutaTramoVO.getNumRuta()); - + lsSecuenciaCombinacionRutaTramoVO.add(nuevaSecuencia); } } @@ -577,4 +621,56 @@ public class TramoRutaServiceImpl implements TramoRutaService { } } } + + //calculo do tempo sempre considerando que o calculo deve ser feito desconsiderando o valor do tempo, + //inicializando com o tempo da origem e incrementando as sequencias anteriores + private HoraSistema calcularTempoTotalDestino(ParadaSecuenciaCombinacaoLinha sequenciaOrigem, int numSeqAtual) { + HoraSistema horaSistema = sequenciaOrigem.getTempoReal().isEmpty() ? new HoraSistema() : new HoraSistema(DateUtil.getDataTempoDecorrido(sequenciaOrigem.getTempoReal())); + + for (ParadaSecuencia destino: sequenciaOrigem.getDestinos()) { + HoraSistema horaSistemaDestino = destino.getTempoReal().isEmpty() ? new HoraSistema() : + new HoraSistema(DateUtil.getDataTempoDecorrido(destino.getTempoReal())); + + //desconsidera o tempo para os destinos com sequencia inferior a origem, já que estes já foram calculados + if (sequenciaOrigem.getOrigem().getSecuencia() > destino.getSecuencia()) { + continue; + } + + //faz o calculo para a sequencia do destino para qual o tempo está sendo calculado + if (destino.getSecuencia() == numSeqAtual){ + break; + } + + horaSistema = horaSistema.sumar(horaSistemaDestino); + } + + return horaSistema; + + } + + //calculo da km sempre considerando que o calculo deve ser feito desconsiderando o valor da km, + //inicializando com o valor da km da origem e incrementando as sequencias anteriores + private BigDecimal calcularKmDestino(ParadaSecuenciaCombinacaoLinha sequenciaOrigem, int numSeqAtual) { + BigDecimal kmTotal= sequenciaOrigem.getKmReal() == null || sequenciaOrigem.getKmReal().isEmpty() ? new BigDecimal("0.0") : + new BigDecimal(sequenciaOrigem.getKmReal()); + + for (ParadaSecuencia destino: sequenciaOrigem.getDestinos()) { + //desconsidera a km para os destinos com sequencia inferior a origem, já que estes já foram calculados + if (sequenciaOrigem.getOrigem().getSecuencia() > destino.getSecuencia()) { + continue; + } + + //faz o calculo para a sequencia do destino para qual a km está sendo calculada + if (destino.getSecuencia() == numSeqAtual){ + break; + } + + BigDecimal kmDestino= destino.getKmReal() == null || destino.getKmReal().isEmpty() ? new BigDecimal("0.0") : + new BigDecimal(destino.getKmReal()); + + kmTotal = kmTotal.add(kmDestino); + } + + return kmTotal; + } } diff --git a/src/com/rjconsultores/ventaboletos/utilerias/DateUtil.java b/src/com/rjconsultores/ventaboletos/utilerias/DateUtil.java index 8b2a50ee1..d3a300da5 100644 --- a/src/com/rjconsultores/ventaboletos/utilerias/DateUtil.java +++ b/src/com/rjconsultores/ventaboletos/utilerias/DateUtil.java @@ -655,5 +655,15 @@ public final class DateUtil { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -1); return dateFormat.format(cal.getTime()); -} + } + + public static Date getDataTempoDecorrido(String tempo) { + String[] tempoDecorrido = tempo.split(":"); + + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR, Integer.parseInt(tempoDecorrido[0].isEmpty() ? "0" : tempoDecorrido[0])); + calendar.set(Calendar.MINUTE, Integer.parseInt(tempoDecorrido[1].isEmpty() ? "0" : tempoDecorrido[1])); + + return calendar.getTime(); + } } \ No newline at end of file