From f5f5f177cb0c1d580250f9c090aa47bf1f39351b Mon Sep 17 00:00:00 2001 From: chenjinlong <22208488@qq.com> Date: Thu, 4 Feb 2021 16:10:31 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90SysRoleDataScope=E3=80=91=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/RoleDataScopeServiceApi.java | 22 ++++ .../roses/kernel/system/RoleServiceApi.java | 9 -- .../system/pojo/SysRoleDataScopeRequest.java | 28 +++++ .../impl/HrOrganizationServiceImpl.java | 6 +- .../service/SysRoleDataScopeService.java | 67 +++++++++--- .../impl/SysRoleDataScopeServiceImpl.java | 102 ++++++++++++++---- .../service/impl/SysRoleServiceImpl.java | 13 +-- 7 files changed, 191 insertions(+), 56 deletions(-) create mode 100644 kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/RoleDataScopeServiceApi.java create mode 100644 kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/SysRoleDataScopeRequest.java diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/RoleDataScopeServiceApi.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/RoleDataScopeServiceApi.java new file mode 100644 index 000000000..428b50ef6 --- /dev/null +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/RoleDataScopeServiceApi.java @@ -0,0 +1,22 @@ +package cn.stylefeng.roses.kernel.system; + +import java.util.Set; + +/** + * 系统角色数据范围service接口实现类 + * + * @author chenjinlong + * @date 2021/2/4 16:01 + */ +public interface RoleDataScopeServiceApi { + + /** + * 根据机构id集合删除 + * + * @param orgIds 结构id集合 + * @return + * @author chenjinlong + * @date 2021/2/4 15:56 + */ + void delByOrgIds(Set orgIds); +} diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/RoleServiceApi.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/RoleServiceApi.java index e5e6ba8ad..a87a0f44c 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/RoleServiceApi.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/RoleServiceApi.java @@ -16,15 +16,6 @@ import java.util.Set; */ public interface RoleServiceApi { - /** - * 删除角色关联的组织架构数据范围 - * - * @param organizationIds 组织架构id集合 - * @author fengshuonan - * @date 2020/11/5 19:17 - */ - void deleteRoleDataScopeListByOrgIdList(Set organizationIds); - /** * 获取角色,通过传递角色id列表 * diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/SysRoleDataScopeRequest.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/SysRoleDataScopeRequest.java new file mode 100644 index 000000000..4a453faf1 --- /dev/null +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/SysRoleDataScopeRequest.java @@ -0,0 +1,28 @@ +package cn.stylefeng.roses.kernel.system.pojo; + +import lombok.Data; + +/** + * 角色数据范围 + * + * @author chenjinlong + * @date 2021/2/4 15:17 + */ +@Data +public class SysRoleDataScopeRequest { + + /** + * 主键 + */ + private Long roleDataScopeId; + + /** + * 角色id + */ + private Long roleId; + + /** + * 机构id + */ + private Long organizationId; +} diff --git a/kernel-s-system/system-business-organization/src/main/java/cn/stylefeng/roses/kernel/system/modular/organization/service/impl/HrOrganizationServiceImpl.java b/kernel-s-system/system-business-organization/src/main/java/cn/stylefeng/roses/kernel/system/modular/organization/service/impl/HrOrganizationServiceImpl.java index b103e59ed..db780ee20 100644 --- a/kernel-s-system/system-business-organization/src/main/java/cn/stylefeng/roses/kernel/system/modular/organization/service/impl/HrOrganizationServiceImpl.java +++ b/kernel-s-system/system-business-organization/src/main/java/cn/stylefeng/roses/kernel/system/modular/organization/service/impl/HrOrganizationServiceImpl.java @@ -18,6 +18,7 @@ import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; import cn.stylefeng.roses.kernel.rule.factory.DefaultTreeBuildFactory; import cn.stylefeng.roses.kernel.rule.pojo.tree.DefaultTreeNode; import cn.stylefeng.roses.kernel.rule.pojo.ztree.ZTreeNode; +import cn.stylefeng.roses.kernel.system.RoleDataScopeServiceApi; import cn.stylefeng.roses.kernel.system.RoleServiceApi; import cn.stylefeng.roses.kernel.system.UserOrgServiceApi; import cn.stylefeng.roses.kernel.system.UserServiceApi; @@ -62,6 +63,9 @@ public class HrOrganizationServiceImpl extends ServiceImpl { */ List getRoleDataScopeIdList(List roleIdList); - /** - * 根据机构id集合删除对应的角色-数据范围关联信息 - * - * @param orgIdList 机构id集合 - * @author majianguo - * @date 2020/11/5 上午11:21 - */ - void deleteRoleDataScopeListByOrgIdList(Set orgIdList); /** - * 根据角色id删除对应的角色-数据范围关联信息 + * 新增 + * + * @param sysRoleDataScopeRequest 参数对象 + * @author chenjinlong + * @date 2021/1/26 12:52 + */ + void add(SysRoleDataScopeRequest sysRoleDataScopeRequest); + + /** + * 删除 + * + * @param sysRoleDataScopeRequest 参数对象 + * @author chenjinlong + * @date 2021/1/26 12:52 + */ + void del(SysRoleDataScopeRequest sysRoleDataScopeRequest); + + /** + * 根据角色id 删除角色数据范围 * * @param roleId 角色id - * @author majianguo - * @date 2020/11/5 上午11:21 + * @author chenjinlong + * @date 2021/1/26 12:52 */ - void deleteRoleDataScopeListByRoleId(Long roleId); + void delByRoleId(Long roleId); + + + /** + * 修改 + * + * @param sysRoleDataScopeRequest 参数对象 + * @author chenjinlong + * @date 2021/1/26 12:52 + */ + void edit(SysRoleDataScopeRequest sysRoleDataScopeRequest); + + /** + * 查询-详情 + * + * @param sysRoleDataScopeRequest 参数对象 + * @author chenjinlong + * @date 2021/1/26 12:52 + */ + SysRoleDataScope detail(SysRoleDataScopeRequest sysRoleDataScopeRequest); + + /** + * 查询-列表 + * + * @param sysRoleDataScopeRequest 参数对象 + * @author chenjinlong + * @date 2021/1/26 12:52 + */ + List findList(SysRoleDataScopeRequest sysRoleDataScopeRequest); + } diff --git a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/role/modular/service/impl/SysRoleDataScopeServiceImpl.java b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/role/modular/service/impl/SysRoleDataScopeServiceImpl.java index 05725107c..ac3fdcd5d 100644 --- a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/role/modular/service/impl/SysRoleDataScopeServiceImpl.java +++ b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/role/modular/service/impl/SysRoleDataScopeServiceImpl.java @@ -24,19 +24,22 @@ Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意 */ package cn.stylefeng.roses.kernel.role.modular.service.impl; -import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.stylefeng.roses.kernel.role.modular.entity.SysRoleDataScope; import cn.stylefeng.roses.kernel.role.modular.mapper.SysRoleDataScopeMapper; import cn.stylefeng.roses.kernel.role.modular.service.SysRoleDataScopeService; +import cn.stylefeng.roses.kernel.system.RoleDataScopeServiceApi; +import cn.stylefeng.roses.kernel.system.pojo.SysRoleDataScopeRequest; import cn.stylefeng.roses.kernel.system.pojo.role.request.SysRoleRequest; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; /** * 系统角色数据范围service接口实现类 @@ -45,53 +48,106 @@ import java.util.Set; * @date 2020/11/5 下午4:32 */ @Service -public class SysRoleDataScopeServiceImpl extends ServiceImpl implements SysRoleDataScopeService { +public class SysRoleDataScopeServiceImpl extends ServiceImpl implements SysRoleDataScopeService, RoleDataScopeServiceApi { @Override public void grantDataScope(SysRoleRequest sysRoleParam) { Long roleId = sysRoleParam.getRoleId(); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SysRoleDataScope::getRoleId, roleId); - // 删除所拥该角色已绑定的范围 - this.remove(queryWrapper); + this.delByRoleId(roleId); - // 授权该角色数据范围 + // 批量新增-授权该角色数据范围 if (ObjectUtil.isNotEmpty(sysRoleParam.getGrantOrgIdList())) { + List sysRoleDataScopeList = CollUtil.newArrayList(); sysRoleParam.getGrantOrgIdList().forEach(orgId -> { SysRoleDataScope sysRoleDataScope = new SysRoleDataScope(); sysRoleDataScope.setRoleId(roleId); sysRoleDataScope.setOrganizationId(orgId); - this.save(sysRoleDataScope); + sysRoleDataScopeList.add(sysRoleDataScope); }); + this.saveBatch(sysRoleDataScopeList); } } @Override public List getRoleDataScopeIdList(List roleIdList) { - List resultList = CollectionUtil.newArrayList(); - if (ObjectUtil.isNotEmpty(roleIdList)) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(SysRoleDataScope::getRoleId, roleIdList); - this.list(queryWrapper).forEach(sysRoleDataScope -> resultList.add(sysRoleDataScope.getOrganizationId())); - } - return resultList; + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(SysRoleDataScope::getRoleId, roleIdList); + return this.list(queryWrapper).stream().map(SysRoleDataScope::getOrganizationId).collect(Collectors.toList()); + } + + + @Override + public void add(SysRoleDataScopeRequest sysRoleDataScopeRequest) { + SysRoleDataScope sysRoleDataScope = new SysRoleDataScope(); + BeanUtil.copyProperties(sysRoleDataScopeRequest, sysRoleDataScope); + this.save(sysRoleDataScope); } @Override - @Transactional(rollbackFor = Exception.class) - public void deleteRoleDataScopeListByOrgIdList(Set orgIdList) { + public void del(SysRoleDataScopeRequest sysRoleDataScopeRequest) { + SysRoleDataScope sysRoleDataScope = this.querySysRoleDataScopeById(sysRoleDataScopeRequest); + this.removeById(sysRoleDataScope.getRoleDataScopeId()); + } + + @Override + public void delByRoleId(Long roleId) { + SysRoleDataScopeRequest sysRoleDataScopeRequest = new SysRoleDataScopeRequest(); + sysRoleDataScopeRequest.setRoleId(roleId); + this.remove(this.createQueryWrapper(sysRoleDataScopeRequest)); + } + + @Override + public void delByOrgIds(Set orgIds) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(SysRoleDataScope::getOrganizationId, orgIdList); + queryWrapper.in(SysRoleDataScope::getOrganizationId, orgIds); this.remove(queryWrapper); } @Override - @Transactional(rollbackFor = Exception.class) - public void deleteRoleDataScopeListByRoleId(Long roleId) { + public void edit(SysRoleDataScopeRequest sysRoleDataScopeRequest) { + SysRoleDataScope sysRoleDataScope = this.querySysRoleDataScopeById(sysRoleDataScopeRequest); + BeanUtil.copyProperties(sysRoleDataScopeRequest, sysRoleDataScope); + this.updateById(sysRoleDataScope); + } + + @Override + public SysRoleDataScope detail(SysRoleDataScopeRequest sysRoleDataScopeRequest) { + return this.getOne(this.createQueryWrapper(sysRoleDataScopeRequest), false); + } + + @Override + public List findList(SysRoleDataScopeRequest sysRoleDataScopeRequest) { + return this.list(this.createQueryWrapper(sysRoleDataScopeRequest)); + } + + + /** + * 根据主键查询 + * + * @param sysRoleDataScopeRequest dto实体 + * @author chenjinlong + * @date 2021/2/3 15:02 + */ + private SysRoleDataScope querySysRoleDataScopeById(SysRoleDataScopeRequest sysRoleDataScopeRequest) { + return this.getById(sysRoleDataScopeRequest.getRoleDataScopeId()); + } + + /** + * 构建 QueryWrapper + * + * @param sysRoleDataScopeRequest dto实体 + * @author chenjinlong + * @date 2021/2/3 14:54 + */ + private LambdaQueryWrapper createQueryWrapper(SysRoleDataScopeRequest sysRoleDataScopeRequest) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SysRoleDataScope::getRoleId, roleId); - this.remove(queryWrapper); + // SQL拼接 + queryWrapper.eq(ObjectUtil.isNotNull(sysRoleDataScopeRequest.getRoleDataScopeId()), SysRoleDataScope::getRoleDataScopeId, sysRoleDataScopeRequest.getRoleDataScopeId()); + queryWrapper.eq(ObjectUtil.isNotNull(sysRoleDataScopeRequest.getRoleId()), SysRoleDataScope::getRoleId, sysRoleDataScopeRequest.getRoleId()); + queryWrapper.eq(ObjectUtil.isNotNull(sysRoleDataScopeRequest.getOrganizationId()), SysRoleDataScope::getOrganizationId, sysRoleDataScopeRequest.getOrganizationId()); + + return queryWrapper; } } diff --git a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/role/modular/service/impl/SysRoleServiceImpl.java b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/role/modular/service/impl/SysRoleServiceImpl.java index ca7948add..fc1848a45 100644 --- a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/role/modular/service/impl/SysRoleServiceImpl.java +++ b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/role/modular/service/impl/SysRoleServiceImpl.java @@ -124,16 +124,16 @@ public class SysRoleServiceImpl extends ServiceImpl impl this.updateById(sysRole); - Long id = sysRole.getRoleId(); + Long roleId = sysRole.getRoleId(); // 级联删除该角色对应的角色-数据范围关联信息 - sysRoleDataScopeService.deleteRoleDataScopeListByRoleId(id); + sysRoleDataScopeService.delByRoleId(roleId); // 级联删除该角色对应的用户-角色表关联信息 - userServiceApi.deleteUserRoleListByRoleId(id); + userServiceApi.deleteUserRoleListByRoleId(roleId); // 级联删除该角色对应的角色-菜单表关联信息 - sysRoleResourceService.deleteRoleResourceListByRoleId(id); + sysRoleResourceService.deleteRoleResourceListByRoleId(roleId); } @Override @@ -319,11 +319,6 @@ public class SysRoleServiceImpl extends ServiceImpl impl } - @Override - public void deleteRoleDataScopeListByOrgIdList(Set organizationIds) { - sysRoleDataScopeService.deleteRoleDataScopeListByOrgIdList(organizationIds); - } - @Override public List getRolesByIds(List roleIds) {