bug#22508

dev:wilian
qua:

git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@107099 d1611594-4594-4d17-8e1d-87c2c4800839
master
wilian 2021-06-07 21:02:26 +00:00
parent 20474206cf
commit 2027e5d707
2 changed files with 0 additions and 333 deletions

View File

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

View File

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