package com.ruoyi.admin.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.admin.entity.*; import com.ruoyi.admin.request.RoleRequest; import com.ruoyi.admin.service.*; import com.ruoyi.admin.vo.RoleDetailVO; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.system.api.model.LoginUser; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** *

* 角色信息表 前端控制器 *

* * @author hjl * @since 2024-06-25 */ @RestController @RequestMapping("/role") @Api(tags = {"后台-权限管理-角色管理"}) public class RoleController { @Resource private RoleService roleService; @Resource private TokenService tokenService; @Resource private RoleMenuService roleMenuService; @Resource private MenuService menuService; @Resource private SysUserService userService; /** * 角色分页列表 * * @param pageNum 页码 * @param pageSize 每页显示条数 */ @RequiresPermissions("power_role") @ApiOperation(value = "角色分页查询列表", tags = {"后台-权限管理-角色管理"}) @GetMapping(value = "/page") @ApiImplicitParams({ @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true), @ApiImplicitParam(value = "每页条数", name = "pageSize", dataType = "Integer", required = true) }) public R> queryPageList(@RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { return R.ok(roleService.lambdaQuery().eq(Role::getDelFlag, 0) .orderByDesc(Role::getCreateTime).page(Page.of(pageNum, pageSize))); } /** * 角色列表 */ @RequiresPermissions("power_account") @ApiOperation(value = "角色列表", tags = {"后台-权限管理-账号管理"}) @GetMapping(value = "/list") public R> list() { LoginUser loginUser = tokenService.getLoginUser(); if (null == loginUser) { return R.loginExpire("登录失效!"); } return R.ok(roleService.lambdaQuery().eq(Role::getDelFlag, 0).orderByDesc(Role::getCreateTime).list()); } /** * 角色详情 * * @param id 角色id */ @ApiOperation(value = "角色详情", tags = {"后台-权限管理-角色管理"}) @GetMapping(value = "/detail") @ApiImplicitParams({ @ApiImplicitParam(value = "角色id", name = "id", dataType = "Integer", required = true) }) public R detail(@RequestParam Integer id) { Role role = roleService.getById(id); // 获取角色关联菜单权限 List list = roleMenuService.lambdaQuery().eq(RoleMenu::getRoleId, id).list(); List menuList = menuService.lambdaQuery() .in(Menu::getMenuId, list.stream().map(RoleMenu::getMenuId).collect(Collectors.toList())) .list(); return R.ok(new RoleDetailVO(role, menuList)); } /** * 角色详情 * * @param roleRequest 角色信息 */ @RequiresPermissions("role_update") @ApiOperation(value = "编辑角色", tags = {"后台-权限管理-角色管理"}) @PostMapping(value = "/update") public R update(@RequestBody RoleRequest roleRequest) { Role role = roleRequest.getRole(); role.setRoleId(roleRequest.getRoleId()); // 修稿角色信息 boolean update = roleService.updateById(role); // 修改角色关联菜单信息 update = update && roleMenuService.remove(new QueryWrapper().eq("role_id", role.getRoleId())); // 添加角色关联菜单信息 for (String menuId : roleRequest.getMenuIds()) { RoleMenu roleMenu = new RoleMenu(); roleMenu.setRoleId(role.getRoleId()); roleMenu.setMenuId(Long.parseLong(menuId)); roleMenuService.save(roleMenu); } return update ? R.ok() : R.fail(); } /** * 新增角色 * * @param roleRequest 角色信息 */ @RequiresPermissions("role_save") @ApiOperation(value = "新增角色", tags = {"后台-权限管理-角色管理"}) @PostMapping(value = "/save") public R save(@RequestBody RoleRequest roleRequest) { LoginUser loginUser = tokenService.getLoginUser(); if (null == loginUser) { return R.loginExpire("登录失效!"); } return roleService.saveRoleAndMenu(roleRequest, loginUser) ? R.ok() : R.fail(); } @Resource private UserRoleService userRoleService; /** * 根据id批量删除角色 * * @param ids 角色id拼接 */ @RequiresPermissions("role_delete") @ApiOperation(value = "批量删除角色", tags = {"后台-权限管理-角色管理"}) @GetMapping(value = "/batchDelete") @ApiImplicitParams({ @ApiImplicitParam(value = "多条角色id ',' 拼接", name = "ids", dataType = "String", required = true) }) public R batchDelete(@RequestParam String ids) { List idList = Arrays.stream(ids.split(",")).collect(Collectors.toList()); // 判断角色是否已存在关联账号 List list = roleService.lambdaQuery().in(Role::getRoleId, idList).list(); for (Role role : list) { Long roleId = role.getRoleId(); List collect = userRoleService.lambdaQuery().eq(UserRole::getRoleId, roleId).list().stream().map(UserRole::getUserId).collect(Collectors.toList()); if (!collect.isEmpty()){ List sysUserList = userService.lambdaQuery() .in(SysUser::getUserId,collect) .eq(SysUser::getIsDelete, 0).list(); if (sysUserList.isEmpty()) { role.setDelFlag("2"); }else { return R.repeatedSubmission("角色已关联账号,请先解除关联!"); } }else { role.setDelFlag("2"); } // 删除菜单关联信息 roleMenuService.remove(new QueryWrapper().eq("role_id", roleId)); } return roleService.updateBatchById(list) ? R.ok() : R.fail(); } }