REQ-3345: 处理群的业务扩展字段
This commit is contained in:
parent
d47208ed1e
commit
88c1d86612
@ -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;
|
||||
|
||||
}
|
||||
@ -10,7 +10,7 @@ import lombok.RequiredArgsConstructor;
|
||||
@Getter
|
||||
@RequiredArgsConstructor
|
||||
public enum GroupType implements CodeDefinition<String> {
|
||||
NONE("随意"),
|
||||
NONE("未指定"),
|
||||
VISA("变洽签"),
|
||||
WORKSPACE("项目群"),
|
||||
WORKSPACE_OU("项目单位群"),
|
||||
|
||||
@ -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", "头像更新"),
|
||||
|
||||
@ -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<GroupMember> 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<GroupMember> accounts) {
|
||||
fireMembersChanged(group, accounts, EventTypeEnum.GROUP_REMOVE_MEMBERS);
|
||||
}
|
||||
|
||||
private void fireMembersChanged(Group group, Collection<GroupMember> accounts, EventTypeEnum eventType) {
|
||||
void fireMembersChanged(Group group,
|
||||
Collection<GroupMember> 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);
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user