From 88c1d86612682832bf244a13f208dbc457b77a12 Mon Sep 17 00:00:00 2001 From: yanglin Date: Thu, 6 Feb 2025 11:39:10 +0800 Subject: [PATCH] =?UTF-8?q?REQ-3345:=20=E5=A4=84=E7=90=86=E7=BE=A4?= =?UTF-8?q?=E7=9A=84=E4=B8=9A=E5=8A=A1=E6=89=A9=E5=B1=95=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../center/api/vo/mq/GroupChangedMessage.java | 19 +++++++++++++++ .../im/center/common/enums/GroupType.java | 2 +- .../cn/axzo/im/event/inner/EventTypeEnum.java | 2 ++ .../cn/axzo/im/group/GroupBroadcaster.java | 24 ++++++++++++------- .../java/cn/axzo/im/group/GroupManager.java | 15 ++++++++---- 5 files changed, 49 insertions(+), 13 deletions(-) create mode 100644 im-center-api/src/main/java/cn/axzo/im/center/api/vo/mq/GroupChangedMessage.java diff --git a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/mq/GroupChangedMessage.java b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/mq/GroupChangedMessage.java new file mode 100644 index 0000000..ac42f8d --- /dev/null +++ b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/mq/GroupChangedMessage.java @@ -0,0 +1,19 @@ +package cn.axzo.im.center.api.vo.mq; + +import cn.axzo.im.center.api.vo.group.GroupInfo; +import lombok.Getter; +import lombok.Setter; + +/** + * @author yanglin + */ +@Setter +@Getter +public class GroupChangedMessage extends MqMessage { + + /** + * 群信息 + */ + private GroupInfo group; + +} diff --git a/im-center-common/src/main/java/cn/axzo/im/center/common/enums/GroupType.java b/im-center-common/src/main/java/cn/axzo/im/center/common/enums/GroupType.java index a021eed..7dcb688 100644 --- a/im-center-common/src/main/java/cn/axzo/im/center/common/enums/GroupType.java +++ b/im-center-common/src/main/java/cn/axzo/im/center/common/enums/GroupType.java @@ -10,7 +10,7 @@ import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor public enum GroupType implements CodeDefinition { - NONE("随意"), + NONE("未指定"), VISA("变洽签"), WORKSPACE("项目群"), WORKSPACE_OU("项目单位群"), diff --git a/im-center-server/src/main/java/cn/axzo/im/event/inner/EventTypeEnum.java b/im-center-server/src/main/java/cn/axzo/im/event/inner/EventTypeEnum.java index 3e5ee66..a4e52e3 100644 --- a/im-center-server/src/main/java/cn/axzo/im/event/inner/EventTypeEnum.java +++ b/im-center-server/src/main/java/cn/axzo/im/event/inner/EventTypeEnum.java @@ -14,6 +14,8 @@ public enum EventTypeEnum { MESSAGE_HISTORY_CREATED("message-history", "message-history-created", "发送记录创建"), MESSAGE_HISTORY_UPDATED("message-history", "message-history-updated", "发送记录修改"), MESSAGE_CHAT_GROUP_CREATE("chat-group", "chat-group-create", "群聊创建[项目]"), + GROUP_CREATED("group", "group-created", "创建群聊"), + GROUP_DISMISSED("group", "group-dismissed", "群解散"), GROUP_ADD_MEMBERS("group", "group-add-members", "添加群聊成员"), GROUP_REMOVE_MEMBERS("group", "group-remove-members", "移除群聊成员"), UPDATE_AVATAR("profile", "update-avatar", "头像更新"), diff --git a/im-center-server/src/main/java/cn/axzo/im/group/GroupBroadcaster.java b/im-center-server/src/main/java/cn/axzo/im/group/GroupBroadcaster.java index e6dc02a..55ef367 100644 --- a/im-center-server/src/main/java/cn/axzo/im/group/GroupBroadcaster.java +++ b/im-center-server/src/main/java/cn/axzo/im/group/GroupBroadcaster.java @@ -4,6 +4,7 @@ import cn.axzo.basics.common.BeanMapper; import cn.axzo.framework.rocketmq.Event; import cn.axzo.im.center.api.vo.group.GroupInfo; import cn.axzo.im.center.api.vo.group.GroupMemberInfo; +import cn.axzo.im.center.api.vo.mq.GroupChangedMessage; import cn.axzo.im.center.api.vo.mq.GroupMembersChangeMessage; import cn.axzo.im.config.MqProducer; import cn.axzo.im.dao.repository.GroupDao; @@ -25,15 +26,22 @@ class GroupBroadcaster { private final MqProducer mqProducer; private final GroupDao groupDao; - void fireMembersAdded(Group group, Collection accounts) { - fireMembersChanged(group, accounts, EventTypeEnum.GROUP_ADD_MEMBERS); + void fireGroupChanged(Group group, EventTypeEnum eventType) { + GroupChangedMessage message = new GroupChangedMessage(); + message.setGroup(BeanMapper.copyBean(group, GroupInfo.class)); + Event event = Event.builder() + .targetId(group.getTid() + "") + .targetType(eventType.getModel()) + .eventCode(eventType.getEventCode()) + .shardingKey(group.getTid() + "") + .data(message) + .build(); + mqProducer.send(event); } - void fireMembersRemoved(Group group, Collection accounts) { - fireMembersChanged(group, accounts, EventTypeEnum.GROUP_REMOVE_MEMBERS); - } - - private void fireMembersChanged(Group group, Collection accounts, EventTypeEnum eventType) { + void fireMembersChanged(Group group, + Collection accounts, + EventTypeEnum eventType) { if (accounts.isEmpty()) return; Group effectiveGroup = groupDao.getById(group.getId()); for (GroupMember account : accounts) { @@ -44,7 +52,7 @@ class GroupBroadcaster { .targetId(group.getTid() + "") .targetType(eventType.getModel()) .eventCode(eventType.getEventCode()) - .shardingKey(group.getId() + "") + .shardingKey(group.getTid() + "") .data(message) .build(); mqProducer.send(event); diff --git a/im-center-server/src/main/java/cn/axzo/im/group/GroupManager.java b/im-center-server/src/main/java/cn/axzo/im/group/GroupManager.java index 628c6b2..47e9274 100644 --- a/im-center-server/src/main/java/cn/axzo/im/group/GroupManager.java +++ b/im-center-server/src/main/java/cn/axzo/im/group/GroupManager.java @@ -21,6 +21,7 @@ import cn.axzo.im.dao.repository.GroupDao; import cn.axzo.im.dao.repository.GroupMemberDao; import cn.axzo.im.entity.Group; import cn.axzo.im.entity.GroupMember; +import cn.axzo.im.event.inner.EventTypeEnum; import cn.axzo.im.group.member.GroupMemberSyncer; import cn.axzo.im.service.AccountService; import cn.axzo.im.service.domain.ImAccounts; @@ -77,8 +78,9 @@ public class GroupManager { BizAssertions.assertTrue(nimResponse.isSuccess(), "创建群失败: {}", nimResponse.getDesc()); groupDao.updateTid(group.getId(), nimResponse.getTid()); group = groupDao.getById(group.getId()); + groupBroadcaster.fireGroupChanged(group, EventTypeEnum.GROUP_CREATED); groupMemberSyncer.syncMembers(group); - groupBroadcaster.fireMembersAdded(group, groupMemberDao.getByTid(nimResponse.getTid())); + groupBroadcaster.fireMembersChanged(group, groupMemberDao.getByTid(nimResponse.getTid()), EventTypeEnum.GROUP_ADD_MEMBERS); GroupCreateResponse response = new GroupCreateResponse(); response.setTid(nimResponse.getTid()); response.setAccountsNotFound(imAccounts.getAccountNotFoundPersons( @@ -97,6 +99,8 @@ public class GroupManager { if (!nimResponse.isGroupNotFoundError()) BizAssertions.assertTrue(nimResponse.isSuccess(), "解散群失败: {}", nimResponse.getDesc()); groupDao.setDismissed(group.getTid()); + group = groupDao.getById(group.getId()); + groupBroadcaster.fireGroupChanged(group, EventTypeEnum.GROUP_DISMISSED); } @Transactional @@ -128,8 +132,10 @@ public class GroupManager { BizAssertions.assertTrue(nimResponse.isSuccess(), "添加群成员失败: {}", nimResponse.getDesc()); // sync members 2 groupMemberSyncer.syncMembers(group); - groupBroadcaster.fireMembersAdded(group, groupMemberDao - .getByPersons(group.getTid(), toAddMembers)); + groupBroadcaster.fireMembersChanged( + group, + groupMemberDao.getByPersons(group.getTid(), toAddMembers), + EventTypeEnum.GROUP_ADD_MEMBERS); GroupAddMembersResponse response = new GroupAddMembersResponse(); response.setAccountsNotFound(imAccounts.getAccountNotFoundPersons( groupSupport, "添加群成员", group, request.getMembers())); @@ -158,7 +164,8 @@ public class GroupManager { log.info("移除群成员, request={}, response={}", nimRequest, nimResponse); groupMemberSyncer.syncMembers(group); // 不比较直接发消息 - groupBroadcaster.fireMembersRemoved(group, toRemoveMembers); + groupBroadcaster.fireMembersChanged( + group, toRemoveMembers, EventTypeEnum.GROUP_REMOVE_MEMBERS); } @NotNull