package com.ruoyi.system.service.impl; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.exception.BusinessException; import com.ruoyi.common.utils.security.Md5Utils; import com.ruoyi.system.domain.*; import com.ruoyi.system.mapper.*; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysUserService; import lombok.extern.slf4j.Slf4j; import cn.hutool.core.util.ObjectUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; /** * 用户 业务层处理 * * @author ruoyi */ @Service @Slf4j public class SysUserServiceImpl implements ISysUserService { private final SysUserMapper userMapper; private final SysRoleMapper roleMapper; private final SysPostMapper postMapper; private final SysUserPostMapper userPostMapper; private final SysUserRoleMapper userRoleMapper; private final ISysConfigService configService; @Autowired public SysUserServiceImpl(SysUserMapper userMapper, SysRoleMapper roleMapper, SysPostMapper postMapper, SysUserPostMapper userPostMapper, SysUserRoleMapper userRoleMapper, ISysConfigService configService) { this.userMapper = userMapper; this.roleMapper = roleMapper; this.postMapper = postMapper; this.userPostMapper = userPostMapper; this.userRoleMapper = userRoleMapper; this.configService = configService; } /** * 根据条件分页查询用户列表 * * @param user 用户信息 * @return 用户信息集合信息 */ @Override @DataScope(tableAlias = "u") public List<SysUser> selectUserList(SysUser user) { return userMapper.selectUserList(user); } /** * 根据条件分页查询已分配用户角色列表 * * @param user 用户信息 * @return 用户信息集合信息 */ @Override @DataScope(tableAlias = "u") public List<SysUser> selectAllocatedList(SysUser user) { return userMapper.selectAllocatedList(user); } /** * 根据条件分页查询未分配用户角色列表 * * @param user 用户信息 * @return 用户信息集合信息 */ @Override @DataScope(tableAlias = "u") public List<SysUser> selectUnallocatedList(SysUser user) { return userMapper.selectUnallocatedList(user); } /** * 通过用户名查询用户 * * @param userName 用户名 * @return 用户对象信息 */ @Override public SysUser selectUserByLoginName(String userName) { return userMapper.selectUserByLoginName(userName); } /** * 通过手机号码查询用户 * * @param phoneNumber 手机号码 * @return 用户对象信息 */ @Override public SysUser selectUserByPhoneNumber(String phoneNumber) { return userMapper.selectUserByPhoneNumber(phoneNumber); } /** * 通过邮箱查询用户 * * @param email 邮箱 * @return 用户对象信息 */ @Override public SysUser selectUserByEmail(String email) { return userMapper.selectUserByEmail(email); } /** * 通过用户ID查询用户 * * @param userId 用户ID * @return 用户对象信息 */ @Override public SysUser selectUserById(Long userId) { return userMapper.selectUserById(userId); } /** * 通过用户ID删除用户 * * @param userId 用户ID * @return 结果 */ @Override public int deleteUserById(Long userId) { // 删除用户与角色关联 userRoleMapper.deleteUserRoleByUserId(userId); // 删除用户与岗位表 userPostMapper.deleteUserPostByUserId(userId); return userMapper.deleteUserById(userId); } /** * 批量删除用户信息 * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteUserByIds(String ids) { Long[] userIds = Convert.toLongArray(ids); for (Long userId : userIds) { if (SysUser.isAdmin(userId)) { throw new BusinessException("不允许删除超级管理员用户"); } } return userMapper.deleteUserByIds(userIds); } /** * 新增保存用户信息 * * @param user 用户信息 * @return 结果 */ @Override public int insertUser(SysUser user) { // 新增用户信息 int rows = userMapper.insertUser(user); // 新增用户岗位关联 insertUserPost(user); // 新增用户与角色管理 insertUserRole(user); return rows; } /** * 修改保存用户信息 * * @param user 用户信息 * @return 结果 */ @Override public int updateUser(SysUser user) { Long userId = user.getUserId(); // 删除用户与角色关联 userRoleMapper.deleteUserRoleByUserId(userId); // 新增用户与角色管理 insertUserRole(user); // 删除用户与岗位关联 userPostMapper.deleteUserPostByUserId(userId); // 新增用户与岗位管理 insertUserPost(user); return userMapper.updateUser(user); } /** * 修改用户个人详细信息 * * @param user 用户信息 * @return 结果 */ @Override public int updateUserInfo(SysUser user) { return userMapper.updateUser(user); } /** * 修改用户密码 * * @param user 用户信息 * @return 结果 */ @Override public int resetUserPwd(SysUser user) { return updateUserInfo(user); } /** * 新增用户角色信息 * * @param user 用户对象 */ private void insertUserRole(SysUser user) { // 新增用户与角色管理 List<SysUserRole> list = new ArrayList<>(); for (Long roleId : user.getRoleIds()) { SysUserRole ur = new SysUserRole(); ur.setUserId(user.getUserId()); ur.setRoleId(roleId); list.add(ur); } if (!CollectionUtils.isEmpty(list)) { userRoleMapper.batchUserRole(list); } } /** * 新增用户岗位信息 * * @param user 用户对象 */ private void insertUserPost(SysUser user) { // 新增用户与岗位管理 List<SysUserPost> list = new ArrayList<>(); for (Long postId : user.getPostIds()) { SysUserPost up = new SysUserPost(); up.setUserId(user.getUserId()); up.setPostId(postId); list.add(up); } if (!CollectionUtils.isEmpty(list)) { userPostMapper.batchUserPost(list); } } /** * 校验用户名称是否唯一 * * @param loginName 用户名 * @return 校验结果 */ @Override public String checkLoginNameUnique(String loginName) { int count = userMapper.checkLoginNameUnique(loginName); if (count > 0) { return UserConstants.USER_NAME_NOT_UNIQUE; } return UserConstants.USER_NAME_UNIQUE; } /** * 校验用户名称是否唯一 * * @param user 用户信息 * @return 校验结果 */ @Override public String checkPhoneUnique(SysUser user) { SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber()); if (ObjectUtil.isNotNull(info) && !info.getUserId().equals(user.getUserId())) { return UserConstants.USER_PHONE_NOT_UNIQUE; } return UserConstants.USER_PHONE_UNIQUE; } /** * 校验email是否唯一 * * @param user 用户信息 * @return 校验结果 */ @Override public String checkEmailUnique(SysUser user) { SysUser info = userMapper.checkEmailUnique(user.getEmail()); if (ObjectUtil.isNotNull(info) && !info.getUserId().equals(user.getUserId())) { return UserConstants.USER_EMAIL_NOT_UNIQUE; } return UserConstants.USER_EMAIL_UNIQUE; } /** * 查询用户所属角色组 * * @param userId 用户ID * @return 结果 */ @Override public String selectUserRoleGroup(Long userId) { List<SysRole> list = roleMapper.selectRolesByUserId(userId); StringBuilder idsStr = new StringBuilder(); for (SysRole role : list) { idsStr.append(role.getRoleName()).append(","); } if (StrUtil.isNotEmpty(idsStr.toString())) { return idsStr.substring(0, idsStr.length() - 1); } return idsStr.toString(); } /** * 查询用户所属岗位组 * * @param userId 用户ID * @return 结果 */ @Override public String selectUserPostGroup(Long userId) { List<SysPost> list = postMapper.selectPostsByUserId(userId); StringBuilder idsStr = new StringBuilder(); for (SysPost post : list) { idsStr.append(post.getPostName()).append(","); } if (StrUtil.isNotEmpty(idsStr.toString())) { return idsStr.substring(0, idsStr.length() - 1); } return idsStr.toString(); } /** * 导入用户数据 * * @param userList 导入的用户数据列表 * @param updateSupport 是否更新支持,如果已存在,则进行更新数据 * @param loginUser 操作用户 * @return 结果 */ @Override public String importUser(List<SysUser> userList, Boolean updateSupport, SysUser loginUser) { if (CollectionUtils.isEmpty(userList)) { throw new BusinessException("导入用户数据不能为空!"); } int successNum = 0; int failureNum = 0; final String br = "<br/>"; //当然操作用户 String operName = loginUser.getLoginName(); StringBuilder successMsg = new StringBuilder(); StringBuilder failureMsg = new StringBuilder(); String password = configService.selectConfigByKey("sys.user.initPassword"); for (SysUser user : userList) { try { // 验证是否存在这个用户 SysUser u = userMapper.selectUserByLoginName(user.getLoginName()); if (ObjectUtil.isNull(u)) { user.setPassword(Md5Utils.hash(user.getLoginName() + password)); user.setCreateBy(operName); this.insertUser(user); successNum++; successMsg.append(br).append(successNum).append("、账号 ").append(user.getLoginName()).append(" 导入成功"); } else if (updateSupport) { user.setUpdateBy(operName); this.updateUser(user); successNum++; successMsg.append(br).append(successNum).append("、账号 ").append(user.getLoginName()).append(" 更新成功"); } else { failureNum++; failureMsg.append(br).append(failureNum).append("、账号 ").append(user.getLoginName()).append(" 已存在"); } } catch (Exception e) { failureNum++; String msg = br + failureNum + "、账号 " + user.getLoginName() + " 导入失败:"; failureMsg.append(msg).append(e.getMessage()); log.error(msg, e); } } if (failureNum > 0) { failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); throw new BusinessException(failureMsg.toString()); } else { successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); } return successMsg.toString(); } /** * 修改用户状态 * * @param user 用户 * @return 结果 */ @Override public int changeStatus(SysUser user) { if (SysUser.isAdmin(user.getUserId())) { throw new BusinessException("不允许修改超级管理员用户"); } return userMapper.updateUser(user); } }