1.解散群聊时删除群并清除缓存
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据群号查询群信息
|
||||
*/
|
||||
|
||||
@@ -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())));
|
||||
// 组装结果
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user