package com.xkrs.service.impl; import com.xkrs.common.encapsulation.PromptMessageEnum; import com.xkrs.dao.RelRoleAuthorityDao; import com.xkrs.dao.RelUserRoleDao; import com.xkrs.dao.SysRoleDao; import com.xkrs.dao.SysUserDao; import com.xkrs.model.entity.RelRoleAuthorityEntity; import com.xkrs.model.entity.RelUserRoleEntity; import com.xkrs.model.entity.SysRoleEntity; import com.xkrs.model.entity.SysUserEntity; import com.xkrs.model.qo.SysUserQo; import com.xkrs.model.vo.SysUserVo; import com.xkrs.service.SysUserService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.security.crypto.keygen.KeyGenerators; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; import java.util.Locale; import static com.xkrs.common.encapsulation.OutputEncapsulation.outputEncapsulationObject; import static com.xkrs.utils.DateTimeUtil.getNowTime; import static com.xkrs.utils.EncryptDecryptUtil.encry256; /** * 系统用户服务实现 * @author tajochen */ @Service public class SysUserServiceImpl implements SysUserService { Logger logger = LoggerFactory.getLogger(SysUserServiceImpl.class); @Resource private SysUserDao sysUserDao; @Resource private SysRoleDao sysRoleDao; @Resource private RelUserRoleDao relUserRoleDao; @Resource private RelRoleAuthorityDao relRoleAuthorityDao; /** * 检查用户名是否存在 * @param userName * @return */ @Override public boolean checkUserName(String userName) { int num = sysUserDao.checkUserName(userName); return (num == 0); }; /** * 新增用户 * @param sysUserQo */ @Transactional(rollbackFor=Exception.class) @Override public void addUser(SysUserQo sysUserQo) { String salt = KeyGenerators.string().generateKey(); SysUserEntity sysUserEntity = new SysUserEntity(); sysUserEntity.setUserName(sysUserQo.getUserName()); sysUserEntity.setReallyName(sysUserQo.getReallyName()); sysUserEntity.setSalt(salt); sysUserEntity.setPassword(encry256(sysUserQo.getPassword() + salt)); sysUserEntity.setTelephone(sysUserQo.getUserName()); sysUserEntity.setUserDepartment(sysUserQo.getUserDepartment()); sysUserEntity.setActiveFlag(1); sysUserEntity.setStatusCode(0); sysUserEntity.setAddTime(getNowTime()); sysUserEntity.setDeleteFlag(0); sysUserDao.save(sysUserEntity); RelUserRoleEntity relUserRoleEntity = new RelUserRoleEntity(); relUserRoleEntity.setUserId(sysUserEntity.getId().longValue()); relUserRoleEntity.setRoleId(2); RelRoleAuthorityEntity relRoleAuthorityEntity = new RelRoleAuthorityEntity(); relRoleAuthorityEntity.setRoleId(2); relRoleAuthorityEntity.setAuthorityId(2); relRoleAuthorityEntity.setUserId(sysUserEntity.getId()); relUserRoleDao.save(relUserRoleEntity); relRoleAuthorityDao.save(relRoleAuthorityEntity); //sysRoleDao.insertRelUserRole(sysUserEntity.getUserName(),"role_general_user"); } /** * 查询所有用户Vo * @return */ /*@Transactional(rollbackFor=Exception.class) @Override public Iterable getAllSysUser() { Iterable ls = sysUserDao.selectAllSysUser(); return ls; }*/ @Transactional(rollbackFor=Exception.class) @Override public SysUserEntity getSysUserByUserName(String userName) { return sysUserDao.selectByUserName(userName); } @Transactional(rollbackFor=Exception.class) @Override public int updateSysUserLogin(String userName,String ipAddress) { return sysUserDao.updateSysUserLogin(userName,ipAddress); } /** * 更新用户 * @param sysUserQo * @return */ @Transactional(rollbackFor=Exception.class) @Override public int updateSysUser(SysUserQo sysUserQo) { SysUserEntity sysUserEntity = new SysUserEntity(); sysUserEntity.setReallyName(sysUserQo.getReallyName()); sysUserDao.save(sysUserEntity); return 1; } /** * 软删除普通用户 * @param id * @return */ @Transactional(rollbackFor=Exception.class) @Override public int softDeleteGeneralUser(Integer id) { String adminRole = "role_administor"; String sysRole ="role_system_manager"; List list = sysRoleDao.selectByUserId(id); if(list.size()>0){ SysRoleEntity sysRoleEntity = list.get(1); if(sysRole.equals(sysRoleEntity.getRoleName())||adminRole.equals(sysRoleEntity.getRoleName())){ sysUserDao.softDeleteGeneralUserById(id); return 0; } } return 1; } /** * 查询用户的信息 * @return */ @Override public List selectAllUser() { return sysUserDao.selectAll(); } /** * 启用 * @param userId */ @Transactional(rollbackFor=Exception.class) @Override public void updateEnable(Integer userId) { sysUserDao.updateEnable(userId); } /** * 禁用 * @param userId */ @Transactional(rollbackFor=Exception.class) @Override public void updateDisable(Integer userId) { sysUserDao.updateDisable(userId); } /** * 用户修改密码 * @param oldPassword * @param newPassword * @param confirmPassword * @param sysUserEntity * @return */ @Transactional(rollbackFor=Exception.class) @Override public String updatePassword(String oldPassword, String newPassword, String confirmPassword, SysUserEntity sysUserEntity) { Locale locale = LocaleContextHolder.getLocale(); String oldFrontPassword = encry256(oldPassword + sysUserEntity.getSalt()); if(!oldFrontPassword.equals(sysUserEntity.getPassword())){ return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL,"旧密码输入错误",locale); } if(!newPassword.equals(confirmPassword)){ return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL,"两次密码输入不一致",locale); } String newAfterPassword = encry256(newPassword + sysUserEntity.getSalt()); sysUserDao.updatePassword(sysUserEntity.getId(),newAfterPassword); return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"密码修改成功",locale); } /** * 管理员修改用户的密码 * @param userId * @param newPassword * @param confirmPassword * @return */ @Transactional(rollbackFor=Exception.class) @Override public String adminUpdatePassword(Integer userId, String newPassword, String confirmPassword) { Locale locale = LocaleContextHolder.getLocale(); if(!newPassword.equals(confirmPassword)){ return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL,"两次密码输入不一致",locale); } SysUserEntity sysUserEntity = sysUserDao.selectByUserId(userId); String newAfterPassword = encry256(newPassword + sysUserEntity.getSalt()); sysUserDao.updatePassword(userId,newAfterPassword); return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"密码修改成功",locale); } }