Subversion Repositories Integrator Subversion

Rev

Rev 259 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.repository.jpa;

import java.util.List;

import javax.persistence.NoResultException;
import javax.persistence.TypedQuery;

import org.springframework.stereotype.Repository;

import br.com.ec.core.exception.NegocioException;
import br.com.ec.domain.dto.FuncionarioDTO;
import br.com.ec.domain.dto.LojaDTO;
import br.com.ec.domain.dto.UsuarioDTO;
import br.com.ec.domain.dto.UsuarioPerfilDTO;
import br.com.ec.domain.model.Usuario;
import br.com.ec.repository.SistemaAbstractRepository;
import br.com.ec.repository.UsuarioRepository;

@Repository
public class UsuarioRepositoryJpaImpl extends SistemaAbstractRepository<Usuario> implements UsuarioRepository {
       
        private static final String USUARIO_INFORMADO_NAO_EXISTE_PARA_ESTA_PESSOA = "Usuário informado não existe para esta pessoa";
       
        @Override
        public UsuarioDTO consultarPorLogin(String login, String senha) {
                StringBuilder jpql = new StringBuilder();
                jpql.append("SELECT new br.com.ec.domain.dto.UsuarioDTO(");
                jpql.append(UsuarioDTO.CONSULTA_DTO_COMPLETA);
                jpql.append(") FROM Usuario e ");
                jpql.append("WHERE e.login = :login AND e.senha = :senha AND e.ativo is true");
                try {
                        return getEntityManager().createQuery(jpql.toString(), UsuarioDTO.class)
                                        .setParameter("login", login)
                                        .setParameter("senha", senha)
                                        .getSingleResult();
                } catch (NoResultException nre) {
                        throw new NegocioException("Usuário não existe");
                }
        }
       
        @Override
        public UsuarioDTO consultarPorPessoa(Long sequencialPessoa) {
                StringBuilder jpql = new StringBuilder();
                jpql.append("SELECT new br.com.ec.domain.dto.UsuarioDTO(");
                jpql.append(UsuarioDTO.CONSULTA_DTO_COMPLETA);
                jpql.append(") FROM Usuario e ");
                jpql.append("WHERE e.pessoa.sequencial = :sequencialPessoa");
                try {
                        return getEntityManager().createQuery(jpql.toString(), UsuarioDTO.class)
                                        .setParameter("sequencialPessoa", sequencialPessoa)
                                        .getSingleResult();
                } catch (NoResultException nre) {
                        nre.printStackTrace();
                }
                return null;
        }
       
        @Override
        public List<UsuarioPerfilDTO> consultarPerfisDoUsuario(Long sequencialUsuario) {
                StringBuilder jpql = new StringBuilder();
                jpql.append("SELECT new br.com.ec.domain.dto.UsuarioPerfilDTO(");
                jpql.append(UsuarioPerfilDTO.CONSULTA_DTO_COMPLETA);
                jpql.append(") FROM UsuarioPerfil e ");
                jpql.append("WHERE e.usuario.sequencial = :sequencialUsuario ");
                jpql.append("ORDER BY e.perfil.descricao ");
                try {
                        TypedQuery<UsuarioPerfilDTO> query = getEntityManager().createQuery(jpql.toString(), UsuarioPerfilDTO.class);
                        query.setParameter("sequencialUsuario", sequencialUsuario);
                        return query.getResultList();
                } catch(Exception ex) {
                        ex.printStackTrace();
                        return null;
                }
        }
       
        /*
        @Override
        public List<LojaDTO> consultarLojasDoUsuario(Long sequencialUsuario) {
                StringBuilder jpql = new StringBuilder();
                jpql.append("SELECT new br.com.ec.domain.dto.LojaDTO(ul.loja.sequencial, ul.loja.descricao) FROM UsuarioLoja ul ");
                jpql.append("WHERE ul.usuario.sequencial = :sequencialUsuario ");
                jpql.append("ORDER BY ul.loja.ordenador ");
                try {
                        return getEntityManager().createQuery(jpql.toString(), LojaDTO.class)
                                        .setParameter("sequencialUsuario", sequencialUsuario)
                                        .getResultList();
                } catch (Exception ex) {
                        ex.printStackTrace();
                }
                return null;
        }
        */

       
        @Override
        public Integer obterQuantidadeUsuarioDiferenteComSenhaInformada(String login, String senha) {
                StringBuilder jpql = new StringBuilder();
                jpql.append("SELECT COUNT(u) FROM Usuario u ");
                jpql.append("WHERE u.login != :login AND u.senha = :senha");
                try {
                        TypedQuery<Long> query = getEntityManager()
                                        .createQuery(jpql.toString(), Long.class)
                                        .setParameter("login", login)
                                        .setParameter("senha", senha);
                        return query.getSingleResult().intValue();
                } catch(Exception ex) {
                        ex.printStackTrace();
                }
                return 0;
        }
       
