From 0ab9dfd8f122195e4e9f09bd50c59e0a47450bec Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期三, 19 三月 2025 15:50:03 +0800 Subject: [PATCH] fix: resolve merge conflicts in .gitignore --- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java | 614 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 614 insertions(+), 0 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java new file mode 100644 index 0000000..a310cf7 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,614 @@ +package com.ruoyi.system.service.impl; + +import java.util.*; +import java.util.stream.Collectors; + +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.core.domain.entity.SysMenu; +import com.ruoyi.system.dto.SysRoleDTO; +import com.ruoyi.system.mapper.*; +import com.ruoyi.system.query.SysRoleQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.system.domain.SysRoleDept; +import com.ruoyi.system.domain.SysRoleMenu; +import com.ruoyi.system.domain.SysUserRole; +import com.ruoyi.system.service.ISysRoleService; +import org.springframework.util.CollectionUtils; + +/** + * 角色 业务层处理 + * + * @author ruoyi + */ +@Service +public class SysRoleServiceImpl implements ISysRoleService +{ + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMenuMapper roleMenuMapper; + + @Autowired + private SysUserRoleMapper userRoleMapper; + + @Autowired + private SysRoleDeptMapper roleDeptMapper; + @Autowired + private SysMenuMapper menuMapper; + + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * @return 角色数据集合信息 + */ + @Override + public List<SysRole> selectRoleList(SysRole role) + { + return roleMapper.selectRoleList(role); + } + + /** + * 根据用户ID查询角色 + * + * @param userId 用户ID + * @return 角色列表 + */ + @Override + public List<SysRole> selectRolesByUserId(Long userId) + { + List<SysRole> userRoles = roleMapper.selectRolePermissionByUserId(userId); + List<SysRole> roles = selectRoleAll(); + for (SysRole role : roles) + { + for (SysRole userRole : userRoles) + { + if (role.getRoleId().longValue() == userRole.getRoleId().longValue()) + { + role.setFlag(true); + break; + } + } + } + return roles; + } + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + @Override + public Set<String> selectRolePermissionByUserId(Long userId) + { + List<SysRole> perms = roleMapper.selectRolePermissionByUserId(userId); + Set<String> permsSet = new HashSet<>(); + for (SysRole perm : perms) + { + if (StringUtils.isNotNull(perm)) + { + permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); + } + } + return permsSet; + } + + /** + * 查询所有角色 + * + * @return 角色列表 + */ + @Override + public List<SysRole> selectRoleAll() + { + return this.selectRoleList(new SysRole()); + } + + /** + * 根据用户ID获取角色选择框列表 + * + * @param userId 用户ID + * @return 选中角色ID列表 + */ + @Override + public List<Long> selectRoleListByUserId(Long userId) + { + return roleMapper.selectRoleListByUserId(userId); + } + + /** + * 通过角色ID查询角色 + * + * @param roleId 角色ID + * @return 角色对象信息 + */ + @Override + public SysRole selectRoleById(Long roleId) + { + return roleMapper.selectRoleById(roleId); + } + + /** + * 校验角色名称是否唯一 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + public boolean checkRoleNameUnique(SysRole role) + { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName()); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验角色权限是否唯一 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + public boolean checkRoleKeyUnique(SysRole role) + { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey()); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验角色是否允许操作 + * + * @param role 角色信息 + */ + @Override + public void checkRoleAllowed(SysRole role) + { + if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin()) + { + throw new ServiceException("不允许操作超级管理员角色"); + } + } + + /** + * 校验角色是否有数据权限 + * + * @param roleId 角色id + */ + @Override + public void checkRoleDataScope(Long roleId) + { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) + { + SysRole role = new SysRole(); + role.setRoleId(roleId); + List<SysRole> roles = SpringUtils.getAopProxy(this).selectRoleList(role); + if (StringUtils.isEmpty(roles)) + { + throw new ServiceException("没有权限访问角色数据!"); + } + } + } + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * @return 结果 + */ + @Override + public int countUserRoleByRoleId(Long roleId) + { + return userRoleMapper.countUserRoleByRoleId(roleId); + } + + /** + * 新增保存角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + @Transactional + public int insertRole(SysRole role) + { + // 新增角色信息 + roleMapper.insertRole(role); + return insertRoleMenu(role); + } + + /** + * 修改保存角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + @Transactional + public int updateRole(SysRole role) + { + // 修改角色信息 + roleMapper.updateRole(role); + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId()); + return insertRoleMenu(role); + } + + /** + * 修改保存角色信息 + * + * @param dto 角色信息 + * @return 结果 + */ +// @Override +// @Transactional +// public int editRole(SysRoleDTO dto) +// { +// // 修改角色信息 +// SysRole sysRole = new SysRole(); +// sysRole.setRoleName(dto.getRoleName()); +// sysRole.setPostType(dto.getPostType()); +// roleMapper.updateRole(sysRole); +// // 删除角色与菜单关联 +// roleMenuMapper.deleteRoleMenuByRoleId(dto.getRoleId()); +// +// // 添加角色权限中间表 +// List<Long> menuIds = dto.getMenuIds(); +// List<SysRoleMenu> sysRoleMenus = new ArrayList<>(); +// for (Long menuId : menuIds) { +// SysRoleMenu sysRoleMenu = new SysRoleMenu(); +// sysRoleMenu.setRoleId(dto.getRoleId()); +// sysRoleMenu.setMenuId(menuId); +// sysRoleMenus.add(sysRoleMenu); +// } +// +// return roleMenuMapper.batchRoleMenu(sysRoleMenus); +// } + + /** + * 修改角色状态 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + public int updateRoleStatus(SysRole role) + { + return roleMapper.updateRole(role); + } + + /** + * 修改数据权限信息 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + @Transactional + public int authDataScope(SysRole role) + { + // 修改角色信息 + roleMapper.updateRole(role); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId()); + // 新增角色和部门信息(数据权限) + return insertRoleDept(role); + } + + /** + * 新增角色菜单信息 + * + * @param role 角色对象 + */ + public int insertRoleMenu(SysRole role) + { + int rows = 1; + // 新增用户与角色管理 + List<SysRoleMenu> list = new ArrayList<SysRoleMenu>(); + for (Long menuId : role.getMenuIds()) + { + SysRoleMenu rm = new SysRoleMenu(); + rm.setRoleId(role.getRoleId()); + rm.setMenuId(menuId); + list.add(rm); + } + if (list.size() > 0) + { + rows = roleMenuMapper.batchRoleMenu(list); + } + return rows; + } + + /** + * 新增角色部门信息(数据权限) + * + * @param role 角色对象 + */ + public int insertRoleDept(SysRole role) + { + int rows = 1; + // 新增角色与部门(数据权限)管理 + List<SysRoleDept> list = new ArrayList<SysRoleDept>(); + for (Long deptId : role.getDeptIds()) + { + SysRoleDept rd = new SysRoleDept(); + rd.setRoleId(role.getRoleId()); + rd.setDeptId(deptId); + list.add(rd); + } + if (list.size() > 0) + { + rows = roleDeptMapper.batchRoleDept(list); + } + return rows; + } + + /** + * 通过角色ID删除角色 + * + * @param roleId 角色ID + * @return 结果 + */ + @Override + @Transactional + public int deleteRoleById(Long roleId) + { + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenuByRoleId(roleId); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDeptByRoleId(roleId); + return roleMapper.deleteRoleById(roleId); + } + + /** + * 批量删除角色信息 + * + * @param roleIds 需要删除的角色ID + * @return 结果 + */ + @Override + @Transactional + public int deleteRoleByIds(List<Long> roleIds) + { + for (Long roleId : roleIds) + { + SysRole role = selectRoleById(roleId); + if (countUserRoleByRoleId(roleId) > 0) + { + throw new ServiceException(String.format("%1$s已分配,不能删除", role.getRoleName())); + } + } + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenu(roleIds); + return roleMapper.deleteRoleByIds(roleIds); + } + + /** + * 取消授权用户角色 + * + * @param userRole 用户和角色关联信息 + * @return 结果 + */ + @Override + public int deleteAuthUser(SysUserRole userRole) + { + return userRoleMapper.deleteUserRoleInfo(userRole); + } + + /** + * 批量取消授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要取消授权的用户数据ID + * @return 结果 + */ + @Override + public int deleteAuthUsers(Long roleId, Long[] userIds) + { + return userRoleMapper.deleteUserRoleInfos(roleId, userIds); + } + + /** + * 批量选择授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要授权的用户数据ID + * @return 结果 + */ + @Override + public int insertAuthUsers(Long roleId, Long[] userIds) + { + // 新增用户与角色管理 + List<SysUserRole> list = new ArrayList<SysUserRole>(); + for (Long userId : userIds) + { + SysUserRole ur = new SysUserRole(); + ur.setUserId(userId); + ur.setRoleId(roleId); + list.add(ur); + } + return userRoleMapper.batchUserRole(list); + } + + @Override + public int selectCountByRoleName(String roleName) { + return roleMapper.selectCountByRoleName(roleName); + } + +// @Override +// public void saveRole(SysRoleDTO dto) { +// +// // 添加角色 +// SysRole sysRole = new SysRole(); +// sysRole.setRoleName(dto.getRoleName()); +// sysRole.setPostType(dto.getPostType()); +// roleMapper.insertRole(sysRole); +// +// // 添加角色权限中间表 +// List<Long> menuIds = dto.getMenuIds(); +// List<SysRoleMenu> sysRoleMenus = new ArrayList<>(); +// for (Long menuId : menuIds) { +// SysRoleMenu sysRoleMenu = new SysRoleMenu(); +// sysRoleMenu.setRoleId(sysRole.getRoleId()); +// sysRoleMenu.setMenuId(menuId); +// sysRoleMenus.add(sysRoleMenu); +// } +// roleMenuMapper.batchRoleMenu(sysRoleMenus); +// } + + @Override + public Boolean isExit(Long id, String roleName) { + int count = this.selectCountByRoleName(roleName); + if (StringUtils.isNotNull(id)) { + // 修改 + SysRole sysRole = roleMapper.selectRoleById(id); + return Objects.nonNull(sysRole) && !sysRole.getRoleName().equals(roleName) && count > 0; + } else { + // 新增 + return count > 0; + } + } + +// @Override +// public List<SysRole> selectList(SysRoleQuery query) { +// return roleMapper.selectList(query); +// } + + @Override + public int selectCount(Integer status) { + return roleMapper.selectCount(status); + } + + @Override + public void updateStatus(SysRole role) { + roleMapper.updateStatus(role); + } + + @Override + public List<SysRole> selectListByDelFlag(Integer delFlag) { + return roleMapper.selectListByDelFlag(delFlag); + } + + @Override + public SysRole selectRoleByUserId(Long userId) { + return roleMapper.selectRoleByUserId(userId); + } + + @Override + public List<SysMenu> getMenuLevelList(List<Long> menusId) { + //获取当前的权限菜单 + List<SysMenu> all = menuMapper.getAllInIds(menusId); + // 第三级 + List<SysMenu> s3 = all.stream().filter(e -> e.getMenuType().equals("F")).collect(Collectors.toList()); + // 第二级 + List<SysMenu> s2 = all.stream().filter(e -> e.getMenuType().equals("C")).collect(Collectors.toList()); + // 第一级 + List<SysMenu> s1 = all.stream().filter(e -> e.getMenuType().equals("M")).collect(Collectors.toList()); + + for (SysMenu menu : s2) { + List<SysMenu> collect = s3.stream().filter(e -> e.getParentId().equals(menu.getMenuId())).collect(Collectors.toList()); + menu.setChildren(collect); + } + for (SysMenu menu : s1) { + List<SysMenu> collect = s2.stream().filter(e -> e.getParentId().equals(menu.getMenuId())).collect(Collectors.toList()); + menu.setChildren(collect); + } + return s1; + } + + @Override + public List<SysMenu> roleInfoFromUserId(Long userId) { + SysRole sysRole = roleMapper.selectRoleByUserId(userId); + // 获取当前角色的菜单列表 + List<SysMenu> menus = menuMapper.selectListByRoleId(sysRole.getRoleId()); + if(menus.size()==0){ + return new ArrayList<>(); + } + List<Long> menusId = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList()); + // 获取当前的权限菜单(有层级) + return this.getMenuLevelList(menusId); + } + + @Override + public String selectByUserId(Long user_id) { + return roleMapper.selectByUserId(user_id); + } + + @Override + public void saveRole(SysRoleDTO dto) { + // 添加角色 + SysRole sysRole = new SysRole(); + sysRole.setRoleName(dto.getRoleName()); + sysRole.setPostType(dto.getPostType()); + sysRole.setRemark(dto.getRemark()); + roleMapper.insertRole(sysRole); + + // 添加角色权限中间表 + List<Long> menuIds = dto.getMenuIds(); + List<SysRoleMenu> sysRoleMenus = new ArrayList<>(); + for (Long menuId : menuIds) { + SysRoleMenu sysRoleMenu = new SysRoleMenu(); + sysRoleMenu.setRoleId(sysRole.getRoleId()); + sysRoleMenu.setMenuId(menuId); + sysRoleMenus.add(sysRoleMenu); + } + roleMenuMapper.batchRoleMenu(sysRoleMenus); + } + + @Override + public PageInfo<SysRole> selectPageList(SysRoleQuery query) { + PageInfo<SysRole> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<SysRole> list = roleMapper.selectPageList(query,pageInfo); + pageInfo.setRecords(list); + return pageInfo; + } + + @Override + public int editRole(SysRoleDTO dto) { + // 修改角色信息 + SysRole sysRole = new SysRole(); + sysRole.setRoleId(dto.getRoleId()); + sysRole.setRoleName(dto.getRoleName()); + sysRole.setPostType(dto.getPostType()); + sysRole.setRemark(dto.getRemark()); + roleMapper.updateRole(sysRole); + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenuByRoleId(dto.getRoleId()); + + // 添加角色权限中间表 + List<Long> menuIds = dto.getMenuIds(); + List<SysRoleMenu> sysRoleMenus = new ArrayList<>(); + for (Long menuId : menuIds) { + SysRoleMenu sysRoleMenu = new SysRoleMenu(); + sysRoleMenu.setRoleId(dto.getRoleId()); + sysRoleMenu.setMenuId(menuId); + sysRoleMenus.add(sysRoleMenu); + } + + return roleMenuMapper.batchRoleMenu(sysRoleMenus); + } + + @Override + public List<SysRole> selectRoleByUserIds(List<String> roleIds) { + return roleMapper.selectRoleByUserIds(roleIds); + } +} -- Gitblit v1.7.1