From e0c7ac211b5e1f4126210f657ad6ee212b965847 Mon Sep 17 00:00:00 2001 From: lilong Date: Tue, 12 Nov 2024 13:37:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20(feature/REQ-3057)=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=88=A0=E9=99=A4=E5=92=8C=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=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) {