/* * 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 buscarPeloNome(String nome) { return usuarioDAO.buscarPeloNome(nome); } public List 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 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 lsUsuarioPerfil = usuarioPerfilDAO.obtenerPorUsuario(entidad); for (UsuarioPerfil up2 : lsUsuarioPerfil) { usuarioPerfilDAO.borrar(up2); } } List lsUp = new ArrayList(); 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 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 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 buscarPorEmpleado(Empleado empleado) { return usuarioDAO.buscarPorEmpleado(empleado); } public List buscarPelaCveUsuario(String cveUsuario) { return usuarioDAO.buscarPelaCveUsuario(cveUsuario); } @Override public List buscarPeloNomeLike(String nome) { return usuarioDAO.buscarPeloNomeLike(nome); } @Override public List buscarUsuariosEmbarcadaPorPontoVenda(Long puntoVentaId) { return usuarioDAO.buscarUsuarioPorPontoVenda(puntoVentaId); } @Override public List buscarUsuariosEmbarcadaPorDispositivo(Long dispositivoEmbarcadaId){ return usuarioDAO.buscarUsuarioPorDispositivo(dispositivoEmbarcadaId); } @Override public List buscarUsuarioEmbarcadaPorUsuariosIds(List usuariosIdList) { return usuarioDAO.buscarUsuarioEmbarcadaPorUsuariosIds(usuariosIdList); } @Override public List buscaUsuariosDoPuntoVenta(Long puntoVentaId) { return usuarioDAO.buscaUsuariosDoPuntoVenta(puntoVentaId); } }