eduardo.dicarde 2017-06-06 12:47:45 +00:00
parent 1b0e3bec4d
commit eb32b0ba65
5 changed files with 148 additions and 10 deletions

View File

@ -11,7 +11,33 @@ public class ParadaSecuenciaCombinacaoLinha {
private ParadaSecuencia origem;
private List<ParadaSecuencia> 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;

View File

@ -137,12 +137,14 @@ public class Ruta implements Serializable, Comparable<Ruta> {
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<Ruta> {
public Ruta(Integer rutaId) {
this();
this.rutaId = rutaId;
this.indRutaInternacional = false;
}
public Integer getRutaId() {

View File

@ -524,6 +524,9 @@ public class RutaServiceImpl implements RutaService {
paradaSecuenciaCombinacaoLinha.setOrigem(sequenciaInformada);
paradaSecuenciaCombinacaoLinha.setVia(via);
paradaSecuenciaCombinacaoLinha.setDestinos(new ArrayList<ParadaSecuencia>());
paradaSecuenciaCombinacaoLinha.setKmReal(sequenciaInformada.getKmReal());
paradaSecuenciaCombinacaoLinha.setKmEntradaSaida(sequenciaInformada.getKmEntradaSaida());
paradaSecuenciaCombinacaoLinha.setTempoReal(sequenciaInformada.getTempoReal());
for (ParadaSecuencia sequenciaExistente : lsParadasSecuencia) {
if (sequenciaInformada.getParada().getParadaId() == sequenciaExistente.getParada().getParadaId()) {

View File

@ -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<SecuenciaRutaTramoCoeficienteVO> lsSecuenciaCombinacionRutaTramoVO = new ArrayList<SecuenciaRutaTramoCoeficienteVO>();
for (ParadaSecuenciaCombinacaoLinha secuencia: rutaTramoVO.getLsParadaSecuenciaCombinacaoLinhas()){
List<ParadaSecuenciaCombinacaoLinha> 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;
}
}

View File

@ -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();
}
}