278 lines
10 KiB
Java
278 lines
10 KiB
Java
/*
|
|
* 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<Tramo, Integer>
|
|
implements TramoDAO {
|
|
|
|
@Autowired
|
|
public TramoHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
|
|
setSessionFactory(factory);
|
|
}
|
|
|
|
@Override
|
|
public List<Tramo> obtenerTodos() {
|
|
Criteria c = getSession().createCriteria(getPersistentClass());
|
|
c.add(Restrictions.eq("activo", Boolean.TRUE));
|
|
c.addOrder(Order.asc("desctramo"));
|
|
|
|
return c.list();
|
|
}
|
|
|
|
public List<TramoServicio> 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<Tramo> 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<Tramo> 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<Via> 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<Tramo> 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<Tramo> 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<OrgaoTramo> getLsOrgaoTramo(Tramo tramo){
|
|
return obtenerID(tramo.getTramoId()).getLsOrgaoTramo();
|
|
}
|
|
|
|
@Override
|
|
public List<Tramo> buscarListaPorIds(List<Integer> tramoIds) {
|
|
Criteria c = this.makeCriteria();
|
|
c.add(Restrictions.in("tramoId", tramoIds));
|
|
c.add(Restrictions.eq("activo", Boolean.TRUE));
|
|
|
|
return c.list();
|
|
}
|
|
|
|
@Override
|
|
public List<TramoVO> buscarListaPorIds(List<Integer> 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(" , co.ruta_id AS rutaId ");
|
|
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();
|
|
}
|
|
}
|