REQ-3345: 解散的群可以重复
This commit is contained in:
parent
ebcb1b3916
commit
1974e3952d
@ -1,5 +1,6 @@
|
|||||||
package cn.axzo.im.dao.repository;
|
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.center.common.enums.YesOrNo;
|
||||||
import cn.axzo.im.dao.mapper.GroupMapper;
|
import cn.axzo.im.dao.mapper.GroupMapper;
|
||||||
import cn.axzo.im.entity.Group;
|
import cn.axzo.im.entity.Group;
|
||||||
@ -45,4 +46,12 @@ public class GroupDao extends ServiceImpl<GroupMapper, Group> {
|
|||||||
.update();
|
.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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1,6 +1,5 @@
|
|||||||
package cn.axzo.im.group;
|
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.enums.MqEventType;
|
||||||
import cn.axzo.im.center.api.vo.PersonAccountAttribute;
|
import cn.axzo.im.center.api.vo.PersonAccountAttribute;
|
||||||
import cn.axzo.im.center.api.vo.req.GroupAddMembersRequest;
|
import cn.axzo.im.center.api.vo.req.GroupAddMembersRequest;
|
||||||
@ -31,7 +30,6 @@ import com.alibaba.fastjson.JSON;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.springframework.dao.DuplicateKeyException;
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@ -64,18 +62,17 @@ public class GroupManager {
|
|||||||
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);
|
||||||
|
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());
|
ImAccounts imAccounts = accountService.getOrCreateImAccounts(request.getPeople());
|
||||||
String owner = imAccounts.findAccount(request.getOwner()).orElse(null);
|
String owner = imAccounts.findAccount(request.getOwner()).orElse(null);
|
||||||
BizAssertions.assertNotNull(owner, "群主没有IM账号, 无法创建群. {}", request.getOwner());
|
BizAssertions.assertNotNull(owner, "群主没有IM账号, 无法创建群. {}", request.getOwner());
|
||||||
Group group = groupSupport.buildNewGroup(request, imAccounts);
|
Group group = groupSupport.buildNewGroup(request, imAccounts);
|
||||||
BizAssertions.assertTrue(group.addMoreMembers(
|
BizAssertions.assertTrue(group.addMoreMembers(
|
||||||
request.getPeople().size()), "无法创建群, 群成员数量超过上限" + group.getMemberLimit());
|
request.getPeople().size()), "无法创建群, 群成员数量超过上限" + group.getMemberLimit());
|
||||||
try {
|
|
||||||
groupDao.save(group);
|
groupDao.save(group);
|
||||||
} catch (DuplicateKeyException e) {
|
|
||||||
log.warn("重复创建群, request={}", request, e);
|
|
||||||
throw new ServiceException(403, String.format("群已经存在: %s", request.getName()));
|
|
||||||
}
|
|
||||||
NimGroupCreateRequest nimRequest = groupSupport
|
NimGroupCreateRequest nimRequest = groupSupport
|
||||||
.buildNimCreateGroupRequest(request, imAccounts);
|
.buildNimCreateGroupRequest(request, imAccounts);
|
||||||
rateLimiter.requireCreateGroup();
|
rateLimiter.requireCreateGroup();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user