REQ-3345: 解决查询不到账号的问题
This commit is contained in:
parent
f5c3b8d4b1
commit
bf304c8292
@ -32,6 +32,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.transaction.support.TransactionTemplate;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Collections;
|
||||
@ -57,8 +58,8 @@ public class GroupManager {
|
||||
private final GroupMemberSyncer groupMemberSyncer;
|
||||
private final GroupRateLimiter rateLimiter;
|
||||
private final Notification notification;
|
||||
private final TransactionTemplate transactionTemplate;
|
||||
|
||||
@Transactional
|
||||
public GroupCreateResponse createGroup(GroupCreateRequest request) {
|
||||
BizAssertions.assertTrue(request.getPeople().size() > 1, "群成员数量(含群主)不能少于2");
|
||||
groupSupport.log(0L, "create-group:preparing", request);
|
||||
@ -67,32 +68,34 @@ public class GroupManager {
|
||||
BizAssertions.assertTrue(savedGroup == null || savedGroup.isDismissed(),
|
||||
String.format("群已经存在: %s", request.getName()));
|
||||
ImAccounts imAccounts = accountService.getOrCreateImAccounts(request.getPeople());
|
||||
String owner = imAccounts.findAccount(request.getOwner()).orElse(null);
|
||||
BizAssertions.assertNotNull(owner, "群主没有IM账号, 无法创建群. {}", request.getOwner());
|
||||
Group group = groupSupport.buildNewGroup(request, imAccounts);
|
||||
BizAssertions.assertTrue(group.addMoreMembers(
|
||||
request.getPeople().size()), "无法创建群, 群成员数量超过上限" + group.getMemberLimit());
|
||||
groupDao.save(group);
|
||||
NimGroupCreateRequest nimRequest = groupSupport
|
||||
.buildNimCreateGroupRequest(request, imAccounts);
|
||||
rateLimiter.requireCreateGroup();
|
||||
NimGroupCreateResponse nimResponse = nimClient.createGroup(nimRequest);
|
||||
log.info("创建群, request={}, response={}", nimRequest, nimResponse);
|
||||
BizAssertions.assertTrue(nimResponse.isSuccess(), "创建群失败: {}", nimResponse.getDesc());
|
||||
groupDao.updateTid(group.getId(), nimResponse.getTid());
|
||||
group = groupDao.getById(group.getId());
|
||||
groupSupport.log(group.getTid(), "create-group", request);
|
||||
groupMemberSyncer.syncMembers(group);
|
||||
// 同步完成员后再发消息, 因为接收方可能会查询群成员
|
||||
groupBroadcaster.fireGroupChanged(group, MqEventType.GROUP_CREATED);
|
||||
groupBroadcaster.fireMembersChanged(group,
|
||||
groupMemberDao.getByTid(nimResponse.getTid()),
|
||||
MqEventType.GROUP_ADD_MEMBERS);
|
||||
GroupCreateResponse response = new GroupCreateResponse();
|
||||
response.setTid(nimResponse.getTid());
|
||||
response.setAccountsNotFound(getAccountNotFoundPersons(
|
||||
"创建群", imAccounts, group, request.getMembers()));
|
||||
return response;
|
||||
return transactionTemplate.execute(unused -> {
|
||||
String owner = imAccounts.findAccount(request.getOwner()).orElse(null);
|
||||
BizAssertions.assertNotNull(owner, "群主没有IM账号, 无法创建群. {}", request.getOwner());
|
||||
Group group = groupSupport.buildNewGroup(request, imAccounts);
|
||||
BizAssertions.assertTrue(group.addMoreMembers(
|
||||
request.getPeople().size()), "无法创建群, 群成员数量超过上限" + group.getMemberLimit());
|
||||
groupDao.save(group);
|
||||
NimGroupCreateRequest nimRequest = groupSupport
|
||||
.buildNimCreateGroupRequest(request, imAccounts);
|
||||
rateLimiter.requireCreateGroup();
|
||||
NimGroupCreateResponse nimResponse = nimClient.createGroup(nimRequest);
|
||||
log.info("创建群, request={}, response={}", nimRequest, nimResponse);
|
||||
BizAssertions.assertTrue(nimResponse.isSuccess(), "创建群失败: {}", nimResponse.getDesc());
|
||||
groupDao.updateTid(group.getId(), nimResponse.getTid());
|
||||
group = groupDao.getById(group.getId());
|
||||
groupSupport.log(group.getTid(), "create-group", request);
|
||||
groupMemberSyncer.syncMembers(group);
|
||||
// 同步完成员后再发消息, 因为接收方可能会查询群成员
|
||||
groupBroadcaster.fireGroupChanged(group, MqEventType.GROUP_CREATED);
|
||||
groupBroadcaster.fireMembersChanged(group,
|
||||
groupMemberDao.getByTid(nimResponse.getTid()),
|
||||
MqEventType.GROUP_ADD_MEMBERS);
|
||||
GroupCreateResponse response = new GroupCreateResponse();
|
||||
response.setTid(nimResponse.getTid());
|
||||
response.setAccountsNotFound(getAccountNotFoundPersons(
|
||||
"创建群", imAccounts, group, request.getMembers()));
|
||||
return response;
|
||||
});
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@ -112,7 +115,6 @@ public class GroupManager {
|
||||
groupBroadcaster.fireGroupChanged(group, MqEventType.GROUP_DISMISSED);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public GroupAddMembersResponse addMembers(GroupAddMembersRequest request) {
|
||||
Group group = getGroupForUpdateOrThrow(request.getTid());
|
||||
BizAssertions.assertFalse(group.isDismissed(), "群已经解散");
|
||||
@ -129,27 +131,29 @@ public class GroupManager {
|
||||
BizAssertions.assertTrue(group.addMoreMembers(prePersons.size() + addPersons.size()),
|
||||
"群聊人数上限{}人, 请删除部分已选人员", group.getMemberLimit());
|
||||
ImAccounts imAccounts = accountService.getOrCreateImAccounts(addPersons);
|
||||
if (imAccounts.isAccountEmpty()) {
|
||||
notification.send("添加群成员[{},{}], 有效群成员IM账号列表为空. 请求成员信息: {}",
|
||||
group.getTid(), group.getName(), JSON.toJSONString(request.getMembers()));
|
||||
return new GroupAddMembersResponse();
|
||||
}
|
||||
NimGroupAddMembersRequest nimRequest = groupSupport
|
||||
.buildAddMembersRequest(group, group.getOwnerAccount(), imAccounts);
|
||||
// add members
|
||||
rateLimiter.requireAddMember();
|
||||
NimGroupAddMembersResponse nimResponse = nimClient.addGroupMembers(nimRequest);
|
||||
log.info("添加群成员, request={}, response={}", nimRequest, nimResponse);
|
||||
BizAssertions.assertTrue(nimResponse.isSuccess(), "添加群成员失败: {}", nimResponse.getDesc());
|
||||
// sync members 2
|
||||
groupMemberSyncer.syncMembers(group);
|
||||
groupBroadcaster.fireMembersChanged(group,
|
||||
groupMemberDao.getByPersons(group.getTid(), addPersons),
|
||||
MqEventType.GROUP_ADD_MEMBERS);
|
||||
GroupAddMembersResponse response = new GroupAddMembersResponse();
|
||||
response.setAccountsNotFound(getAccountNotFoundPersons(
|
||||
"添加群成员", imAccounts, group, addPersons));
|
||||
return response;
|
||||
return transactionTemplate.execute(unused -> {
|
||||
if (imAccounts.isAccountEmpty()) {
|
||||
notification.send("添加群成员[{},{}], 有效群成员IM账号列表为空. 请求成员信息: {}",
|
||||
group.getTid(), group.getName(), JSON.toJSONString(request.getMembers()));
|
||||
return new GroupAddMembersResponse();
|
||||
}
|
||||
NimGroupAddMembersRequest nimRequest = groupSupport
|
||||
.buildAddMembersRequest(group, group.getOwnerAccount(), imAccounts);
|
||||
// add members
|
||||
rateLimiter.requireAddMember();
|
||||
NimGroupAddMembersResponse nimResponse = nimClient.addGroupMembers(nimRequest);
|
||||
log.info("添加群成员, request={}, response={}", nimRequest, nimResponse);
|
||||
BizAssertions.assertTrue(nimResponse.isSuccess(), "添加群成员失败: {}", nimResponse.getDesc());
|
||||
// sync members 2
|
||||
groupMemberSyncer.syncMembers(group);
|
||||
groupBroadcaster.fireMembersChanged(group,
|
||||
groupMemberDao.getByPersons(group.getTid(), addPersons),
|
||||
MqEventType.GROUP_ADD_MEMBERS);
|
||||
GroupAddMembersResponse response = new GroupAddMembersResponse();
|
||||
response.setAccountsNotFound(getAccountNotFoundPersons(
|
||||
"添加群成员", imAccounts, group, addPersons));
|
||||
return response;
|
||||
});
|
||||
}
|
||||
|
||||
@Transactional
|
||||
|
||||
Loading…
Reference in New Issue
Block a user