diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/pojo/role/SysRoleTreeDTO.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/pojo/role/SysRoleTreeDTO.java index bb6fb5fa0..d07bb3740 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/pojo/role/SysRoleTreeDTO.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/pojo/role/SysRoleTreeDTO.java @@ -75,7 +75,7 @@ public class SysRoleTreeDTO implements AbstractTreeNode { * 用在用户绑定角色上,选中的则是绑定的 */ @ChineseDescription("是否选中") - private Boolean checkedFlag; + private Boolean checkedFlag = false; /** * 子节点 diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/controller/NewRoleAssignController.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/controller/NewRoleAssignController.java index 05ce9d5d5..e3ffa973d 100644 --- a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/controller/NewRoleAssignController.java +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/controller/NewRoleAssignController.java @@ -4,7 +4,9 @@ import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import cn.stylefeng.roses.kernel.sys.api.pojo.role.SysRoleTreeDTO; import cn.stylefeng.roses.kernel.sys.api.pojo.user.UserOrgDTO; +import cn.stylefeng.roses.kernel.sys.modular.user.service.SysRoleAssignV2Service; import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserOrgService; import jakarta.annotation.Resource; import org.springframework.web.bind.annotation.RequestParam; @@ -25,6 +27,9 @@ public class NewRoleAssignController { @Resource private SysUserOrgService sysUserOrgService; + @Resource + private SysRoleAssignV2Service sysRoleAssignV2Service; + /** * 获取用户的所有机构列表 * @@ -37,6 +42,7 @@ public class NewRoleAssignController { // 清空一些名称的返回 for (UserOrgDTO userOrgDTO : list) { + userOrgDTO.setCompanyId(null); userOrgDTO.setDeptId(null); userOrgDTO.setPositionId(null); } @@ -44,4 +50,18 @@ public class NewRoleAssignController { return new SuccessResponseData<>(list); } + /** + * 获取用户指定机构下的角色树(包含角色分类和角色) + *

+ * 已经绑定的角色会checked + * + * @author fengshuonan + * @since 2025/1/24 14:33 + */ + @GetResource(name = "获取用户指定公司下的业务角色树", path = "/sysRoleAssign/v2/getCompanyBusinessRoleTree") + public ResponseData> getCompanyBusinessRoleTree(@RequestParam("userId") Long userId, @RequestParam("orgId") Long orgId) { + List list = sysRoleAssignV2Service.getCompanyBusinessRoleTree(userId, orgId); + return new SuccessResponseData<>(list); + } + } diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/factory/RoleAssignV2Factory.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/factory/RoleAssignV2Factory.java new file mode 100644 index 000000000..a3428973d --- /dev/null +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/factory/RoleAssignV2Factory.java @@ -0,0 +1,39 @@ +package cn.stylefeng.roses.kernel.sys.modular.user.factory; + +import cn.stylefeng.roses.kernel.sys.api.pojo.role.SysRoleTreeDTO; +import cn.stylefeng.roses.kernel.sys.api.pojo.user.newrole.UserRoleDTO; + +import java.util.List; + +/** + * 用户绑定角色的工厂 + * + * @author fengshuonan + * @since 2025/1/24 15:23 + */ +public class RoleAssignV2Factory { + + /** + * 在角色树上,绑定业务角色 + * + * @author fengshuonan + * @since 2025/1/24 15:27 + */ + public static void mountBusinessRole(List totalBusinessRoleTree, List userLinkedOrgRoleList) { + + // 判断list中的角色,是否有绑定的 + for (SysRoleTreeDTO treeNode : totalBusinessRoleTree) { + for (UserRoleDTO userRoleInfo : userLinkedOrgRoleList) { + if (treeNode.getRoleTreeNodeId().equals(userRoleInfo.getRoleId())) { + treeNode.setCheckedFlag(true); + } + } + + // 如果有还有子集,则判断子集的列表中是否有绑定的角色 + if (treeNode.getChildren() != null && !treeNode.getChildren().isEmpty()) { + mountBusinessRole(treeNode.getChildren(), userLinkedOrgRoleList); + } + } + } + +} diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysRoleAssignV2Service.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysRoleAssignV2Service.java new file mode 100644 index 000000000..82c54c113 --- /dev/null +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysRoleAssignV2Service.java @@ -0,0 +1,25 @@ +package cn.stylefeng.roses.kernel.sys.modular.user.service; + +import cn.stylefeng.roses.kernel.sys.api.pojo.role.SysRoleTreeDTO; + +import java.util.List; + +/** + * 直接在用户管理界面,进行角色授权的业务 + * + * @author fengshuonan + * @since 2025/1/24 14:00 + */ +public interface SysRoleAssignV2Service { + + /** + * 获取用户指定机构下的角色树(包含角色分类和角色) + *

+ * 已经绑定的角色会checked + * + * @author fengshuonan + * @since 2025/1/24 14:44 + */ + List getCompanyBusinessRoleTree(Long userId, Long orgId); + +} \ No newline at end of file diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysRoleAssignV2ServiceImpl.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysRoleAssignV2ServiceImpl.java new file mode 100644 index 000000000..30d0318ef --- /dev/null +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysRoleAssignV2ServiceImpl.java @@ -0,0 +1,51 @@ +package cn.stylefeng.roses.kernel.sys.modular.user.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import cn.stylefeng.roses.kernel.sys.api.SysRoleServiceApi; +import cn.stylefeng.roses.kernel.sys.api.enums.role.RoleTypeEnum; +import cn.stylefeng.roses.kernel.sys.api.pojo.role.SysRoleTreeDTO; +import cn.stylefeng.roses.kernel.sys.api.pojo.user.newrole.UserRoleDTO; +import cn.stylefeng.roses.kernel.sys.modular.user.factory.RoleAssignV2Factory; +import cn.stylefeng.roses.kernel.sys.modular.user.service.SysRoleAssignV2Service; +import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserRoleService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 新的用户授权界面业务 + * + * @author fengshuonan + * @since 2024/1/17 23:08 + */ +@Service +public class SysRoleAssignV2ServiceImpl implements SysRoleAssignV2Service { + + @Resource + private SysRoleServiceApi sysRoleServiceApi; + + @Resource + private SysUserRoleService sysUserRoleService; + + @Override + public List getCompanyBusinessRoleTree(Long userId, Long orgId) { + + // 1. 获取系统中所有业务角色的树(业务角色分类 + 业务角色) + List totalBusinessRoleTree = sysRoleServiceApi.roleCategoryAndRoleTreeList(RoleTypeEnum.BUSINESS_ROLE.getCode(), null); + + // 2. 获改用户,指定的机构,已经绑定的了哪些业务角色 + List userLinkedOrgRoleList = sysUserRoleService.getUserLinkedOrgRoleList(userId); + if (ObjectUtil.isEmpty(userLinkedOrgRoleList)) { + return totalBusinessRoleTree; + } + userLinkedOrgRoleList = userLinkedOrgRoleList.stream().filter(item -> orgId.equals(item.getRoleOrgId())).collect(Collectors.toList()); + + // 3. 将用户绑定的角色,挂载到角色树中,赋值checked选项 + RoleAssignV2Factory.mountBusinessRole(totalBusinessRoleTree, userLinkedOrgRoleList); + + return totalBusinessRoleTree; + } + +} \ No newline at end of file