diff --git a/youlai-admin/admin-boot/src/main/java/com/youlai/admin/service/SysUserRoleService.java b/youlai-admin/admin-boot/src/main/java/com/youlai/admin/service/SysUserRoleService.java index 47fb83667c79213dd6cdaf091843ad7bb26ea005..910b3617e39fbc96bb4747039686565247c58b7e 100644 --- a/youlai-admin/admin-boot/src/main/java/com/youlai/admin/service/SysUserRoleService.java +++ b/youlai-admin/admin-boot/src/main/java/com/youlai/admin/service/SysUserRoleService.java @@ -4,5 +4,16 @@ package com.youlai.admin.service; import com.baomidou.mybatisplus.extension.service.IService; import com.youlai.admin.pojo.entity.SysUserRole; +import java.util.List; + public interface SysUserRoleService extends IService { + + /** + * 保存用户角色 + * + * @param userId + * @param roleIds + * @return + */ + boolean saveUserRoles(Long userId, List roleIds); } diff --git a/youlai-admin/admin-boot/src/main/java/com/youlai/admin/service/impl/SysUserRoleServiceImpl.java b/youlai-admin/admin-boot/src/main/java/com/youlai/admin/service/impl/SysUserRoleServiceImpl.java index d3f58177382d44bb57646568929e3df474225458..2d7f60ec99f7962ac2b6ee9dc846a99b7a99e0f7 100644 --- a/youlai-admin/admin-boot/src/main/java/com/youlai/admin/service/impl/SysUserRoleServiceImpl.java +++ b/youlai-admin/admin-boot/src/main/java/com/youlai/admin/service/impl/SysUserRoleServiceImpl.java @@ -1,12 +1,68 @@ package com.youlai.admin.service.impl; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.youlai.admin.pojo.entity.SysUserRole; import com.youlai.admin.mapper.SysUserRoleMapper; +import com.youlai.admin.pojo.entity.SysUserRole; import com.youlai.admin.service.SysUserRoleService; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.stream.Collectors; + @Service public class SysUserRoleServiceImpl extends ServiceImpl implements SysUserRoleService { + /** + * 保存用户角色 + * + * @param userId + * @param roleIds + * @return + */ + @Override + public boolean saveUserRoles(Long userId, List roleIds) { + + if (userId == null || CollectionUtil.isEmpty(roleIds)) { + return false; + } + + // 用户原角色ID集合 + List userRoleIds = this.list(new LambdaQueryWrapper() + .eq(SysUserRole::getUserId, userId)) + .stream() + .map(item -> item.getRoleId()) + .collect(Collectors.toList()); + + // 新增用户角色 + List saveRoleIds; + if (CollectionUtil.isEmpty(userRoleIds)) { + saveRoleIds = roleIds; + } else { + saveRoleIds = roleIds.stream() + .filter(roleId -> !userRoleIds.contains(roleId)) + .collect(Collectors.toList()); + } + + List saveUserRoles = saveRoleIds + .stream() + .map(roleId -> new SysUserRole(userId, roleId)) + .collect(Collectors.toList()); + this.saveBatch(saveUserRoles); + + // 删除用户角色 + if (CollectionUtil.isNotEmpty(userRoleIds)) { + List removeRoleIds = userRoleIds.stream() + .filter(roleId -> !roleIds.contains(roleId)) + .collect(Collectors.toList()); + + this.remove(new LambdaQueryWrapper() + .eq(SysUserRole::getUserId, userId) + .in(SysUserRole::getRoleId, removeRoleIds) + ); + } + return true; + + } } diff --git a/youlai-admin/admin-boot/src/main/java/com/youlai/admin/service/impl/SysUserServiceImpl.java b/youlai-admin/admin-boot/src/main/java/com/youlai/admin/service/impl/SysUserServiceImpl.java index 9260cb74cf81f8bf6310a233c161ed7c04b4757a..f14d4f72c0ea1c6c96f9f21222c485b79295e6bf 100644 --- a/youlai-admin/admin-boot/src/main/java/com/youlai/admin/service/impl/SysUserServiceImpl.java +++ b/youlai-admin/admin-boot/src/main/java/com/youlai/admin/service/impl/SysUserServiceImpl.java @@ -13,12 +13,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; -import com.youlai.admin.pojo.vo.user.UserVO; -import com.youlai.common.constant.SystemConstants; -import com.youlai.common.enums.GenderEnum; -import com.youlai.admin.listener.excel.UserImportListener; import com.youlai.admin.converter.UserConverter; import com.youlai.admin.dto.UserAuthDTO; +import com.youlai.admin.listener.excel.UserImportListener; import com.youlai.admin.mapper.SysUserMapper; import com.youlai.admin.pojo.dto.UserImportDTO; import com.youlai.admin.pojo.entity.SysUser; @@ -29,10 +26,13 @@ import com.youlai.admin.pojo.po.UserPO; import com.youlai.admin.pojo.query.UserPageQuery; import com.youlai.admin.pojo.vo.user.LoginUserVO; import com.youlai.admin.pojo.vo.user.UserExportVO; +import com.youlai.admin.pojo.vo.user.UserVO; import com.youlai.admin.service.SysPermissionService; import com.youlai.admin.service.SysUserRoleService; import com.youlai.admin.service.SysUserService; import com.youlai.common.base.IBaseEnum; +import com.youlai.common.constant.SystemConstants; +import com.youlai.common.enums.GenderEnum; import com.youlai.common.web.util.UserUtils; import lombok.RequiredArgsConstructor; import org.springframework.security.crypto.password.PasswordEncoder; @@ -44,7 +44,6 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; /** @@ -109,6 +108,11 @@ public class SysUserServiceImpl extends ServiceImpl impl @Override public boolean saveUser(UserForm userForm) { + String username = userForm.getUsername(); + + int count = this.count(new LambdaQueryWrapper().eq(SysUser::getUsername, username)); + Assert.isTrue(count == 0, "用户名已存在"); + // 实体转换 form->entity SysUser entity = userConverter.form2Entity(userForm); @@ -120,16 +124,8 @@ public class SysUserServiceImpl extends ServiceImpl impl boolean result = this.save(entity); if (result) { - // 保存用户角色关联信息 - Long userId = entity.getId(); - List roleIds = userForm.getRoleIds(); - if (CollectionUtil.isNotEmpty(roleIds)) { - List userRoles = roleIds - .stream() - .map(roleId -> new SysUserRole(userId, roleId)) - .collect(Collectors.toList()); - userRoleService.saveBatch(userRoles); - } + // 保存用户角色 + userRoleService.saveUserRoles(entity.getId(), userForm.getRoleIds()); } return result; } @@ -144,38 +140,25 @@ public class SysUserServiceImpl extends ServiceImpl impl @Override @Transactional public boolean updateUser(Long userId, UserForm userForm) { - // 用户的旧角色ID集合 - List oldRoleIds = userRoleService.list(new LambdaQueryWrapper() - .eq(SysUserRole::getUserId, userId)) - .stream() - .map(item -> item.getRoleId()) - .collect(Collectors.toList()); - - // 用户的新角色ID集合 - List newRoleIds = userForm.getRoleIds(); - // 新增用户的角色 - List addRoleIds = newRoleIds.stream().filter(roleId -> !oldRoleIds.contains(roleId)).collect(Collectors.toList()); - List addUserRoles = Optional.ofNullable(addRoleIds).orElse(new ArrayList<>()) - .stream().map(roleId -> new SysUserRole(userId, roleId)) - .collect(Collectors.toList()); - userRoleService.saveBatch(addUserRoles); - - // 删除用户的角色 - List removeRoleIds = oldRoleIds.stream().filter(roleId -> !newRoleIds.contains(roleId)).collect(Collectors.toList()); - if (CollectionUtil.isNotEmpty(removeRoleIds)) { - userRoleService.remove(new LambdaQueryWrapper() - .eq(SysUserRole::getUserId, userId) - .in(SysUserRole::getRoleId, removeRoleIds) - ); - } + String username = userForm.getUsername(); + int count = this.count(new LambdaQueryWrapper() + .eq(SysUser::getUsername, username) + .ne(SysUser::getId,userId) + ); + Assert.isTrue(count == 0, "用户名已存在"); // form -> entity SysUser entity = userConverter.form2Entity(userForm); // 修改用户 boolean result = this.updateById(entity); + + if (result) { + // 保存用户角色 + userRoleService.saveUserRoles(entity.getId(), userForm.getRoleIds()); + } return result; } @@ -358,4 +341,5 @@ public class SysUserServiceImpl extends ServiceImpl impl return loginUserVO; } + }