package com.ruoyi.system.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.BasePage; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.domain.SysDept; import com.ruoyi.system.api.domain.SysRole; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.model.GetSysRoleByIds; import com.ruoyi.system.domain.SysMenus; import com.ruoyi.system.domain.SysRoleMenu; import com.ruoyi.system.domain.SysUserRole; import com.ruoyi.system.domain.dto.RoleAddDto; import com.ruoyi.system.domain.dto.RoleUpdateDto; import com.ruoyi.system.domain.vo.RoleInfoVo; import com.ruoyi.system.mapper.SysMenuMapper; import com.ruoyi.system.mapper.SysRoleMenuMapper; import com.ruoyi.system.service.ISysDeptService; import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.service.ISysUserRoleService; import com.ruoyi.system.service.ISysUserService; import io.seata.spring.annotation.GlobalTransactional; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * 角色信息 * * @author ruoyi */ @RestController @RequestMapping("/role") @Api(tags = "角色模块") public class SysRoleController extends BaseController { @Resource private ISysRoleService roleService; @Resource private ISysUserService userService; @Resource private ISysDeptService deptService; @Resource private SysRoleMenuMapper sysRoleMenuMapper; @Resource private ISysUserRoleService sysUserRoleService; @Resource private SysMenuMapper menuMapper; @Resource private TokenService tokenService; @Resource private ISysUserService sysUserService; @ApiOperation(value = "获取角色列表", tags = {"管理后台-账号管理", "门店后台-账号管理"}) @GetMapping("/list") public AjaxResult list() { Long userid = tokenService.getLoginUser().getUserid(); SysUser sysUser = sysUserService.getById(userid); LambdaQueryWrapper wrapper = new LambdaQueryWrapper().eq(SysRole::getDelFlag, 0).eq(SysRole::getStatus, 0); if(sysUser.getRoleType() == 2){ wrapper.eq(SysRole::getShopId, sysUser.getObjectId()); } List list = roleService.list(wrapper); return AjaxResult.success(list); } @ResponseBody @GetMapping("/listPage") @ApiOperation(value = "获取角色列表", tags = {"管理后台-权限管理", "门店后台-权限管理"}) public AjaxResult listPage(String name, BasePage basePage) { PageInfo pageInfo = new PageInfo<>(basePage.getPageCurr(), basePage.getPageSize()); LambdaQueryWrapper wrapper = new LambdaQueryWrapper().eq(SysRole::getStatus, 0).eq(SysRole::getDelFlag, 0); if (StringUtils.isNotEmpty(name)) { wrapper.like(SysRole::getRoleName, name); } Long userid = tokenService.getLoginUser().getUserid(); SysUser sysUser = sysUserService.getById(userid); if(sysUser.getRoleType() == 2){ wrapper.eq(SysRole::getShopId, sysUser.getObjectId()); } PageInfo page = roleService.page(pageInfo, wrapper.orderByDesc(SysRole::getCreateTime)); for (SysRole record : page.getRecords()) { long count = sysUserRoleService.count(new LambdaQueryWrapper().eq(SysUserRole::getRoleId, record.getRoleId())); record.setNumber(count); } return AjaxResult.success(page); } @ResponseBody @PostMapping("/roleAdd") @ApiOperation(value = "添加角色", tags = {"管理后台-权限管理", "门店后台-权限管理"}) public AjaxResult roleAdd(@Validated @RequestBody RoleAddDto dto) { SysRole role = new SysRole(); role.setRoleName(dto.getRoleName()); LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(SysRole.class) .eq(SysRole::getRoleName, dto.getRoleName()); Long userid = tokenService.getLoginUser().getUserid(); SysUser sysUser = sysUserService.getById(userid); if(sysUser.getRoleType() == 2){ wrapper.eq(SysRole::getShopId, sysUser.getObjectId()); } long count = roleService.count(wrapper); if (count > 0) { return AjaxResult.error("角色已存在,请重新输入"); } List menuIds1 = dto.getMenuIds(); if (CollectionUtils.isEmpty(menuIds1)) { return AjaxResult.error("菜单id不能为空"); } role.setMenuIds(dto.getMenuIds().toArray((new Long[dto.getMenuIds().size()]))); // 添加角色 role.setRemark(dto.getRemark()); role.setCreateBy(SecurityUtils.getUsername()); role.setCreateTime(new Date()); if(sysUser.getRoleType() == 2){ role.setShopId(sysUser.getObjectId()); } roleService.insertRole(role); return AjaxResult.success(); } @GetMapping("/roleInfo") @ApiOperation(value = "角色详情", tags = {"管理后台-权限管理"}) public AjaxResult roleInfo(@RequestParam Long id) { SysRole role = roleService.selectRoleById(id); RoleInfoVo roleInfoVo = new RoleInfoVo(); roleInfoVo.setRoleId(role.getRoleId()); roleInfoVo.setRoleName(role.getRoleName()); // 获取当前角色的菜单id List menusId = sysRoleMenuMapper.selectList(new LambdaQueryWrapper().eq(SysRoleMenu::getRoleId, id)).stream().map(SysRoleMenu::getMenuId).collect(Collectors.toList()); if (menusId.size() == 0) { return AjaxResult.success(new ArrayList<>()); } //获取当前的权限菜单 List all = menuMapper.getAllInIds(menusId); // 第三级 List s3 = all.stream().filter(e -> e.getMenuType().equals("F")).collect(Collectors.toList()); // 第二级 List s2 = all.stream().filter(e -> e.getMenuType().equals("C")).collect(Collectors.toList()); // 第一级 List s1 = all.stream().filter(e -> e.getMenuType().equals("M")).collect(Collectors.toList()); for (SysMenus menus : s2) { List collect = s3.stream().filter(e -> e.getParentId().equals(menus.getMenuId())).collect(Collectors.toList()); menus.setChildren(collect); } for (SysMenus menus : s1) { List collect = s2.stream().filter(e -> e.getParentId().equals(menus.getMenuId())).collect(Collectors.toList()); menus.setChildren(collect); } roleInfoVo.setMenus(menusId); roleInfoVo.setRemark(role.getRemark()); return AjaxResult.success(roleInfoVo); } @PostMapping("/roleUpdate") @ApiOperation(value = "编辑角色", tags = {"管理后台-权限管理"}) public AjaxResult roleUpdate(@Validated @RequestBody RoleUpdateDto dto) { SysRole role = new SysRole(); role.setRoleName(dto.getRoleName()); SysRole one = roleService.getOne(new LambdaQueryWrapper().eq(SysRole::getRoleName, dto.getRoleName())); if (null != one && !one.getRoleId().equals(dto.getRoleId())) { return AjaxResult.error("角色已存在,请重新输入"); } role.setRemark(dto.getRemark()); role.setUpdateBy(SecurityUtils.getUsername()); role.setUpdateTime(new Date()); role.setRoleId(dto.getRoleId()); roleService.updateRole(role); ArrayList sysRoleMenus = new ArrayList<>(); List menuIds = dto.getMenuIds(); // 移除原来的权限菜单 if (menuIds.contains(1061L)) { sysRoleMenuMapper.delete(new LambdaQueryWrapper() .eq(SysRoleMenu::getRoleId, dto.getRoleId())); } else { sysRoleMenuMapper.delete(new LambdaQueryWrapper() .eq(SysRoleMenu::getRoleId, dto.getRoleId()) .ne(SysRoleMenu::getMenuId, 1061L) .ne(SysRoleMenu::getMenuId, 1062L) .ne(SysRoleMenu::getMenuId, 1065L) .ne(SysRoleMenu::getMenuId, 1073L) .ne(SysRoleMenu::getMenuId, 1161L) .ne(SysRoleMenu::getMenuId, 1203L) ); } for (Long menuId : menuIds) { SysRoleMenu sysRoleMenu = new SysRoleMenu(); sysRoleMenu.setMenuId(menuId); sysRoleMenu.setRoleId(role.getRoleId()); sysRoleMenus.add(sysRoleMenu); } sysRoleMenuMapper.batchRoleMenu(sysRoleMenus); return AjaxResult.success(); } /** * 删除角色 */ @Log(title = "角色管理", businessType = BusinessType.DELETE) @DeleteMapping("/{roleIds}") @ApiOperation(value = "删除角色", tags = {"管理后台-权限管理"}) public AjaxResult remove(@PathVariable Long[] roleIds) { return toAjax(roleService.deleteRoleByIds(roleIds)); } /** * 查询已分配用户角色列表 */ @GetMapping("/authUser/allocatedList") public TableDataInfo allocatedList(SysUser user) { startPage(); List list = userService.selectAllocatedList(user); return getDataTable(list); } /** * 查询未分配用户角色列表 */ @GetMapping("/authUser/unallocatedList") public TableDataInfo unallocatedList(SysUser user) { startPage(); List list = userService.selectUnallocatedList(user); return getDataTable(list); } /** * 获取对应角色部门树列表 */ @GetMapping(value = "/deptTree/{roleId}") public AjaxResult deptTree(@PathVariable("roleId") Long roleId) { AjaxResult ajax = AjaxResult.success(); ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId)); ajax.put("depts", deptService.selectDeptTreeList(new SysDept())); return ajax; } /** * 根据id集合获取数据 * * @param ids * @return */ @ResponseBody @PostMapping(value = "/getSysRoleByIds") public R> getSysRoleByIds(@RequestBody GetSysRoleByIds ids) { List sysRoleByIds = roleService.getSysRoleByIds(ids.getIds()); return R.ok(sysRoleByIds); } }