diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectController.java index 3fe7d798..53a8e992 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectController.java @@ -51,6 +51,15 @@ public class BusProjectController extends BaseController { return projectService.queryPageList(req, pageQuery); } + /** + * 查询项目列表 + */ + @SaCheckPermission("project:project:listNoDept") + @GetMapping("/listNoDept") + public R> 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> listSubProjectMatrix(@NotNull(message = "项目id不能为空") - @PathVariable Long id) { + @PathVariable Long id) { return R.ok(projectService.querySubProjectMatrixList(id)); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectService.java index 0db65d0b..32b7d7dc 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectService.java @@ -49,6 +49,13 @@ public interface IBusProjectService extends IService { */ List queryList(BusProjectQueryReq req); + /** + * 查询未绑定部门的项目列表(不查询子项目) + * + * @return 项目列表 + */ + List queryListNoDept(); + /** * 查询项目下的子项目列表 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java index 45c42961..9e9e13ba 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java @@ -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 queryListNoDept() { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(SysDept::getIsSubset, SysDeptIsSubsetEnum.NO.getCode()); + lqw.isNotNull(SysDept::getProjectId); + List depts = deptMapper.selectList(lqw); + List idList = depts.stream().map(SysDept::getProjectId).toList(); + List allProjectList = this.lambdaQuery() + .eq(BusProject::getPId, BusProjectConstant.PARENT_ID) + .list(); + List projectList = allProjectList.stream() + .filter(project -> !idList.contains(project.getId())) + .toList(); + return projectList.stream().map(this::getVo).toList(); + } + /** * 查询项目下的子项目列表 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysRoleController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysRoleController.java index e770db08..ecf97b4b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysRoleController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysRoleController.java @@ -55,8 +55,8 @@ public class SysRoleController extends BaseController { */ @SaCheckPermission("system:role:list") @GetMapping("/listNoPage") - public List listNoPage(SysRoleBo role) { - return roleService.selectRoleList(role); + public R> 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(); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java index 136e863d..91ecd0ba 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java @@ -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 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 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 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); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java index 0d89f076..cb19f7f7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java @@ -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 projectList; + /** * 祖级列表 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java index 9acefb40..b0ed7ea7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java @@ -44,6 +44,12 @@ public class SysRoleVo implements Serializable { @ExcelProperty(value = "角色权限") private String roleKey; + /** + * 部门ID + */ + @ExcelProperty(value = "部门") + private Long deptId; + /** * 显示顺序 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java index 9e2c0e2e..b50d4f2c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java @@ -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() .select(SysDept::getDeptName).eq(SysDept::getDeptId, dept.getParentId())); dept.setParentName(ObjectUtils.notNullGetter(parentDept, SysDeptVo::getDeptName)); + List 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 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 deptIds = this.getParentDeptIds(dept); @@ -485,6 +499,13 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { if (project == null) { throw new ServiceException("关联项目不存在", HttpStatus.NOT_FOUND); } + // 判断新项目是否被绑定 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysDept::getProjectId, newProjectId); + Long l = baseMapper.selectCount(queryWrapper); + if (l > 0) { + throw new ServiceException("该项目已被其他部门绑定", HttpStatus.CONFLICT); + } // 获取当前部门及其上级部门 ID 列表 List deptIds = this.getParentDeptIds(dept); // 获取部门用户 ID diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml index 1fde9451..819de003 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml @@ -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})