fixes bug#21436

dev: Valvevir
qua:

git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@105106 d1611594-4594-4d17-8e1d-87c2c4800839
master
fabio 2021-01-20 14:30:34 +00:00
parent 4dbf62ba10
commit 80b3f09e84
3 changed files with 83 additions and 12 deletions

View File

@ -1,15 +1,24 @@
package com.rjconsultores.ventaboletos.dao.hibernate;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.util.Collection;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.impl.CriteriaImpl;
import org.hibernate.impl.SessionImpl;
import org.hibernate.loader.OuterJoinLoader;
import org.hibernate.loader.criteria.CriteriaLoader;
import org.hibernate.persister.entity.OuterJoinLoadable;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.rjconsultores.ventaboletos.dao.GenericDAO;
@ -20,7 +29,8 @@ import com.rjconsultores.ventaboletos.dao.GenericDAO;
*/
@SuppressWarnings("unchecked")
public class GenericHibernateDAO<T, ID extends Serializable> extends HibernateDaoSupport implements GenericDAO<T, ID> {
public long start = System.currentTimeMillis();
public GenericHibernateDAO() {
this.persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
@ -106,4 +116,46 @@ public class GenericHibernateDAO<T, ID extends Serializable> extends HibernateDa
public void suscribirTodos(Collection<T> entidades) {
getHibernateTemplate().saveOrUpdateAll(entidades);
}
/*
* Metodo que retorna o sql do criteria passado
* para uso em debug e auxilio nas analises
* */
public String getCriteriaSql( Criteria c, Session se) {
try {
CriteriaImpl ci = (CriteriaImpl) c;
SessionImpl s = (SessionImpl) se;
SessionFactoryImplementor factory = (SessionFactoryImplementor) s.getSessionFactory();
String[] implementors = factory.getImplementors(ci.getEntityOrClassName());
LoadQueryInfluencers lqis = new LoadQueryInfluencers();
CriteriaLoader loader = new CriteriaLoader((OuterJoinLoadable) factory.getEntityPersister(implementors[0]), factory, ci, implementors[0], lqis);
Field f = OuterJoinLoader.class.getDeclaredField("sql");
f.setAccessible(true);
String sql = (String) f.get(loader);
return sql;
} catch (Exception e) {
return "exception "+e.getMessage();
}
}
/*
* Metodo adicionado para retornar em o tempo de execucao
* de cada metodo chamado, sendo chamado nas implementacoes
* e printado via log.debug, para que possa ser analizado
* qualquer eventual demora na execução
* */
public String printInfo(String method, long start) {
long milliseconds = System.currentTimeMillis() - start;
long minutes = (milliseconds / 1000) / 60;
long seconds = (milliseconds / 1000) % 60;
String info = String.format("[%s] %d minutos e %d segundos", method, minutes, seconds);
if ((minutes + seconds) == 0) {
info = String.format("[%s] %d milissegundos", method, milliseconds);
}
return info;
}
}

View File

@ -9,6 +9,7 @@ import org.hibernate.criterion.Restrictions;
import org.hibernate.transform.AliasToBeanResultTransformer;
import org.hibernate.type.IntegerType;
import org.hibernate.type.StringType;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
@ -20,7 +21,8 @@ import com.rjconsultores.ventaboletos.entidad.PuntoVentaVO;
@Repository("operadorEmbarcadaDAO")
@SuppressWarnings("unchecked")
public class OperadorEmbarcadaHibernateDAO extends GenericHibernateDAO<OperadorEmbarcada, Long> implements OperadorEmbarcadaDAO {
private static Logger log = org.slf4j.LoggerFactory.getLogger(OperadorEmbarcadaHibernateDAO.class);
@Autowired
public OperadorEmbarcadaHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
setSessionFactory(factory);
@ -28,32 +30,42 @@ public class OperadorEmbarcadaHibernateDAO extends GenericHibernateDAO<OperadorE
@Override
public List<OperadorEmbarcada> buscarTodosOperadores() {
start = System.currentTimeMillis();
Criteria c = getSession().createCriteria(getPersistentClass());
c.add(Restrictions.eq("activo", Boolean.TRUE));
return c.list();
List<OperadorEmbarcada> retorno = c.list();
log.debug( printInfo("buscarOperadorEmbarcadaPorUsuario", start));
return retorno;
}
@Override
public OperadorEmbarcada burcarOperadorPorId(Long operadorEmbarcadaID) {
start = System.currentTimeMillis();
Criteria c = getSession().createCriteria(getPersistentClass());
c.add(Restrictions.eq("activo", Boolean.TRUE));
c.add(Restrictions.eq("operadorEmbarcadaId", operadorEmbarcadaID));
return (OperadorEmbarcada) c.uniqueResult();
OperadorEmbarcada retorno = (OperadorEmbarcada) c.uniqueResult();
log.debug( printInfo("burcarOperadorPorId", start));
return retorno;
}
@Override
public OperadorEmbarcada buscarOperadorEmbarcadaPorUsuario(Integer idUsuario) {
start = System.currentTimeMillis();
Criteria c = getSession().createCriteria(getPersistentClass());
c.add(Restrictions.eq("activo", Boolean.TRUE));
c.add(Restrictions.eq("usuario.usuarioId", idUsuario));
return (OperadorEmbarcada) c.uniqueResult();
OperadorEmbarcada op = (OperadorEmbarcada) c.uniqueResult();
log.debug( printInfo("buscarOperadorEmbarcadaPorUsuario", start));
return op;
}
@Override
public PuntoVentaVO getPuntoVentaVO(Integer operador) {
start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
sb.append(" SELECT ");
sb.append(" PV.PUNTOVENTA_ID AS puntoventaId, ");
@ -73,6 +85,8 @@ public class OperadorEmbarcadaHibernateDAO extends GenericHibernateDAO<OperadorE
// sql.setInteger("empresa_id", empresa);
sql.setResultTransformer(new AliasToBeanResultTransformer(PuntoVentaVO.class));
PuntoVentaVO puntoVentaVO = (PuntoVentaVO) sql.uniqueResult();
log.debug( printInfo("getPuntoVentaVO", start));
return puntoVentaVO;
}

View File

@ -34,7 +34,6 @@ import com.rjconsultores.ventaboletos.entidad.OperadorEmbarcadaServico;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.entidad.TarifaMinima;
import com.rjconsultores.ventaboletos.service.AliasServicoService;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.vo.corrida.CorridaVO;
import com.rjconsultores.ventaboletos.vo.corrida.TramoSequenciaVO;
import com.rjconsultores.ventaboletos.vo.parada.ParadaVO;
@ -268,7 +267,8 @@ public class OperadorEmbarcadaServicoHibernateDAO extends GenericHibernateDAO<Op
private List getCorridasResumido(Integer operador, Empresa empresa, Date dtIni, Date dtFim, Boolean retornaTramos) throws Exception {
StringBuilder sb = new StringBuilder();
start = System.currentTimeMillis();
sb.append("select * from (SELECT");
sb.append(" cor.corrida_id ||';'|| to_char(cor.feccorrida, 'ddMMYYYY') AS chaveCorrida, cor.ruta_id AS rutaId ");
sb.append(" FROM OPERADOR_EMBARCADA OPE ");
@ -320,6 +320,8 @@ public class OperadorEmbarcadaServicoHibernateDAO extends GenericHibernateDAO<Op
corridas.add(co);
}
log.debug( printInfo("getCorridasResumido", start));
return corridas;
}else {
List<String> corridasString = new ArrayList<String>();
@ -327,12 +329,13 @@ public class OperadorEmbarcadaServicoHibernateDAO extends GenericHibernateDAO<Op
corridasString.add( (String)chave[0] );
}
log.debug( printInfo("getCorridasResumido", start));
return corridasString;
}
}
private List<Integer> obterListaTramo( String chave, Integer rutaId ) throws Exception{
start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
sb.append(" SELECT");
@ -340,7 +343,7 @@ public class OperadorEmbarcadaServicoHibernateDAO extends GenericHibernateDAO<Op
sb.append(" FROM RUTA_COMBINACION RC ");
sb.append(" JOIN TRAMO TRM ON TRM.TRAMO_ID = RC.TRAMO_ID AND TRM.activo = 1 ");
sb.append(" JOIN CORRIDA_TRAMO CT ON CT.CORRIDA_ID = :corridaId ");
sb.append(" AND CT.FECCORRIDA = :feccorrida ");
sb.append(" AND CT.FECCORRIDA = TO_DATE(:feccorrida, 'DDmmYYYY') ");
sb.append(" AND CT.DESTINO_ID = TRM.DESTINO_ID ");
sb.append(" AND CT.activo = 1 ");
sb.append(" WHERE RC.RUTA_ID = :rutaId ");
@ -352,10 +355,12 @@ public class OperadorEmbarcadaServicoHibernateDAO extends GenericHibernateDAO<Op
String[] split = chave.split(";");
query.setParameter("corridaId", split[0] );
query.setParameter("feccorrida", DateUtil.getDateFromString( split[1], "ddMMyyyy") );
query.setParameter("feccorrida", split[1] );
query.setParameter("rutaId", rutaId );
return query.list();
List<Integer> list = query.list();
log.debug( printInfo("obterListaTramo", start));
return list;
}