fixes bug#22508

dev:wilian
qua:

git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@107098 d1611594-4594-4d17-8e1d-87c2c4800839
master
wilian 2021-06-07 20:59:51 +00:00
parent 2c041c3d9f
commit 53d597fab2
7 changed files with 461 additions and 67 deletions

View File

@ -12,10 +12,12 @@ public interface ConexionRutaConfDAO extends GenericDAO<ConexionRutaConf, Intege
List<ConexionRutaConf> obtenerTodosActivo(); List<ConexionRutaConf> 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 ConexionRutaConfVO carregarConexoesCadastradas(Integer conexionrutaconfId);
public List<List<Ruta>> buscarRutasPorConexionConf(Integer conexionRutaConfId); public List<List<Ruta>> buscarRutasPorConexionConf(Integer conexionRutaConfId);
public void atualizarTempoMinimoEMaximo(ConexionRutaConf conexionRutaConf);
} }

View File

@ -2,6 +2,7 @@ package com.rjconsultores.ventaboletos.dao.hibernate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collections;
import java.util.List; import java.util.List;
import org.hibernate.Criteria; 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.ConexionRutaCtrl;
import com.rjconsultores.ventaboletos.entidad.Parada; import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.Ruta; 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.ConexionCtrlVO;
import com.rjconsultores.ventaboletos.vo.parada.ConexionRutaConfVO; import com.rjconsultores.ventaboletos.vo.parada.ConexionRutaConfVO;
import com.rjconsultores.ventaboletos.vo.parada.ConexionRutaCtrlVO; import com.rjconsultores.ventaboletos.vo.parada.ConexionRutaCtrlVO;
@ -50,8 +52,8 @@ public class ConexionRutaConfHibernateDAO extends GenericHibernateDAO<ConexionRu
} }
@Override @Override
public void excluirConfiguracao(ConexionRutaConf conexion, Integer usuarioId, boolean excluirConexionRutaConf) { public void excluirConfiguracao(ConexionRutaConf conexion, Integer usuarioId, boolean excluirConexionRutaConf, boolean isConexionGerada) {
List<String> comandos = carregarComandosInativarConfiguracao(excluirConexionRutaConf); List<String> comandos = carregarComandosInativarConfiguracao(excluirConexionRutaConf, isConexionGerada);
for (String comando : comandos) { for (String comando : comandos) {
Query qr = getSession().createSQLQuery(comando); Query qr = getSession().createSQLQuery(comando);
qr.setParameter("usuarioId", usuarioId); qr.setParameter("usuarioId", usuarioId);
@ -61,80 +63,86 @@ public class ConexionRutaConfHibernateDAO extends GenericHibernateDAO<ConexionRu
} }
} }
private List<String> carregarComandosInativarConfiguracao(boolean excluirConexionRutaConf) { private List<String> carregarComandosInativarConfiguracao(boolean excluirConexionRutaConf, boolean isConexionGerada) {
List<String> comandos = new ArrayList<String>(0); List<String> comandos = new ArrayList<String>(0);
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
if(excluirConexionRutaConf) { if(excluirConexionRutaConf) {
sb.append("update conexion_ruta_conf ") sb.append("update conexion_ruta_conf ")
.append("set activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif ") .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()); 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 = new StringBuilder();
sb.append("update conexion_ruta_excepcion_ptovta ") sb.append("update conexion_ruta_excepcion_ptovta ")
.append("set activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif ") .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()); comandos.add(sb.toString());
sb = new StringBuilder(); sb = new StringBuilder();
sb.append("update conexion_rutaexcepciontipopta ") sb.append("update conexion_rutaexcepciontipopta ")
.append("set activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif ") .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()); comandos.add(sb.toString());
sb = new StringBuilder(); if(isConexionGerada || excluirConexionRutaConf) {
sb.append("merge into conexion_ruta_tramo_ctrl c ") sb = new StringBuilder();
.append("using ( ") sb.append("update conexion_ruta_ctrl ")
.append("select c1.conexionrutatramoctrl_id ") .append("set activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif ")
.append("from conexion_ruta_tramo_ctrl c1 ") .append("where conexionrutaconf_id = :conexionrutaconfId ")
.append("join conexion_ruta_ctrl c2 on c1.conexionrutactrl_id = c2.conexionrutactrl_id ") .append("and activo = 1");
.append("where c2.conexionrutaconf_id = :conexionrutaconfId and c1.activo = 1) t on (t.conexionrutatramoctrl_id = c.conexionrutatramoctrl_id) ") comandos.add(sb.toString());
.append("when matched then update set c.activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif ");
comandos.add(sb.toString());
sb = new StringBuilder(); sb = new StringBuilder();
sb.append("merge into conexion c ") sb.append("merge into conexion_ruta_tramo_ctrl c ")
.append("using ( ") .append("using ( ")
.append("select c.conexion_id ") .append("select c1.conexionrutatramoctrl_id ")
.append("from conexion c ") .append("from conexion_ruta_tramo_ctrl c1 ")
.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("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("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 ");
.append("when matched then update set c.activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif"); comandos.add(sb.toString());
comandos.add(sb.toString());
sb = new StringBuilder(); sb = new StringBuilder();
sb.append("merge into conexion_ctrl c ") sb.append("merge into conexion c ")
.append("using ( ") .append("using ( ")
.append("select distinct c.conexionctrl_id ") .append("select c.conexion_id ")
.append("from conexion_ctrl c ") .append("from conexion c ")
.append("join conexion c3 on c3.conexionctrl_id = c.conexionctrl_id ") .append("join conexion_ruta_tramo_ctrl c1 on c.conexionrutatramoctrl_id = c1.conexionrutatramoctrl_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("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("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");
.append("when matched then update set c.activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif"); comandos.add(sb.toString());
comandos.add(sb.toString());
sb = new StringBuilder(); sb = new StringBuilder();
sb.append("merge into conexion_conf c ") sb.append("merge into conexion_ctrl c ")
.append("using ( ") .append("using ( ")
.append("select distinct c.conexionconf_id ") .append("select distinct c.conexionctrl_id ")
.append("from conexion_conf c ") .append("from conexion_ctrl c ")
.append("join conexion_ctrl c4 on c4.conexionctrl_id = c.conexionctrl_id ") .append("join conexion c3 on c3.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_tramo_ctrl c1 on c3.conexionrutatramoctrl_id = c1.conexionrutatramoctrl_id ") .append("join conexion_ruta_ctrl c2 on c1.conexionrutactrl_id = c2.conexionrutactrl_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("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("when matched then update set c.activo = 0, usuario_id = :usuarioId, fecmodif = :fecmodif "); comandos.add(sb.toString());
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; return comandos;
} }
@ -210,6 +218,8 @@ public class ConexionRutaConfHibernateDAO extends GenericHibernateDAO<ConexionRu
} }
retorno.setListConexionCtrl(listConexionCtrl); retorno.setListConexionCtrl(listConexionCtrl);
Collections.sort(localidadesCombinadas, new OrdenarLocalidadesGeradas());
retorno.setLocalidadesCombinadas(localidadesCombinadas); retorno.setLocalidadesCombinadas(localidadesCombinadas);
return retorno; return retorno;
@ -269,4 +279,27 @@ public class ConexionRutaConfHibernateDAO extends GenericHibernateDAO<ConexionRu
} }
@Override
public void atualizarTempoMinimoEMaximo(ConexionRutaConf conexionRutaConf) {
StringBuilder 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 usuario_id = :usuarioId, fecmodif = :fecmodif, tiempomin = :tiempomin, tiempomax = :tiempomax ");
Query qr = getSession().createSQLQuery(sb.toString());
qr.setParameter("usuarioId", conexionRutaConf.getUsuarioId());
qr.setParameter("conexionrutaconfId", conexionRutaConf.getConexionRutaConfId());
qr.setParameter("fecmodif", Calendar.getInstance().getTime());
qr.setParameter("tiempomin", conexionRutaConf.getTiempoMin());
qr.setParameter("tiempomax", conexionRutaConf.getTiempoMax());
qr.executeUpdate();
}
} }

View File

@ -0,0 +1,19 @@
package com.rjconsultores.ventaboletos.service;
import java.util.List;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.vo.parada.ConexionCtrlVO;
import com.rjconsultores.ventaboletos.vo.parada.ConexionRutaCtrlVO;
import com.rjconsultores.ventaboletos.vo.parada.ParadaVOConexionRuta;
public interface ConexionRutaCombinacionService {
public 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);
public 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);
public List<ConexionRutaCtrlVO> extrairConexionRutaCtrl(List<ParadaVOConexionRuta> localidadesGeradas);
}

View File

@ -30,9 +30,10 @@ public interface ConexionRutaConfService {
public ConexionRutaConf obtenerID(Integer id); public ConexionRutaConf obtenerID(Integer id);
public ConexionRutaConf salvarConfiguracao(ConexionRutaConf conexion, List<TipoPuntoVenta> canalVentas, List<PuntoVenta> puntoVentas, public ConexionRutaConf salvarConfiguracao(ConexionRutaConf conexion, List<TipoPuntoVenta> canalVentas, List<PuntoVenta> puntoVentas,
List<ConexionCtrl> conexoesCtrl, List<ConexionRutaCtrlVO> rutas, List<ParadaVOConexionRuta> localidadesCombinadas); List<ConexionCtrl> conexoesCtrl, List<ConexionRutaCtrlVO> rutas, List<ParadaVOConexionRuta> localidadesCombinadas,
boolean isConexionGerada);
public void excluirConfiguracao(ConexionRutaConf conexion, boolean excluirConexionRutaConf); public void excluirConfiguracao(ConexionRutaConf conexion, boolean excluirConexionRutaConf, boolean isConexionGerada);
public ConexionRutaConfVO carregarConexoesCadastradas(Integer conexionrutaconfId); public ConexionRutaConfVO carregarConexoesCadastradas(Integer conexionrutaconfId);

View File

@ -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<Integer, Parada> criandoCacheLocalidades(List<Parada> list) {
Map<Integer, Parada> cacheLocalidades = new HashMap<Integer, Parada>();
for (Parada parada : list) {
cacheLocalidades.put(parada.getParadaId(), parada);
}
return cacheLocalidades;
}
private void gerarCombinacao(LinkedList<List<Parada>> lists, List<Ruta> rutasEixoA, List<Ruta> rutasEixoB, List<Ruta> rutasEixoC, List<ParadaVOConexionRuta> localidadesGeradas, List<ConexionCtrlVO> conexoesCtrl, Map<Integer, Parada> cacheLocalidades) {
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, cacheLocalidades);
}else {
gerarLocalidadesEixoABC(rutasEixoA, rutasEixoB,rutasEixoC, localidadesGeradas, combinacoes, conexoesCtrl, cacheLocalidades);
}
Collections.sort(localidadesGeradas, new OrdenarLocalidadesGeradas());
}
private void gerarLocalidadesEixoAB(List<Ruta> rutasEixoA, List<Ruta> rutasEixoB, List<ParadaVOConexionRuta> localidadesGeradas, Set<String> combinacoes, List<ConexionCtrlVO> conexoesCtrl, Map<Integer, Parada> 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<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 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 void gerarLocalidadesEixoABC(List<Ruta> rutasEixoA, List<Ruta> rutasEixoB, List<Ruta> rutasEixoC, List<ParadaVOConexionRuta> localidadesGeradas, Set<String> combinations, List<ConexionCtrlVO> conexoesCtrl, Map<Integer, Parada> 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<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 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);
Map<Integer, Parada> cacheLocalidades = criandoCacheLocalidades(localidades);
gerarCombinacao(lists, rutasEixoA, rutasEixoB, null, localidadesGeradas, conexoesCtrl, cacheLocalidades);
}
}
public 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);
Map<Integer, Parada> cacheLocalidades = criandoCacheLocalidades(localidades);
gerarCombinacao(lists, rutasEixoA, rutasEixoB, rutasEixoC, localidadesGeradas, conexoesCtrl, cacheLocalidades);
}
}
public 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 boolean isDadosNotNull(ParadaVOConexionRuta trecho) {
return trecho != null &&
trecho.getRutaId() != null &&
trecho.getParadaOrigem() != null &&
trecho.getParadaDestino() != null;
}
}

View File

@ -126,19 +126,25 @@ public class ConexionRutaConfServiceImpl implements ConexionRutaConfService {
@Override @Override
@Transactional @Transactional
public void excluirConfiguracao(ConexionRutaConf conexion, boolean excluirConexionRutaConf) { public void excluirConfiguracao(ConexionRutaConf conexion, boolean excluirConexionRutaConf, boolean isConexionGerada) {
conexionRutaConfDAO.excluirConfiguracao(conexion, UsuarioLogado.getUsuarioLogado().getUsuarioId(), excluirConexionRutaConf); conexionRutaConfDAO.excluirConfiguracao(conexion, UsuarioLogado.getUsuarioLogado().getUsuarioId(), excluirConexionRutaConf, isConexionGerada);
} }
@Override @Override
@Transactional @Transactional
public ConexionRutaConf salvarConfiguracao(ConexionRutaConf conexionRutaConf, List<TipoPuntoVenta> canalVentas, List<PuntoVenta> puntoVentas, public ConexionRutaConf salvarConfiguracao(ConexionRutaConf conexionRutaConf, List<TipoPuntoVenta> canalVentas, List<PuntoVenta> puntoVentas,
List<ConexionCtrl> conexoesCtrl, List<ConexionRutaCtrlVO> rutas, List<ParadaVOConexionRuta> localidadesCombinadas) { List<ConexionCtrl> conexoesCtrl, List<ConexionRutaCtrlVO> rutas, List<ParadaVOConexionRuta> localidadesCombinadas,
boolean isConexionGerada) {
conexionRutaConf = suscribirOrActualizacion(conexionRutaConf); conexionRutaConf = suscribirOrActualizacion(conexionRutaConf);
salvarCanalVentasRutaCtrl(conexionRutaConf, canalVentas); salvarCanalVentasRutaCtrl(conexionRutaConf, canalVentas);
salvarPuntoVentasRutaCtrl(conexionRutaConf, puntoVentas); salvarPuntoVentasRutaCtrl(conexionRutaConf, puntoVentas);
salvarConexionesRutaCtrl(conexionRutaConf, conexoesCtrl, rutas, localidadesCombinadas);
if(isConexionGerada) {
salvarConexionesRutaCtrl(conexionRutaConf, conexoesCtrl, rutas, localidadesCombinadas);
} else {
conexionRutaConfDAO.atualizarTempoMinimoEMaximo(conexionRutaConf);
}
return conexionRutaConf; return conexionRutaConf;
} }

View File

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