REQ-3345: 解散的群可以重复

This commit is contained in:
yanglin 2025-02-17 17:52:44 +08:00
parent ebcb1b3916
commit 1974e3952d
2 changed files with 14 additions and 8 deletions

View File

@ -1,5 +1,6 @@
package cn.axzo.im.dao.repository;
import cn.axzo.im.center.common.enums.GroupType;
import cn.axzo.im.center.common.enums.YesOrNo;
import cn.axzo.im.dao.mapper.GroupMapper;
import cn.axzo.im.entity.Group;
@ -45,4 +46,12 @@ public class GroupDao extends ServiceImpl<GroupMapper, Group> {
.update();
}
public Optional<Group> findByBizCode(String bizCode, GroupType groupType, boolean forUpdate) {
return lambdaQuery()
.eq(Group::getBizCode, bizCode)
.eq(Group::getType, groupType)
.last(forUpdate, "FOR UPDATE")
.oneOpt();
}
}

View File

@ -1,6 +1,5 @@
package cn.axzo.im.group;
import cn.axzo.basics.common.exception.ServiceException;
import cn.axzo.im.center.api.enums.MqEventType;
import cn.axzo.im.center.api.vo.PersonAccountAttribute;
import cn.axzo.im.center.api.vo.req.GroupAddMembersRequest;
@ -31,7 +30,6 @@ import com.alibaba.fastjson.JSON;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@ -64,18 +62,17 @@ public class GroupManager {
public GroupCreateResponse createGroup(GroupCreateRequest request) {
BizAssertions.assertTrue(request.getPeople().size() > 1, "群成员数量(含群主)不能少于2");
groupSupport.log(0L, "create-group:preparing", request);
Group savedGroup = groupDao.findByBizCode(request.getBizCode(), request.getGroupType(), true)
.orElse(null);
BizAssertions.assertNull(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());
try {
groupDao.save(group);
} catch (DuplicateKeyException e) {
log.warn("重复创建群, request={}", request, e);
throw new ServiceException(403, String.format("群已经存在: %s", request.getName()));
}
NimGroupCreateRequest nimRequest = groupSupport
.buildNimCreateGroupRequest(request, imAccounts);
rateLimiter.requireCreateGroup();