|
|
|
@ -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;
|
|
|
|
@ -95,7 +96,8 @@ public class TramoRutaServiceImpl implements TramoRutaService {
|
|
|
|
|
}
|
|
|
|
|
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)))) {
|
|
|
|
|
|| ((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,17 +449,59 @@ 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");
|
|
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
|
|
|
|
|
//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(), kmReal, new HoraSistema(), rutaTramoVO.getNumRuta());
|
|
|
|
|
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());
|
|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|