From 8409db60232a4cbaf83c5cb17caf3c3f3eb61980 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 11 Sep 2023 16:12:37 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E6=B8=85=E6=B4=97=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tyr-server/pom.xml | 4 + .../server/repository/entity/SaasRole.java | 36 +++++ .../src/main/java/job/OMSRoleJobHandler.java | 133 ++++++++++++++++++ 3 files changed, 173 insertions(+) create mode 100644 tyr-server/src/main/java/job/OMSRoleJobHandler.java diff --git a/tyr-server/pom.xml b/tyr-server/pom.xml index 4ed2013e..b75af331 100644 --- a/tyr-server/pom.xml +++ b/tyr-server/pom.xml @@ -70,6 +70,10 @@ cn.axzo.basics basics-common + + com.xuxueli + xxl-job-core + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java index 4814caf2..b3b5c262 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java @@ -37,6 +37,42 @@ public class SaasRole extends BaseEntity { */ private String roleType; + private Long workspaceId; + + private Integer workspaceType; + + private Long ownerOuId; + + /** + * 废弃 20230911 + */ + private Integer fitOuTypeBit; + + /** + * 废弃 20230911 + */ + private Integer fitOuNodeTypeBit; + + /** + * 废弃 20230911 + */ + private Long positionTemplateId; + + /** + * 废弃 20230911 + */ + private Long projectTeamManageRoleResourceId; + + /** + * 废弃 20230911 + */ + private Long fromPreRoleId; + + /** + * 废弃 20230911 + */ + private String jobCode; + /** * 创建者 */ diff --git a/tyr-server/src/main/java/job/OMSRoleJobHandler.java b/tyr-server/src/main/java/job/OMSRoleJobHandler.java new file mode 100644 index 00000000..f823f561 --- /dev/null +++ b/tyr-server/src/main/java/job/OMSRoleJobHandler.java @@ -0,0 +1,133 @@ +package job; + +import java.util.Date; + +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.model.DictTypeFiledEnum; +import cn.axzo.tyr.server.repository.entity.*; +import cn.axzo.tyr.server.repository.service.*; +import cn.axzo.tyr.server.service.RoleService; +import cn.axzo.tyr.server.service.SaasRoleGroupService; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.IJobHandler; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 成都重新推送job + * + * @author cn + * @version 1.0 + * @description + * @date 2021/9/13 11:31 + */ +@Component +@AllArgsConstructor +@Slf4j +public class OMSRoleJobHandler extends IJobHandler { + + @Autowired + SaasRoleGroupDao roleGroupDao; + @Autowired + SaasRoleDao roleDao; + @Autowired + SaasPermissionGroupDao saasPermissionGroupDao; + @Autowired + SaasFeatureDao featureDao; + @Autowired + SaasRoleGroupRelationDao roleGroupRelationDao; + @Autowired + SaasRoleUserRelationDao roleUserRelationDao; + @Autowired + SaasPgroupRoleRelationDao pgroupRoleRelationDao; + @Autowired + SaasPgroupPermissionRelationDao pgroupPermissionRelationDao; + + /** + * 清洗OMS角色相关数据(注:先通过SQL检查和清除脏数据,要不然无法保证各个实体的关联关系) + * + * @param s + * @return + * @throws Exception + */ + @Transactional // 在一个事务里面做,一起提交 + @Override + @XxlJob("chengDuSubwayLogRetry") + public ReturnT execute(String s) throws Exception { + // 创建角色分组 + SaasRoleGroup roleGroup = new SaasRoleGroup(); + roleGroup.setWorkspaceTypeCode("6"); + roleGroup.setName("管理员"); + roleGroupDao.save(roleGroup); + // 查询OMS的角色 workspaceType=6 OMS的角色 + List oldRole = roleDao.lambdaQuery().eq(SaasRole::getWorkspaceType, 6).list(); + // 重置老角色多余的字段 + oldRole.forEach(e -> { + e.setWorkspaceId(-1l); + e.setOwnerOuId(-1l); + e.setWorkspaceType(-1); + e.setFitOuTypeBit(-1); + e.setFitOuNodeTypeBit(-1); + e.setPositionTemplateId(-1l); + e.setProjectTeamManageRoleResourceId(-1l); + e.setFromPreRoleId(-1l); + e.setJobCode(""); + }); + roleDao.updateBatchById(oldRole); + // 保存角色分组关联关系 + List roleGroupRelation = oldRole.stream().map(e -> { + SaasRoleGroupRelation saasRoleGroupRelation = new SaasRoleGroupRelation(); + saasRoleGroupRelation.setRoleId(e.getId()); + saasRoleGroupRelation.setSaasRoleGroupId(roleGroup.getId()); + return saasRoleGroupRelation; + }).collect(Collectors.toList()); + roleGroupRelationDao.saveBatch(roleGroupRelation); + + // 查询角色关联的角色,打包成新的权限集 + oldRole.forEach(role -> { + List pgroupRoleRelation = pgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, role.getId()).list(); + List permissionGroup = saasPermissionGroupDao.lambdaQuery().in(BaseEntity::getId, pgroupRoleRelation.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())).list(); + List pgroupPermissionRelation = pgroupPermissionRelationDao.lambdaQuery().in(SaasPgroupPermissionRelation::getGroupId, permissionGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())).list(); + List feature = featureDao.lambdaQuery().in(BaseEntity::getId, pgroupPermissionRelation.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())).list(); + // 创建新的权限集 + SaasPermissionGroup saasPermissionGroup = new SaasPermissionGroup(); + saasPermissionGroup.setName("通用权限"); + saasPermissionGroup.setDescription(""); + saasPermissionGroup.setCreateBy(-1L); + saasPermissionGroup.setUpdateBy(-1L); + saasPermissionGroup.setType("feature"); + saasPermissionGroup.setIsCommon(1); + saasPermissionGroupDao.save(saasPermissionGroup); + // 创建新的角色权限集关联关系 + SaasPgroupRoleRelation saasPgroupRoleRelation = new SaasPgroupRoleRelation(); + saasPgroupRoleRelation.setRoleId(role.getId()); + saasPgroupRoleRelation.setGroupId(saasPermissionGroup.getId()); + saasPgroupRoleRelation.setCreateBy(-1L); + saasPgroupRoleRelation.setUpdateBy(-1L); + pgroupRoleRelationDao.save(saasPgroupRoleRelation); + // 创建新的权限集权限关联关系 + feature.forEach(e -> { + SaasPgroupPermissionRelation saasPgroupPermissionRelation = new SaasPgroupPermissionRelation(); + saasPgroupPermissionRelation.setGroupId(saasPermissionGroup.getId()); + saasPgroupPermissionRelation.setFeatureId(e.getId()); + saasPgroupPermissionRelation.setCreateBy(-1L); + saasPgroupPermissionRelation.setUpdateBy(-1L); + pgroupPermissionRelationDao.save(saasPgroupPermissionRelation); + }); + // 删除老的权限集权限关联关系 + pgroupPermissionRelation.forEach(e -> e.setIsDelete(1l)); + pgroupPermissionRelationDao.updateBatchById(pgroupPermissionRelation); + // 删除老的角色权限集关联关系 + pgroupRoleRelation.forEach(e -> e.setIsDelete(1l)); + pgroupRoleRelationDao.updateBatchById(pgroupRoleRelation); + }); + return ReturnT.SUCCESS; + } +} From 4633c44cc677e07b5cdb74bf8552bd7bd277be34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 11 Sep 2023 16:36:10 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=9D=83=E9=99=90=E9=9B=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tyr-server/src/main/java/job/OMSRoleJobHandler.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tyr-server/src/main/java/job/OMSRoleJobHandler.java b/tyr-server/src/main/java/job/OMSRoleJobHandler.java index f823f561..3a41b6ca 100644 --- a/tyr-server/src/main/java/job/OMSRoleJobHandler.java +++ b/tyr-server/src/main/java/job/OMSRoleJobHandler.java @@ -1,5 +1,6 @@ package job; +import java.util.ArrayList; import java.util.Date; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; @@ -91,6 +92,7 @@ public class OMSRoleJobHandler extends IJobHandler { roleGroupRelationDao.saveBatch(roleGroupRelation); // 查询角色关联的角色,打包成新的权限集 + ArrayList deletePgroup = new ArrayList<>(); oldRole.forEach(role -> { List pgroupRoleRelation = pgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, role.getId()).list(); List permissionGroup = saasPermissionGroupDao.lambdaQuery().in(BaseEntity::getId, pgroupRoleRelation.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())).list(); @@ -105,6 +107,7 @@ public class OMSRoleJobHandler extends IJobHandler { saasPermissionGroup.setType("feature"); saasPermissionGroup.setIsCommon(1); saasPermissionGroupDao.save(saasPermissionGroup); + deletePgroup.addAll(permissionGroup); // 创建新的角色权限集关联关系 SaasPgroupRoleRelation saasPgroupRoleRelation = new SaasPgroupRoleRelation(); saasPgroupRoleRelation.setRoleId(role.getId()); @@ -122,12 +125,15 @@ public class OMSRoleJobHandler extends IJobHandler { pgroupPermissionRelationDao.save(saasPgroupPermissionRelation); }); // 删除老的权限集权限关联关系 - pgroupPermissionRelation.forEach(e -> e.setIsDelete(1l)); + pgroupPermissionRelation.forEach(e -> e.setIsDelete(e.getId())); pgroupPermissionRelationDao.updateBatchById(pgroupPermissionRelation); // 删除老的角色权限集关联关系 - pgroupRoleRelation.forEach(e -> e.setIsDelete(1l)); + pgroupRoleRelation.forEach(e -> e.setIsDelete(e.getId())); pgroupRoleRelationDao.updateBatchById(pgroupRoleRelation); }); + // 删除权限集 + deletePgroup.forEach(e -> e.setIsDelete(e.getId())); + saasPermissionGroupDao.updateBatchById(deletePgroup); return ReturnT.SUCCESS; } } From 25b309a1a68a050df0ff662e6b95fad293dbe16a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 11 Sep 2023 17:52:47 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E9=AA=8C=E8=AF=81=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=B8=85=E6=B4=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/server/TyrApplication.java | 48 ++++++++++++------- .../tyr/server}/job/OMSRoleJobHandler.java | 39 +++++++++++---- 2 files changed, 61 insertions(+), 26 deletions(-) rename tyr-server/src/main/java/{ => cn/axzo/tyr/server}/job/OMSRoleJobHandler.java (80%) 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 0609197b..2b251373 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,11 +1,12 @@ package cn.axzo.tyr.server; +import cn.hutool.extra.spring.SpringUtil; import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; +import cn.axzo.tyr.server.job.OMSRoleJobHandler; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; -import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.Environment; import org.springframework.scheduling.annotation.EnableAsync; @@ -21,22 +22,33 @@ public class TyrApplication { ConfigurableApplicationContext run = SpringApplication.run(TyrApplication.class, args); Environment env = run.getEnvironment(); log.info( - "--------------------------------------------------------------------------------------------------------------------\n" + - "Application 【{}】 is running on 【{}】 environment!\n" + - "Api Local: \thttp://127.0.0.1:{}\n" + - "Mysql: \t{}\t username:{}\n" + - "Redis: \t{}:{}\t database:{}\n" + - "RabbitMQ: \t{}\t username:{}", - env.getProperty("spring.application.name"), - env.getProperty("spring.profiles.active"), - env.getProperty("server.port"), - env.getProperty("spring.datasource.url"), - env.getProperty("spring.datasource.username"), - env.getProperty("spring.redis.host"), - env.getProperty("spring.redis.port"), - env.getProperty("spring.redis.database"), - env.getProperty("spring.rabbitmq.addresses"), - env.getProperty("spring.rabbitmq.username") + - "\n----------------------------------------------------------"); + "--------------------------------------------------------------------------------------------------------------------\n" + + "Application 【{}】 is running on 【{}】 environment!\n" + + "Api Local: \thttp://127.0.0.1:{}\n" + + "Mysql: \t{}\t username:{}\n" + + "Redis: \t{}:{}\t database:{}\n" + + "RabbitMQ: \t{}\t username:{}", + env.getProperty("spring.application.name"), + env.getProperty("spring.profiles.active"), + env.getProperty("server.port"), + env.getProperty("spring.datasource.url"), + env.getProperty("spring.datasource.username"), + env.getProperty("spring.redis.host"), + env.getProperty("spring.redis.port"), + env.getProperty("spring.redis.database"), + env.getProperty("spring.rabbitmq.addresses"), + env.getProperty("spring.rabbitmq.username") + + "\n----------------------------------------------------------"); + +// try { +// test(); +// } catch (Exception e) { +// e.printStackTrace(); +// } } + +// public static void test() throws Exception { +// OMSRoleJobHandler executor = SpringUtil.getBean(OMSRoleJobHandler.class); +// executor.execute(null); +// } } diff --git a/tyr-server/src/main/java/job/OMSRoleJobHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java similarity index 80% rename from tyr-server/src/main/java/job/OMSRoleJobHandler.java rename to tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java index 3a41b6ca..fb33d70b 100644 --- a/tyr-server/src/main/java/job/OMSRoleJobHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java @@ -1,19 +1,16 @@ -package job; +package cn.axzo.tyr.server.job; import java.util.ArrayList; -import java.util.Date; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; -import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.server.repository.entity.*; import cn.axzo.tyr.server.repository.service.*; -import cn.axzo.tyr.server.service.RoleService; -import cn.axzo.tyr.server.service.SaasRoleGroupService; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.IJobHandler; import com.xxl.job.core.handler.annotation.XxlJob; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -60,7 +57,7 @@ public class OMSRoleJobHandler extends IJobHandler { */ @Transactional // 在一个事务里面做,一起提交 @Override - @XxlJob("chengDuSubwayLogRetry") + @XxlJob("OMSRoleJobHandler") public ReturnT execute(String s) throws Exception { // 创建角色分组 SaasRoleGroup roleGroup = new SaasRoleGroup(); @@ -68,7 +65,10 @@ public class OMSRoleJobHandler extends IJobHandler { roleGroup.setName("管理员"); roleGroupDao.save(roleGroup); // 查询OMS的角色 workspaceType=6 OMS的角色 - List oldRole = roleDao.lambdaQuery().eq(SaasRole::getWorkspaceType, 6).list(); + List oldRole = roleDao.lambdaQuery() + .eq(SaasRole::getWorkspaceType, 6) + .notIn(SaasRole::getRoleType,"super_admin") + .list(); // 重置老角色多余的字段 oldRole.forEach(e -> { e.setWorkspaceId(-1l); @@ -90,14 +90,37 @@ public class OMSRoleJobHandler extends IJobHandler { return saasRoleGroupRelation; }).collect(Collectors.toList()); roleGroupRelationDao.saveBatch(roleGroupRelation); - // 查询角色关联的角色,打包成新的权限集 ArrayList deletePgroup = new ArrayList<>(); oldRole.forEach(role -> { List pgroupRoleRelation = pgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, role.getId()).list(); + if (CollectionUtils.isEmpty(pgroupRoleRelation)) { + return; + } List permissionGroup = saasPermissionGroupDao.lambdaQuery().in(BaseEntity::getId, pgroupRoleRelation.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())).list(); + if (CollectionUtils.isEmpty(permissionGroup)) { + return; + } List pgroupPermissionRelation = pgroupPermissionRelationDao.lambdaQuery().in(SaasPgroupPermissionRelation::getGroupId, permissionGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())).list(); + if (CollectionUtils.isEmpty(pgroupPermissionRelation)) { + // 如果没查到权限则表示当前权限集是无意义的,删掉 + permissionGroup.forEach(e -> e.setIsDelete(e.getId())); + saasPermissionGroupDao.updateBatchById(permissionGroup); + // 删除角色权限集关联关系 + pgroupRoleRelation.forEach(e -> e.setIsDelete(e.getId())); + pgroupRoleRelationDao.updateBatchById(pgroupRoleRelation); + return; + } List feature = featureDao.lambdaQuery().in(BaseEntity::getId, pgroupPermissionRelation.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())).list(); + if (CollectionUtils.isEmpty(feature)) { + // 如果没查到权限则表示当前权限集是无意义的,删掉 + permissionGroup.forEach(e -> e.setIsDelete(e.getId())); + saasPermissionGroupDao.updateBatchById(permissionGroup); + // 删除角色权限集关联关系 + pgroupRoleRelation.forEach(e -> e.setIsDelete(e.getId())); + pgroupRoleRelationDao.updateBatchById(pgroupRoleRelation); + return; + } // 创建新的权限集 SaasPermissionGroup saasPermissionGroup = new SaasPermissionGroup(); saasPermissionGroup.setName("通用权限"); From f4e4c0fdcfb8e53ec4231b39390b8e19d483ca5c Mon Sep 17 00:00:00 2001 From: yangsong Date: Mon, 11 Sep 2023 18:17:52 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E8=AF=A6=E6=83=85=EF=BC=8C=E5=88=86=E7=BB=84=E8=A7=92=E8=89=B2?= =?UTF-8?q?id=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/feign/SaasRoleApi.java | 3 +- .../tyr/client/feign/SaasRoleGroupApi.java | 2 +- .../model/enums/PermissionGroupType.java | 29 +++++++++++++++ .../client/model/enums/RoleGroupScope.java | 29 +++++++++++++++ .../model/req/QuerySaasRoleGroupReq.java | 5 ++- .../client/model/req/QuerySaasRoleReq.java | 2 ++ .../controller/role/SaasRoleController.java | 11 +++++- .../server/service/impl/RoleServiceImpl.java | 8 ++--- .../impl/SaasRoleGroupServiceImpl.java | 35 ++++++++++++++----- 9 files changed, 107 insertions(+), 17 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionGroupType.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/RoleGroupScope.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java index 51314ede..e72b2b23 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; +import javax.validation.constraints.NotNull; import java.util.List; import java.util.Map; @@ -31,7 +32,7 @@ public interface SaasRoleApi { * 根据id查询详情 */ @PostMapping("/api/saasRole/getById") - ApiResult getById(@RequestParam(required = true) Long id); + ApiResult getById(@RequestParam(required = true) @NotNull Long id); /** * 获取角色列表 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java index 174cb817..7f2886f4 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java @@ -2,8 +2,8 @@ package cn.axzo.tyr.client.feign; import cn.axzo.framework.domain.web.result.ApiListResult; import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; +import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionGroupType.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionGroupType.java new file mode 100644 index 00000000..6a92fd64 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionGroupType.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +@Getter +@AllArgsConstructor +public enum PermissionGroupType { + COMMON(1, "通用"), + Special (0, "例外"), + ; + + private Integer code; + private String desc; + + private static final Map MAPPING = new HashMap<>(); + static { + for (PermissionGroupType type : PermissionGroupType.values()) { + MAPPING.put(type.code, type); + } + } + + public static PermissionGroupType apply(Integer code) { + return code == null ? null :MAPPING.get(code); + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/RoleGroupScope.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/RoleGroupScope.java new file mode 100644 index 00000000..ad610bf1 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/RoleGroupScope.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +@Getter +@AllArgsConstructor +public enum RoleGroupScope { + ALL(1, "全部"), + SPECIFY_ENTERPRISE_TYPE(2, "指定企业类型"), + ; + + private Integer code; + private String desc; + + private static final Map MAPPING = new HashMap<>(); + static { + for (RoleGroupScope type : RoleGroupScope.values()) { + MAPPING.put(type.code, type); + } + } + + public static RoleGroupScope apply(Integer code) { + return code == null ? null :MAPPING.get(code); + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java index 22b56ae0..a9fdbcde 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java @@ -34,5 +34,8 @@ public class QuerySaasRoleGroupReq { * 单位类型字典code */ private List ouTypeCode; - + /** + * 被那些角色使用到的分组 + */ + private List roleIds; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java index 5438c865..2527491b 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java @@ -37,4 +37,6 @@ public class QuerySaasRoleReq { * 分组id */ private List sassRoleGroupIds; + + private Integer isCommon; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index e030d5d9..79f018e9 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -1,13 +1,17 @@ package cn.axzo.tyr.server.controller.role; +import cn.axzo.framework.domain.web.BizException; +import cn.axzo.framework.domain.web.code.BaseCode; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasRoleApi; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.server.service.RoleService; +import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; @@ -36,7 +40,12 @@ public class SaasRoleController implements SaasRoleApi { @Override public ApiResult getById(Long id) { - return null; + QuerySaasRoleReq query = QuerySaasRoleReq.builder().ids(Lists.newArrayList(id)).build(); + List saasRoles = roleService.query(query); + if (CollectionUtils.isNotEmpty(saasRoles)) { + return ApiResult.ok(saasRoles.get(0)); + } + throw new BizException(BaseCode.BAD_REQUEST, "未查询到角色"); } @Override 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 40a33130..4c0ff699 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 @@ -55,7 +55,7 @@ public class RoleServiceImpl implements RoleService { if (CollectionUtils.isEmpty(roleIds)) { return new ArrayList<>(); } - return getByIds(roleIds); + return getByIds(roleIds, null); } /** @@ -63,7 +63,7 @@ public class RoleServiceImpl implements RoleService { * * @return */ - public List getByIds(List roleIds) { + public List getByIds(List roleIds, Integer isCommon) { if (CollectionUtils.isEmpty(roleIds)) { return new ArrayList<>(); } @@ -78,7 +78,7 @@ public class RoleServiceImpl implements RoleService { // 转map pgrouRelationMap = saasPgroupRoleRelations.stream().collect(Collectors.groupingBy(SaasPgroupRoleRelation::getRoleId)); // 查询权限集 - pGroupMap = permissionGroupService.query(QuerySaasPermissionGroupReq.builder() + pGroupMap = permissionGroupService.query(QuerySaasPermissionGroupReq.builder().isCommon(isCommon) .ids(saasPgroupRoleRelations.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())) .build()) // 转map @@ -141,7 +141,7 @@ public class RoleServiceImpl implements RoleService { .eq(StringUtils.isNotBlank(req.getRoleType()), SaasRole::getRoleType, req.getRoleType()) .orderByDesc(BaseEntity::getId) .list(); - return getByIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList())); + return getByIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList()), req.getIsCommon()); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java index 7a76af4f..d7dfa8c2 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java @@ -30,21 +30,38 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { @Override public List getList(QuerySaasRoleGroupReq req) { + if (CollectionUtils.isNotEmpty(req.getRoleIds())) { + List saasRoleGroupRelations = saasRoleGroupRelationDao.lambdaQuery() + .in(SaasRoleGroupRelation::getRoleId, req.getRoleIds()) + .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + List groupIds = saasRoleGroupRelations.stream().map(SaasRoleGroupRelation::getSaasRoleGroupId).distinct().collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(req.getIds())) { + req.getIds().retainAll(groupIds); + } else { + req.setIds(groupIds); + } + if (CollectionUtils.isEmpty(req.getIds())) { + return new ArrayList<>(); + } + } + List groups = saasRoleGroupDao.query(req); if (CollectionUtils.isEmpty(groups)) { return new ArrayList<>(); } - List saasRoleGroupRelations = saasRoleGroupRelationDao.lambdaQuery().in(SaasRoleGroupRelation::getSaasRoleGroupId, groups.stream().map(SaasRoleGroup::getId)) + List saasRoleGroupRelations = saasRoleGroupRelationDao.lambdaQuery() + .in(SaasRoleGroupRelation::getSaasRoleGroupId, groups.stream().map(SaasRoleGroup::getId)) .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); Map> groupRoleMap = saasRoleGroupRelations.stream().collect(Collectors.groupingBy(SaasRoleGroupRelation::getSaasRoleGroupId, Collectors.mapping(SaasRoleGroupRelation::getRoleId, Collectors.toList()))); - List results = groups.stream().map(e -> { - SaasRoleGroupVO target = BeanUtil.copyProperties(e, SaasRoleGroupVO.class); - if (StringUtils.isNotBlank(e.getOuTypeCode())) { - target.setOuTypeCode(Arrays.stream(e.getOuTypeCode().split(",")).filter(StringUtils::isNotBlank).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList())); - } - target.setRoleIds(groupRoleMap.get(e.getId())); - return target; - }).collect(Collectors.toList()); + List results = groups.stream() + .map(e -> { + SaasRoleGroupVO target = BeanUtil.copyProperties(e, SaasRoleGroupVO.class); + if (StringUtils.isNotBlank(e.getOuTypeCode())) { + target.setOuTypeCode(Arrays.stream(e.getOuTypeCode().split(",")).filter(StringUtils::isNotBlank).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList())); + } + target.setRoleIds(groupRoleMap.get(e.getId())); + return target; + }).collect(Collectors.toList()); return results; }