package com.tievd.cube.modules.system.controller; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.databind.JsonNode; import com.tievd.cube.commons.base.CubeController; import com.tievd.cube.commons.annotations.AutoLog; import com.tievd.cube.commons.annotations.DictMethod; import com.tievd.cube.commons.base.Result; import com.tievd.cube.modules.system.entity.SysPermissionDataRule; import com.tievd.cube.modules.system.service.ISysDepartPermissionService; import com.tievd.cube.modules.system.service.ISysDepartRolePermissionService; import com.tievd.cube.modules.system.service.ISysDepartRoleService; import com.tievd.cube.modules.system.service.ISysDepartRoleUserService; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import com.tievd.cube.commons.mybatisplus.QueryGenerator; import com.tievd.cube.modules.system.entity.SysDepartRole; import com.tievd.cube.modules.system.entity.SysDepartRolePermission; import com.tievd.cube.modules.system.entity.SysDepartRoleUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 部门角色 * * @author xinwuy * @version V2.3.5 * @since 2021-12-21 */ @Slf4j @Tag(name = "部门角色相关接口") @RestController @RequestMapping("/sys/depart/role") public class SysDepartRoleController extends CubeController { @Autowired private ISysDepartRoleUserService departRoleUserService; @Autowired private ISysDepartPermissionService sysDepartPermissionService; @Autowired private ISysDepartRolePermissionService sysDepartRolePermissionService; /** * 分页列表查询 * * @param sysDepartRole 查询参数 * @param pageNo 页码 * @param pageSize 每页条数 * @param deptId 部门id */ @DictMethod @GetMapping("/list") public Result> queryPageList(SysDepartRole sysDepartRole, @RequestParam(defaultValue = "1") Integer pageNo, @RequestParam(defaultValue = "10") Integer pageSize, @RequestParam(required = false) String deptId, HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDepartRole, req.getParameterMap()); Page page = new Page<>(pageNo, pageSize); //我的部门,选中部门只能看当前部门下的角色 queryWrapper.eq("depart_id", deptId); IPage pageList = service.page(page, queryWrapper); return Result.ok(pageList); } /** * 新增 * * @param sysDepartRole 角色信息 */ @AutoLog("部门角色-添加") @PostMapping("/add") public Result add(@RequestBody SysDepartRole sysDepartRole) { service.save(sysDepartRole); return Result.ok(); } /** * 编辑 * * @param sysDepartRole 角色信息 */ @AutoLog("部门角色-编辑") @PutMapping("/edit") public Result edit(@RequestBody SysDepartRole sysDepartRole) { service.updateById(sysDepartRole); return Result.ok(); } /** * 通过id删除 * * @param id 角色id */ @AutoLog("部门角色-通过id删除") @DeleteMapping("/delete") public Result delete(@RequestParam String id) { return service.delete(ListUtil.of(id)); } /** * 批量删除 * * @param ids 部门权限id(逗号分隔) */ @AutoLog("部门角色-批量删除") @DeleteMapping("/deleteBatch") public Result deleteBatch(@RequestParam String ids) { return service.delete(Arrays.asList(ids.split(","))); } /** * 获取用户所属部门角色列表 * * @param departId 部门id */ @GetMapping("/getDeptRoleList") public Result> getDeptRoleList(@RequestParam String departId) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysDepartRole::getDepartId, departId); List deptRoleList = service.list(query); return Result.ok(deptRoleList); } /** * 为用户设置角色 * * @param json 参数 */ @PostMapping("/deptRoleUserAdd") public Result deptRoleAdd(@RequestBody JsonNode json) { String newRoleId = json.get("newRoleId").asText(); String oldRoleId = json.get("oldRoleId").asText(); String userId = json.get("userId").asText(); departRoleUserService.deptRoleUserAdd(userId, newRoleId, oldRoleId); return Result.ok(); } /** * 根据用户id获取已设置部门角色 * * @param userId 用户id * @param departId 部门id */ @GetMapping("/getDeptRoleByUserId") public Result> getDeptRoleByUserId(@RequestParam String userId, @RequestParam String departId) { //查询部门下角色 List roleList = service.list(new QueryWrapper().eq("depart_id", departId)); List roleIds = roleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); //根据角色id,用户id查询已授权角色 List roleUserList = departRoleUserService.list(new QueryWrapper().eq("user_id", userId).in("drole_id", roleIds)); return Result.ok(roleUserList); } /** * 查询数据规则数据 * * @param permissionId 权限id * @param departId 部门id * @param roleId 角色id */ @GetMapping("/dataRule/{permissionId}/{departId}/{roleId}") public Result loadDataRule(@PathVariable String permissionId, @PathVariable String departId, @PathVariable String roleId) { //查询已授权的部门规则 List list = sysDepartPermissionService.getPermRuleListByDeptIdAndPermId(departId, permissionId); if (list == null || list.size() == 0) { return Result.error("未找到权限配置信息!"); } Map returnData = new HashMap<>(); returnData.put("datarule", list); LambdaQueryWrapper query = new LambdaQueryWrapper().eq(SysDepartRolePermission::getPermissionId, permissionId).eq(SysDepartRolePermission::getRoleId, roleId); SysDepartRolePermission sysRolePermission = sysDepartRolePermissionService.getOne(query); if (sysRolePermission == null) { return Result.error("未找到角色菜单配置信息!"); } String drChecked = sysRolePermission.getDataRuleIds(); if (StrUtil.isNotEmpty(drChecked)) { returnData.put("drChecked", drChecked.endsWith(",") ? drChecked.substring(0, drChecked.length() - 1) : drChecked); } return Result.ok(returnData); } /** * 保存数据规则至角色菜单关联表 * * @param jsonObject 参数 */ @PostMapping("/dataRule") public Result saveDataRule(@RequestBody JsonNode jsonObject) { String permissionId = jsonObject.get("permissionId").asText(); String roleId = jsonObject.get("roleId").asText(); String dataRuleIds = jsonObject.get("dataRuleIds").asText(); LambdaQueryWrapper query = new LambdaQueryWrapper().eq(SysDepartRolePermission::getPermissionId, permissionId).eq(SysDepartRolePermission::getRoleId, roleId); SysDepartRolePermission sysRolePermission = sysDepartRolePermissionService.getOne(query); if (sysRolePermission == null) { return Result.error("请先保存角色菜单权限!"); } sysRolePermission.setDataRuleIds(dataRuleIds); sysDepartRolePermissionService.updateById(sysRolePermission); return Result.ok(); } }