1.解散群聊时删除群并清除缓存

This commit is contained in:
乾乾
2025-05-06 10:02:09 +08:00
parent 008d2207b5
commit 75a30b6746
3 changed files with 18 additions and 7 deletions

View File

@@ -9,6 +9,7 @@ import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
@@ -39,6 +40,14 @@ public class RoomGroupCache extends AbstractRedisStringCache<Long, RoomGroup> {
return roomGroups.stream().collect(Collectors.toMap(RoomGroup::getRoomId, Function.identity()));
}
public RoomGroup getByRoomId(Long roomId) {
return roomGroupDao.getByRoomId(roomId);
}
public boolean removeById(Serializable id) {
return roomGroupDao.removeById(id);
}
/**
* 根据群号查询群信息
*/

View File

@@ -84,7 +84,6 @@ public class ChatServiceImpl implements ChatService {
private RoomCache roomCache;
private GroupMemberDao groupMemberDao;
private RoomGroupCache roomGroupCache;
private RoomGroupDao roomGroupDao;
/**
* 发送消息
@@ -172,7 +171,7 @@ public class ChatServiceImpl implements ChatService {
}
// 获取群成员角色ID
List<Long> uidList = resultList.stream().map(item -> Long.parseLong(item.getUid())).collect(Collectors.toList());
RoomGroup roomGroup = roomGroupDao.getByRoomId(request.getRoomId());
RoomGroup roomGroup = roomGroupCache.getByRoomId(request.getRoomId());
Map<String, Integer> uidMapRole = groupMemberDao.getMemberMapRole(roomGroup.getId(), uidList);
resultList.forEach(member -> member.setRoleId(uidMapRole.get(member.getUid())));
// 组装结果

View File

@@ -1,6 +1,7 @@
package com.hula.core.chat.service.impl;
import com.hula.core.chat.service.adapter.RoomAdapter;
import com.hula.core.chat.service.cache.RoomGroupCache;
import com.hula.enums.CommonErrorEnum;
import com.hula.enums.GroupErrorEnum;
import com.hula.utils.AssertUtil;
@@ -35,10 +36,10 @@ import static com.hula.core.chat.constant.GroupConst.MAX_MANAGE_COUNT;
public class GroupMemberServiceImpl implements IGroupMemberService {
private GroupMemberDao groupMemberDao;
private RoomGroupDao roomGroupDao;
private RoomDao roomDao;
private ContactDao contactDao;
private MessageDao messageDao;
private RoomGroupCache roomGroupCache;
private GroupMemberCache groupMemberCache;
private PushService pushService;
@@ -51,7 +52,7 @@ public class GroupMemberServiceImpl implements IGroupMemberService {
@Override
public void addAdmin(Long uid, AdminAddReq request) {
// 1. 判断群聊是否存在
RoomGroup roomGroup = roomGroupDao.getByRoomId(request.getRoomId());
RoomGroup roomGroup = roomGroupCache.getByRoomId(request.getRoomId());
AssertUtil.isNotEmpty(roomGroup, GroupErrorEnum.GROUP_NOT_EXIST);
// 2. 判断该用户是否是群主
@@ -83,7 +84,7 @@ public class GroupMemberServiceImpl implements IGroupMemberService {
@Override
public void revokeAdmin(Long uid, AdminRevokeReq request) {
// 1. 判断群聊是否存在
RoomGroup roomGroup = roomGroupDao.getByRoomId(request.getRoomId());
RoomGroup roomGroup = roomGroupCache.getByRoomId(request.getRoomId());
AssertUtil.isNotEmpty(roomGroup, GroupErrorEnum.GROUP_NOT_EXIST);
// 2. 判断该用户是否是群主
@@ -109,7 +110,7 @@ public class GroupMemberServiceImpl implements IGroupMemberService {
public void exitGroup(Long uid, MemberExitReq request) {
Long roomId = request.getRoomId();
// 1. 判断群聊是否存在
RoomGroup roomGroup = roomGroupDao.getByRoomId(roomId);
RoomGroup roomGroup = roomGroupCache.getByRoomId(roomId);
AssertUtil.isNotEmpty(roomGroup, GroupErrorEnum.GROUP_NOT_EXIST);
// 2. 判断房间是否是大群聊 (大群聊禁止退出)
@@ -123,8 +124,10 @@ public class GroupMemberServiceImpl implements IGroupMemberService {
// 4. 判断该用户是否是群主
Boolean isLord = groupMemberDao.isLord(roomGroup.getId(), uid);
if (isLord) {
// 4.1 删除房间
// 4.1 删除房间和群并清除缓存
boolean isDelRoom = roomDao.removeById(roomId);
roomGroupCache.removeById(roomGroup.getId());
roomGroupCache.evictGroup(roomGroup.getAccount());
AssertUtil.isTrue(isDelRoom, CommonErrorEnum.SYSTEM_ERROR);
// 4.2 删除会话
Boolean isDelContact = contactDao.removeByRoomId(roomId, Collections.EMPTY_LIST);