299 lines
10 KiB
Java
299 lines
10 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.apache.log4j.Logger;
|
|
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.ConstanteService;
|
|
import com.rjconsultores.ventaboletos.service.LogAuditoriaService;
|
|
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;
|
|
import com.rjconsultores.ventaboletos.vo.embarcada.UsuarioEmbarcadaVO;
|
|
import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext;
|
|
|
|
/**
|
|
*
|
|
* @author Administrador
|
|
*/
|
|
@Service("usuarioService")
|
|
public class UsuarioServiceImpl implements UsuarioService, UserDetailsService {
|
|
|
|
@Autowired
|
|
private UsuarioDAO usuarioDAO;
|
|
@Autowired
|
|
private UsuarioPerfilDAO usuarioPerfilDAO;
|
|
@Autowired
|
|
private LogAuditoriaService logAuditoriaService;
|
|
private static Logger log = Logger.getLogger(UsuarioServiceImpl.class);
|
|
|
|
|
|
public List<Usuario> buscarPeloNome(String nome) {
|
|
return usuarioDAO.buscarPeloNome(nome);
|
|
}
|
|
|
|
public List<Usuario> obtenerTodos() {
|
|
return usuarioDAO.obtenerTodos();
|
|
}
|
|
|
|
public Usuario obtenerID(Integer id) {
|
|
|
|
Usuario usuario = usuarioDAO.obtenerID(id);
|
|
try {
|
|
usuario.clonar();
|
|
} catch (Exception e) {
|
|
log.error(e.getMessage(), e);
|
|
}
|
|
return usuario;
|
|
|
|
}
|
|
|
|
@Transactional(rollbackFor = BusinessException.class)
|
|
@Override
|
|
public Usuario suscribirActualizar(Usuario entidad, String senha, Perfil perfil) throws BusinessException {
|
|
|
|
try{
|
|
|
|
Usuario originalClone = entidad.getCloneObject();
|
|
|
|
// validaciOn 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) {
|
|
// validaciOn complejidad contrasena
|
|
if (ApplicationProperties.getInstance().isCustomHabilitado(CustomEnum.CONTRASENA_VALIDA_COMPLEJIDAD.getDescricao())) {
|
|
|
|
ConstanteService constanteService = (ConstanteService) AppContext.getApplicationContext().getBean("constanteService");
|
|
boolean CONSTANTE_CANT_MIN_CARACTER_OITO = Boolean.parseBoolean(constanteService.buscarPorNomeConstante("CONSTANTE_CANT_MIN_CARACTER_OITO").getValorconstante());
|
|
|
|
if(CONSTANTE_CANT_MIN_CARACTER_OITO) {
|
|
ContrasenaUtileria contrasenaUtileria = new ContrasenaUtileria(8);
|
|
contrasenaUtileria.validarContrasenaCompleja(senha);
|
|
} else {
|
|
ContrasenaUtileria contrasenaUtileria = new ContrasenaUtileria();
|
|
contrasenaUtileria.validarContrasenaCompleja(senha);
|
|
}
|
|
}
|
|
|
|
// encriptacion 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) {
|
|
usuarioDAO.suscribir(entidad);
|
|
logAuditoriaService.auditar(null, entidad, entidad.getEmpresa() != null && !entidad.getEmpresa().isEmpty()? entidad.getEmpresa().get(0).getEmpresaId(): null);
|
|
return entidad;
|
|
|
|
} else {
|
|
entidad = usuarioDAO.actualizacion(entidad);
|
|
logAuditoriaService.auditar(originalClone, entidad, entidad.getEmpresa() != null && !entidad.getEmpresa().isEmpty()? entidad.getEmpresa().get(0).getEmpresaId(): null);
|
|
return entidad;
|
|
}
|
|
}catch (Exception e) {
|
|
log.error(e.getMessage(), e);
|
|
throw new RuntimeException(e.getMessage(), e);
|
|
}
|
|
}
|
|
|
|
@Transactional(rollbackFor = BusinessException.class)
|
|
@Override
|
|
public Usuario cambiarContrasena(Usuario entidad, String senha) throws BusinessException {
|
|
|
|
// validaciOn 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) {
|
|
// validaciOn complejidad contrasena
|
|
if (ApplicationProperties.getInstance().isCustomHabilitado(CustomEnum.CONTRASENA_VALIDA_COMPLEJIDAD.getDescricao())) {
|
|
|
|
ConstanteService constanteService = (ConstanteService) AppContext.getApplicationContext().getBean("constanteService");
|
|
boolean CONSTANTE_CANT_MIN_CARACTER_OITO = Boolean.parseBoolean(constanteService.buscarPorNomeConstante("CONSTANTE_CANT_MIN_CARACTER_OITO").getValorconstante());
|
|
|
|
if(CONSTANTE_CANT_MIN_CARACTER_OITO) {
|
|
ContrasenaUtileria contrasenaUtileria = new ContrasenaUtileria(8);
|
|
contrasenaUtileria.validarContrasenaCompleja(senha);
|
|
} else {
|
|
ContrasenaUtileria contrasenaUtileria = new ContrasenaUtileria();
|
|
contrasenaUtileria.validarContrasenaCompleja(senha);
|
|
}
|
|
}
|
|
|
|
// encriptacion contrasena
|
|
entidad.setSenha(ContrasenaUtileria.encriptarContrasena(senha));
|
|
}
|
|
|
|
entidad.setFecContrasena(Calendar.getInstance().getTime());
|
|
entidad.setUsuariomodifId(entidad.getUsuarioId());
|
|
entidad.setFecmodif(Calendar.getInstance().getTime());
|
|
entidad.setIndTrocaSenha(Boolean.FALSE);
|
|
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);
|
|
logAuditoriaService.auditarExclusao(entidad, entidad.getEmpresa() != null && !entidad.getEmpresa().isEmpty()? entidad.getEmpresa().get(0).getEmpresaId(): null);
|
|
}
|
|
|
|
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");
|
|
}
|
|
}
|
|
|
|
if (user.getIndTrocaSenha() != null) {
|
|
if (user.getIndTrocaSenha()) {
|
|
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);
|
|
}
|
|
|
|
@Override
|
|
public List<UsuarioEmbarcadaVO> buscarUsuariosEmbarcadaPorPontoVenda(Long puntoVentaId) {
|
|
return usuarioDAO.buscarUsuarioPorPontoVenda(puntoVentaId);
|
|
}
|
|
|
|
@Override
|
|
public List<UsuarioEmbarcadaVO> buscarUsuariosEmbarcadaPorDispositivo(Long dispositivoEmbarcadaId){
|
|
return usuarioDAO.buscarUsuarioPorDispositivo(dispositivoEmbarcadaId);
|
|
}
|
|
|
|
@Override
|
|
public List<UsuarioEmbarcadaVO> buscarUsuarioEmbarcadaPorUsuariosIds(List<Long> usuariosIdList) {
|
|
return usuarioDAO.buscarUsuarioEmbarcadaPorUsuariosIds(usuariosIdList);
|
|
}
|
|
|
|
@Override
|
|
public List<UsuarioEmbarcadaVO> buscaUsuariosDoPuntoVenta(Long puntoVentaId) {
|
|
return usuarioDAO.buscaUsuariosDoPuntoVenta(puntoVentaId);
|
|
}
|
|
|
|
}
|