bug#22508
dev:wilian qua: git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@107099 d1611594-4594-4d17-8e1d-87c2c4800839master
parent
20474206cf
commit
2027e5d707
|
@ -1,309 +0,0 @@
|
|||
package com.rjconsultores.ventaboletos.web.utilerias.combinacion.conexionruta;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import com.rjconsultores.ventaboletos.entidad.Parada;
|
||||
import com.rjconsultores.ventaboletos.entidad.Ruta;
|
||||
import com.rjconsultores.ventaboletos.service.RutaCombinacionService;
|
||||
import com.rjconsultores.ventaboletos.vo.parada.ConexionCtrlVO;
|
||||
import com.rjconsultores.ventaboletos.vo.parada.ConexionRutaCtrlVO;
|
||||
import com.rjconsultores.ventaboletos.vo.parada.ParadaVOConexionRuta;
|
||||
import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext;
|
||||
|
||||
public class ConexionRutaCombinacionFactory {
|
||||
|
||||
private static Map<Integer, Parada> cacheLocalidades;
|
||||
|
||||
private static RutaCombinacionService rutaCombinacionService = (RutaCombinacionService) AppContext.getApplicationContext().getBean("rutaCombinacionaService");
|
||||
|
||||
public static Map<Integer, Parada> criandoCacheLocalidades(List<Parada> list) {
|
||||
Map<Integer, Parada> map = new HashMap<Integer, Parada>();
|
||||
for (Parada parada : list) {
|
||||
map.put(parada.getParadaId(), parada);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
private static void gerarCombinacao(LinkedList<List<Parada>> lists, List<Ruta> rutasEixoA, List<Ruta> rutasEixoB, List<Ruta> rutasEixoC, List<ParadaVOConexionRuta> localidadesGeradas, List<ConexionCtrlVO> conexoesCtrl) {
|
||||
|
||||
|
||||
Set<String> combinacoes = new TreeSet<String>();
|
||||
|
||||
for (Parada s : lists.removeFirst())
|
||||
combinacoes.add(s.getParadaId().toString());
|
||||
|
||||
while (!lists.isEmpty()) {
|
||||
List<Parada> next = lists.removeFirst();
|
||||
Set<String> novasCombinacoes = new TreeSet<String>();
|
||||
for (String s1 : combinacoes) {
|
||||
for (Parada s2 : next) {
|
||||
novasCombinacoes.add(s1 + ";" + s2.getParadaId());
|
||||
}
|
||||
}
|
||||
combinacoes = novasCombinacoes;
|
||||
}
|
||||
//System.out.println(combinacoes);
|
||||
|
||||
if(rutasEixoC == null) {
|
||||
gerarLocalidadesEixoAB(rutasEixoA, rutasEixoB, localidadesGeradas, combinacoes, conexoesCtrl);
|
||||
}else {
|
||||
gerarLocalidadesEixoABC(rutasEixoA, rutasEixoB,rutasEixoC, localidadesGeradas, combinacoes, conexoesCtrl);
|
||||
}
|
||||
|
||||
Collections.sort(localidadesGeradas, new OrdenarLocalidadesGeradas());
|
||||
}
|
||||
|
||||
|
||||
private static void gerarLocalidadesEixoAB(List<Ruta> rutasEixoA, List<Ruta> rutasEixoB, List<ParadaVOConexionRuta> localidadesGeradas, Set<String> combinacoes, List<ConexionCtrlVO> conexoesCtrl) {
|
||||
short i = 1;
|
||||
String[] valoresCalculados;
|
||||
|
||||
for (Ruta rutaEixoA : rutasEixoA) {
|
||||
for (Ruta rutaEixoB : rutasEixoB) {
|
||||
for (String comb : combinacoes) {
|
||||
valoresCalculados = comb.split(";");
|
||||
if(valoresCalculados != null && valoresCalculados.length == 4) {
|
||||
Integer origemConexaoCtrl = Integer.parseInt(valoresCalculados[0]);
|
||||
Integer destinoConexaoCtrl = Integer.parseInt(valoresCalculados[3]);
|
||||
if(origemConexaoCtrl == null || cacheLocalidades.get(origemConexaoCtrl) == null ||
|
||||
destinoConexaoCtrl == null || cacheLocalidades.get(destinoConexaoCtrl) == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ConexionCtrlVO conexionCtrl = adicionarConexao(conexoesCtrl, origemConexaoCtrl, destinoConexaoCtrl);
|
||||
ConexionRutaCtrlVO conexionRutaCtrl = new ConexionRutaCtrlVO(rutaEixoA.getRutaId(), rutaEixoB.getRutaId(), null);
|
||||
|
||||
ParadaVOConexionRuta trechoA = new ParadaVOConexionRuta(conexionCtrl.getGrupo(), cacheLocalidades.get(Integer.parseInt(valoresCalculados[0])), cacheLocalidades.get(Integer.parseInt(valoresCalculados[1])), rutaEixoA.getRutaId(), rutaEixoA.getNumRuta(), i, true,
|
||||
cacheLocalidades.get(Integer.parseInt(valoresCalculados[0])), cacheLocalidades.get(Integer.parseInt(valoresCalculados[3])),
|
||||
conexionCtrl, conexionRutaCtrl, rutaEixoA.getDescSentido());
|
||||
i++;
|
||||
|
||||
ParadaVOConexionRuta trechoB = new ParadaVOConexionRuta(conexionCtrl.getGrupo(), cacheLocalidades.get(Integer.parseInt(valoresCalculados[2])), cacheLocalidades.get(Integer.parseInt(valoresCalculados[3])), rutaEixoB.getRutaId(), rutaEixoB.getNumRuta(), i, true,
|
||||
cacheLocalidades.get(Integer.parseInt(valoresCalculados[0])), cacheLocalidades.get(Integer.parseInt(valoresCalculados[3])),
|
||||
conexionCtrl, conexionRutaCtrl, rutaEixoB.getDescSentido());
|
||||
i++;
|
||||
|
||||
adicionarLocalidadeGerada(conexionCtrl, localidadesGeradas, trechoA, trechoB, null);
|
||||
|
||||
i = 1;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
removerConexionCtrlInvalida(conexoesCtrl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param conexoesCtrl
|
||||
* @param origemConexaoCtrl
|
||||
* @param destinoConexaoCtrl
|
||||
* @return
|
||||
*/
|
||||
private static ConexionCtrlVO adicionarConexao(List<ConexionCtrlVO> conexoesCtrl, Integer origemConexaoCtrl, Integer destinoConexaoCtrl) {
|
||||
ConexionCtrlVO conexionCtrl = null;
|
||||
Integer indice = 0;
|
||||
for (ConexionCtrlVO conexionCtrlTemp : conexoesCtrl) {
|
||||
if(conexionCtrlTemp.isOrigemDestinoIgual(origemConexaoCtrl, destinoConexaoCtrl)) {
|
||||
conexionCtrl = conexionCtrlTemp;
|
||||
break;
|
||||
}
|
||||
indice++;
|
||||
}
|
||||
|
||||
if(conexionCtrl == null) {
|
||||
conexionCtrl = new ConexionCtrlVO(origemConexaoCtrl, destinoConexaoCtrl);
|
||||
indice = -1;
|
||||
}
|
||||
|
||||
conexionCtrl.incrementarGrupo();
|
||||
|
||||
if(indice > -1) {
|
||||
conexoesCtrl.set(indice, conexionCtrl);
|
||||
} else {
|
||||
conexoesCtrl.add(conexionCtrl);
|
||||
}
|
||||
|
||||
return conexionCtrl;
|
||||
|
||||
}
|
||||
|
||||
private static void adicionarLocalidadeGerada(ConexionCtrlVO conexionCtrl, List<ParadaVOConexionRuta> localidadesGeradas, ParadaVOConexionRuta trechoA, ParadaVOConexionRuta trechoB, ParadaVOConexionRuta trechoC) {
|
||||
boolean isTrechoAVende = false;
|
||||
boolean isTrechoBVende = false;
|
||||
|
||||
if(isDadosNotNull(trechoA)) {
|
||||
isTrechoAVende = rutaCombinacionService.isRutaCombinacionVenda(trechoA.getRutaId(), trechoA.getParadaOrigem().getParadaId(), trechoA.getParadaDestino().getParadaId());
|
||||
}
|
||||
|
||||
if(isDadosNotNull(trechoB)) {
|
||||
isTrechoBVende = rutaCombinacionService.isRutaCombinacionVenda(trechoB.getRutaId(), trechoB.getParadaOrigem().getParadaId(), trechoB.getParadaDestino().getParadaId());
|
||||
}
|
||||
|
||||
boolean isTrechoCVende = true;
|
||||
if(trechoC != null) {
|
||||
if(isDadosNotNull(trechoC)) {
|
||||
isTrechoCVende = rutaCombinacionService.isRutaCombinacionVenda(trechoC.getRutaId(), trechoC.getParadaOrigem().getParadaId(), trechoC.getParadaDestino().getParadaId());
|
||||
} else {
|
||||
isTrechoCVende = false;
|
||||
}
|
||||
}
|
||||
|
||||
if(isTrechoAVende && isTrechoBVende && isTrechoCVende) {
|
||||
localidadesGeradas.add(trechoA);
|
||||
localidadesGeradas.add(trechoB);
|
||||
if(trechoC != null) {
|
||||
localidadesGeradas.add(trechoC);
|
||||
}
|
||||
conexionCtrl.setValida(true);
|
||||
} else {
|
||||
conexionCtrl.decrementarGrupo();
|
||||
}
|
||||
}
|
||||
|
||||
private static void gerarLocalidadesEixoABC(List<Ruta> rutasEixoA, List<Ruta> rutasEixoB, List<Ruta> rutasEixoC, List<ParadaVOConexionRuta> localidadesGeradas, Set<String> combinations, List<ConexionCtrlVO> conexoesCtrl) {
|
||||
|
||||
short i = 1;
|
||||
String[] valoresCalculados = null;
|
||||
for (Ruta rutaEixoA : rutasEixoA) {
|
||||
|
||||
for (Ruta rutaEixoB : rutasEixoB) {
|
||||
for (Ruta rutaEixoC : rutasEixoC) {
|
||||
for (String comb : combinations) {
|
||||
valoresCalculados = comb.split(";");
|
||||
if(valoresCalculados != null && valoresCalculados.length == 5) {
|
||||
Integer origemConexaoCtrl = Integer.parseInt(valoresCalculados[0]);
|
||||
Integer destinoConexaoCtrl = Integer.parseInt(valoresCalculados[4]);
|
||||
if(origemConexaoCtrl == null || cacheLocalidades.get(origemConexaoCtrl) == null ||
|
||||
destinoConexaoCtrl == null || cacheLocalidades.get(destinoConexaoCtrl) == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ConexionCtrlVO conexionCtrl = adicionarConexao(conexoesCtrl, origemConexaoCtrl, destinoConexaoCtrl);
|
||||
ConexionRutaCtrlVO conexionRutaCtrl = new ConexionRutaCtrlVO(rutaEixoA.getRutaId(), rutaEixoB.getRutaId(), rutaEixoC.getRutaId());
|
||||
|
||||
ParadaVOConexionRuta trechoA = new ParadaVOConexionRuta(conexionCtrl.getGrupo(), cacheLocalidades.get(Integer.parseInt(valoresCalculados[0])), cacheLocalidades.get(Integer.parseInt(valoresCalculados[1])), rutaEixoA.getRutaId(), rutaEixoA.getNumRuta(), i, true,
|
||||
cacheLocalidades.get(Integer.parseInt(valoresCalculados[0])), cacheLocalidades.get(Integer.parseInt(valoresCalculados[4])),
|
||||
conexionCtrl, conexionRutaCtrl, rutaEixoA.getDescSentido());
|
||||
i++;
|
||||
|
||||
ParadaVOConexionRuta trechoB = new ParadaVOConexionRuta(conexionCtrl.getGrupo(), cacheLocalidades.get(Integer.parseInt(valoresCalculados[2])), cacheLocalidades.get(Integer.parseInt(valoresCalculados[3])), rutaEixoB.getRutaId(), rutaEixoB.getNumRuta(), i, true,
|
||||
cacheLocalidades.get(Integer.parseInt(valoresCalculados[0])), cacheLocalidades.get(Integer.parseInt(valoresCalculados[4])),
|
||||
conexionCtrl, conexionRutaCtrl, rutaEixoB.getDescSentido());
|
||||
i++;
|
||||
|
||||
ParadaVOConexionRuta trechoC = new ParadaVOConexionRuta(conexionCtrl.getGrupo(), cacheLocalidades.get(Integer.parseInt(valoresCalculados[3])), cacheLocalidades.get(Integer.parseInt(valoresCalculados[4])), rutaEixoC.getRutaId(), rutaEixoC.getNumRuta(), i, true,
|
||||
cacheLocalidades.get(Integer.parseInt(valoresCalculados[0])), cacheLocalidades.get(Integer.parseInt(valoresCalculados[4])),
|
||||
conexionCtrl, conexionRutaCtrl, rutaEixoC.getDescSentido());
|
||||
i++;
|
||||
|
||||
adicionarLocalidadeGerada(conexionCtrl, localidadesGeradas, trechoA, trechoB, trechoC);
|
||||
|
||||
i = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
removerConexionCtrlInvalida(conexoesCtrl);
|
||||
}
|
||||
|
||||
private static void removerConexionCtrlInvalida(List<ConexionCtrlVO> conexoesCtrl) {
|
||||
List<ConexionCtrlVO> temp = new ArrayList<ConexionCtrlVO>(0);
|
||||
for (ConexionCtrlVO conexionCtrl : conexoesCtrl) {
|
||||
if(conexionCtrl.isValida()) {
|
||||
temp.add(conexionCtrl);
|
||||
}
|
||||
}
|
||||
conexoesCtrl.clear();
|
||||
conexoesCtrl.addAll(temp);
|
||||
}
|
||||
|
||||
public static void gerarCombinacionEntre2Eixos(List<Parada> listParada1, List<Ruta> rutasEixoA, List<Ruta> rutasEixoB, List<Parada> lsLocalidadesComuns, List<Parada> listParada4, List<Ruta> rutasEixoA2, List<Ruta> rutasEixoB2, List<ParadaVOConexionRuta> localidadesGeradas, List<ConexionCtrlVO> conexoesCtrl) {
|
||||
|
||||
for (int i = 0; i < lsLocalidadesComuns.size(); i++) {
|
||||
|
||||
List<Parada> listParada2 = Arrays.asList(lsLocalidadesComuns.get(i));
|
||||
List<Parada> listParada3 = Arrays.asList(lsLocalidadesComuns.get(i));
|
||||
|
||||
LinkedList<List<Parada>> lists = new LinkedList<List<Parada>>();
|
||||
|
||||
lists.add(listParada1);
|
||||
lists.add(listParada2);
|
||||
lists.add(listParada3);
|
||||
lists.add(listParada4);
|
||||
|
||||
List<Parada> localidades = new ArrayList<Parada>();
|
||||
localidades.addAll(listParada1);
|
||||
localidades.addAll(listParada2);
|
||||
localidades.addAll(listParada3);
|
||||
localidades.addAll(listParada4);
|
||||
|
||||
cacheLocalidades = criandoCacheLocalidades(localidades);
|
||||
gerarCombinacao(lists, rutasEixoA, rutasEixoB, null, localidadesGeradas, conexoesCtrl);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void gerarCombinacionEntre3Eixos(List<Parada> listParada1, List<Ruta> rutasEixoA, List<Ruta> rutasEixoB, List<Parada> lsLocalidadesComuns, List<Parada> listParada4, List<Parada> listParadasC, List<Ruta> rutasEixoA2, List<Ruta> rutasEixoB2, List<Ruta> rutasEixoC, List<ParadaVOConexionRuta> localidadesGeradas, List<ConexionCtrlVO> conexoesCtrl) {
|
||||
|
||||
for (int i = 0; i < lsLocalidadesComuns.size(); i++) {
|
||||
|
||||
List<Parada> listParada2 = Arrays.asList(lsLocalidadesComuns.get(i));
|
||||
List<Parada> listParada3 = Arrays.asList(lsLocalidadesComuns.get(i));
|
||||
|
||||
LinkedList<List<Parada>> lists = new LinkedList<List<Parada>>();
|
||||
|
||||
lists.add(listParada1);
|
||||
lists.add(listParada2);
|
||||
lists.add(listParada3);
|
||||
lists.add(listParada4);
|
||||
lists.add(listParadasC);
|
||||
|
||||
List<Parada> localidades = new ArrayList<Parada>();
|
||||
localidades.addAll(listParada1);
|
||||
localidades.addAll(listParada2);
|
||||
localidades.addAll(listParada3);
|
||||
localidades.addAll(listParada4);
|
||||
localidades.addAll(listParadasC);
|
||||
|
||||
cacheLocalidades = criandoCacheLocalidades(localidades);
|
||||
gerarCombinacao(lists, rutasEixoA, rutasEixoB, rutasEixoC, localidadesGeradas, conexoesCtrl);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public static Map<Integer, Parada> getCacheLocalidades() {
|
||||
return cacheLocalidades;
|
||||
}
|
||||
|
||||
public static List<ConexionRutaCtrlVO> extrairConexionRutaCtrl(List<ParadaVOConexionRuta> localidadesGeradas) {
|
||||
List<ConexionRutaCtrlVO> list = new ArrayList<ConexionRutaCtrlVO>(0);
|
||||
for (ParadaVOConexionRuta paradaVOConexionRuta : localidadesGeradas) {
|
||||
if(!list.contains(paradaVOConexionRuta.getConexionRutaCtrl())) {
|
||||
list.add(paradaVOConexionRuta.getConexionRutaCtrl());
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
private static boolean isDadosNotNull(ParadaVOConexionRuta trecho) {
|
||||
return trecho != null &&
|
||||
trecho.getRutaId() != null &&
|
||||
trecho.getParadaOrigem() != null &&
|
||||
trecho.getParadaDestino() != null;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
package com.rjconsultores.ventaboletos.web.utilerias.combinacion.conexionruta;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
import com.rjconsultores.ventaboletos.vo.parada.ParadaVOConexionRuta;
|
||||
|
||||
public class OrdenarLocalidadesGeradas implements Comparator<ParadaVOConexionRuta> {
|
||||
|
||||
@Override
|
||||
public int compare(ParadaVOConexionRuta o1, ParadaVOConexionRuta o2) {
|
||||
int retorno = o1.getParadaOrigemTrecho().getParadaId().compareTo(o2.getParadaOrigemTrecho().getParadaId());
|
||||
if(retorno == 0) {
|
||||
retorno = o1.getParadaDestinoTrecho().getParadaId().compareTo(o2.getParadaDestinoTrecho().getParadaId());
|
||||
}
|
||||
if(retorno == 0) {
|
||||
retorno = o1.getGrupo().compareTo(o2.getGrupo());
|
||||
}
|
||||
if(retorno == 0) {
|
||||
retorno = o1.getSecuencia().compareTo(o2.getSecuencia());
|
||||
}
|
||||
return retorno;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue