AdmMono/src/com/rjconsultores/ventaboletos/dao/hibernate/RutaHibernateDAO.java

324 lines
11 KiB
Java
Raw Blame History

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.rjconsultores.ventaboletos.dao.hibernate;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import com.rjconsultores.ventaboletos.dao.RutaDAO;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.entidad.RutaSecuencia;
import com.rjconsultores.ventaboletos.entidad.Tramo;
/**
*
* @author Rafius
*/
@Repository("rutaDAO")
public class RutaHibernateDAO extends GenericHibernateDAO<Ruta, Integer> implements RutaDAO {
@Autowired
public RutaHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
setSessionFactory(factory);
}
@Override
public List<Ruta> obtenerTodos() {
Criteria c = getSession().createCriteria(getPersistentClass());
c.add(Restrictions.eq("activo", Boolean.TRUE));
c.addOrder(Order.asc("descruta"));
return c.list();
}
public List<Ruta> buscarPorTramo(Tramo tramo) {
Criteria c = getSession().createCriteria(getPersistentClass());
c.add(Restrictions.eq("activo", Boolean.TRUE));
Criteria cTipoPuntoVenta = c.createCriteria("rutaCombinacionList");
cTipoPuntoVenta.add(Restrictions.eq("tramo", tramo));
return c.list();
}
@Override
public List<Ruta> buscarPorRutaPorEmpresas(List<Empresa> lsEmpresas) {
Criteria c = getSession().createCriteria(getPersistentClass());
c.add(Restrictions.eq("activo", Boolean.TRUE));
c.add(Restrictions.eq("indRutaCancelada", false));
Criteria cEmpresa = c.createCriteria("lsRutaEmpresa");
cEmpresa.add(Restrictions.in("empresa", lsEmpresas));
cEmpresa.add(Restrictions.eq("activo", Boolean.TRUE));
c.addOrder(Order.asc("descruta"));
List<Ruta> l = c.list();
for (Ruta r : l) {
r.getLsRutaEmpresa();
}
return l;
}
public List<Ruta> buscarPorClaseServicio(ClaseServicio claseServicio) {
Criteria c = getSession().createCriteria(getPersistentClass());
c.add(Restrictions.eq("activo", Boolean.TRUE));
c.add(Restrictions.eq("claseServicio", claseServicio));
c.addOrder(Order.asc("descruta"));
return c.list();
}
public List<Ruta> buscarPorClaseServicioEmpresa(ClaseServicio claseServicio, Empresa empresa) {
StringBuffer hql = new StringBuffer();
hql.append("SELECT DISTINCT r ");
hql.append("FROM Ruta r INNER JOIN r.lsRutaEmpresa re ");
hql.append("WHERE r.claseServicio.claseservicioId = :idClaseServicio ");
hql.append("AND re.empresa.empresaId = :idEmpresa ");
hql.append("AND r.activo = 1 ");
hql.append("ORDER BY r.descruta");
Query sq = getSession().createQuery(hql.toString());
sq.setParameter("idClaseServicio", claseServicio.getClaseservicioId());
sq.setParameter("idEmpresa", empresa.getEmpresaId());
List<Ruta> lsRuta = sq.list();
return lsRuta;
}
public List<Ruta> buscar(String nomeRuta, ClaseServicio claseServicio,
Boolean nomeObrigatorio) {
Criteria c = getSession().createCriteria(getPersistentClass());
c.add(Restrictions.eq("activo", Boolean.TRUE));
// c.add(Restrictions.eq("descruta", nomeRuta));
c.add(Restrictions.eq("claseServicio", claseServicio));
c.add(Restrictions.eq("indNombreObligatorio", nomeObrigatorio));
return c.list();
}
public List<Ruta> obtenerPorEmpresa(Empresa empresa) {
Criteria c = getSession().createCriteria(getPersistentClass());
c.add(Restrictions.eq("activo", Boolean.TRUE));
c.add(Restrictions.ne("rutaId", -1));
if (empresa.getEmpresaId() != -1) {
c.createCriteria("lsRutaEmpresa").add(Restrictions.eq("empresa", empresa));
}
c.addOrder(Order.asc("descruta"));
return c.list();
}
@Override
public Parada buscarOrigen(Ruta ruta) {
Criteria c = this.getSession().createCriteria(RutaSecuencia.class);
c.add(Restrictions.eq("activo", true));
c.add(Restrictions.eq("ruta", ruta));
c.addOrder(Order.asc("numsecuencia"));
c.createAlias("tramo", "tramo")
.setProjection(Projections.property("tramo.origem"));
c.setMaxResults(1);
return (Parada) c.uniqueResult();
}
@Override
public Parada buscarDestino(Ruta ruta) {
Criteria c = this.getSession().createCriteria(RutaSecuencia.class);
c.add(Restrictions.eq("activo", true));
c.add(Restrictions.eq("ruta", ruta));
c.addOrder(Order.desc("numsecuencia"));
c.createAlias("tramo", "tramo")
.setProjection(Projections.property("tramo.destino"));
c.setMaxResults(1);
return (Parada) c.uniqueResult();
}
public List<Ruta> buscarTodosExceto(Integer... idRuta) {
Criteria c = this.makeCriteria();
for (Integer id : idRuta) {
c.add(Restrictions.ne("rutaId", id));
}
c.add(Restrictions.eq("activo", Boolean.TRUE));
c.addOrder(Order.asc("descruta"));
return c.list();
}
public List<Ruta> buscarTodosEstos(Integer[] idRutas) {
Criteria c = this.makeCriteria();
c.add(Restrictions.in("rutaId", idRutas));
c.add(Restrictions.eq("activo", Boolean.TRUE));
c.addOrder(Order.asc("descruta"));
return c.list();
}
public List<Ruta> buscarNumRuta(String numRuta) {
Criteria c = getSession().createCriteria(getPersistentClass());
c.add(Restrictions.eq("activo", true));
c.add(Restrictions.eq("numRuta", numRuta));
return c.list();
}
public List<Ruta> buscaRuta(String palavraPesquisaRuta) {
StringBuffer hql = new StringBuffer();
hql.append(" FROM Ruta ");
hql.append(" WHERE descruta like :palavraPesquisaRuta ");
hql.append(" OR prefixo like :palavraPesquisaRuta ");
hql.append(" OR str(numRuta) like :palavraPesquisaRuta ");
Query sq = getSession().createQuery(hql.toString());
sq.setParameter("palavraPesquisaRuta", palavraPesquisaRuta + '%');
List<Ruta> lsRuta = sq.list();
return lsRuta;
}
public List<Ruta> buscaRutasFromOrgao(OrgaoConcedente orgao) {
StringBuffer hql = new StringBuffer();
hql.append("select distinct r FROM Ruta r inner join r.rutaSecuenciaList rSeqList ");
hql.append(" inner join rSeqList.lsRutaCase casRutaList ");
hql.append(" WHERE r.orgaoConcedente.orgaoConcedenteId = :orgaoId and r.activo = 1 and r.indRutaCancelada = 0 ");
Query sq = getSession().createQuery(hql.toString());
sq.setParameter("orgaoId", orgao.getOrgaoConcedenteId());
List<Ruta> lsRuta = sq.list();
return lsRuta;
}
@Override
public List<Ruta> buscarRutasPorEmpresaOrgaoConcedente(Empresa empresa, OrgaoConcedente orgao) {
Criteria c = getSession().createCriteria(getPersistentClass());
c.add(Restrictions.eq("activo", Boolean.TRUE));
c.add(Restrictions.ne("rutaId", -1));
if (empresa != null && empresa.getEmpresaId() != -1) {
c.createCriteria("lsRutaEmpresa").add(Restrictions.eq("empresa", empresa));
}
if (orgao != null && orgao.getOrgaoConcedenteId() != -1) {
c.add(Restrictions.eq("orgaoConcedente", orgao));
}
c.addOrder(Order.asc("descruta"));
return c.list();
}
@Override
public void updateAsientosVendibles(Ruta ruta, Tramo viejoTramo, Tramo nuevoTramo) {
try {
getSession().flush();
List<String> qryList = new ArrayList<String>();
StringBuilder qry = new StringBuilder(" update RUTA_COMBINACION set TRAMO_ID = :nuevoTramo, ");
qry.append(" FECMODIF = SYSDATE, USUARIO_ID = :usuario where TRAMO_ID = :viejoTramo and RUTA_ID = :ruta ");
qry.append(" AND ACTIVO = 1 ");
qryList.add(qry.toString());
qry = new StringBuilder(" update RUTA_SECUENCIA set TRAMO_ID = :nuevoTramo, ");
qry.append(" FECMODIF = SYSDATE, USUARIO_ID = :usuario where TRAMO_ID = :viejoTramo and RUTA_ID = :ruta ");
qry.append(" AND ACTIVO = 1 ");
qryList.add(qry.toString());
for (String strQuery : qryList) {
Query query = getSession().createSQLQuery(strQuery);
query.setInteger("viejoTramo", viejoTramo.getTramoId());
query.setInteger("nuevoTramo", nuevoTramo.getTramoId());
query.setInteger("usuario", nuevoTramo.getUsuarioId());
query.setInteger("ruta", ruta.getRutaId());
query.executeUpdate();
}
try {
// Pode cair na exception caso ja possua tarifa criada para o tramo, e nao <20> necessaria criar novamente
qryList = new ArrayList<String>();
qry = new StringBuilder(" update TARIFA set TRAMO_ID = :nuevoTramo, ");
qry.append(" FECMODIF = SYSDATE, USUARIO_ID = :usuario, ORIGEN_ID =:origen, DESTINO_ID = :destino ");
qry.append(" where TRAMO_ID = :viejoTramo and RUTA_ID = :ruta ");
qry.append(" AND ACTIVO = 1 ");
qryList.add(qry.toString());
qry = new StringBuilder(" update TARIFA_OFICIAL set TRAMO_ID = :nuevoTramo, ");
qry.append(" FECMODIF = SYSDATE, USUARIO_ID = :usuario, ORIGEN_ID =:origen, DESTINO_ID = :destino ");
qry.append(" where TRAMO_ID = :viejoTramo and RUTA_ID = :ruta ");
qry.append(" AND ACTIVO = 1 ");
qryList.add(qry.toString());
for (String strQuery : qryList) {
Query query = getSession().createSQLQuery(strQuery);
query.setInteger("viejoTramo", viejoTramo.getTramoId());
query.setInteger("nuevoTramo", nuevoTramo.getTramoId());
query.setInteger("origen", nuevoTramo.getOrigem().getParadaId());
query.setInteger("destino", nuevoTramo.getDestino().getParadaId());
query.setInteger("usuario", nuevoTramo.getUsuarioId());
query.setInteger("ruta", ruta.getRutaId());
query.executeUpdate();
}
} catch (Exception e) {
}
qry = new StringBuilder(" update CORRIDA_TRAMO set TRAMO_ID = :nuevoTramo, ");
qry.append(" FECMODIF = SYSDATE, USUARIO_ID = :usuario, ORIGEN_ID =:origen, DESTINO_ID = :destino ");
qry.append(" where TRAMO_ID = :viejoTramo and ");
qry.append(" CORRIDA_ID in (select CORRIDA_ID from CORRIDA_CTRL where RUTA_ID = :ruta ) ");
qry.append(" AND ACTIVO = 1 ");
Query query = getSession().createSQLQuery(qry.toString());
query.setInteger("viejoTramo", viejoTramo.getTramoId());
query.setInteger("nuevoTramo", nuevoTramo.getTramoId());
query.setInteger("origen", nuevoTramo.getOrigem().getParadaId());
query.setInteger("destino", nuevoTramo.getDestino().getParadaId());
query.setInteger("usuario", nuevoTramo.getUsuarioId());
query.setInteger("ruta", ruta.getRutaId());
query.executeUpdate();
qry = new StringBuilder(" update CORRIDA set FECMODIF = SYSDATE, USUARIO_ID = :usuario, ");
qry.append(" ORIGEN_ID = (case when ORIGEN_ID = :viejaOrigen then :nuevaOrigen else ORIGEN_ID end ), ");
qry.append(" DESTINO_ID = (case when DESTINO_ID = :viejoDestino then :nuevoDestino else DESTINO_ID end ) ");
qry.append(" where RUTA_ID = :ruta ");
query = getSession().createSQLQuery(qry.toString());
query.setInteger("viejaOrigen", viejoTramo.getOrigem().getParadaId());
query.setInteger("nuevaOrigen", nuevoTramo.getOrigem().getParadaId());
query.setInteger("viejoDestino", viejoTramo.getOrigem().getParadaId());
query.setInteger("nuevoDestino", nuevoTramo.getDestino().getParadaId());
query.setInteger("usuario", nuevoTramo.getUsuarioId());
query.setInteger("ruta", ruta.getRutaId());
query.executeUpdate();
} catch (final Exception ex) {
throw new RuntimeException("", ex);
}
}
}