223 lines
7.0 KiB
Java
223 lines
7.0 KiB
Java
/*
|
||
* To change this template, choose Tools | Templates
|
||
* and open the template in the editor.
|
||
*/
|
||
package com.rjconsultores.ventaboletos.service.impl;
|
||
|
||
import java.util.ArrayList;
|
||
import java.util.Calendar;
|
||
import java.util.List;
|
||
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.dao.DataAccessException;
|
||
import org.springframework.security.authentication.CredentialsExpiredException;
|
||
import org.springframework.security.core.userdetails.UserDetails;
|
||
import org.springframework.security.core.userdetails.UserDetailsService;
|
||
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
||
import org.springframework.stereotype.Service;
|
||
import org.springframework.transaction.annotation.Transactional;
|
||
|
||
import com.rjconsultores.ventaboletos.dao.UsuarioDAO;
|
||
import com.rjconsultores.ventaboletos.dao.UsuarioPerfilDAO;
|
||
import com.rjconsultores.ventaboletos.entidad.Empleado;
|
||
import com.rjconsultores.ventaboletos.entidad.Perfil;
|
||
import com.rjconsultores.ventaboletos.entidad.Usuario;
|
||
import com.rjconsultores.ventaboletos.entidad.UsuarioPerfil;
|
||
import com.rjconsultores.ventaboletos.exception.BusinessException;
|
||
import com.rjconsultores.ventaboletos.service.UsuarioService;
|
||
import com.rjconsultores.ventaboletos.utilerias.ApplicationProperties;
|
||
import com.rjconsultores.ventaboletos.utilerias.CustomEnum;
|
||
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
|
||
import com.rjconsultores.ventaboletos.utilerias.seguridad.ContrasenaUtileria;
|
||
|
||
/**
|
||
*
|
||
* @author Administrador
|
||
*/
|
||
@Service("usuarioService")
|
||
public class UsuarioServiceImpl implements UsuarioService, UserDetailsService {
|
||
|
||
@Autowired
|
||
private UsuarioDAO usuarioDAO;
|
||
@Autowired
|
||
private UsuarioPerfilDAO usuarioPerfilDAO;
|
||
|
||
public List<Usuario> buscarPeloNome(String nome) {
|
||
return usuarioDAO.buscarPeloNome(nome);
|
||
}
|
||
|
||
public List<Usuario> obtenerTodos() {
|
||
return usuarioDAO.obtenerTodos();
|
||
}
|
||
|
||
public Usuario obtenerID(Integer id) {
|
||
return usuarioDAO.obtenerID(id);
|
||
}
|
||
|
||
@Transactional(rollbackFor = BusinessException.class)
|
||
@Override
|
||
public Usuario suscribirActualizar(Usuario entidad, String senha, Perfil perfil) throws BusinessException {
|
||
|
||
// validaci<63>n duplicado
|
||
List<Usuario> lsUsuario = this.buscarPelaCveUsuario(entidad.getClaveUsuario());
|
||
boolean podeSalvar = false;
|
||
if (lsUsuario.isEmpty()) {
|
||
podeSalvar = true;
|
||
} else {
|
||
if (entidad.getUsuarioId() != null) {
|
||
for (Usuario u : lsUsuario) {
|
||
if (u.getUsuarioId().equals(entidad.getUsuarioId())) {
|
||
podeSalvar = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (!podeSalvar) {
|
||
throw new BusinessException("MSG.Registro.Existe");
|
||
}
|
||
if (senha != null) {
|
||
// validaci<63>n complejidad contrasena
|
||
if (ApplicationProperties.getInstance().isCustomHabilitado(CustomEnum.CONTRASENA_VALIDA_COMPLEJIDAD.getDescricao())) {
|
||
ContrasenaUtileria contrasenaUtileria = new ContrasenaUtileria();
|
||
contrasenaUtileria.validarContrasenaCompleja(senha);
|
||
}
|
||
|
||
// encriptaci<63>n contrasena
|
||
entidad.setSenha(ContrasenaUtileria.encriptarContrasena(senha));
|
||
}
|
||
|
||
// Perfil
|
||
UsuarioPerfil up = new UsuarioPerfil();
|
||
up.setUsuario(entidad);
|
||
up.setPerfil(perfil);
|
||
up.setActivo(Boolean.TRUE);
|
||
up.setFecmodif(Calendar.getInstance().getTime());
|
||
up.setUsuariomodifId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
||
|
||
if (entidad.getUsuarioId() != null) {
|
||
List<UsuarioPerfil> lsUsuarioPerfil = usuarioPerfilDAO.obtenerPorUsuario(entidad);
|
||
for (UsuarioPerfil up2 : lsUsuarioPerfil) {
|
||
usuarioPerfilDAO.borrar(up2);
|
||
}
|
||
}
|
||
List<UsuarioPerfil> lsUp = new ArrayList<UsuarioPerfil>();
|
||
lsUp.add(up);
|
||
entidad.setUsuarioPerfilList(lsUp);
|
||
|
||
entidad.setUsuariomodifId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
||
entidad.setFecmodif(Calendar.getInstance().getTime());
|
||
entidad.setActivo(Boolean.TRUE);
|
||
|
||
if (entidad.getUsuarioId() == null) {
|
||
return usuarioDAO.suscribir(entidad);
|
||
} else {
|
||
return usuarioDAO.actualizacion(entidad);
|
||
}
|
||
}
|
||
|
||
@Transactional(rollbackFor = BusinessException.class)
|
||
@Override
|
||
public Usuario cambiarContrasena(Usuario entidad, String senha) throws BusinessException {
|
||
|
||
// validaci<63>n duplicado
|
||
List<Usuario> lsUsuario = this.buscarPelaCveUsuario(entidad.getClaveUsuario());
|
||
boolean podeSalvar = false;
|
||
if (lsUsuario.isEmpty()) {
|
||
podeSalvar = true;
|
||
} else {
|
||
if (entidad.getUsuarioId() != null) {
|
||
for (Usuario u : lsUsuario) {
|
||
if (u.getUsuarioId().equals(entidad.getUsuarioId())) {
|
||
podeSalvar = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (!podeSalvar) {
|
||
throw new BusinessException("MSG.Registro.Existe");
|
||
}
|
||
if (senha != null) {
|
||
// validaci<63>n complejidad contrasena
|
||
if (ApplicationProperties.getInstance().isCustomHabilitado(CustomEnum.CONTRASENA_VALIDA_COMPLEJIDAD.getDescricao())) {
|
||
ContrasenaUtileria contrasenaUtileria = new ContrasenaUtileria();
|
||
contrasenaUtileria.validarContrasenaCompleja(senha);
|
||
}
|
||
|
||
// encriptaci<63>n contrasena
|
||
entidad.setSenha(ContrasenaUtileria.encriptarContrasena(senha));
|
||
}
|
||
|
||
entidad.setFecContrasena(Calendar.getInstance().getTime());
|
||
entidad.setUsuariomodifId(entidad.getUsuarioId());
|
||
entidad.setFecmodif(Calendar.getInstance().getTime());
|
||
entidad.setActivo(Boolean.TRUE);
|
||
|
||
if (entidad.getUsuarioId() != null) {
|
||
return usuarioDAO.actualizacion(entidad);
|
||
} else {
|
||
throw new BusinessException("MSG.Registro.Existe");
|
||
}
|
||
}
|
||
|
||
@Transactional
|
||
public void borrar(Usuario entidad) {
|
||
|
||
entidad = obtenerID(entidad.getUsuarioId());
|
||
|
||
for (UsuarioPerfil up : entidad.getUsuarioPerfilList()) {
|
||
up.setUsuariomodifId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
||
up.setFecmodif(Calendar.getInstance().getTime());
|
||
up.setActivo(Boolean.FALSE);
|
||
}
|
||
|
||
entidad.setUsuariomodifId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
||
entidad.setFecmodif(Calendar.getInstance().getTime());
|
||
entidad.setActivo(Boolean.FALSE);
|
||
|
||
usuarioDAO.actualizacion(entidad);
|
||
}
|
||
|
||
public Usuario buscarPeloNomeSenha(String stUsuario, String senha) {
|
||
senha = ContrasenaUtileria.encriptarContrasena(senha);
|
||
return usuarioDAO.buscarPeloNomeSenha(stUsuario, senha);
|
||
}
|
||
|
||
@Override
|
||
public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException, DataAccessException, CredentialsExpiredException {
|
||
if (login == null) {
|
||
throw new UsernameNotFoundException("Usuario n<>o encontrado");
|
||
}
|
||
List<Usuario> list = usuarioDAO.buscarPelaCveUsuario(login.toUpperCase());
|
||
|
||
if (list.isEmpty()) {
|
||
throw new UsernameNotFoundException("Usuario n<>o encontrado");
|
||
}
|
||
|
||
Usuario user = list.get(0);
|
||
|
||
if (ApplicationProperties.getInstance().isCustomHabilitado(CustomEnum.CONTRASENA_VALIDA_COMPLEJIDAD.getDescricao())) {
|
||
if (!user.isCredentialsNonExpired()) {
|
||
throw new CredentialsExpiredException("Senha Expirada");
|
||
}
|
||
}
|
||
|
||
return user;
|
||
}
|
||
|
||
public List<Usuario> buscarPorEmpleado(Empleado empleado) {
|
||
return usuarioDAO.buscarPorEmpleado(empleado);
|
||
}
|
||
|
||
public List<Usuario> buscarPelaCveUsuario(String cveUsuario) {
|
||
return usuarioDAO.buscarPelaCveUsuario(cveUsuario);
|
||
}
|
||
|
||
@Override
|
||
public List<Usuario> buscarPeloNomeLike(String nome) {
|
||
return usuarioDAO.buscarPeloNomeLike(nome);
|
||
}
|
||
|
||
}
|