From 965f421a4d51835e44658cfc9f2bc100861396c9 Mon Sep 17 00:00:00 2001 From: lilong Date: Tue, 12 Nov 2024 11:31:44 +0800 Subject: [PATCH 1/9] =?UTF-8?q?feat:=20(feature/REQ-3057)=20=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0roleTypes=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../req/ListRoleUserRelationParam.java | 4 ++ .../impl/SaasRoleUserRelationServiceImpl.java | 8 ++- .../SaasRoleUserRelationServiceImplTest.java | 62 +++++++++++++++++++ .../SaasRoleUserRelationServiceImplTest.sql | 10 +++ 4 files changed, 82 insertions(+), 2 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/ListRoleUserRelationParam.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/ListRoleUserRelationParam.java index d3bd2776..8175fcb8 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/ListRoleUserRelationParam.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/ListRoleUserRelationParam.java @@ -3,6 +3,7 @@ package cn.axzo.tyr.client.model.roleuser.req; import cn.axzo.foundation.dao.support.wrapper.CriteriaField; import cn.axzo.foundation.dao.support.wrapper.Operator; import cn.axzo.tyr.client.common.enums.FeatureResourceType; +import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.client.model.enums.IdentityType; import lombok.AllArgsConstructor; import lombok.Builder; @@ -137,6 +138,9 @@ public class ListRoleUserRelationParam { @CriteriaField(ignore = true) private List batchPersons; + @CriteriaField(ignore = true) + private Set roleTypes; + @Data @Builder @NoArgsConstructor diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java index d2effa39..7924cf90 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java @@ -129,7 +129,8 @@ public class SaasRoleUserRelationServiceImpl extends ServiceImpl roleIds = resolveRoleIds(param); - if (!CollectionUtils.isEmpty(param.getRoleCodes()) && CollectionUtils.isEmpty(roleIds)) { + if ((!CollectionUtils.isEmpty(param.getRoleCodes()) || !CollectionUtils.isEmpty(param.getRoleTypes())) + && CollectionUtils.isEmpty(roleIds)) { return param.toEmpty(); } wrapper.in(!CollectionUtils.isEmpty(roleIds), "role_id", roleIds); @@ -202,13 +203,16 @@ public class SaasRoleUserRelationServiceImpl extends ServiceImpl resolveRoleIds(PageRoleUserRelationParam param) { - if (CollectionUtils.isEmpty(param.getRoleCodes())) { + if (CollectionUtils.isEmpty(param.getRoleCodes()) && CollectionUtils.isEmpty(param.getRoleTypes())) { return Optional.ofNullable(param.getRoleIds()) .map(Sets::newHashSet) .orElseGet(Sets::newHashSet); } ListRoleReq listSaasRoleParam = ListRoleReq.builder() .roleCodes(param.getRoleCodes()) + .roleTypes(Optional.ofNullable(param.getRoleTypes()) + .map(e -> e.stream().map(RoleTypeEnum::getValue).collect(Collectors.toList())) + .orElse(null)) .build(); Set roleIds = roleService.list(listSaasRoleParam).stream() .map(SaasRoleRes::getId) diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImplTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImplTest.java index ff4bb510..89e3bc3e 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImplTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImplTest.java @@ -1,10 +1,13 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.foundation.exception.BusinessException; +import cn.axzo.foundation.page.PageResp; import cn.axzo.tyr.base.BaseTest; import cn.axzo.tyr.base.MysqlDataLoader; +import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserV2DTO; import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam; +import cn.axzo.tyr.client.model.roleuser.req.PageRoleUserRelationParam; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.service.SaasRoleUserRelationService; import com.google.common.collect.Lists; @@ -56,4 +59,63 @@ class SaasRoleUserRelationServiceImplTest extends BaseTest { .build()); Assertions.assertEquals(saasRoleUserRelationService.listV2(ListRoleUserRelationParam.builder().build()).size(), 2); } + + @Test + void list() { + + ListRoleUserRelationParam list = ListRoleUserRelationParam.builder() + .roleCodes(Sets.newHashSet("cms:mafb_business_vice_officer")) + .build(); + List result = saasRoleUserRelationService.listV2(list); + Assertions.assertEquals(result.size(), 1); + + + list = ListRoleUserRelationParam.builder() + .roleCodes(Sets.newHashSet("cms:mafb_business_vice_officer1")) + .build(); + result = saasRoleUserRelationService.listV2(list); + Assertions.assertEquals(result.size(), 0); + + list = ListRoleUserRelationParam.builder() + .roleCodes(Sets.newHashSet("cms:mafb_business_vice_officer", "cms:mafb_productivity_vice_officer")) + .build(); + result = saasRoleUserRelationService.listV2(list); + Assertions.assertEquals(result.size(), 2); + + list = ListRoleUserRelationParam.builder() + .roleTypes(Sets.newHashSet(RoleTypeEnum.ADMIN)) + .build(); + result = saasRoleUserRelationService.listV2(list); + Assertions.assertEquals(result.size(), 1); + + list = ListRoleUserRelationParam.builder() + .roleTypes(Sets.newHashSet(RoleTypeEnum.SUPER_ADMIN)) + .build(); + result = saasRoleUserRelationService.listV2(list); + Assertions.assertEquals(result.size(), 1); + + list = ListRoleUserRelationParam.builder() + .roleTypes(Sets.newHashSet(RoleTypeEnum.ADMIN, RoleTypeEnum.SUPER_ADMIN)) + .build(); + result = saasRoleUserRelationService.listV2(list); + Assertions.assertEquals(result.size(), 2); + + list = ListRoleUserRelationParam.builder() + .roleTypes(Sets.newHashSet(RoleTypeEnum.ADMIN, RoleTypeEnum.SUPER_ADMIN)) + .roleCodes(Sets.newHashSet("sdfdsf")) + .build(); + result = saasRoleUserRelationService.listV2(list); + Assertions.assertEquals(result.size(), 0); + + list = ListRoleUserRelationParam.builder() + .roleTypes(Sets.newHashSet(RoleTypeEnum.ADMIN, RoleTypeEnum.SUPER_ADMIN)) + .roleCodes(Sets.newHashSet("oms:project_manager")) + .workspaceOuPairs(Lists.newArrayList(ListRoleUserRelationParam.WorkspaceOuPair.builder() + .workspaceId(8L) + .ouId(1L) + .build())) + .build(); + result = saasRoleUserRelationService.listV2(list); + Assertions.assertEquals(result.size(), 1); + } } \ No newline at end of file diff --git a/tyr-server/src/test/resources/mysql/SaasRoleUserRelationServiceImplTest.sql b/tyr-server/src/test/resources/mysql/SaasRoleUserRelationServiceImplTest.sql index c1d5014d..75494e01 100644 --- a/tyr-server/src/test/resources/mysql/SaasRoleUserRelationServiceImplTest.sql +++ b/tyr-server/src/test/resources/mysql/SaasRoleUserRelationServiceImplTest.sql @@ -5,4 +5,14 @@ INSERT INTO saas_role_user_relation (id, identity_id, role_id, identity_type, na INSERT INTO saas_role_user_relation (id, identity_id, role_id, identity_type, natural_person_id, workspace_id, ou_id, resource_type, resource_id, is_delete, create_at, update_at, create_by, update_by, job_type) VALUES (16401, 98, 3417, 3, 2020, 6, 1, 0, 0, 0, '2021-09-16 22:09:29', '2021-09-16 22:09:29', 0, 0, 2); INSERT INTO saas_role_user_relation (id, identity_id, role_id, identity_type, natural_person_id, workspace_id, ou_id, resource_type, resource_id, is_delete, create_at, update_at, create_by, update_by, job_type) VALUES (16402, 106, 3418, 3, 3577, 12, 1, 0, 0, 0, '2021-09-16 22:09:29', '2021-09-16 22:09:29', 0, 0, 2); + +INSERT INTO saas_role (id, NAME, description, role_type, role_code, workspace_id, owner_ou_id, product_unit_type, workspace_type, is_delete, create_at, update_at, create_by, update_by, fit_ou_type_bit, fit_ou_node_type_bit, position_template_id, project_team_manage_role_resource_id, from_pre_role_id, job_code, is_display, sort, enabled) +VALUES (3415, '项目经理', '', 'super_admin', 'oms:project_manager', -1, -1, 6, 6, 0, '2023-09-19 15:22:55', '2024-08-13 10:25:25', 2003043, 2003028, 1, 65535, 0, null, 0, '', 1, 2, 1); +INSERT INTO saas_role (id, NAME, description, role_type, role_code, workspace_id, owner_ou_id, product_unit_type, workspace_type, is_delete, create_at, update_at, create_by, update_by, fit_ou_type_bit, fit_ou_node_type_bit, position_template_id, project_team_manage_role_resource_id, from_pre_role_id, job_code, is_display, sort, enabled) +VALUES (3416, '项目负责人', '', 'admin', 'cms:mafb_project_commissioner', -1, -1, 5, 2, 0, '2023-10-23 17:49:59', '2024-08-13 10:25:40', -1, 9000399985, 1, 65535, 0, null, 0, '', 1, 1, 1); +INSERT INTO saas_role (id, NAME, description, role_type, role_code, workspace_id, owner_ou_id, product_unit_type, workspace_type, is_delete, create_at, update_at, create_by, update_by, fit_ou_type_bit, fit_ou_node_type_bit, position_template_id, project_team_manage_role_resource_id, from_pre_role_id, job_code, is_display, sort, enabled) +VALUES (3417, '商务副经理', '', 'init', 'cms:mafb_business_vice_officer', -1, -1, 5, 2, 0, '2023-10-23 17:50:00', '2024-08-13 10:25:41', -1, 2006333, 1, 65535, 0, null, 0, '', 1, 2, 1); +INSERT INTO saas_role (id, NAME, description, role_type, role_code, workspace_id, owner_ou_id, product_unit_type, workspace_type, is_delete, create_at, update_at, create_by, update_by, fit_ou_type_bit, fit_ou_node_type_bit, position_template_id, project_team_manage_role_resource_id, from_pre_role_id, job_code, is_display, sort, enabled) +VALUES (3418, '生产副经理', '', 'init', 'cms:mafb_productivity_vice_officer', -1, -1, 5, 2, 0, '2023-10-23 17:50:00', '2024-08-13 10:25:41', -1, 2006333, 1, 65535, 0, null, 0, '', 1, 3, 1); + #-->SaasRoleUserRelationServiceImplTest.sql \ No newline at end of file From e0c7ac211b5e1f4126210f657ad6ee212b965847 Mon Sep 17 00:00:00 2001 From: lilong Date: Tue, 12 Nov 2024 13:37:05 +0800 Subject: [PATCH 2/9] =?UTF-8?q?feat:=20(feature/REQ-3057)=20=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=A7=92=E8=89=B2=E5=88=A0=E9=99=A4=E5=92=8C=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E6=97=B6=E5=A2=9E=E5=8A=A0mq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roleuser/RoleUserController.java | 43 +++++----- .../tyr/server/event/inner/EventTypeEnum.java | 1 + .../SaasRoleUserRelationUpsertPayload.java | 30 +++++++ .../server/service/impl/RoleUserService.java | 78 +++++++++++++++---- 4 files changed, 112 insertions(+), 40 deletions(-) create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/event/payload/SaasRoleUserRelationUpsertPayload.java diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java index ef2f9ad4..2c9e2834 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java @@ -4,6 +4,7 @@ import cn.axzo.basics.common.util.AssertUtil; import cn.axzo.foundation.page.PageResp; import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.framework.rocketmq.Event; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.client.feign.TyrSaasRoleUserApi; @@ -22,32 +23,14 @@ import cn.axzo.tyr.client.model.roleuser.req.GantOrUnGantaWorkerLeaderRoleReq; import cn.axzo.tyr.client.model.roleuser.req.GetUserAutoOwnRoleReq; import cn.axzo.tyr.client.model.roleuser.req.GetUserFeatureResourceIdsReq; import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam; +import cn.axzo.tyr.client.model.roleuser.req.PageRoleUserRelationParam; import cn.axzo.tyr.client.model.roleuser.req.PageRoleUserRelationReq; import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; import cn.axzo.tyr.client.model.roleuser.req.SuperAdminParam; import cn.axzo.tyr.client.model.roleuser.req.WorkerManagerRoleUserReq; -import cn.axzo.tyr.client.model.roleuser.req.AutoOwnRoleUserReq; -import cn.axzo.tyr.client.model.roleuser.req.CreateSuperAdminRoleParam; -import cn.axzo.tyr.client.model.roleuser.req.GantOrUnGantaWorkerLeaderRoleReq; -import cn.axzo.tyr.client.model.roleuser.req.GetUserAutoOwnRoleReq; -import cn.axzo.tyr.client.model.roleuser.req.GetUserFeatureResourceIdsReq; -import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam; -import cn.axzo.tyr.client.model.roleuser.req.PageRoleUserRelationParam; -import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; -import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; -import cn.axzo.tyr.client.model.roleuser.req.SuperAdminParam; -import cn.axzo.tyr.client.model.roleuser.req.WorkerManagerRoleUserReq; -import cn.axzo.tyr.client.model.roleuser.req.AutoOwnRoleUserReq; -import cn.axzo.tyr.client.model.roleuser.req.CreateSuperAdminRoleParam; -import cn.axzo.tyr.client.model.roleuser.req.GantOrUnGantaWorkerLeaderRoleReq; -import cn.axzo.tyr.client.model.roleuser.req.GetUserAutoOwnRoleReq; -import cn.axzo.tyr.client.model.roleuser.req.GetUserFeatureResourceIdsReq; -import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam; -import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; -import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; -import cn.axzo.tyr.client.model.roleuser.req.SuperAdminParam; -import cn.axzo.tyr.client.model.roleuser.req.WorkerManagerRoleUserReq; +import cn.axzo.tyr.server.config.MqProducer; +import cn.axzo.tyr.server.event.payload.SaasRoleUserRelationRemovePayload; import cn.axzo.tyr.server.model.PermissionCacheKey; import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; @@ -55,11 +38,10 @@ import cn.axzo.tyr.server.repository.mapper.SaasRoleUserRelationMapper; import cn.axzo.tyr.server.service.PermissionCacheService; import cn.axzo.tyr.server.service.SaasRoleUserRelationService; import cn.axzo.tyr.server.service.SaasRoleUserService; +import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Lists; -import cn.hutool.core.bean.BeanUtil; -import com.google.common.collect.Lists; import com.google.common.collect.Sets; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -72,12 +54,12 @@ import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; import java.util.Collections; import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; +import static cn.axzo.tyr.server.event.inner.EventTypeEnum.SAAS_ROLE_USER_RELATION_REMOVED; + /** * @author tanjie@axzo.cn * @date 2023/9/13 15:47 @@ -91,6 +73,8 @@ public class RoleUserController implements TyrSaasRoleUserApi { private final SaasRoleUserRelationDao saasRoleUserRelationDao; private final PermissionCacheService permissionCacheService; private final SaasRoleUserRelationMapper saasRoleUserRelationMapper; + private final MqProducer mqProducer; + private static final String TARGET_TYPE = "saasRoleUserRelationId"; @Override public ApiResult saveOrUpdate(@Valid RoleUserReq req) { @@ -240,6 +224,15 @@ public class RoleUserController implements TyrSaasRoleUserApi { .identityType(IdentityType.getIdentityType(relation.getIdentityType())) .build()); } + + Event event = Event.builder() + .targetType(TARGET_TYPE) + .eventCode(SAAS_ROLE_USER_RELATION_REMOVED.getEventCode()) + .data(SaasRoleUserRelationRemovePayload.builder() + .values(relations) + .build()) + .build(); + mqProducer.send(event); return ApiResult.ok(); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/EventTypeEnum.java b/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/EventTypeEnum.java index ab8f938b..5331efd5 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/EventTypeEnum.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/EventTypeEnum.java @@ -12,6 +12,7 @@ public enum EventTypeEnum { SAAS_FEATURE_RESOURCE_UPSERT("saas-feature-resource", "saas-feature-resource-upsert", "新菜单树更新"), PAGE_ELEMENT_FEATURE_RESOURCE_UPSERT("page-element-feature-resource", "page-element-feature-resource-upsert", "菜单-页面元素绑定关系更新"), SAAS_ROLE_USER_RELATION_REMOVED("saas-role-user-relation", "saas-role-user-relation-removed", "删除用户角色信息"), + SAAS_ROLE_USER_RELATION_UPSERT("saas-role-user-relation", "saas-role-user-relation-upsert", "更新用户角色信息"), ; EventTypeEnum(String model, String name, String desc) { diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/event/payload/SaasRoleUserRelationUpsertPayload.java b/tyr-server/src/main/java/cn/axzo/tyr/server/event/payload/SaasRoleUserRelationUpsertPayload.java new file mode 100644 index 00000000..a6ca0920 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/event/payload/SaasRoleUserRelationUpsertPayload.java @@ -0,0 +1,30 @@ +package cn.axzo.tyr.server.event.payload; + +import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserV2DTO; +import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.beans.BeanUtils; + +import java.io.Serializable; +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SaasRoleUserRelationUpsertPayload implements Serializable { + + private List oldValues; + + private List newValues; + + public static SaasRoleUserRelation from(SaasRoleUserV2DTO saasRoleUserV2DTO) { + SaasRoleUserRelation result = new SaasRoleUserRelation(); + BeanUtils.copyProperties(saasRoleUserV2DTO, result); + result.setNaturalPersonId(saasRoleUserV2DTO.getSaasRoleUser().getPersonId()); + return result; + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java index 0e6a492b..be98ed25 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java @@ -7,6 +7,7 @@ import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.basics.common.exception.ServiceException; import cn.axzo.basics.common.util.AssertUtil; import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.framework.rocketmq.Event; import cn.axzo.maokai.api.client.OrgJobApi; import cn.axzo.maokai.api.client.OrganizationalNodeUserQueryApi; import cn.axzo.maokai.api.vo.request.OrgJobListReq; @@ -18,7 +19,6 @@ import cn.axzo.pokonyan.util.KeysUtil; import cn.axzo.tyr.client.common.enums.RoleResourceTypeEnum; import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.client.model.BaseWorkspaceModel; -import cn.axzo.tyr.client.model.enums.DictWorkSpaceTypeEnum; import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.enums.WorkerLeaderRoleEnum; import cn.axzo.tyr.client.model.req.ListRoleReq; @@ -39,6 +39,8 @@ import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; import cn.axzo.tyr.client.model.roleuser.req.SuperAdminParam; import cn.axzo.tyr.client.model.roleuser.req.WorkerManagerRoleUserReq; import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; +import cn.axzo.tyr.server.config.MqProducer; +import cn.axzo.tyr.server.event.payload.SaasRoleUserRelationUpsertPayload; import cn.axzo.tyr.server.model.RoleUserInfo; import cn.axzo.tyr.server.repository.dao.RemoveRoleUserByResource; import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao; @@ -82,6 +84,9 @@ import java.util.Objects; import java.util.Set; import java.util.function.Supplier; import java.util.stream.Collectors; + +import static cn.axzo.tyr.server.event.inner.EventTypeEnum.SAAS_ROLE_USER_RELATION_UPSERT; + /** * 角色 * @@ -106,6 +111,8 @@ public class RoleUserService implements SaasRoleUserService { private final WorkspaceConfigApi workspaceConfigApi; private final OrganizationalNodeUserQueryApi organizationalNodeUserQueryApi; private final RoleService roleService; + private final MqProducer mqProducer; + private static final String TARGET_TYPE = "saasRoleUserRelationId"; // 单位类型默认角色关系,后面可以座位管理员的逻辑进行迭代 @Value("#{${participateUnitDefaultRoleId:{}}}") @@ -263,23 +270,41 @@ public class RoleUserService implements SaasRoleUserService { updateRoleIds.addAll(notAdminAndAutoOwnRole); } // 清空所有角色 - if (CollectionUtil.isEmpty(updateRoleIds)) { - return; + if (!CollectionUtil.isEmpty(updateRoleIds)) { + roleUserRelationDao.saveBatch(updateRoleIds.stream().map(e -> { + SaasRoleUserRelation saasRoleUserRelation = new SaasRoleUserRelation(); + saasRoleUserRelation.setIdentityId(req.getIdentityId()); + saasRoleUserRelation.setIdentityType(req.getIdentityType().getCode()); + saasRoleUserRelation.setRoleId(e); + saasRoleUserRelation.setNaturalPersonId(req.getPersonId()); + saasRoleUserRelation.setOuId(req.getOuId()); + saasRoleUserRelation.setWorkspaceId(req.getWorkspaceId()); + saasRoleUserRelation.setCreateBy(req.getOperator()); + saasRoleUserRelation.setUpdateBy(req.getOperator()); + return saasRoleUserRelation; + }).collect(Collectors.toList())); } - roleUserRelationDao.saveBatch(updateRoleIds.stream().map(e -> { - SaasRoleUserRelation saasRoleUserRelation = new SaasRoleUserRelation(); - saasRoleUserRelation.setIdentityId(req.getIdentityId()); - saasRoleUserRelation.setIdentityType(req.getIdentityType().getCode()); - saasRoleUserRelation.setRoleId(e); - saasRoleUserRelation.setNaturalPersonId(req.getPersonId()); - saasRoleUserRelation.setOuId(req.getOuId()); - saasRoleUserRelation.setWorkspaceId(req.getWorkspaceId()); - saasRoleUserRelation.setCreateBy(req.getOperator()); - saasRoleUserRelation.setUpdateBy(req.getOperator()); - return saasRoleUserRelation; - }).collect(Collectors.toList())); + List newSaasRoleUsers = saasRoleUserRelationService.listV2(ListRoleUserRelationParam.builder() + .identityId(req.getIdentityId()) + .identityType(req.getIdentityType()) + .workspaceId(req.getWorkspaceId()) + .ouId(req.getOuId()) + .build()); + Event event = Event.builder() + .targetType(TARGET_TYPE) + .eventCode(SAAS_ROLE_USER_RELATION_UPSERT.getEventCode()) + .data(SaasRoleUserRelationUpsertPayload.builder() + .oldValues(saasRoleUsers.stream() + .map(SaasRoleUserRelationUpsertPayload::from) + .collect(Collectors.toList())) + .newValues(newSaasRoleUsers.stream() + .map(SaasRoleUserRelationUpsertPayload::from) + .collect(Collectors.toList())) + .build()) + .build(); + mqProducer.send(event); } @Override @@ -298,6 +323,13 @@ public class RoleUserService implements SaasRoleUserService { AssertUtil.notNull(superAdmin, "超管角色不存在,请联系业务初始化超管角色"); + List oldValues = roleUserRelationDao.lambdaQuery() + .eq(SaasRoleUserRelation::getIdentityId, param.getIdentityId()) + .eq(SaasRoleUserRelation::getIdentityType, param.getIdentityType().getCode()) + .eq(SaasRoleUserRelation::getNaturalPersonId, param.getNaturalPersonId()) + .eq(SaasRoleUserRelation::getOuId, param.getOuId()) + .eq(SaasRoleUserRelation::getWorkspaceId, param.getWorkspaceId()) + .list(); //删除当前超管角色 removeOldSuperAdmin(superAdmin.getId(), param.getWorkspaceId(), param.getOuId()); @@ -310,6 +342,22 @@ public class RoleUserService implements SaasRoleUserService { saasRoleUserRelation.setOuId(param.getOuId()); saasRoleUserRelation.setWorkspaceId(param.getWorkspaceId()); roleUserRelationDao.save(saasRoleUserRelation); + + Event event = Event.builder() + .targetType(TARGET_TYPE) + .eventCode(SAAS_ROLE_USER_RELATION_UPSERT.getEventCode()) + .data(SaasRoleUserRelationUpsertPayload.builder() + .oldValues(oldValues) + .newValues(roleUserRelationDao.lambdaQuery() + .eq(SaasRoleUserRelation::getIdentityId, param.getIdentityId()) + .eq(SaasRoleUserRelation::getIdentityType, param.getIdentityType().getCode()) + .eq(SaasRoleUserRelation::getNaturalPersonId, param.getNaturalPersonId()) + .eq(SaasRoleUserRelation::getOuId, param.getOuId()) + .eq(SaasRoleUserRelation::getWorkspaceId, param.getWorkspaceId()) + .list()) + .build()) + .build(); + mqProducer.send(event); } private void removeOldSuperAdmin(Long id, Long workspaceId, Long ouId) { From 94825931057440015dfb555072940fe48821329a Mon Sep 17 00:00:00 2001 From: lilong Date: Mon, 18 Nov 2024 10:07:20 +0800 Subject: [PATCH 3/9] =?UTF-8?q?feat:=20(feature/REQ-3181)=20=20=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E9=89=B4=E6=9D=83=E6=8E=A5=E5=8F=A3=E5=8E=BB=E6=8E=89?= =?UTF-8?q?itemCode=EF=BC=8C=E7=94=A8=E6=88=B7=E5=8F=AF=E4=BB=A5=E6=8C=87?= =?UTF-8?q?=E5=AE=9AitemCode=EF=BC=8C=E6=B2=A1=E6=9C=89=E7=BB=99itemCode?= =?UTF-8?q?=EF=BC=8C=E5=B0=B1=E8=A1=A8=E7=A4=BA=E7=94=A8=E6=88=B7=E5=9C=A8?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E4=B8=AD=E6=9C=89=E4=BB=BB=E4=BD=95=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E6=9D=83=E9=99=90=E9=83=BD=E8=A1=A8=E7=A4=BA=E6=9C=89?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/model/req/BatchPermissionCheckReq.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/BatchPermissionCheckReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/BatchPermissionCheckReq.java index 617fdd72..7e9da8ea 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/BatchPermissionCheckReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/BatchPermissionCheckReq.java @@ -6,11 +6,9 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.List; -import java.util.Set; @Data @Builder @@ -24,6 +22,5 @@ public class BatchPermissionCheckReq { @NotEmpty(message = "workspaceOUPairs不能为空") private List workspaceOUPairs; - @NotBlank(message = "itemCode不能为空") private String itemCode; } From fe9addf6f31d5fcd9b9a41ca4ce40ae6e0825ddc Mon Sep 17 00:00:00 2001 From: lilong Date: Mon, 18 Nov 2024 10:30:13 +0800 Subject: [PATCH 4/9] =?UTF-8?q?feat:=20(feature/REQ-3181)=20=20=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E9=89=B4=E6=9D=83=E6=8E=A5=E5=8F=A3=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=8C=89=E7=85=A7=E7=AB=AF=E6=9D=A5=E9=89=B4=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/model/req/BatchPermissionCheckReq.java | 9 +++++++++ .../controller/permission/PermissionQueryController.java | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/BatchPermissionCheckReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/BatchPermissionCheckReq.java index 7e9da8ea..b51f78a9 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/BatchPermissionCheckReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/BatchPermissionCheckReq.java @@ -9,6 +9,7 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.List; +import java.util.Set; @Data @Builder @@ -22,5 +23,13 @@ public class BatchPermissionCheckReq { @NotEmpty(message = "workspaceOUPairs不能为空") private List workspaceOUPairs; + /** + * app端的应用code + */ private String itemCode; + + /** + * 端:OMS上的菜单分端维护 + */ + private Set terminals; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionQueryController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionQueryController.java index 6399b0bb..6c65e11e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionQueryController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionQueryController.java @@ -21,12 +21,14 @@ import cn.axzo.tyr.client.model.res.ProductFeatureResourceResp; import cn.axzo.tyr.client.model.res.TreePermissionResp; import cn.axzo.tyr.server.service.PermissionQueryService; import cn.axzo.tyr.server.service.TyrSaasAuthService; +import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.web.bind.annotation.RestController; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -67,6 +69,9 @@ public class PermissionQueryController implements PermissionQueryApi { List pairs = BeanMapper.copyList(req.getWorkspaceOUPairs(), IdentityAuthReq.WorkspaceOuPair.class); request.setWorkspaceOusPairs(pairs); request.setItemCode(req.getItemCode()); + request.setTerminal(Optional.ofNullable(req.getTerminals()) + .map(Lists::newArrayList) + .orElse(null)); IdentityAuthRes authRes = tyrSaasAuthService.findIdentityAuthMix(request); return ApiResult.ok(BatchPermissionCheckRes.builder() From 181d309105c56296ac34631a45f3965566a089a6 Mon Sep 17 00:00:00 2001 From: liuyang Date: Wed, 27 Nov 2024 14:59:52 +0800 Subject: [PATCH 5/9] =?UTF-8?q?feat:[REQ-3299]=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9D=83=E9=99=90=E5=A2=9E=E5=88=A0=E6=94=B9=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E2=80=9C=E6=98=AF=E5=90=A6=E8=BF=87=E6=BB=A4=E5=B7=A5=E7=A8=8B?= =?UTF-8?q?=E2=80=9D=E5=AD=97=E6=AE=B5=E7=9A=84=E7=BB=B4=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/model/req/CreateDataObjectReq.java | 5 +++++ .../tyr/client/model/req/EditDataObjectReq.java | 5 +++++ .../axzo/tyr/client/model/res/DataObjectRes.java | 5 +++++ .../tyr/server/repository/entity/DataObject.java | 5 +++++ .../service/impl/DataObjectServiceImpl.java | 15 ++++++++++++++- 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/CreateDataObjectReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/CreateDataObjectReq.java index cfa1abf7..dc4c2f01 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/CreateDataObjectReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/CreateDataObjectReq.java @@ -45,6 +45,11 @@ public class CreateDataObjectReq { */ private List attrs; + /** + * 是否过滤工程 0否1是 + */ + private Integer isFilterProject; + /** * 默认规则 */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/EditDataObjectReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/EditDataObjectReq.java index becb1985..2c2be87c 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/EditDataObjectReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/EditDataObjectReq.java @@ -55,6 +55,11 @@ public class EditDataObjectReq { @Valid private List dataObjectRuleBOList; + /** + * 是否过滤工程 0否1是 + */ + private Integer isFilterProject; + /** * 排序 (从小到大) */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/DataObjectRes.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/DataObjectRes.java index 721bf230..10616f80 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/DataObjectRes.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/DataObjectRes.java @@ -46,6 +46,11 @@ public class DataObjectRes { */ private List dataObjectRuleBOList; + /** + * 是否过滤工程 0否1是 + */ + private Integer isFilterProject; + /** * 排序 (从小到大) */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/DataObject.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/DataObject.java index fccc9e20..7cd4c201 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/DataObject.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/DataObject.java @@ -36,4 +36,9 @@ public class DataObject extends BaseOperatorEntity implements Serial private Integer tenantScope; private Integer sort; + + /** + * 是否过滤工程 + */ + private Integer isFilterProject; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java index c9d27339..e5c55b7a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java @@ -4,6 +4,7 @@ import cn.axzo.basics.common.constant.enums.DeleteEnum; import cn.axzo.basics.common.exception.ServiceException; import cn.axzo.basics.common.page.PageResult; import cn.axzo.tyr.client.common.enums.ReturnCodeEnum; +import cn.axzo.tyr.client.common.enums.TenantScopeEnum; import cn.axzo.tyr.client.common.enums.YesNoEnum; import cn.axzo.tyr.client.model.data.object.AttributeBO; import cn.axzo.tyr.client.model.data.object.AttributePermissionBO; @@ -33,6 +34,7 @@ import cn.axzo.tyr.server.repository.entity.DataObjectRuleScope; import cn.axzo.tyr.server.service.DataObjectService; import cn.axzo.tyr.server.utils.mapper.DataObjectMapper; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.EnumUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; import com.google.common.collect.Lists; @@ -84,6 +86,12 @@ public class DataObjectServiceImpl implements DataObjectService { // 准备 DataObject dataObject = DataObjectMapper.INSTANCE.createReq2DataObject(req); + + // 如果租户类型为非项目租户, 则是否过滤工程字段设置为0 + if (!TenantScopeEnum.WORKSPACE.getValue().equals(dataObject.getTenantScope()) ) { + dataObject.setIsFilterProject(0); + } + dataObject.setCreateBy(req.getCreateBy()); List objectAttrList = DataObjectMapper.INSTANCE.attributeBOs2DataObjectAttrs(req.getAttrs()); @@ -195,7 +203,12 @@ public class DataObjectServiceImpl implements DataObjectService { dataObject.setTenantScope(req.getTenantScope()); dataObject.setSort(req.getSort()); dataObject.setUpdateBy(req.getUpdateBy()); - + // 如果租户类型为非项目租户, 则是否过滤工程字段设置为0 + if (!TenantScopeEnum.WORKSPACE.getValue().equals(dataObject.getTenantScope()) ) { + dataObject.setIsFilterProject(0); + } else { + dataObject.setIsFilterProject(req.getIsFilterProject()); + } List objectAttrList = DataObjectMapper.INSTANCE.attributeBOs2DataObjectAttrs(req.getAttrs()); List defaultDataObjectRules = DataObjectMapper.INSTANCE.defaultRuleBOs2Rules(Lists.newArrayList(req.getDefaultDataObjectRuleBO())); From ec85ba29829fa91c7101dec278a949fa1765cb1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=BE=99?= Date: Sat, 7 Dec 2024 17:09:54 +0800 Subject: [PATCH 6/9] =?UTF-8?q?feat:(REQ-3181)=20=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E7=BC=96=E8=BE=91=E5=85=A5=E5=8F=A3=EF=BC=8C?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=9B=B4=E6=96=B0=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 fd25853f..993f3f89 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 @@ -761,7 +761,7 @@ public class RoleServiceImpl extends ServiceImpl saasRole.setIsDisplay(saveOrUpdateRole.getIsDisplay()); saasRole.setEnabled(saveOrUpdateRole.getEnabled()); saasRole.setName(saveOrUpdateRole.getName()); - saasRole.setDescription(saasRole.getDescription()); + saasRole.setDescription(saveOrUpdateRole.getDescription()); saasRole.setRoleType(saveOrUpdateRole.getRoleType()); saasRole.setWorkspaceId(saveOrUpdateRole.getWorkspaceId()); saasRole.setOwnerOuId(saveOrUpdateRole.getOwnerOuId()); From f5af6719df36bc24f33190c962444008655d8dc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=BE=99?= Date: Mon, 9 Dec 2024 10:51:48 +0800 Subject: [PATCH 7/9] =?UTF-8?q?feat:(REQ-3167)=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=AB=AF=E7=9A=84=E6=B7=BB=E5=8A=A0=E5=92=8Cclone=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E9=AA=8C=E8=AF=81=E6=8F=90=E7=A4=BA=E8=AF=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/req/PageSaasFeatureResourceReq.java | 3 ++ .../config/exception/BizResultCode.java | 5 +- .../terminal/TerminalController.java | 13 +++++- .../impl/SaasFeatureResourceServiceImpl.java | 46 ++++++++++++++----- .../SaasFeatureResourceServiceImplTest.java | 6 +-- 5 files changed, 55 insertions(+), 18 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/PageSaasFeatureResourceReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/PageSaasFeatureResourceReq.java index 680a86c1..2dbc0bfd 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/PageSaasFeatureResourceReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/PageSaasFeatureResourceReq.java @@ -43,6 +43,9 @@ public class PageSaasFeatureResourceReq implements IPageReq { @CriteriaField(field = "authType", operator = Operator.EQ) private Integer authType; + @CriteriaField(field = "featureName", operator = Operator.EQ) + private String featureName; + /** * 资源所属端 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/BizResultCode.java b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/BizResultCode.java index a735c4c9..1cfd394d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/BizResultCode.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/BizResultCode.java @@ -28,9 +28,10 @@ public enum BizResultCode implements IResultCode { PAGE_CODE_DUPLICATE("100018", "资源元素code重复,重复的code:{}"), PARAM_ERROR("100019", "参数错误"), FEATURE_NAME_EXIST("100020", "菜单组件名字已经存在:{}"), - TERMINAL_EXIST("100021", "新端已经存在:{}"), + TERMINAL_CODE_EXIST("100021", "端code已经存在,请修改"), TERMINAL_NOT_FOUND("100022", "原端不存在:{}"), - FEATURE_CODE_OVER_LENGTH("100023", "组件code不能超过100个字符:{}"); + FEATURE_CODE_OVER_LENGTH("100023", "组件code不能超过100个字符:{}"), + TERMINAL_NAME_EXIST("100024", "端名字已经存在,请修改"); private String errorCode; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/terminal/TerminalController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/terminal/TerminalController.java index b1e2a901..d998ac52 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/terminal/TerminalController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/terminal/TerminalController.java @@ -2,6 +2,7 @@ package cn.axzo.tyr.server.controller.terminal; import cn.axzo.foundation.dao.support.mysql.MybatisPlusOperatorProcessor; import cn.axzo.foundation.dao.support.wrapper.Operator; +import cn.axzo.foundation.exception.Axssert; import cn.axzo.framework.auth.domain.TerminalInfo; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.common.enums.FeatureResourceType; @@ -22,7 +23,6 @@ import cn.axzo.tyr.client.model.res.TerminalRes; import cn.axzo.tyr.server.service.SaasFeatureResourceService; import cn.axzo.tyr.server.service.TerminalService; import cn.hutool.json.JSONObject; -import com.alibaba.fastjson.JSON; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -37,6 +37,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import static cn.axzo.tyr.client.model.res.SaasFeatureResourceResp.ROOT_PARENT_ID; +import static cn.axzo.tyr.server.config.exception.BizResultCode.TERMINAL_NAME_EXIST; @Slf4j @RestController @@ -117,9 +118,19 @@ public class TerminalController implements TerminalApi { .collect(Collectors.toList())); } + private void checkTerminalName(CreateTerminalReq req) { + List newFeatureResources = featureResourceService.list(PageSaasFeatureResourceReq.builder() + .featureResourceTypes(Lists.newArrayList(FeatureResourceType.ROOT.getCode())) + .featureName(req.getName()) + .build()); + Axssert.check(CollectionUtils.isEmpty(newFeatureResources), TERMINAL_NAME_EXIST); + } + @Override public ApiResult create(CreateTerminalReq req) { + checkTerminalName(req); + FeatureResourceTreeSaveReq featureResourceTreeSaveReq = FeatureResourceTreeSaveReq.builder() .parentId(ROOT_PARENT_ID) .featureName(req.getName()) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java index 67edc937..274c187f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java @@ -96,7 +96,8 @@ import static cn.axzo.tyr.server.config.exception.BizResultCode.FEATURE_CODE_EXI import static cn.axzo.tyr.server.config.exception.BizResultCode.FEATURE_CODE_OVER_LENGTH; import static cn.axzo.tyr.server.config.exception.BizResultCode.FEATURE_NAME_EXIST; import static cn.axzo.tyr.server.config.exception.BizResultCode.FEATURE_RESOURCE_NOT_FOUND; -import static cn.axzo.tyr.server.config.exception.BizResultCode.TERMINAL_EXIST; +import static cn.axzo.tyr.server.config.exception.BizResultCode.TERMINAL_CODE_EXIST; +import static cn.axzo.tyr.server.config.exception.BizResultCode.TERMINAL_NAME_EXIST; import static cn.axzo.tyr.server.config.exception.BizResultCode.TERMINAL_NOT_FOUND; import static cn.axzo.tyr.server.event.inner.EventTypeEnum.SAAS_FEATURE_RESOURCE_UPSERT; import static cn.axzo.tyr.server.repository.entity.SaasFeatureResource.DEFAULT_WORKSPACE_TYPE; @@ -1187,16 +1188,7 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl newFeatureResources = this.list(PageSaasFeatureResourceReq.builder() - .featureResourceTypes(Lists.newArrayList(FeatureResourceType.ROOT.getCode())) - .terminal(req.getNewTerminalCode()) - .build()); - Axssert.check(CollectionUtils.isEmpty(newFeatureResources), TERMINAL_EXIST, TERMINAL_EXIST.getErrorMessage(), req.getNewTerminalCode()); - - List fromTerminalFeatureResources = this.list(PageSaasFeatureResourceReq.builder() - .ids(Lists.newArrayList(req.getFromTerminalId())) - .build()); - Axssert.checkNotEmpty(fromTerminalFeatureResources, TERMINAL_NOT_FOUND, TERMINAL_NOT_FOUND.getErrorMessage(), req.getFromTerminalId()); + check(req); PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder() .parentId(req.getFromTerminalId()) @@ -1334,4 +1326,36 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl newCode.length(), FEATURE_CODE_OVER_LENGTH, FEATURE_CODE_OVER_LENGTH.getErrorMessage(), newCode); return newCode; } + + private void check(CloneTerminalReq req) { + + checkTerminalCode(req); + + checkTerminalName(req); + + checkFromTerminal(req); + } + + private void checkFromTerminal(CloneTerminalReq req) { + List fromTerminalFeatureResources = this.list(PageSaasFeatureResourceReq.builder() + .ids(Lists.newArrayList(req.getFromTerminalId())) + .build()); + Axssert.checkNotEmpty(fromTerminalFeatureResources, TERMINAL_NOT_FOUND, TERMINAL_NOT_FOUND.getErrorMessage(), req.getFromTerminalId()); + } + + private void checkTerminalName(CloneTerminalReq req) { + List newFeatureResources = this.list(PageSaasFeatureResourceReq.builder() + .featureResourceTypes(Lists.newArrayList(FeatureResourceType.ROOT.getCode())) + .featureName(req.getNewTerminalName()) + .build()); + Axssert.check(CollectionUtils.isEmpty(newFeatureResources), TERMINAL_NAME_EXIST); + } + + private void checkTerminalCode(CloneTerminalReq req) { + List newFeatureResources = this.list(PageSaasFeatureResourceReq.builder() + .featureResourceTypes(Lists.newArrayList(FeatureResourceType.ROOT.getCode())) + .terminal(req.getNewTerminalCode()) + .build()); + Axssert.check(CollectionUtils.isEmpty(newFeatureResources), TERMINAL_CODE_EXIST); + } } diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImplTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImplTest.java index d0f3ed41..111bbb76 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImplTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImplTest.java @@ -4,15 +4,13 @@ import cn.axzo.foundation.exception.BusinessException; import cn.axzo.tyr.base.BaseTest; import cn.axzo.tyr.base.MysqlDataLoader; import cn.axzo.tyr.client.model.req.CloneTerminalReq; -import cn.axzo.tyr.client.model.req.SaveOrUpdatePageElementReq; import cn.axzo.tyr.server.service.SaasFeatureResourceService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.MockitoAnnotations; import org.springframework.beans.factory.annotation.Autowired; -import static cn.axzo.tyr.server.config.exception.BizResultCode.PAGE_ELEMENT_ERROR; -import static cn.axzo.tyr.server.config.exception.BizResultCode.TERMINAL_EXIST; +import static cn.axzo.tyr.server.config.exception.BizResultCode.TERMINAL_CODE_EXIST; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -45,7 +43,7 @@ class SaasFeatureResourceServiceImplTest extends BaseTest { .build(); saasFeatureResourceService.clone(req); }); - assertEquals(businessException.getErrorCode(), TERMINAL_EXIST.getErrorCode()); + assertEquals(businessException.getErrorCode(), TERMINAL_CODE_EXIST.getErrorCode()); assertEquals(businessException.getErrorMsg(), "新端已经存在:[3434]"); } } \ No newline at end of file From 3dd5b4d1303a8c2f2342b63c444e8b0bae70730a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=BE=99?= Date: Mon, 9 Dec 2024 11:10:17 +0800 Subject: [PATCH 8/9] =?UTF-8?q?feat:(REQ-3167)=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=AB=AF=E6=98=AF=E5=90=A6=E5=85=81=E8=AE=B8=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/client/model/res/TerminalConfigRes.java | 5 +++++ .../main/java/cn/axzo/tyr/client/model/res/TerminalRes.java | 5 +++++ .../tyr/server/controller/terminal/TerminalController.java | 3 +++ 3 files changed, 13 insertions(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/TerminalConfigRes.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/TerminalConfigRes.java index d8c0de8a..fd90e99a 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/TerminalConfigRes.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/TerminalConfigRes.java @@ -65,5 +65,10 @@ public class TerminalConfigRes { * DISABLED,ENABLED */ private String status; + + /** + * 是否允许删除 + */ + private Boolean allowDelete; } } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/TerminalRes.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/TerminalRes.java index 4c6a2e32..9e45c49d 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/TerminalRes.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/TerminalRes.java @@ -31,4 +31,9 @@ public class TerminalRes { * 是否允许克隆 */ private Boolean allowClone; + + /** + * 是否允许删除 + */ + private Boolean allowDelete; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/terminal/TerminalController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/terminal/TerminalController.java index d998ac52..82eeca8f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/terminal/TerminalController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/terminal/TerminalController.java @@ -112,6 +112,9 @@ public class TerminalController implements TerminalApi { .allowClone(Optional.ofNullable(terminalBizType) .map(TerminalConfigRes.TerminalBizType::getAllowClone) .orElse(false)) + .allowDelete(Optional.ofNullable(terminalBizType) + .map(TerminalConfigRes.TerminalBizType::getAllowDelete) + .orElse(false)) .featureType(e.getFeatureType()) .build(); }) From 85e427cc08914f1efbeed004f5dc84a5906a490d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=BE=99?= Date: Tue, 10 Dec 2024 09:17:27 +0800 Subject: [PATCH 9/9] =?UTF-8?q?feat:(REQ-3167)=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9D=83=E9=99=90=E7=82=B9=E7=9A=84=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/server/service/impl/PermissionQueryServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionQueryServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionQueryServiceImpl.java index 9e655605..60cfb7a2 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionQueryServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionQueryServiceImpl.java @@ -404,6 +404,7 @@ public class PermissionQueryServiceImpl implements PermissionQueryService { .versionMax(req.getVersionMax()) .parentUniCode(req.getParentUniCode()) .status(req.getStatus()) + .system(req.getSystem()) .build(); Set featureIds = listUserPermissionFeatureIds(treePermissionReq);