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