无关风月
2024-12-31 0c51a577db337520452022d9d6a22b720ef858d4
xinquan-modules/xinquan-system/src/main/java/com/xinquan/system/service/impl/SysRoleServiceImpl.java
@@ -1,19 +1,17 @@
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;
@@ -46,6 +44,8 @@
    @Autowired
    private SysRoleDeptMapper roleDeptMapper;
    @Autowired
    private SysMenuMapper menuMapper;
    /**
     * 根据条件分页查询角色数据
@@ -373,7 +373,7 @@
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int deleteRoleByIds(Long[] roleIds)
    public int deleteRoleByIds(List<Long> roleIds)
    {
        for (Long roleId : roleIds)
        {
@@ -443,4 +443,108 @@
    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);
    }
}