| | |
| | | package com.xinquan.system.service.impl; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.xinquan.common.core.web.page.PageInfo; |
| | | import com.xinquan.system.api.domain.SysMenu; |
| | | import com.xinquan.system.domain.SysRoleDept; |
| | | import com.xinquan.system.domain.SysRoleMenu; |
| | | import com.xinquan.system.domain.SysUserRole; |
| | | import com.xinquan.system.mapper.SysRoleDeptMapper; |
| | | import com.xinquan.system.mapper.SysRoleMapper; |
| | | import com.xinquan.system.mapper.SysRoleMenuMapper; |
| | | import com.xinquan.system.mapper.SysUserRoleMapper; |
| | | import com.xinquan.system.domain.dto.SysRoleDTO; |
| | | import com.xinquan.system.domain.dto.SysRoleQuery; |
| | | import com.xinquan.system.mapper.*; |
| | | import com.xinquan.system.service.ISysRoleService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | |
| | | @Autowired |
| | | private SysRoleDeptMapper roleDeptMapper; |
| | | @Autowired |
| | | private SysMenuMapper menuMapper; |
| | | |
| | | /** |
| | | * 根据条件分页查询角色数据 |
| | |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int deleteRoleByIds(Long[] roleIds) |
| | | public int deleteRoleByIds(List<Long> roleIds) |
| | | { |
| | | for (Long roleId : roleIds) |
| | | { |
| | |
| | | public List<SysRole> isExitUpdate(String roleName, Long roleId) { |
| | | return roleMapper.isExitUpdate(roleName,roleId); |
| | | } |
| | | |
| | | @Override |
| | | public PageInfo<SysRole> selectList(SysRoleQuery query) { |
| | | PageInfo<SysRole> pageInfo = new PageInfo<>(query.getPageCurr(), query.getPageSize()); |
| | | List<SysRole> list = roleMapper.selectList(query,pageInfo); |
| | | pageInfo.setRecords(list); |
| | | return pageInfo; |
| | | } |
| | | @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<SysMenu> getMenuLevelList(List<Long> menusId) { |
| | | //获取当前的权限菜单 |
| | | List<SysMenu> all = roleMenuMapper.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) { |
| | | List<SysRole> sysRole = roleMapper.selectRoleByUserId(userId); |
| | | List<SysMenu> menus2 = new ArrayList<>(); |
| | | for (SysRole role : sysRole) { |
| | | List<SysMenu> menus1 = menuMapper.selectListByRoleId(role.getRoleId()); |
| | | menus2.addAll(menus1); |
| | | } |
| | | List<SysMenu> menus = menus2.stream().distinct().collect(Collectors.toList()); |
| | | // 获取当前角色的菜单列表 |
| | | if(menus.size()==0){ |
| | | return new ArrayList<>(); |
| | | } |
| | | List<Long> menusId = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList()); |
| | | // 获取当前的权限菜单(有层级) |
| | | return this.getMenuLevelList(menusId); |
| | | } |
| | | @Override |
| | | public int selectCountByRoleName(String roleName) { |
| | | return roleMapper.selectCountByRoleName(roleName); |
| | | } |
| | | @Override |
| | | public int editRole(SysRoleDTO dto) { |
| | | // 修改角色信息 |
| | | SysRole sysRole = new SysRole(); |
| | | sysRole.setRoleId(dto.getRoleId()); |
| | | sysRole.setRoleName(dto.getRoleName()); |
| | | 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 void saveRole(SysRoleDTO dto) { |
| | | // 添加角色 |
| | | SysRole sysRole = new SysRole(); |
| | | sysRole.setRoleName(dto.getRoleName()); |
| | | 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); |
| | | } |
| | | } |