diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/pojo/user/newrole/request/RoleControlRequest.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/pojo/user/newrole/request/RoleControlRequest.java index 0251e3a50..a5ee72029 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/pojo/user/newrole/request/RoleControlRequest.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/pojo/user/newrole/request/RoleControlRequest.java @@ -13,6 +13,12 @@ import javax.validation.constraints.NotNull; @Data public class RoleControlRequest { + /** + * 用户id + */ + @NotNull(message = "用户id不能为空,请检查userId参数") + private Long userId; + /** * 所操作的机构id */ diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/controller/UserRoleAssignPageController.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/controller/UserRoleAssignPageController.java index 83fe4a392..ab79af67e 100644 --- a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/controller/UserRoleAssignPageController.java +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/controller/UserRoleAssignPageController.java @@ -6,6 +6,7 @@ import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; import cn.stylefeng.roses.kernel.sys.api.pojo.user.newrole.NewUserRoleBindResponse; +import cn.stylefeng.roses.kernel.sys.api.pojo.user.newrole.request.RoleControlRequest; import cn.stylefeng.roses.kernel.sys.api.pojo.user.newrole.request.StatusControlRequest; import cn.stylefeng.roses.kernel.sys.modular.user.service.SysRoleAssignService; import org.springframework.validation.annotation.Validated; @@ -53,4 +54,17 @@ public class UserRoleAssignPageController { return new SuccessResponseData<>(); } + /** + * 绑定或取消绑定角色 + * + * @author fengshuonan + * @since 2024-01-18 9:31 + */ + @PostResource(name = "绑定或取消绑定角色", path = "/sysRoleAssign/changeRoleSelect") + public ResponseData changeRoleSelect(@RequestBody @Validated RoleControlRequest roleControlRequest) { + sysRoleAssignService.changeRoleSelect(roleControlRequest); + return new SuccessResponseData<>(); + } + + } diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/enums/SysUserExceptionEnum.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/enums/SysUserExceptionEnum.java index 3b365b116..8636e1a00 100644 --- a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/enums/SysUserExceptionEnum.java +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/enums/SysUserExceptionEnum.java @@ -63,7 +63,17 @@ public enum SysUserExceptionEnum implements AbstractExceptionEnum { /** * 非超级管理员不能修改基础系统角色绑定 */ - CANT_CHANGE_BASE_SYSTEM_ROLE(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10010", "非超级管理员不能修改基础系统角色绑定"); + CANT_CHANGE_BASE_SYSTEM_ROLE(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10010", "非超级管理员不能修改基础系统角色绑定"), + + /** + * 无法绑定角色,请检查类型是否正常 + */ + ROLE_TYPE_PERMISSION_ERROR(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10011", "无法绑定角色,请检查类型是否正常"), + + /** + * 组织机构id为空,请检查参数 + */ + ORG_ID_EMPTY_ERROR(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10012", "组织机构id为空,请检查参数"); /** * 错误编码 diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysRoleAssignService.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysRoleAssignService.java index 2b3be0caf..9f0704fa0 100644 --- a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysRoleAssignService.java +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysRoleAssignService.java @@ -1,6 +1,7 @@ package cn.stylefeng.roses.kernel.sys.modular.user.service; import cn.stylefeng.roses.kernel.sys.api.pojo.user.newrole.NewUserRoleBindResponse; +import cn.stylefeng.roses.kernel.sys.api.pojo.user.newrole.request.RoleControlRequest; import cn.stylefeng.roses.kernel.sys.api.pojo.user.newrole.request.StatusControlRequest; import java.util.List; @@ -29,4 +30,12 @@ public interface SysRoleAssignService { */ void changeUserBindStatus(StatusControlRequest statusControlRequest); + /** + * 设置角色的选中状态的填充 + * + * @author fengshuonan + * @since 2024-01-18 10:50 + */ + void changeRoleSelect(RoleControlRequest roleControlRequest); + } \ 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/SysUserRoleService.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysUserRoleService.java index 07f82f917..8a4be199b 100644 --- a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysUserRoleService.java +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysUserRoleService.java @@ -29,4 +29,20 @@ public interface SysUserRoleService extends IService, SysUserRoleSe */ void bindUserDefaultRole(Long userId); + /** + * 获取用户是否绑定的对应的角色 + * + * @author fengshuonan + * @since 2024-01-18 10:54 + */ + SysUserRole getPointUserRole(Long userId, Long roleId, Long orgId); + + /** + * 新增一个角色绑定 + * + * @author fengshuonan + * @since 2024-01-18 11:00 + */ + void addBusinessAndCompanyBindRole(SysUserRole sysUserRole); + } \ 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/SysRoleAssignServiceImpl.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysRoleAssignServiceImpl.java index e1870b854..443a62fc9 100644 --- a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysRoleAssignServiceImpl.java +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysRoleAssignServiceImpl.java @@ -7,8 +7,10 @@ import cn.stylefeng.roses.kernel.sys.api.pojo.role.SysRoleDTO; import cn.stylefeng.roses.kernel.sys.api.pojo.user.UserOrgDTO; import cn.stylefeng.roses.kernel.sys.api.pojo.user.newrole.NewUserRoleBindResponse; import cn.stylefeng.roses.kernel.sys.api.pojo.user.newrole.UserRoleDTO; +import cn.stylefeng.roses.kernel.sys.api.pojo.user.newrole.request.RoleControlRequest; import cn.stylefeng.roses.kernel.sys.api.pojo.user.newrole.request.StatusControlRequest; import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUserOrg; +import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUserRole; import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserOrgExceptionEnum; import cn.stylefeng.roses.kernel.sys.modular.user.factory.RoleAssignFactory; import cn.stylefeng.roses.kernel.sys.modular.user.service.SysRoleAssignService; @@ -79,4 +81,31 @@ public class SysRoleAssignServiceImpl implements SysRoleAssignService { this.sysUserOrgService.updateById(userOrgInfo); } + @Override + public void changeRoleSelect(RoleControlRequest roleControlRequest) { + + // 1. 获取用户是否已经绑定了这个机构下的这个角色 + SysUserRole pointUserRole = sysUserRoleService.getPointUserRole(roleControlRequest.getUserId(), roleControlRequest.getRoleId(), roleControlRequest.getOrgId()); + + // 针对已经绑定的不需要再次绑定 + if (pointUserRole != null && roleControlRequest.getCheckedFlag()) { + return; + } + + // 未绑定过,但是需要绑定,则新增一条记录 + else if (pointUserRole == null && roleControlRequest.getCheckedFlag()) { + SysUserRole sysUserRole = new SysUserRole(); + sysUserRole.setUserId(roleControlRequest.getUserId()); + sysUserRole.setRoleId(roleControlRequest.getRoleId()); + sysUserRole.setRoleType(roleControlRequest.getRoleType()); + sysUserRole.setRoleOrgId(roleControlRequest.getOrgId()); + sysUserRoleService.save(sysUserRole); + } + + // 不需要绑定,则删除这条记录 + else if (pointUserRole != null) { + sysUserRoleService.removeById(pointUserRole.getUserRoleId()); + } + } + } \ 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/SysUserRoleServiceImpl.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserRoleServiceImpl.java index 119686a85..10e4b5137 100644 --- a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserRoleServiceImpl.java +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserRoleServiceImpl.java @@ -242,6 +242,37 @@ public class SysUserRoleServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysUserRole::getUserId, userId); + queryWrapper.eq(SysUserRole::getRoleId, roleId); + queryWrapper.eq(SysUserRole::getRoleOrgId, orgId); + queryWrapper.select(SysUserRole::getUserRoleId, SysUserRole::getUserId, SysUserRole::getRoleId, SysUserRole::getRoleType, SysUserRole::getRoleOrgId); + return this.getOne(queryWrapper, false); + } + + @Override + public void addBusinessAndCompanyBindRole(SysUserRole sysUserRole) { + if (sysUserRole == null) { + return; + } + + // 这个接口只能操作业务的和公司的绑定 + Integer roleType = sysUserRole.getRoleType(); + if (!RoleTypeEnum.BUSINESS_ROLE.getCode().equals(roleType) || !RoleTypeEnum.COMPANY_ROLE.getCode().equals(roleType)) { + throw new ServiceException(SysUserExceptionEnum.ROLE_TYPE_PERMISSION_ERROR); + } + + // 这个接口必须传递组织机构,给这个人的组织机构下绑定角色 + Long roleOrgId = sysUserRole.getRoleOrgId(); + if (ObjectUtil.isEmpty(roleOrgId)) { + throw new ServiceException(SysUserExceptionEnum.ORG_ID_EMPTY_ERROR); + } + + this.save(sysUserRole); + } + /** * 清空用户绑定的所有系统角色,这个界面只管分配系统角色 *