fixes bug #9015
git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@69689 d1611594-4594-4d17-8e1d-87c2c4800839master
parent
1b0e3bec4d
commit
eb32b0ba65
|
@ -11,7 +11,33 @@ public class ParadaSecuenciaCombinacaoLinha {
|
||||||
private ParadaSecuencia origem;
|
private ParadaSecuencia origem;
|
||||||
private List<ParadaSecuencia> destinos;
|
private List<ParadaSecuencia> destinos;
|
||||||
private Via via;
|
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() {
|
public ParadaSecuencia getOrigem() {
|
||||||
return origem;
|
return origem;
|
||||||
|
|
|
@ -137,12 +137,14 @@ public class Ruta implements Serializable, Comparable<Ruta> {
|
||||||
indRutaCancelada = false;
|
indRutaCancelada = false;
|
||||||
indBloqueoVtaAbierta = false;
|
indBloqueoVtaAbierta = false;
|
||||||
indSentidoIda = true;
|
indSentidoIda = true;
|
||||||
|
indRutaInternacional = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Ruta(Integer rutaId, String descruta) {
|
public Ruta(Integer rutaId, String descruta) {
|
||||||
this();
|
this();
|
||||||
this.rutaId = rutaId;
|
this.rutaId = rutaId;
|
||||||
this.descruta = descruta;
|
this.descruta = descruta;
|
||||||
|
indRutaInternacional = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Ruta clone(Ruta other) {
|
public static Ruta clone(Ruta other) {
|
||||||
|
@ -239,6 +241,7 @@ public class Ruta implements Serializable, Comparable<Ruta> {
|
||||||
public Ruta(Integer rutaId) {
|
public Ruta(Integer rutaId) {
|
||||||
this();
|
this();
|
||||||
this.rutaId = rutaId;
|
this.rutaId = rutaId;
|
||||||
|
this.indRutaInternacional = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getRutaId() {
|
public Integer getRutaId() {
|
||||||
|
|
|
@ -524,6 +524,9 @@ public class RutaServiceImpl implements RutaService {
|
||||||
paradaSecuenciaCombinacaoLinha.setOrigem(sequenciaInformada);
|
paradaSecuenciaCombinacaoLinha.setOrigem(sequenciaInformada);
|
||||||
paradaSecuenciaCombinacaoLinha.setVia(via);
|
paradaSecuenciaCombinacaoLinha.setVia(via);
|
||||||
paradaSecuenciaCombinacaoLinha.setDestinos(new ArrayList<ParadaSecuencia>());
|
paradaSecuenciaCombinacaoLinha.setDestinos(new ArrayList<ParadaSecuencia>());
|
||||||
|
paradaSecuenciaCombinacaoLinha.setKmReal(sequenciaInformada.getKmReal());
|
||||||
|
paradaSecuenciaCombinacaoLinha.setKmEntradaSaida(sequenciaInformada.getKmEntradaSaida());
|
||||||
|
paradaSecuenciaCombinacaoLinha.setTempoReal(sequenciaInformada.getTempoReal());
|
||||||
|
|
||||||
for (ParadaSecuencia sequenciaExistente : lsParadasSecuencia) {
|
for (ParadaSecuencia sequenciaExistente : lsParadasSecuencia) {
|
||||||
if (sequenciaInformada.getParada().getParadaId() == sequenciaExistente.getParada().getParadaId()) {
|
if (sequenciaInformada.getParada().getParadaId() == sequenciaExistente.getParada().getParadaId()) {
|
||||||
|
|
|
@ -40,6 +40,7 @@ import com.rjconsultores.ventaboletos.service.RutaSecuenciaService;
|
||||||
import com.rjconsultores.ventaboletos.service.TramoRutaService;
|
import com.rjconsultores.ventaboletos.service.TramoRutaService;
|
||||||
import com.rjconsultores.ventaboletos.service.TramoService;
|
import com.rjconsultores.ventaboletos.service.TramoService;
|
||||||
import com.rjconsultores.ventaboletos.service.TramoServicioService;
|
import com.rjconsultores.ventaboletos.service.TramoServicioService;
|
||||||
|
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
|
||||||
import com.rjconsultores.ventaboletos.utilerias.HoraSistema;
|
import com.rjconsultores.ventaboletos.utilerias.HoraSistema;
|
||||||
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
|
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
|
||||||
import com.rjconsultores.ventaboletos.vo.esquemaoperacional.RutaTramoVO;
|
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)
|
if ((s.getOrigen() == null) || (s.getDestino() == null) || (s.getVia() == null)
|
||||||
|| (s.getKmReal() == null) || (s.getSecuencia() == null) || (s.getTiempoRecorrido() == 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() });
|
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>();
|
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();
|
Parada origem = secuencia.getOrigem().getParada();
|
||||||
Via via = secuencia.getVia();
|
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();
|
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,
|
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) {
|
if (nuevaSecuencia.getKmCoeficiente1() == null) {
|
||||||
nuevaSecuencia.setKmCoeficiente1(nuevaSecuencia.getKmReal());
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -655,5 +655,15 @@ public final class DateUtil {
|
||||||
Calendar cal = Calendar.getInstance();
|
Calendar cal = Calendar.getInstance();
|
||||||
cal.add(Calendar.DATE, -1);
|
cal.add(Calendar.DATE, -1);
|
||||||
return dateFormat.format(cal.getTime());
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue