/* * 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.SQLQuery; import org.hibernate.SessionFactory; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.hibernate.transform.AliasToBeanResultTransformer; import org.hibernate.type.LongType; import org.hibernate.type.StringType; 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; import com.rjconsultores.ventaboletos.vo.ruta.RutaVO; /** * * @author Rafius */ @Repository("rutaDAO") @SuppressWarnings("unchecked") public class RutaHibernateDAO extends GenericHibernateDAO implements RutaDAO { @Autowired public RutaHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) { setSessionFactory(factory); } @Override public List obtenerTodos() { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.addOrder(Order.asc("descruta")); return c.list(); } public List 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 buscarPorRutaPorEmpresas(List 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 l = c.list(); for (Ruta r : l) { r.getLsRutaEmpresa(); } return l; } public List 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 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 lsRuta = sq.list(); return lsRuta; } public List 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 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)).add(Restrictions.eq("activo", Boolean.TRUE)); } 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 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 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 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 buscaRuta(String palavraPesquisaRuta) { return buscaRuta(palavraPesquisaRuta, null); } @Override public List buscaRuta(String palavraPesquisaRuta, OrgaoConcedente orgao) { StringBuilder hql = new StringBuilder(); hql.append(" FROM Ruta r"); hql.append(" WHERE (lower(descruta) like :palavraPesquisaRuta "); hql.append(" OR lower(prefixo) like :palavraPesquisaRuta "); hql.append(" OR lower(str(numRuta)) like :palavraPesquisaRuta) "); if (orgao != null) { hql.append(" AND r.orgaoConcedente.orgaoConcedenteId = :orgaoId "); } Query sq = getSession().createQuery(hql.toString()); sq.setParameter("palavraPesquisaRuta", palavraPesquisaRuta.toLowerCase() + '%'); if (orgao != null) { sq.setParameter("orgaoId", orgao.getOrgaoConcedenteId()); } return sq.list(); } @Override public List buscaRutaPorNumeroSemDadoRepetido(String palavraPesquisaRuta) { StringBuilder sql = new StringBuilder(); sql.append(" SELECT MAX(R.RUTA_ID) rutaId, "); sql.append(" R.NUMRUTA numRuta, MAX(R.PREFIXO) prefixo, "); sql.append(" MAX(R.DESCRUTA) descruta, "); sql.append(" MAX(ORGAO.DESCORGAO) orgaoConcedente "); sql.append(" FROM RUTA R "); sql.append(" INNER JOIN ORGAO_CONCEDENTE ORGAO ON R.ORGAOCONCEDENTE_ID = ORGAO.ORGAOCONCEDENTE_ID "); sql.append(" WHERE (LOWER(R.DESCRUTA) LIKE :palavraPesquisaRuta "); sql.append(" OR LOWER(R.PREFIXO) LIKE :palavraPesquisaRuta "); sql.append(" OR LOWER(R.NUMRUTA) LIKE :palavraPesquisaRuta) "); sql.append(" GROUP BY R.NUMRUTA "); SQLQuery qry = getSession().createSQLQuery(sql.toString()) .addScalar("rutaId", LongType.INSTANCE) .addScalar("numRuta", StringType.INSTANCE) .addScalar("prefixo", StringType.INSTANCE) .addScalar("descruta", StringType.INSTANCE) .addScalar("orgaoConcedente", StringType.INSTANCE); qry.setParameter("palavraPesquisaRuta", palavraPesquisaRuta.toLowerCase() + '%'); qry.setResultTransformer(new AliasToBeanResultTransformer(RutaVO.class)); return qry.list(); } public List buscaRutasFromOrgao(OrgaoConcedente orgao) { // busca rutas e pedágios 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 "); hql.append(" order by r.descruta "); Query sq = getSession().createQuery(hql.toString()); sq.setParameter("orgaoId", orgao.getOrgaoConcedenteId()); List lsRuta = sq.list(); return lsRuta; } public List buscaSomenteRutasFromOrgao(OrgaoConcedente orgao) { StringBuffer hql = new StringBuffer(); hql.append("select distinct r FROM Ruta r "); hql.append(" WHERE r.orgaoConcedente.orgaoConcedenteId = :orgaoId and r.activo = 1 and r.indRutaCancelada = 0 "); hql.append(" order by r.descruta "); Query sq = getSession().createQuery(hql.toString()); sq.setParameter("orgaoId", orgao.getOrgaoConcedenteId()); List lsRuta = sq.list(); return lsRuta; } @Override public List 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 qryList = new ArrayList(); 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 é necessaria criar novamente qryList = new ArrayList(); 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); } } }