        @Override
        public Integer obterQuantidadeUsuarioComLoginCpfInformados(String login, String cpfCnpj) {
                StringBuilder jpql = new StringBuilder();
                jpql.append("SELECT COUNT(u) FROM Usuario u ");
                jpql.append("WHERE u.login = :login AND u.pessoa.cpfCnpj like :cpfCnpj");
                try {
                        TypedQuery<Long> query = getEntityManager()
                                        .createQuery(jpql.toString(), Long.class)
                                        .setParameter("login", login)
                                        .setParameter("cpfCnpj", cpfCnpj);
                        return query.getSingleResult().intValue();
                } catch(Exception ex) {
                        ex.printStackTrace();
                }
                return 0;
        }
       
        @Override
        public void alterarSenha(String login, String senha) {
                StringBuilder sql = new StringBuilder();
                sql.append("UPDATE Usuario u SET u.senha = :senha ");
                sql.append("WHERE u.login = :login");
                try {
                        getEntityManager().createQuery(sql.toString())
                                .setParameter("login", login)
                                .setParameter("senha", senha)
                                .executeUpdate();
                        getEntityManager().flush();
                } catch(Exception ex) {
                        ex.printStackTrace();
                }
        }
       
        @Override
        public String consultarEmailPorLogin(String login) {
                StringBuilder jpql = new StringBuilder();
                jpql.append("SELECT u.pessoa.email FROM Usuario u ");
                jpql.append("WHERE u.login = :login AND u.ativo is true");
                try {
                        return getEntityManager().createQuery(jpql.toString(), String.class)
                                        .setParameter("login", login)
                                        .getSingleResult();
                } catch(NoResultException nre) {
                        nre.printStackTrace();
                }
                return null;
        }
       
        /*
        @Override
        public Usuario consultarPorLoginAnterior(Usuario usuario) {
                StringBuilder jpql = new StringBuilder();
                jpql.append("SELECT u FROM Usuario u ");
                jpql.append("LEFT JOIN FETCH u.perfis p ");
//              jpql.append("LEFT JOIN FETCH u.lojas l ");
                jpql.append("WHERE u.login = :login AND u.senha = :senha AND u.ativo is true");
                return getEntityManager().createQuery(jpql.toString(), Usuario.class)
                                        .setParameter("login", usuario.getLogin())
                                        .setParameter("senha", usuario.getSenha())
                                        .getSingleResult();
        }

        @Override
        protected String getColunaOrdenadora() {
                return "nome";
        }
       
       
       
        @Override
        public Usuario consultarUsuarioPorSenha(String senha) {
                StringBuilder jpql = new StringBuilder();
                jpql.append("SELECT u FROM Usuario u ");
                jpql.append("LEFT JOIN FETCH u.perfis p ");
                jpql.append("LEFT JOIN FETCH u.lojas l ");
                jpql.append("WHERE u.senha = :senha");
                return getEntityManager().createQuery(jpql.toString(), Usuario.class)
                                        .setParameter("senha", senha)
                                        .getSingleResult();
        }
       
        @Override
        public Usuario consultarUsuarioPorPessoa(Pessoa pessoa) {
                StringBuilder jpql = new StringBuilder();
                jpql.append("SELECT u FROM Usuario u ");
                jpql.append("LEFT JOIN FETCH u.perfis p ");
                jpql.append("LEFT JOIN FETCH u.lojas l ");
                jpql.append("WHERE u.pessoa = :pessoa");
                try {
                        return getEntityManager().createQuery(jpql.toString(), Usuario.class)
                                                .setParameter("pessoa", pessoa)
                                                .getSingleResult();
                } catch (NoResultException nre) {
                        throw new RuntimeException(USUARIO_INFORMADO_NAO_EXISTE_PARA_ESTA_PESSOA);
                }
        }
       
        @Override
        public Usuario detalhar(Usuario usuario) {
                StringBuilder jpql = new StringBuilder();
                jpql.append("SELECT u FROM Usuario u ");
                jpql.append("LEFT JOIN FETCH u.perfis p ");
                jpql.append("LEFT JOIN FETCH u.lojas l ");
                jpql.append("WHERE u.sequencial = :sequencial");
                return getEntityManager().createQuery(jpql.toString(), Usuario.class).setParameter("sequencial", usuario.getSequencial()).getSingleResult();
        }
       
       
       
        @Override
        public void atualizarDataUltimoAcesso(Usuario usuario) {
                StringBuilder sql = new StringBuilder();
                sql.append("UPDATE Usuario u SET u.ultimoAcesso = now() ");
                sql.append("WHERE u.sequencial = :sequencial");
                try {
                        getEntityManager().createQuery(sql.toString())
                                .setParameter("sequencial", usuario.getSequencial())
                                .executeUpdate();
                        getEntityManager().flush();
                } catch(Exception ex) {
                        ex.printStackTrace();
                }
        }
       
       
        */

}