diff --git a/src/com/rjconsultores/ventaboletos/dao/ConexionRutaConfDAO.java b/src/com/rjconsultores/ventaboletos/dao/ConexionRutaConfDAO.java index 83b330ec6..f3f2fbe46 100644 --- a/src/com/rjconsultores/ventaboletos/dao/ConexionRutaConfDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/ConexionRutaConfDAO.java @@ -12,10 +12,12 @@ public interface ConexionRutaConfDAO extends GenericDAO obtenerTodosActivo(); - public void excluirConfiguracao(ConexionRutaConf conexion, Integer usuarioId, boolean excluirConexionRutaConf); + public void excluirConfiguracao(ConexionRutaConf conexion, Integer usuarioId, boolean excluirConexionRutaConf, boolean isConexionGerada); public ConexionRutaConfVO carregarConexoesCadastradas(Integer conexionrutaconfId); public List> buscarRutasPorConexionConf(Integer conexionRutaConfId); + public void atualizarTempoMinimoEMaximo(ConexionRutaConf conexionRutaConf); + } diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/ConexionRutaConfHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/ConexionRutaConfHibernateDAO.java index 5c1a2a8a5..9f6dd868f 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/ConexionRutaConfHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/ConexionRutaConfHibernateDAO.java @@ -2,6 +2,7 @@ package com.rjconsultores.ventaboletos.dao.hibernate; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collections; import java.util.List; import org.hibernate.Criteria; @@ -19,6 +20,7 @@ import com.rjconsultores.ventaboletos.entidad.ConexionRutaConf; import com.rjconsultores.ventaboletos.entidad.ConexionRutaCtrl; import com.rjconsultores.ventaboletos.entidad.Parada; import com.rjconsultores.ventaboletos.entidad.Ruta; +import com.rjconsultores.ventaboletos.vo.conexion.OrdenarLocalidadesGeradas; import com.rjconsultores.ventaboletos.vo.parada.ConexionCtrlVO; import com.rjconsultores.ventaboletos.vo.parada.ConexionRutaConfVO; import com.rjconsultores.ventaboletos.vo.parada.ConexionRutaCtrlVO; @@ -50,8 +52,8 @@ public class ConexionRutaConfHibernateDAO extends GenericHibernateDAO comandos = carregarComandosInativarConfiguracao(excluirConexionRutaConf); + public void excluirConfiguracao(ConexionRutaConf conexion, Integer usuarioId, boolean excluirConexionRutaConf, boolean isConexionGerada) { + List comandos = carregarComandosInativarConfiguracao(excluirConexionRutaConf, isConexionGerada); for (String comando : comandos) { Query qr = getSession().createSQLQuery(comando); qr.setParameter("usuarioId", usuarioId); @@ -61,80 +63,86 @@ public class ConexionRutaConfHibernateDAO extends GenericHibernateDAO carregarComandosInativarConfiguracao(boolean excluirConexionRutaConf) { + private List carregarComandosInativarConfiguracao(boolean excluirConexionRutaConf, boolean isConexionGerada) { List comandos = new ArrayList(0); StringBuilder sb = new StringBuilder(); if(excluirConexionRutaConf) { sb.append("update conexion_ruta_conf ") .append("set activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif ") - .append("where conexionrutaconf_id = :conexionrutaconfId"); + .append("where conexionrutaconf_id = :conexionrutaconfId ") + .append("and activo = 1"); comandos.add(sb.toString()); } - - sb = new StringBuilder(); - sb.append("update conexion_ruta_ctrl ") - .append("set activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif ") - .append("where conexionrutaconf_id = :conexionrutaconfId"); - comandos.add(sb.toString()); - + sb = new StringBuilder(); sb.append("update conexion_ruta_excepcion_ptovta ") .append("set activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif ") - .append("where conexionrutaconf_id = :conexionrutaconfId"); + .append("where conexionrutaconf_id = :conexionrutaconfId ") + .append("and activo = 1"); comandos.add(sb.toString()); - + sb = new StringBuilder(); sb.append("update conexion_rutaexcepciontipopta ") .append("set activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif ") - .append("where conexionrutaconf_id = :conexionrutaconfId"); - comandos.add(sb.toString()); - - sb = new StringBuilder(); - sb.append("merge into conexion_ruta_tramo_ctrl c ") - .append("using ( ") - .append("select c1.conexionrutatramoctrl_id ") - .append("from conexion_ruta_tramo_ctrl c1 ") - .append("join conexion_ruta_ctrl c2 on c1.conexionrutactrl_id = c2.conexionrutactrl_id ") - .append("where c2.conexionrutaconf_id = :conexionrutaconfId and c1.activo = 1) t on (t.conexionrutatramoctrl_id = c.conexionrutatramoctrl_id) ") - .append("when matched then update set c.activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif "); - comandos.add(sb.toString()); - - sb = new StringBuilder(); - sb.append("merge into conexion c ") - .append("using ( ") - .append("select c.conexion_id ") - .append("from conexion c ") - .append("join conexion_ruta_tramo_ctrl c1 on c.conexionrutatramoctrl_id = c1.conexionrutatramoctrl_id ") - .append("join conexion_ruta_ctrl c2 on c1.conexionrutactrl_id = c2.conexionrutactrl_id ") - .append("where c2.conexionrutaconf_id = :conexionrutaconfId and c.activo = 1) t on (t.conexion_id = c.conexion_id) ") - .append("when matched then update set c.activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif"); - comandos.add(sb.toString()); - - sb = new StringBuilder(); - sb.append("merge into conexion_ctrl c ") - .append("using ( ") - .append("select distinct c.conexionctrl_id ") - .append("from conexion_ctrl c ") - .append("join conexion c3 on c3.conexionctrl_id = c.conexionctrl_id ") - .append("join conexion_ruta_tramo_ctrl c1 on c3.conexionrutatramoctrl_id = c1.conexionrutatramoctrl_id ") - .append("join conexion_ruta_ctrl c2 on c1.conexionrutactrl_id = c2.conexionrutactrl_id ") - .append("where c2.conexionrutaconf_id = :conexionrutaconfId and c.activo = 1) t on (t.conexionctrl_id = c.conexionctrl_id) ") - .append("when matched then update set c.activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif"); - comandos.add(sb.toString()); - - sb = new StringBuilder(); - sb.append("merge into conexion_conf c ") - .append("using ( ") - .append("select distinct c.conexionconf_id ") - .append("from conexion_conf c ") - .append("join conexion_ctrl c4 on c4.conexionctrl_id = c.conexionctrl_id ") - .append("join conexion c3 on c3.conexionctrl_id = c4.conexionctrl_id ") - .append("join conexion_ruta_tramo_ctrl c1 on c3.conexionrutatramoctrl_id = c1.conexionrutatramoctrl_id ") - .append("join conexion_ruta_ctrl c2 on c1.conexionrutactrl_id = c2.conexionrutactrl_id ") - .append("where c2.conexionrutaconf_id = :conexionrutaconfId and c.activo = 1) t on (t.conexionconf_id = c.conexionconf_id) ") - .append("when matched then update set c.activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif "); + .append("where conexionrutaconf_id = :conexionrutaconfId ") + .append("and activo = 1"); comandos.add(sb.toString()); + + if(isConexionGerada || excluirConexionRutaConf) { + sb = new StringBuilder(); + sb.append("update conexion_ruta_ctrl ") + .append("set activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif ") + .append("where conexionrutaconf_id = :conexionrutaconfId ") + .append("and activo = 1"); + comandos.add(sb.toString()); + + sb = new StringBuilder(); + sb.append("merge into conexion_ruta_tramo_ctrl c ") + .append("using ( ") + .append("select c1.conexionrutatramoctrl_id ") + .append("from conexion_ruta_tramo_ctrl c1 ") + .append("join conexion_ruta_ctrl c2 on c1.conexionrutactrl_id = c2.conexionrutactrl_id ") + .append("where c2.conexionrutaconf_id = :conexionrutaconfId and c1.activo = 1) t on (t.conexionrutatramoctrl_id = c.conexionrutatramoctrl_id) ") + .append("when matched then update set c.activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif "); + comandos.add(sb.toString()); + + sb = new StringBuilder(); + sb.append("merge into conexion c ") + .append("using ( ") + .append("select c.conexion_id ") + .append("from conexion c ") + .append("join conexion_ruta_tramo_ctrl c1 on c.conexionrutatramoctrl_id = c1.conexionrutatramoctrl_id ") + .append("join conexion_ruta_ctrl c2 on c1.conexionrutactrl_id = c2.conexionrutactrl_id ") + .append("where c2.conexionrutaconf_id = :conexionrutaconfId and c.activo = 1) t on (t.conexion_id = c.conexion_id) ") + .append("when matched then update set c.activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif"); + comandos.add(sb.toString()); + + sb = new StringBuilder(); + sb.append("merge into conexion_ctrl c ") + .append("using ( ") + .append("select distinct c.conexionctrl_id ") + .append("from conexion_ctrl c ") + .append("join conexion c3 on c3.conexionctrl_id = c.conexionctrl_id ") + .append("join conexion_ruta_tramo_ctrl c1 on c3.conexionrutatramoctrl_id = c1.conexionrutatramoctrl_id ") + .append("join conexion_ruta_ctrl c2 on c1.conexionrutactrl_id = c2.conexionrutactrl_id ") + .append("where c2.conexionrutaconf_id = :conexionrutaconfId and c.activo = 1) t on (t.conexionctrl_id = c.conexionctrl_id) ") + .append("when matched then update set c.activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif"); + comandos.add(sb.toString()); + + sb = new StringBuilder(); + sb.append("merge into conexion_conf c ") + .append("using ( ") + .append("select distinct c.conexionconf_id ") + .append("from conexion_conf c ") + .append("join conexion_ctrl c4 on c4.conexionctrl_id = c.conexionctrl_id ") + .append("join conexion c3 on c3.conexionctrl_id = c4.conexionctrl_id ") + .append("join conexion_ruta_tramo_ctrl c1 on c3.conexionrutatramoctrl_id = c1.conexionrutatramoctrl_id ") + .append("join conexion_ruta_ctrl c2 on c1.conexionrutactrl_id = c2.conexionrutactrl_id ") + .append("where c2.conexionrutaconf_id = :conexionrutaconfId and c.activo = 1) t on (t.conexionconf_id = c.conexionconf_id) ") + .append("when matched then update set c.activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif "); + comandos.add(sb.toString()); + } return comandos; } @@ -210,6 +218,8 @@ public class ConexionRutaConfHibernateDAO extends GenericHibernateDAO listParada1, List rutasEixoA, List rutasEixoB, List lsLocalidadesComuns, List listParada4, List rutasEixoA2, List rutasEixoB2, List localidadesGeradas, List conexoesCtrl); + + public void gerarCombinacionEntre3Eixos(List listParada1, List rutasEixoA, List rutasEixoB, List lsLocalidadesComuns, List listParada4, List listParadasC, List rutasEixoA2, List rutasEixoB2, List rutasEixoC, List localidadesGeradas, List conexoesCtrl); + + public List extrairConexionRutaCtrl(List localidadesGeradas); + +} diff --git a/src/com/rjconsultores/ventaboletos/service/ConexionRutaConfService.java b/src/com/rjconsultores/ventaboletos/service/ConexionRutaConfService.java index a0f6d7b3b..0dcb2c016 100644 --- a/src/com/rjconsultores/ventaboletos/service/ConexionRutaConfService.java +++ b/src/com/rjconsultores/ventaboletos/service/ConexionRutaConfService.java @@ -30,9 +30,10 @@ public interface ConexionRutaConfService { public ConexionRutaConf obtenerID(Integer id); public ConexionRutaConf salvarConfiguracao(ConexionRutaConf conexion, List canalVentas, List puntoVentas, - List conexoesCtrl, List rutas, List localidadesCombinadas); + List conexoesCtrl, List rutas, List localidadesCombinadas, + boolean isConexionGerada); - public void excluirConfiguracao(ConexionRutaConf conexion, boolean excluirConexionRutaConf); + public void excluirConfiguracao(ConexionRutaConf conexion, boolean excluirConexionRutaConf, boolean isConexionGerada); public ConexionRutaConfVO carregarConexoesCadastradas(Integer conexionrutaconfId); diff --git a/src/com/rjconsultores/ventaboletos/service/impl/ConexionRutaCombinacionServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/ConexionRutaCombinacionServiceImpl.java new file mode 100644 index 000000000..e07f8faa3 --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/service/impl/ConexionRutaCombinacionServiceImpl.java @@ -0,0 +1,309 @@ +package com.rjconsultores.ventaboletos.service.impl; + +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 org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.rjconsultores.ventaboletos.entidad.Parada; +import com.rjconsultores.ventaboletos.entidad.Ruta; +import com.rjconsultores.ventaboletos.service.ConexionRutaCombinacionService; +import com.rjconsultores.ventaboletos.service.RutaCombinacionService; +import com.rjconsultores.ventaboletos.vo.conexion.OrdenarLocalidadesGeradas; +import com.rjconsultores.ventaboletos.vo.parada.ConexionCtrlVO; +import com.rjconsultores.ventaboletos.vo.parada.ConexionRutaCtrlVO; +import com.rjconsultores.ventaboletos.vo.parada.ParadaVOConexionRuta; + +@Service("conexionRutaCombinacionFactory") +public class ConexionRutaCombinacionServiceImpl implements ConexionRutaCombinacionService { + + @Autowired + private RutaCombinacionService rutaCombinacionService; + + private Map criandoCacheLocalidades(List list) { + Map cacheLocalidades = new HashMap(); + for (Parada parada : list) { + cacheLocalidades.put(parada.getParadaId(), parada); + } + return cacheLocalidades; + } + + private void gerarCombinacao(LinkedList> lists, List rutasEixoA, List rutasEixoB, List rutasEixoC, List localidadesGeradas, List conexoesCtrl, Map cacheLocalidades) { + + + Set combinacoes = new TreeSet(); + + for (Parada s : lists.removeFirst()) + combinacoes.add(s.getParadaId().toString()); + + while (!lists.isEmpty()) { + List next = lists.removeFirst(); + Set novasCombinacoes = new TreeSet(); + 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, cacheLocalidades); + }else { + gerarLocalidadesEixoABC(rutasEixoA, rutasEixoB,rutasEixoC, localidadesGeradas, combinacoes, conexoesCtrl, cacheLocalidades); + } + + Collections.sort(localidadesGeradas, new OrdenarLocalidadesGeradas()); + } + + + private void gerarLocalidadesEixoAB(List rutasEixoA, List rutasEixoB, List localidadesGeradas, Set combinacoes, List conexoesCtrl, Map cacheLocalidades) { + 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 ConexionCtrlVO adicionarConexao(List 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 void adicionarLocalidadeGerada(ConexionCtrlVO conexionCtrl, List 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 void gerarLocalidadesEixoABC(List rutasEixoA, List rutasEixoB, List rutasEixoC, List localidadesGeradas, Set combinations, List conexoesCtrl, Map cacheLocalidades) { + + 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 void removerConexionCtrlInvalida(List conexoesCtrl) { + List temp = new ArrayList(0); + for (ConexionCtrlVO conexionCtrl : conexoesCtrl) { + if(conexionCtrl.isValida()) { + temp.add(conexionCtrl); + } + } + conexoesCtrl.clear(); + conexoesCtrl.addAll(temp); + } + + public void gerarCombinacionEntre2Eixos(List listParada1, List rutasEixoA, List rutasEixoB, List lsLocalidadesComuns, List listParada4, List rutasEixoA2, List rutasEixoB2, List localidadesGeradas, List conexoesCtrl) { + + for (int i = 0; i < lsLocalidadesComuns.size(); i++) { + + List listParada2 = Arrays.asList(lsLocalidadesComuns.get(i)); + List listParada3 = Arrays.asList(lsLocalidadesComuns.get(i)); + + LinkedList> lists = new LinkedList>(); + + lists.add(listParada1); + lists.add(listParada2); + lists.add(listParada3); + lists.add(listParada4); + + List localidades = new ArrayList(); + localidades.addAll(listParada1); + localidades.addAll(listParada2); + localidades.addAll(listParada3); + localidades.addAll(listParada4); + + Map cacheLocalidades = criandoCacheLocalidades(localidades); + gerarCombinacao(lists, rutasEixoA, rutasEixoB, null, localidadesGeradas, conexoesCtrl, cacheLocalidades); + + } + + } + + public void gerarCombinacionEntre3Eixos(List listParada1, List rutasEixoA, List rutasEixoB, List lsLocalidadesComuns, List listParada4, List listParadasC, List rutasEixoA2, List rutasEixoB2, List rutasEixoC, List localidadesGeradas, List conexoesCtrl) { + + for (int i = 0; i < lsLocalidadesComuns.size(); i++) { + + List listParada2 = Arrays.asList(lsLocalidadesComuns.get(i)); + List listParada3 = Arrays.asList(lsLocalidadesComuns.get(i)); + + LinkedList> lists = new LinkedList>(); + + lists.add(listParada1); + lists.add(listParada2); + lists.add(listParada3); + lists.add(listParada4); + lists.add(listParadasC); + + List localidades = new ArrayList(); + localidades.addAll(listParada1); + localidades.addAll(listParada2); + localidades.addAll(listParada3); + localidades.addAll(listParada4); + localidades.addAll(listParadasC); + + Map cacheLocalidades = criandoCacheLocalidades(localidades); + gerarCombinacao(lists, rutasEixoA, rutasEixoB, rutasEixoC, localidadesGeradas, conexoesCtrl, cacheLocalidades); + + } + } + + public List extrairConexionRutaCtrl(List localidadesGeradas) { + List list = new ArrayList(0); + for (ParadaVOConexionRuta paradaVOConexionRuta : localidadesGeradas) { + if(!list.contains(paradaVOConexionRuta.getConexionRutaCtrl())) { + list.add(paradaVOConexionRuta.getConexionRutaCtrl()); + } + } + return list; + } + + private boolean isDadosNotNull(ParadaVOConexionRuta trecho) { + return trecho != null && + trecho.getRutaId() != null && + trecho.getParadaOrigem() != null && + trecho.getParadaDestino() != null; + } + +} diff --git a/src/com/rjconsultores/ventaboletos/service/impl/ConexionRutaConfServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/ConexionRutaConfServiceImpl.java index af7e8baba..b52539af2 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/ConexionRutaConfServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/ConexionRutaConfServiceImpl.java @@ -126,19 +126,25 @@ public class ConexionRutaConfServiceImpl implements ConexionRutaConfService { @Override @Transactional - public void excluirConfiguracao(ConexionRutaConf conexion, boolean excluirConexionRutaConf) { - conexionRutaConfDAO.excluirConfiguracao(conexion, UsuarioLogado.getUsuarioLogado().getUsuarioId(), excluirConexionRutaConf); + public void excluirConfiguracao(ConexionRutaConf conexion, boolean excluirConexionRutaConf, boolean isConexionGerada) { + conexionRutaConfDAO.excluirConfiguracao(conexion, UsuarioLogado.getUsuarioLogado().getUsuarioId(), excluirConexionRutaConf, isConexionGerada); } @Override @Transactional public ConexionRutaConf salvarConfiguracao(ConexionRutaConf conexionRutaConf, List canalVentas, List puntoVentas, - List conexoesCtrl, List rutas, List localidadesCombinadas) { + List conexoesCtrl, List rutas, List localidadesCombinadas, + boolean isConexionGerada) { conexionRutaConf = suscribirOrActualizacion(conexionRutaConf); salvarCanalVentasRutaCtrl(conexionRutaConf, canalVentas); salvarPuntoVentasRutaCtrl(conexionRutaConf, puntoVentas); - salvarConexionesRutaCtrl(conexionRutaConf, conexoesCtrl, rutas, localidadesCombinadas); + + if(isConexionGerada) { + salvarConexionesRutaCtrl(conexionRutaConf, conexoesCtrl, rutas, localidadesCombinadas); + } else { + conexionRutaConfDAO.atualizarTempoMinimoEMaximo(conexionRutaConf); + } return conexionRutaConf; } diff --git a/src/com/rjconsultores/ventaboletos/vo/conexion/OrdenarLocalidadesGeradas.java b/src/com/rjconsultores/ventaboletos/vo/conexion/OrdenarLocalidadesGeradas.java new file mode 100644 index 000000000..f9998471e --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/vo/conexion/OrdenarLocalidadesGeradas.java @@ -0,0 +1,24 @@ +package com.rjconsultores.ventaboletos.vo.conexion; + +import java.util.Comparator; + +import com.rjconsultores.ventaboletos.vo.parada.ParadaVOConexionRuta; + +public class OrdenarLocalidadesGeradas implements Comparator { + + @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; + } + +}