From 70044ff732be74c05dc35d3d9467108701dcc732 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Thu, 19 Oct 2023 15:38:09 +0800 Subject: [PATCH 1/3] =?UTF-8?q?refactor(role-query):=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=8F=82=E5=BB=BA=E5=8D=95=E4=BD=8D=E8=B5=84=E8=B4=A8=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/model/req/RoleWithUserQueryReq.java | 5 +++++ .../tyr/server/service/impl/RoleServiceImpl.java | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/RoleWithUserQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/RoleWithUserQueryReq.java index 4b24f694..535038b4 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/RoleWithUserQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/RoleWithUserQueryReq.java @@ -3,6 +3,8 @@ package cn.axzo.tyr.client.model.req; import cn.axzo.basics.common.page.PageRequest; import lombok.Data; +import java.util.List; + /** * 角色-含用户查询参数 * @@ -21,4 +23,7 @@ public class RoleWithUserQueryReq extends PageRequest { /** 工作台ID **/ private Long workspaceId; + + /** 企业工作台参建类型 **/ + private List workspaceJoinType; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index e8d87f49..5d0cf7b3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -452,13 +452,14 @@ public class RoleServiceImpl implements RoleService { @Override public PageResp queryRoleWithUser(RoleWithUserQueryReq req) { - //按role进行分页查询 + page2Default(req); + //按role进行分页查询 - Page rolePage = saasRoleDao .page(new Page<>(req.getPage(), req.getPageSize()), new LambdaQueryWrapper() .eq(SaasRole::getOwnerOuId, req.getOuId()) .eq(SaasRole::getWorkspaceId, req.getWorkspaceId()) - .ne(SaasRole::getRoleType, RoleTypeEnum.SUPER_ADMIN.getValue())); + .eq(SaasRole::getRoleType, RoleTypeEnum.COMMON.getValue())); if (CollectionUtil.isEmpty(rolePage.getRecords())) { return PageResp.list(req.getPage(), req.getPageSize(), 0L, Collections.emptyList()); } @@ -493,6 +494,15 @@ public class RoleServiceImpl implements RoleService { return PageResp.list(req.getPage(), req.getPageSize(), rolePage.getTotal(), resultData); } + private void page2Default(RoleWithUserQueryReq req) { + if (req.getPage() == null) { + req.setPage(1L); + } + if (req.getPageSize() == null) { + req.setPageSize(10L); + } + } + @Override public List queryRoleByRoleTypes(QueryByIdentityIdTypeReq req, List roleTypes) { List roleIds = roleUserRelationDao.query(req.getIdentityId(), req.getIdentityType(), From 707e748a646e0ba435d5df0508939969d2a6e6e1 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Thu, 19 Oct 2023 16:26:39 +0800 Subject: [PATCH 2/3] =?UTF-8?q?refactor(role-query):=20=E6=94=B9=E5=8F=98?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/model/req/RoleWithUserQueryReq.java | 2 +- .../tyr/server/repository/dao/SaasRoleDao.java | 7 +++++++ .../repository/mapper/SaasRoleMapper.java | 4 ++++ .../server/service/impl/RoleServiceImpl.java | 7 +------ .../main/resources/mapper/SaasRoleMapper.xml | 16 ++++++++++++++++ .../tyr/server/permission/RoleUserTest.java | 18 ++++++++++++++++++ 6 files changed, 47 insertions(+), 7 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/RoleWithUserQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/RoleWithUserQueryReq.java index 535038b4..af943c4c 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/RoleWithUserQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/RoleWithUserQueryReq.java @@ -25,5 +25,5 @@ public class RoleWithUserQueryReq extends PageRequest { private Long workspaceId; /** 企业工作台参建类型 **/ - private List workspaceJoinType; + private Integer workspaceJoinType; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleDao.java index bd044f10..95188f8d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleDao.java @@ -4,10 +4,13 @@ import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.client.model.enums.IdentityType; +import cn.axzo.tyr.client.model.req.RoleWithUserQueryReq; import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleWithUser; import cn.axzo.tyr.server.repository.mapper.SaasRoleMapper; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Repository; @@ -90,5 +93,9 @@ public class SaasRoleDao extends ServiceImpl { .eq(SaasRole::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); } + public Page pageQueryForOUWorkspace(RoleWithUserQueryReq req) { + IPage page = new Page<>(req.getPage(), req.getPageSize()); + return this.baseMapper.pageQueryForOUWorkspace(page, req.getOuId(), req.getWorkspaceId(), req.getWorkspaceJoinType()); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleMapper.java index 46c3cf69..0fe6cad2 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleMapper.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleMapper.java @@ -4,6 +4,8 @@ import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleWithUser; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -17,5 +19,7 @@ public interface SaasRoleMapper extends BaseMapper { List listSuperAdminByWorkspace(List workspaceIds); List listRoleUserByPermissionGroup(List permissionGroupIds, Set workspaceIds); + + Page pageQueryForOUWorkspace(IPage page, Long ouId, Long workspaceId, Integer workspaceJoinType); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 5d0cf7b3..062c9a0d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -454,12 +454,7 @@ public class RoleServiceImpl implements RoleService { public PageResp queryRoleWithUser(RoleWithUserQueryReq req) { page2Default(req); //按role进行分页查询 - - Page rolePage = saasRoleDao - .page(new Page<>(req.getPage(), req.getPageSize()), - new LambdaQueryWrapper() - .eq(SaasRole::getOwnerOuId, req.getOuId()) - .eq(SaasRole::getWorkspaceId, req.getWorkspaceId()) - .eq(SaasRole::getRoleType, RoleTypeEnum.COMMON.getValue())); + Page rolePage = saasRoleDao.pageQueryForOUWorkspace(req); if (CollectionUtil.isEmpty(rolePage.getRecords())) { return PageResp.list(req.getPage(), req.getPageSize(), 0L, Collections.emptyList()); } diff --git a/tyr-server/src/main/resources/mapper/SaasRoleMapper.xml b/tyr-server/src/main/resources/mapper/SaasRoleMapper.xml index d6f77e26..8558d3f2 100644 --- a/tyr-server/src/main/resources/mapper/SaasRoleMapper.xml +++ b/tyr-server/src/main/resources/mapper/SaasRoleMapper.xml @@ -90,4 +90,20 @@ + + \ No newline at end of file diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/RoleUserTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/RoleUserTest.java index 01c6ccda..a5a7183b 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/RoleUserTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/RoleUserTest.java @@ -10,8 +10,11 @@ import cn.axzo.tyr.client.model.req.RoleWithUserQueryReq; import cn.axzo.tyr.client.model.res.RoleWithUserRes; import cn.axzo.tyr.server.controller.role.SaasRoleController; import cn.axzo.tyr.server.repository.dao.SaasFeatureDao; +import cn.axzo.tyr.server.repository.dao.SaasRoleDao; import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao; +import cn.axzo.tyr.server.repository.entity.SaasRole; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -36,6 +39,9 @@ public class RoleUserTest { @Autowired private SaasRoleController controller; + @Autowired + private SaasRoleDao saasRoleDao; + @Test public void testList() { saasRoleUserRelationDao.deleteByUser(BaseWorkspaceModel.builder() @@ -59,5 +65,17 @@ public class RoleUserTest { System.out.println(JSON.toJSONString(result)); } + @Test + public void testPageQueryForOUWorkspace() { + RoleWithUserQueryReq req = new RoleWithUserQueryReq(); + req.setOuId(5195L); + req.setWorkspaceId(371L); + req.setWorkspaceJoinType(2); + req.setPage(1L); + req.setPageSize(20L); + Page page = saasRoleDao.pageQueryForOUWorkspace(req); + System.out.println(JSON.toJSONString(page)); + } + } From 89103ca983a4fc26da81aae9b7defb51265fcccf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Thu, 19 Oct 2023 16:58:54 +0800 Subject: [PATCH 3/3] =?UTF-8?q?dev=E7=8E=AF=E5=A2=83CMS=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E6=B8=85=E6=B4=97=E4=B8=80=E8=BD=AE=E6=89=A7=E8=A1=8C=E5=AE=8C?= =?UTF-8?q?=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/server/TyrApplication.java | 19 ++-- .../tyr/server/job/CMSRoleJobHandler.java | 94 ++++++++++++------- 2 files changed, 71 insertions(+), 42 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/TyrApplication.java b/tyr-server/src/main/java/cn/axzo/tyr/server/TyrApplication.java index 2b251373..7b49761e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/TyrApplication.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/TyrApplication.java @@ -1,5 +1,6 @@ package cn.axzo.tyr.server; +import cn.axzo.tyr.server.job.CMSRoleJobHandler; import cn.hutool.extra.spring.SpringUtil; import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; @@ -40,15 +41,15 @@ public class TyrApplication { env.getProperty("spring.rabbitmq.username") + "\n----------------------------------------------------------"); -// try { -// test(); -// } catch (Exception e) { -// e.printStackTrace(); -// } + try { + test(); + } catch (Exception e) { + e.printStackTrace(); + } } -// public static void test() throws Exception { -// OMSRoleJobHandler executor = SpringUtil.getBean(OMSRoleJobHandler.class); -// executor.execute(null); -// } + public static void test() throws Exception { + CMSRoleJobHandler executor = SpringUtil.getBean(CMSRoleJobHandler.class); + executor.execute(null); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/job/CMSRoleJobHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/job/CMSRoleJobHandler.java index 43ef3a9d..5adb1a1a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/job/CMSRoleJobHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/job/CMSRoleJobHandler.java @@ -72,6 +72,10 @@ public class CMSRoleJobHandler extends IJobHandler { @Autowired SaasPreGroupRoleRelationDao saasPreGroupRoleRelationDao; + private Set deleteSaasPermissionGroupId; + private Set deletePgroupPermissionRelationId; + private Set deleteRoleId; + /** * 清洗CMS角色相关数据(注:先通过SQL检查和清除脏数据,要不然无法保证各个实体的关联关系) * @@ -83,9 +87,14 @@ public class CMSRoleJobHandler extends IJobHandler { @Override @XxlJob("CMSRoleJobHandler") public ReturnT execute(String s) throws Exception { + // 每次执行都初始化待删除列表 + deleteSaasPermissionGroupId = new HashSet<>(); + deletePgroupPermissionRelationId = new HashSet<>(); + deleteRoleId = new HashSet<>(); log.info("CMSRoleJobHandler start"); buildProjectRole(saasPreTempalteIdOfProject, "2"); buildOuRole(saasPreTempalteIdOfOu, "1"); + delete(deleteSaasPermissionGroupId,deletePgroupPermissionRelationId,deleteRoleId); log.info("CMSRoleJobHandler end"); return ReturnT.SUCCESS; } @@ -114,7 +123,7 @@ public class CMSRoleJobHandler extends IJobHandler { // 根据模板id查询角色列表 List role = saasPreRoleDao.lambdaQuery() .in(SaasPreRole::getTemplateId, templateId) - .eq(SaasPreRole::getFitOuTypeBit, Arrays.asList(64)) + .eq(SaasPreRole::getFitOuTypeBit, 64) .eq(BaseEntity::getIsDelete,0) .list(); saveRole(role,workspaceTypCode,"7","企业通用"); @@ -141,23 +150,32 @@ public class CMSRoleJobHandler extends IJobHandler { // 根据角色id查询角色权限集关联关系 List pgroupRoleRelation = saasPreGroupRoleRelationDao.lambdaQuery() .eq(SaasPreGroupRoleRelation::getPreRoleId, preRole.getId()) - .eq(BaseEntity::getIsDelete, 0) .list(); if (CollectionUtils.isEmpty(pgroupRoleRelation)) { + log.info("未查询到preRole 对应的权限集关联关系 preRole:{}",JSONUtil.toJsonStr(preRole)); return; } List oldPermissionGroup = saasPermissionGroupDao.lambdaQuery() .in(BaseEntity::getId, pgroupRoleRelation.stream().map(SaasPreGroupRoleRelation::getGroupId).collect(Collectors.toList())) - .eq(BaseEntity::getIsDelete, 0) .list(); + if (CollectionUtils.isEmpty(oldPermissionGroup)) { + log.info("未查询到preRole 对应的权限集 preRole:{}",JSONUtil.toJsonStr(preRole)); + return; + } List oldPgroupPermissionRelation = pgroupPermissionRelationDao.lambdaQuery() .in(SaasPgroupPermissionRelation::getGroupId, oldPermissionGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())) - .eq(BaseEntity::getIsDelete, 0) .list(); + if (CollectionUtils.isEmpty(oldPgroupPermissionRelation)) { + log.info("未查询到权限集对应的权限点 oldPermissionGroup:{}",JSONUtil.toJsonStr(oldPermissionGroup)); + return; + } List feature = featureDao.lambdaQuery() .in(BaseEntity::getId, oldPgroupPermissionRelation.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())) - .eq(BaseEntity::getIsDelete, 0) .list(); + if (CollectionUtils.isEmpty(feature)) { + log.info("未查询到权限点 oldPgroupPermissionRelation:{}",JSONUtil.toJsonStr(oldPgroupPermissionRelation)); + return; + } // 创建新的权限集 SaasPermissionGroup saasPermissionGroup = new SaasPermissionGroup(); @@ -169,14 +187,15 @@ public class CMSRoleJobHandler extends IJobHandler { saasPermissionGroup.setIsCommon(1); saasPermissionGroupDao.save(saasPermissionGroup); // 创建新的权限集权限关联关系 - feature.forEach(e -> { + List saasPgroupPermissionRelationList = feature.stream().map(e -> { SaasPgroupPermissionRelation saasPgroupPermissionRelation = new SaasPgroupPermissionRelation(); saasPgroupPermissionRelation.setGroupId(saasPermissionGroup.getId()); saasPgroupPermissionRelation.setFeatureId(e.getId()); saasPgroupPermissionRelation.setCreateBy(-1L); saasPgroupPermissionRelation.setUpdateBy(-1L); - pgroupPermissionRelationDao.save(saasPgroupPermissionRelation); - }); + return saasPgroupPermissionRelation; + }).collect(Collectors.toList()); + pgroupPermissionRelationDao.saveBatch(saasPgroupPermissionRelationList); // 创建角色:根据预设角色创建新的角色 SaasRole newRole = new SaasRole(); @@ -208,7 +227,7 @@ public class CMSRoleJobHandler extends IJobHandler { // SELECT * FROM `saas_pgroup_role_relation` WHERE `role_id` in ( // SELECT id FROM saas_role WHERE is_delete=0 and workspace_id != -1 and from_pre_role_id = 0 and role_type!='super_admin' and `NAME` not like '%代班长%' and `NAME` not like '%带班长%') List list = roleDao.lambdaQuery() - .eq(SaasRole::getFromPreRoleId, preRole) + .eq(SaasRole::getFromPreRoleId, preRole.getId()) .list(); if (CollectionUtils.isEmpty(list)) { log.info("未找到preRole下发的role preRole:{}", JSONUtil.toJsonStr(preRole)); @@ -221,33 +240,42 @@ public class CMSRoleJobHandler extends IJobHandler { .set(SaasRoleUserRelation::getRoleId,newRole.getId()) .update(); - // 清除老的权限集 - oldPermissionGroup.forEach(e ->{ - saasPermissionGroupDao.lambdaUpdate() - .eq(BaseEntity::getId, e.getId()) - .set(BaseEntity::getIsDelete, e.getId()) - .update(); - }); - // 清除老的权限集权限关联关系 - oldPgroupPermissionRelation.forEach(e ->{ - pgroupPermissionRelationDao.lambdaUpdate() - .eq(BaseEntity::getId, e.getId()) - .set(BaseEntity::getIsDelete, e.getId()) - .update(); - }); - // 清除老的角色 - roleDao.lambdaUpdate() - .in(BaseEntity::getId,oldRoleId) - .set(BaseEntity::getIsDelete,1) - .update(); - // 清除老的角色和权限集关联关系 - roleGroupRelationDao.lambdaUpdate() - .in(SaasRoleGroupRelation::getRoleId,oldRoleId) - .set(BaseEntity::getIsDelete,1) - .update(); + // 补充待删除数据 + deleteRoleId.addAll(list.stream().map(BaseEntity::getId).collect(Collectors.toSet())); + deleteSaasPermissionGroupId.addAll(oldPermissionGroup.stream().map(BaseEntity::getId).collect(Collectors.toSet())); + deletePgroupPermissionRelationId.addAll(oldPgroupPermissionRelation.stream().map(BaseEntity::getId).collect(Collectors.toSet())); }); } + /** + * 删除历史数据 + * @param deleteSaasPermissionGroupId + * @param deletePgroupPermissionRelationId + * @param deleteRoleId + */ + private void delete(Set deleteSaasPermissionGroupId, Set deletePgroupPermissionRelationId, Set deleteRoleId) { + // 清除老的权限集 + saasPermissionGroupDao.lambdaUpdate() + .in(BaseEntity::getId,deleteSaasPermissionGroupId) + .set(BaseEntity::getIsDelete,1) + .update(); + // 清除老的权限集权限关联关系 + pgroupPermissionRelationDao.lambdaUpdate() + .in(BaseEntity::getId,deletePgroupPermissionRelationId) + .set(BaseEntity::getIsDelete,1) + .update(); + // 清除老的角色 + roleDao.lambdaUpdate() + .in(BaseEntity::getId,deleteRoleId) + .set(BaseEntity::getIsDelete,1) + .update(); + // 清除老的角色和权限集关联关系 + pgroupRoleRelationDao.lambdaUpdate() + .in(SaasPgroupRoleRelation::getRoleId,deleteRoleId) + .set(BaseEntity::getIsDelete,1) + .update(); + } + private Integer tranceOuTypeBit(Long ouTypeBit) { Integer ouType; if (ouTypeBit == 1) {