package com.jilongda.manage.authority.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.jilongda.manage.authority.model.*; import com.jilongda.common.basic.ApiResult; import com.jilongda.common.basic.PageInfo; import com.jilongda.common.log.OperationLog; import com.jilongda.manage.authority.dto.SecRoleDTO; import com.jilongda.manage.authority.dto.SecRolesDTO; import com.jilongda.manage.authority.dto.SecUserQueryDTO; import com.jilongda.manage.authority.mapper.SecRoleResourceMapper; import com.jilongda.manage.authority.mapper.SecUserRoleMapper; import com.jilongda.manage.authority.service.SecResourcesService; import com.jilongda.manage.authority.service.SecRoleService; import com.jilongda.manage.authority.service.SecUserService; import com.jilongda.manage.authority.vo.SecResourceVO; import com.jilongda.manage.authority.vo.SecUserVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.stream.Collectors; /** *

* 前端控制器 *

* * @author xiaochen * @since 2022-06-08 */ @Api(tags = "角色") @RestController @RequestMapping("/sec-role") public class SecRoleController { private final SecRoleService secRoleService; private final SecResourcesService secResourcesService; private final SecUserRoleMapper secUserRoleMapper; private final SecRoleResourceMapper secRoleResourceMapper; private final SecUserService secUserService; @Autowired public SecRoleController(SecRoleService secRoleService, SecResourcesService secResourcesService, SecUserRoleMapper secUserRoleMapper, SecRoleResourceMapper secRoleResourceMapper, SecUserService secUserService) { this.secRoleService = secRoleService; this.secResourcesService = secResourcesService; this.secUserRoleMapper = secUserRoleMapper; this.secRoleResourceMapper = secRoleResourceMapper; this.secUserService = secUserService; } @ApiOperation(value = "获取角色权限(包含菜单及功能)", notes = "获取角色权限(包含菜单及功能),传递角色id即可") @GetMapping(value = "resource/{rid}") public ApiResult> roleResource(@PathVariable Long rid) { Map map = new HashMap<>(2); SecRole secRole = secRoleService.getById(rid); map.put("roleInfo", secRole); List sysResourceVos = secRoleService.selectRoleResourcesByRid(rid); // List sysResourceVos = secRoleService.getRecursion(rid); map.put("resourceInfo", sysResourceVos); return ApiResult.success(map); } @ApiOperation(value = "获取角色权限---无层级", notes = "获取角色权限无层级,传递角色id即可") @GetMapping(value = "resource/nolevel/{rid}") public ApiResult> roleResourceNolevel(@PathVariable Long rid) { List secRoleResources = secRoleResourceMapper.selectList(Wrappers.lambdaQuery(SecRoleResource.class).eq(SecRoleResource::getRoleId, rid)); List secResources = new ArrayList<>(); if (!CollectionUtils.isEmpty(secRoleResources)) { List resIds = secRoleResources.stream().map(SecRoleResource::getResourceId).collect(Collectors.toList()); secResources = secResourcesService.list(Wrappers.lambdaQuery(SecResources.class).in(SecResources::getId, resIds)); } return ApiResult.success(secResources); } @ApiOperation(value = "通过角色查找人员") @PostMapping("getUserByRole") public ApiResult> getUserByRole(@RequestBody SecUserQueryDTO dto) { PageInfo secUserVOS = secRoleService.getUserByRole(dto); return ApiResult.success(secUserVOS); } @ApiOperation("获取系统角色列表-含分页") @PostMapping("getSecRoleList") public ApiResult> getSecRoleList(@RequestBody SecRolesDTO dto) { PageInfo secRolePage = new PageInfo<>(dto.getPageNum(), dto.getPageSize()); LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); if (StringUtils.isNotBlank(dto.getRolename())) { qw.like(SecRole::getRolename, dto.getRolename()); } if (Objects.nonNull(dto.getRoleState())) { qw.eq(SecRole::getRoleState, dto.getRoleState()); } PageInfo secRoleIPage = secRoleService.page(secRolePage, qw); List records = secRoleIPage.getRecords(); records.stream().forEach(record -> { // List secUserRoles = secUserRoleMapper.selectList(Wrappers.lambdaQuery(SecUserRole.class).eq(SecUserRole::getRoleId, record.getId())); ApiResult> listApiResult = this.roleResourceNolevel(record.getId()); List data = listApiResult.getData(); record.setSecResourceVOS(data); List secUsers = secUserService.getUserByRoleId(record.getId()); record.setSecUsers(secUsers); }); return ApiResult.success(secRoleIPage); } @ApiOperation("获取权限角色字典") @GetMapping("getSecRoles") public ApiResult> getSecRole() { List secRoles = secRoleService.list(); return ApiResult.success(secRoles); } @OperationLog(operType = "新增或修改", operDesc = "新增或修改系统角色", operModul = "角色") @ApiOperation("新增或修改系统角色") @PostMapping("addOrUpdate") @Transactional(rollbackFor = Exception.class) public ApiResult addOrUpdateSecRole(@Validated @RequestBody SecRoleDTO dto) { if (org.springframework.util.CollectionUtils.isEmpty(dto.getResourceIds())) { return ApiResult.failed("请为角色分配资源"); } SecRole secRole = secRoleService.getOne(Wrappers.lambdaQuery(SecRole.class).eq(SecRole::getRolename, dto.getRolename())); if (Objects.nonNull(dto.getId())) { // 系统管理员不可修改 // SecRole byId = secRoleService.getById(dto.getId()); // Assert.isTrue(!"系统管理员".equals(byId.getRolename()),"系统管理员无法修改"); if (Objects.isNull(secRole) || (Objects.nonNull(secRole) && dto.getId().equals(secRole.getId()))) { secRoleService.updateById(dto); // 删除之前的所有功能列表,重新添加 secRoleResourceMapper.delete(Wrappers.lambdaQuery(SecRoleResource.class).eq(SecRoleResource::getRoleId, dto.getId())); } else { return ApiResult.failed("角色名已存在"); } } else { // 判断名称是否存在 if (Objects.nonNull(secRole)) { return ApiResult.failed("角色名已存在"); } secRoleService.save(dto); } // 向角色添加所拥有的资源 SecRoleResource secRoleResource = new SecRoleResource(); for (Long resourceId : dto.getResourceIds()) { secRoleResource.setResourceId(resourceId); secRoleResource.setRoleId(dto.getId()); secRoleResourceMapper.insert(secRoleResource); } return ApiResult.success(); } @OperationLog(operType = "启用禁用", operDesc = "系统角色启用禁用", operModul = "角色") @ApiOperation("系统角色启用禁用 state(0,1) 非0 则为禁用") @PutMapping("state/{id}/{state}") public ApiResult state(@PathVariable("id") Long id, @PathVariable("state") Boolean state) { SecRole role = new SecRole(); role.setId(id); role.setRoleState(state); secRoleService.updateById(role); return ApiResult.success(); } @OperationLog(operType = "删除", operDesc = "删除角色", operModul = "角色") @ApiOperation("删除角色") @DeleteMapping("delRole/{roleId}") public ApiResult delRole(@PathVariable Long roleId) { SecRole secRole = secRoleService.getById(roleId); Assert.isTrue(!"超级管理员".equals(secRole.getRolename()), "超级管理员角色无法删除"); Long count = secUserRoleMapper.selectCount(Wrappers.lambdaQuery(SecUserRole.class).eq(SecUserRole::getRoleId, roleId)); Assert.isTrue(count==0, "该角色已关联账号,无法删除!"); secRoleService.removeById(roleId); return ApiResult.success(); } @OperationLog(operType = "批量删除", operDesc = "删除角色", operModul = "角色") @ApiOperation("批量删除角色") @DeleteMapping("delRoleByIds") public ApiResult delRoleByIds(@RequestBody List roleIds) { List list = secRoleService.list(Wrappers.lambdaQuery(SecRole.class) .in(SecRole::getId,roleIds)); list.forEach(secRole -> { Assert.isTrue(!"超级管理员".equals(secRole.getRolename()), "超级管理员角色无法删除"); }); Long count = secUserRoleMapper.selectCount(Wrappers.lambdaQuery(SecUserRole.class) .in(SecUserRole::getRoleId, roleIds)); Assert.isTrue(count==0, "该角色已关联账号,无法删除!"); secRoleService.remove(Wrappers.lambdaQuery(SecRole.class) .in(SecRole::getId,roleIds)); return ApiResult.success(); } }