[update] 部门、角色、用户关联
This commit is contained in:
@ -51,6 +51,15 @@ public class BusProjectController extends BaseController {
|
||||
return projectService.queryPageList(req, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询项目列表
|
||||
*/
|
||||
@SaCheckPermission("project:project:listNoDept")
|
||||
@GetMapping("/listNoDept")
|
||||
public R<List<BusProjectVo>> listNoDept() {
|
||||
return R.ok(projectService.queryListNoDept());
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询项目下的子项目列表
|
||||
*/
|
||||
@ -67,7 +76,7 @@ public class BusProjectController extends BaseController {
|
||||
@SaCheckPermission("project:project:list")
|
||||
@GetMapping("/list/sub/matrix/{id}")
|
||||
public R<List<BusSubProjectMatrixVo>> listSubProjectMatrix(@NotNull(message = "项目id不能为空")
|
||||
@PathVariable Long id) {
|
||||
@PathVariable Long id) {
|
||||
return R.ok(projectService.querySubProjectMatrixList(id));
|
||||
}
|
||||
|
||||
|
@ -49,6 +49,13 @@ public interface IBusProjectService extends IService<BusProject> {
|
||||
*/
|
||||
List<BusProjectVo> queryList(BusProjectQueryReq req);
|
||||
|
||||
/**
|
||||
* 查询未绑定部门的项目列表(不查询子项目)
|
||||
*
|
||||
* @return 项目列表
|
||||
*/
|
||||
List<BusProjectVo> queryListNoDept();
|
||||
|
||||
/**
|
||||
* 查询项目下的子项目列表
|
||||
*
|
||||
|
@ -50,6 +50,9 @@ import org.dromara.project.service.IBusProjectService;
|
||||
import org.dromara.project.service.IBusUserProjectRelevancyService;
|
||||
import org.dromara.quality.service.IQltKnowledgeDocumentService;
|
||||
import org.dromara.safety.service.IHseKnowledgeDocumentService;
|
||||
import org.dromara.system.domain.SysDept;
|
||||
import org.dromara.system.domain.enums.SysDeptIsSubsetEnum;
|
||||
import org.dromara.system.mapper.SysDeptMapper;
|
||||
import org.dromara.workflow.service.IFlwDefinitionService;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
@ -112,6 +115,10 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
|
||||
@Resource
|
||||
private IFlwDefinitionService flwDefinitionService;
|
||||
|
||||
@Lazy
|
||||
@Resource
|
||||
private SysDeptMapper deptMapper;
|
||||
|
||||
@Lazy
|
||||
@Resource
|
||||
private IBusProjectService self;
|
||||
@ -177,6 +184,27 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
|
||||
return this.list(lqw).stream().map(this::getVo).toList();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询未绑定部门的项目列表(不查询子项目)
|
||||
*
|
||||
* @return 项目列表
|
||||
*/
|
||||
@Override
|
||||
public List<BusProjectVo> queryListNoDept() {
|
||||
LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>();
|
||||
lqw.eq(SysDept::getIsSubset, SysDeptIsSubsetEnum.NO.getCode());
|
||||
lqw.isNotNull(SysDept::getProjectId);
|
||||
List<SysDept> depts = deptMapper.selectList(lqw);
|
||||
List<Long> idList = depts.stream().map(SysDept::getProjectId).toList();
|
||||
List<BusProject> allProjectList = this.lambdaQuery()
|
||||
.eq(BusProject::getPId, BusProjectConstant.PARENT_ID)
|
||||
.list();
|
||||
List<BusProject> projectList = allProjectList.stream()
|
||||
.filter(project -> !idList.contains(project.getId()))
|
||||
.toList();
|
||||
return projectList.stream().map(this::getVo).toList();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询项目下的子项目列表
|
||||
*
|
||||
|
@ -55,8 +55,8 @@ public class SysRoleController extends BaseController {
|
||||
*/
|
||||
@SaCheckPermission("system:role:list")
|
||||
@GetMapping("/listNoPage")
|
||||
public List<SysRoleVo> listNoPage(SysRoleBo role) {
|
||||
return roleService.selectRoleList(role);
|
||||
public R<List<SysRoleVo>> listNoPage(SysRoleBo role) {
|
||||
return R.ok(roleService.selectRoleList(role));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -103,6 +103,9 @@ public class SysRoleController extends BaseController {
|
||||
if (deptVo == null) {
|
||||
return R.fail("新增角色'" + role.getRoleName() + "'失败,关联的部门不存在");
|
||||
}
|
||||
if (deptVo.getParentId() == 0) {
|
||||
return R.fail("新增角色'" + role.getRoleName() + "'失败,关联的部门不能为顶级部门");
|
||||
}
|
||||
return toAjax(roleService.insertRole(role));
|
||||
}
|
||||
|
||||
@ -120,7 +123,17 @@ public class SysRoleController extends BaseController {
|
||||
} else if (!roleService.checkRoleKeyUnique(role)) {
|
||||
return R.fail("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
|
||||
}
|
||||
|
||||
Long deptId = role.getDeptId();
|
||||
if (deptId == null) {
|
||||
return R.fail("新增角色'" + role.getRoleName() + "'失败,请选择关联的部门");
|
||||
}
|
||||
SysDeptVo deptVo = deptService.selectDeptById(deptId);
|
||||
if (deptVo == null) {
|
||||
return R.fail("新增角色'" + role.getRoleName() + "'失败,关联的部门不存在");
|
||||
}
|
||||
if (deptVo.getParentId() == 0) {
|
||||
return R.fail("新增角色'" + role.getRoleName() + "'失败,关联的部门不能为顶级部门");
|
||||
}
|
||||
if (roleService.updateRole(role) > 0) {
|
||||
roleService.cleanOnlineUserByRole(role.getRoleId());
|
||||
return R.ok();
|
||||
|
@ -2,13 +2,13 @@ package org.dromara.system.controller.system;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.secure.BCrypt;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.lang.tree.Tree;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.constant.SystemConstants;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
@ -132,20 +132,29 @@ public class SysUserController extends BaseController {
|
||||
if (ObjectUtil.isNotNull(userId)) {
|
||||
userService.checkUserDataScope(userId);
|
||||
SysUserVo sysUser = userService.selectUserById(userId);
|
||||
List<SysRoleVo> roles = sysUser.getRoles();
|
||||
if (CollUtil.isNotEmpty(roles)) {
|
||||
sysUser.setRoleIds(roles.stream().map(SysRoleVo::getRoleId).toList().toArray(Long[]::new));
|
||||
}
|
||||
userInfoVo.setUser(sysUser);
|
||||
userInfoVo.setRoleIds(roleService.selectRoleListByUserId(userId));
|
||||
// userInfoVo.setRoleIds(roleService.selectRoleListByUserId(userId));
|
||||
Long deptId = sysUser.getDeptId();
|
||||
if (ObjectUtil.isNotNull(deptId)) {
|
||||
SysPostBo postBo = new SysPostBo();
|
||||
postBo.setDeptId(deptId);
|
||||
userInfoVo.setPosts(postService.selectPostList(postBo));
|
||||
userInfoVo.setPostIds(postService.selectPostListByUserId(userId));
|
||||
SysRoleBo role = new SysRoleBo();
|
||||
role.setDeptId(deptId);
|
||||
List<SysRoleVo> roleVoList = roleService.selectRoleList(role);
|
||||
userInfoVo.setRoles(roleVoList);
|
||||
userInfoVo.setRoleIds(roleVoList.stream().map(SysRoleVo::getRoleId).toList());
|
||||
}
|
||||
}
|
||||
SysRoleBo roleBo = new SysRoleBo();
|
||||
/*SysRoleBo roleBo = new SysRoleBo();
|
||||
roleBo.setStatus(SystemConstants.NORMAL);
|
||||
List<SysRoleVo> roles = roleService.selectRoleList(roleBo);
|
||||
userInfoVo.setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin()));
|
||||
userInfoVo.setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin()));*/
|
||||
return R.ok(userInfoVo);
|
||||
}
|
||||
|
||||
|
@ -2,15 +2,17 @@ package org.dromara.system.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
import org.dromara.system.domain.SysDept;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
import org.dromara.project.domain.vo.project.BusProjectVo;
|
||||
import org.dromara.system.domain.SysDept;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 部门视图对象 sys_dept
|
||||
@ -41,6 +43,17 @@ public class SysDeptVo implements Serializable {
|
||||
*/
|
||||
private String parentName;
|
||||
|
||||
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 未绑定项目信息
|
||||
*/
|
||||
private List<BusProjectVo> projectList;
|
||||
|
||||
/**
|
||||
* 祖级列表
|
||||
*/
|
||||
|
@ -44,6 +44,12 @@ public class SysRoleVo implements Serializable {
|
||||
@ExcelProperty(value = "角色权限")
|
||||
private String roleKey;
|
||||
|
||||
/**
|
||||
* 部门ID
|
||||
*/
|
||||
@ExcelProperty(value = "部门")
|
||||
private Long deptId;
|
||||
|
||||
/**
|
||||
* 显示顺序
|
||||
*/
|
||||
|
@ -21,6 +21,7 @@ import org.dromara.common.mybatis.helper.DataBaseHelper;
|
||||
import org.dromara.common.redis.utils.CacheUtils;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.project.domain.BusProject;
|
||||
import org.dromara.project.domain.vo.project.BusProjectVo;
|
||||
import org.dromara.project.service.IBusProjectService;
|
||||
import org.dromara.project.service.IBusUserProjectRelevancyService;
|
||||
import org.dromara.system.domain.SysDept;
|
||||
@ -164,6 +165,12 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
|
||||
SysDeptVo parentDept = baseMapper.selectVoOne(new LambdaQueryWrapper<SysDept>()
|
||||
.select(SysDept::getDeptName).eq(SysDept::getDeptId, dept.getParentId()));
|
||||
dept.setParentName(ObjectUtils.notNullGetter(parentDept, SysDeptVo::getDeptName));
|
||||
List<BusProjectVo> projectVos = new ArrayList<>(projectService.queryListNoDept());
|
||||
if (dept.getIsSubset().equals(SysDeptIsSubsetEnum.NO.getCode()) && dept.getProjectId() != null) {
|
||||
BusProjectVo vo = projectService.getVo(projectService.getById(dept.getProjectId()));
|
||||
projectVos.add(vo);
|
||||
}
|
||||
dept.setProjectList(projectVos);
|
||||
return dept;
|
||||
}
|
||||
|
||||
@ -395,6 +402,13 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
|
||||
if (project == null) {
|
||||
throw new ServiceException("项目不存在", HttpStatus.NOT_FOUND);
|
||||
}
|
||||
// 判断该项目是否被绑定
|
||||
LambdaQueryWrapper<SysDept> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(SysDept::getProjectId, projectId);
|
||||
Long l = baseMapper.selectCount(queryWrapper);
|
||||
if (l > 0) {
|
||||
throw new ServiceException("该项目已被其他部门绑定", HttpStatus.CONFLICT);
|
||||
}
|
||||
dept.setProjectId(projectId);
|
||||
// 判断是否有需要新增项目关联的用户
|
||||
List<Long> deptIds = this.getParentDeptIds(dept);
|
||||
@ -485,6 +499,13 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
|
||||
if (project == null) {
|
||||
throw new ServiceException("关联项目不存在", HttpStatus.NOT_FOUND);
|
||||
}
|
||||
// 判断新项目是否被绑定
|
||||
LambdaQueryWrapper<SysDept> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(SysDept::getProjectId, newProjectId);
|
||||
Long l = baseMapper.selectCount(queryWrapper);
|
||||
if (l > 0) {
|
||||
throw new ServiceException("该项目已被其他部门绑定", HttpStatus.CONFLICT);
|
||||
}
|
||||
// 获取当前部门及其上级部门 ID 列表
|
||||
List<Long> deptIds = this.getParentDeptIds(dept);
|
||||
// 获取部门用户 ID
|
||||
|
@ -11,6 +11,7 @@
|
||||
select distinct r.role_id,
|
||||
r.role_name,
|
||||
r.role_key,
|
||||
r.dept_id,
|
||||
r.role_sort,
|
||||
r.data_scope,
|
||||
r.menu_check_strictly,
|
||||
@ -45,12 +46,14 @@
|
||||
select r.role_id,
|
||||
r.role_name,
|
||||
r.role_key,
|
||||
r.dept_id,
|
||||
r.role_sort,
|
||||
r.data_scope,
|
||||
r.status,
|
||||
r.is_special
|
||||
from sys_role r
|
||||
WHERE r.del_flag = '0' and r.role_id in (select role_id from sys_user_role where user_id = #{userId})
|
||||
WHERE r.del_flag = '0'
|
||||
and r.role_id in (select role_id from sys_user_role where user_id = #{userId})
|
||||
</select>
|
||||
|
||||
<select id="selectRoleById" resultMap="SysRoleResult">
|
||||
|
Reference in New Issue
Block a user