/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.rjconsultores.ventaboletos.dao.hibernate; import java.util.List; import org.hibernate.Criteria; import org.hibernate.FetchMode; 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.hibernate.transform.Transformers; import org.hibernate.type.BigDecimalType; import org.hibernate.type.IntegerType; 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.TramoDAO; import com.rjconsultores.ventaboletos.entidad.ClaseServicio; import com.rjconsultores.ventaboletos.entidad.OrgaoTramo; import com.rjconsultores.ventaboletos.entidad.Parada; import com.rjconsultores.ventaboletos.entidad.Tramo; import com.rjconsultores.ventaboletos.entidad.TramoServicio; import com.rjconsultores.ventaboletos.entidad.Via; import com.rjconsultores.ventaboletos.utilerias.DateUtil; import com.rjconsultores.ventaboletos.vo.tramo.TramoVO; /** * * @author Administrador */ @SuppressWarnings("unchecked") @Repository("tramoDAO") public class TramoHibernateDAO extends GenericHibernateDAO implements TramoDAO { @Autowired public TramoHibernateDAO(@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("desctramo")); return c.list(); } public List obtenerTramosServiciosPorTramo(Tramo t){ return obtenerID(t.getTramoId()).getTramoServicioList(); } public Tramo obtenerPorOrigemDestino(Parada origem, Parada destino) { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("origem", origem)); c.add(Restrictions.eq("destino", destino)); c.add(Restrictions.eq("activo", Boolean.TRUE)); Tramo t = new Tramo(); if (c.list().size() > 0) { t = (Tramo) c.list().get(0); } return t; } public Tramo obtenerTramotPorOrigemDestinoVia(Parada origem, Parada destino, Via via) { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("origem", origem)); c.add(Restrictions.eq("destino", destino)); c.add(Restrictions.eq("via", via)); c.add(Restrictions.eq("activo", Boolean.TRUE)); return (Tramo) c.uniqueResult(); } public List obtenerListPorOrigemDestino(Parada origem, Parada destino) { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("origem", origem)); c.add(Restrictions.eq("destino", destino)); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.addOrder(Order.asc("desctramo")); return c.list(); } public List obtenerPorOrigemDestinoFetchLazy(Parada origem, Parada destino) { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("origem", origem)); c.add(Restrictions.eq("destino", destino)); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.addOrder(Order.asc("desctramo")); c.setFetchMode("origem", FetchMode.SELECT); c.setFetchMode("destino", FetchMode.SELECT); c.setFetchMode("lsTramoTiempo", FetchMode.SELECT); c.setFetchMode("rutaSecuenciaList", FetchMode.SELECT); c.setFetchMode("rutaCombinacionList", FetchMode.SELECT); c.setFetchMode("tramoServicioList", FetchMode.SELECT); c.setFetchMode("tramoKms", FetchMode.SELECT); return c.list(); } // Obtener Vias Possiveis public List obtenerViasOrigemDestino(Parada origem, Parada destino) { Criteria c = makeCriteria(); c.add(Restrictions.eq("origem", origem)); c.add(Restrictions.eq("destino", destino)); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.addOrder(Order.asc("desctramo")); c.setProjection(Projections.property("via")); return c.list(); } public Tramo busca(Parada origem, Parada destino, Via via) { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.add(Restrictions.eq("origem", origem)); c.add(Restrictions.eq("destino", destino)); c.add(Restrictions.eq("via", via)); return (Tramo) c.uniqueResult(); } public List buscarCveParada(String origen, String destino, String via) { Criteria c = getSession().createCriteria(getPersistentClass()); c.createCriteria("origem").add(Restrictions.eq("paradaId", Integer.parseInt(origen))); c.createCriteria("destino").add(Restrictions.eq("paradaId", Integer.parseInt(destino))); c.createCriteria("via").add(Restrictions.eq("viaId", Integer.parseInt(via))); c.add(Restrictions.eq("activo", Boolean.TRUE)); return c.list(); } public Tramo obtenerTramoUnicoRuta(Parada origem, Parada destino, Via via, ClaseServicio claseServicio) { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("origem", origem)); c.add(Restrictions.eq("destino", destino)); c.add(Restrictions.eq("via", via)); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.setFetchMode("origem", FetchMode.LAZY); c.setFetchMode("destino", FetchMode.LAZY); c.setFetchMode("lsTramoTiempo", FetchMode.LAZY); c.setFetchMode("rutaSecuenciaList", FetchMode.LAZY); c.setFetchMode("rutaCombinacionList", FetchMode.LAZY); c.setFetchMode("tramoServicioList", FetchMode.LAZY); c.setFetchMode("tramoKms", FetchMode.LAZY); Criteria c2 = c.createCriteria("tramoServicioList"); c2.add(Restrictions.eq("claseServicio", claseServicio)); c2.add(Restrictions.eq("activo", Boolean.TRUE)); c.setMaxResults(1); List result = c.list(); if (result.isEmpty()) { return null; } return result.get(0); } public Long count(Via via) { Criteria c = this.makeCriteria(); c.add(Restrictions.eq("via", via)); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.setProjection(Projections.rowCount()); return HibernateFix.count(c.list()); } public List getLsOrgaoTramo(Tramo tramo){ return obtenerID(tramo.getTramoId()).getLsOrgaoTramo(); } @Override public List buscarListaPorIds(List tramoIds) { Criteria c = this.makeCriteria(); c.add(Restrictions.in("tramoId", tramoIds)); c.add(Restrictions.eq("activo", Boolean.TRUE)); return c.list(); } @Override public List buscarListaPorIds(List tramoIds, String chaveCorrida ) throws Exception { StringBuilder sql = new StringBuilder(); sql.append(" SELECT "); sql.append(" trm.tramo_id AS tramoid, "); sql.append(" trm.desctramo AS desctramo, "); sql.append(" trm.origen_id AS origemId, "); sql.append(" trm.destino_id AS destinoId, "); sql.append(" coalesce(ta.importetaxaembarque, 0) AS valorTaxa, "); sql.append(" coalesce(ta.importepedagio, 0) AS valorPedagio, "); sql.append(" coalesce(ta.importeoutros, 0) AS valorOutros, "); sql.append(" coalesce(ta.importeseguro, 0) AS valorSeguro, "); sql.append(" coalesce(ta.precio, 0) AS valorTarifa "); sql.append(" FROM "); sql.append(" ruta_combinacion rc "); sql.append(" JOIN tramo trm ON trm.tramo_id = rc.tramo_id AND trm.activo = 1 "); sql.append(" JOIN corrida_tramo crt ON crt.destino_id = trm.destino_id "); sql.append(" AND crt.corrida_id = :corridaId "); sql.append(" AND crt.feccorrida = :fecCorrida "); sql.append(" AND crt.activo = 1 "); sql.append(" JOIN corrida co ON co.corrida_id = crt.corrida_id "); sql.append(" AND crt.feccorrida = co.feccorrida "); sql.append(" and rc.ruta_id = co.ruta_id "); sql.append(" JOIN empresa emp ON emp.empresa_id = co.empresacorrida_id "); sql.append(" JOIN marca mar ON mar.empresa_id = emp.empresa_id AND mar.activo = 1 "); sql.append(" JOIN tarifa ta ON ta.marca_id = mar.marca_id "); sql.append(" AND ta.tramo_id = trm.tramo_id "); sql.append(" AND ta.ruta_id = rc.ruta_id "); sql.append(" AND ta.activo = 1 "); sql.append(" JOIN vigencia_tarifa vt ON vt.vigenciatarifa_id = ta.vigenciatarifa_id AND vt.activo = 1 "); sql.append(" WHERE "); sql.append(" rc.activo = 1 "); sql.append(" AND coalesce(rc.indventa, 0) = 1 "); sql.append(" AND trm.origen_id IN ( "); sql.append(" SELECT x.origen_id "); sql.append(" FROM corrida_tramo x "); sql.append(" WHERE x.corrida_id = co.corrida_id "); sql.append(" AND x.feccorrida = co.feccorrida "); sql.append(" ) "); sql.append(" AND trm.destino_id IN ( "); sql.append(" SELECT x.destino_id "); sql.append(" FROM corrida_tramo x "); sql.append(" WHERE x.corrida_id = co.corrida_id "); sql.append(" AND x.feccorrida = co.feccorrida "); sql.append(" ) "); sql.append(" AND ( sysdate BETWEEN vt.feciniciovigencia AND vt.fecfinvigencia "); sql.append(" AND vt.activo = 1 ) "); sql.append(" and trm.tramo_id in ( :tramoIds ) "); sql.append(" ORDER BY crt.numsecuencia "); Query query = getSession().createSQLQuery(sql.toString()) .addScalar("tramoId", IntegerType.INSTANCE) .addScalar("desctramo", StringType.INSTANCE) .addScalar("origemId", IntegerType.INSTANCE) .addScalar("destinoId", IntegerType.INSTANCE) // .addScalar("rutaId", IntegerType.INSTANCE) .addScalar("valorTaxa", BigDecimalType.INSTANCE) .addScalar("valorPedagio", BigDecimalType.INSTANCE) .addScalar("valorOutros", BigDecimalType.INSTANCE) .addScalar("valorSeguro", BigDecimalType.INSTANCE) .addScalar("valorTarifa", BigDecimalType.INSTANCE) .setResultTransformer(Transformers.aliasToBean(TramoVO.class)); String[] split = chaveCorrida.split(";"); String corridaId = split[0].trim(); String fecha = split[1].trim(); query.setParameter("corridaId", Integer.parseInt(corridaId) ); query.setParameter("fecCorrida", DateUtil.getDateFromString(fecha, "ddMMyyyy") ); query.setParameterList("tramoIds", tramoIds); return query.list(); } }