fix: 修复艾特用户列表不在群聊之中的问题

This commit is contained in:
Kkuil
2023-10-15 21:24:09 +08:00
parent 7c21b4127e
commit 7a34169edf
2 changed files with 30 additions and 6 deletions

View File

@@ -3,7 +3,9 @@ package com.abin.mallchat.common.chat.dao;
import com.abin.mallchat.common.chat.domain.entity.GroupMember; import com.abin.mallchat.common.chat.domain.entity.GroupMember;
import com.abin.mallchat.common.chat.domain.enums.GroupRoleEnum; import com.abin.mallchat.common.chat.domain.enums.GroupRoleEnum;
import com.abin.mallchat.common.chat.mapper.GroupMemberMapper; import com.abin.mallchat.common.chat.mapper.GroupMemberMapper;
import com.abin.mallchat.common.chat.service.cache.GroupMemberCache;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@@ -20,6 +22,9 @@ import java.util.stream.Collectors;
@Service @Service
public class GroupMemberDao extends ServiceImpl<GroupMemberMapper, GroupMember> { public class GroupMemberDao extends ServiceImpl<GroupMemberMapper, GroupMember> {
@Autowired
private GroupMemberCache groupMemberCache;
public List<Long> getMemberUidList(Long groupId) { public List<Long> getMemberUidList(Long groupId) {
List<GroupMember> list = lambdaQuery() List<GroupMember> list = lambdaQuery()
.eq(GroupMember::getGroupId, groupId) .eq(GroupMember::getGroupId, groupId)
@@ -50,4 +55,16 @@ public class GroupMemberDao extends ServiceImpl<GroupMemberMapper, GroupMember>
.eq(GroupMember::getRole, GroupRoleEnum.LEADER.getType()) .eq(GroupMember::getRole, GroupRoleEnum.LEADER.getType())
.list(); .list();
} }
/**
* 判断用户是否在房间中
*
* @param roomId 房间ID
* @param uidList 用户ID
* @return 是否在群聊中
*/
public Boolean isGroupShip(Long roomId, List<Long> uidList) {
List<Long> memberUidList = groupMemberCache.getMemberUidList(roomId);
return memberUidList.containsAll(uidList);
}
} }

View File

@@ -2,6 +2,7 @@ package com.abin.mallchat.custom.chat.service.strategy.msg;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.abin.mallchat.common.chat.dao.GroupMemberDao;
import com.abin.mallchat.common.chat.dao.MessageDao; import com.abin.mallchat.common.chat.dao.MessageDao;
import com.abin.mallchat.common.chat.domain.entity.Message; import com.abin.mallchat.common.chat.domain.entity.Message;
import com.abin.mallchat.common.chat.domain.entity.msg.MessageExtra; import com.abin.mallchat.common.chat.domain.entity.msg.MessageExtra;
@@ -49,6 +50,8 @@ public class TextMsgHandler extends AbstractMsgHandler {
private IRoleService iRoleService; private IRoleService iRoleService;
@Autowired @Autowired
private SensitiveWordBs sensitiveWordBs; private SensitiveWordBs sensitiveWordBs;
@Autowired
private GroupMemberDao groupMemberDao;
private static final PrioritizedUrlDiscover URL_TITLE_DISCOVER = new PrioritizedUrlDiscover(); private static final PrioritizedUrlDiscover URL_TITLE_DISCOVER = new PrioritizedUrlDiscover();
@@ -61,7 +64,7 @@ public class TextMsgHandler extends AbstractMsgHandler {
public void checkMsg(ChatMessageReq request, Long uid) { public void checkMsg(ChatMessageReq request, Long uid) {
TextMsgReq body = BeanUtil.toBean(request.getBody(), TextMsgReq.class); TextMsgReq body = BeanUtil.toBean(request.getBody(), TextMsgReq.class);
AssertUtil.allCheckValidateThrow(body); AssertUtil.allCheckValidateThrow(body);
//校验下回复消息 // 校验下回复消息
if (Objects.nonNull(body.getReplyMsgId())) { if (Objects.nonNull(body.getReplyMsgId())) {
Message replyMsg = messageDao.getById(body.getReplyMsgId()); Message replyMsg = messageDao.getById(body.getReplyMsgId());
AssertUtil.isNotEmpty(replyMsg, "回复消息不存在"); AssertUtil.isNotEmpty(replyMsg, "回复消息不存在");
@@ -71,6 +74,10 @@ public class TextMsgHandler extends AbstractMsgHandler {
List<Long> atUidList = body.getAtUidList(); List<Long> atUidList = body.getAtUidList();
Map<Long, User> batch = userInfoCache.getBatch(atUidList); Map<Long, User> batch = userInfoCache.getBatch(atUidList);
AssertUtil.equal(atUidList.size(), batch.values().size(), "@用户不存在"); AssertUtil.equal(atUidList.size(), batch.values().size(), "@用户不存在");
// 判断艾特用户是否在群聊中
Boolean isGroupShip = groupMemberDao.isGroupShip(request.getRoomId(), atUidList);
AssertUtil.isTrue(isGroupShip, "艾特用户不在群聊中");
groupMemberDao.isGroupShip(request.getRoomId(), atUidList);
boolean atAll = body.getAtUidList().contains(0L); boolean atAll = body.getAtUidList().contains(0L);
if (atAll) { if (atAll) {
AssertUtil.isTrue(iRoleService.hasPower(uid, RoleEnum.CHAT_MANAGER), "没有权限"); AssertUtil.isTrue(iRoleService.hasPower(uid, RoleEnum.CHAT_MANAGER), "没有权限");
@@ -79,24 +86,24 @@ public class TextMsgHandler extends AbstractMsgHandler {
} }
@Override @Override
public void saveMsg(Message msg, ChatMessageReq request) {//插入文本内容 public void saveMsg(Message msg, ChatMessageReq request) {// 插入文本内容
TextMsgReq body = BeanUtil.toBean(request.getBody(), TextMsgReq.class); TextMsgReq body = BeanUtil.toBean(request.getBody(), TextMsgReq.class);
MessageExtra extra = Optional.ofNullable(msg.getExtra()).orElse(new MessageExtra()); MessageExtra extra = Optional.ofNullable(msg.getExtra()).orElse(new MessageExtra());
Message update = new Message(); Message update = new Message();
update.setId(msg.getId()); update.setId(msg.getId());
update.setContent(sensitiveWordBs.filter(body.getContent())); update.setContent(sensitiveWordBs.filter(body.getContent()));
update.setExtra(extra); update.setExtra(extra);
//如果有回复消息 // 如果有回复消息
if (Objects.nonNull(body.getReplyMsgId())) { if (Objects.nonNull(body.getReplyMsgId())) {
Integer gapCount = messageDao.getGapCount(request.getRoomId(), body.getReplyMsgId(), msg.getId()); Integer gapCount = messageDao.getGapCount(request.getRoomId(), body.getReplyMsgId(), msg.getId());
update.setGapCount(gapCount); update.setGapCount(gapCount);
update.setReplyMsgId(body.getReplyMsgId()); update.setReplyMsgId(body.getReplyMsgId());
} }
//判断消息url跳转 // 判断消息url跳转
Map<String, UrlInfo> urlContentMap = URL_TITLE_DISCOVER.getUrlContentMap(body.getContent()); Map<String, UrlInfo> urlContentMap = URL_TITLE_DISCOVER.getUrlContentMap(body.getContent());
extra.setUrlContentMap(urlContentMap); extra.setUrlContentMap(urlContentMap);
//艾特功能 // 艾特功能
if (CollectionUtil.isNotEmpty(body.getAtUidList())) { if (CollectionUtil.isNotEmpty(body.getAtUidList())) {
extra.setAtUidList(body.getAtUidList()); extra.setAtUidList(body.getAtUidList());
@@ -111,7 +118,7 @@ public class TextMsgHandler extends AbstractMsgHandler {
resp.setContent(msg.getContent()); resp.setContent(msg.getContent());
resp.setUrlContentMap(Optional.ofNullable(msg.getExtra()).map(MessageExtra::getUrlContentMap).orElse(null)); resp.setUrlContentMap(Optional.ofNullable(msg.getExtra()).map(MessageExtra::getUrlContentMap).orElse(null));
resp.setAtUidList(Optional.ofNullable(msg.getExtra()).map(MessageExtra::getAtUidList).orElse(null)); resp.setAtUidList(Optional.ofNullable(msg.getExtra()).map(MessageExtra::getAtUidList).orElse(null));
//回复消息 // 回复消息
Optional<Message> reply = Optional.ofNullable(msg.getReplyMsgId()) Optional<Message> reply = Optional.ofNullable(msg.getReplyMsgId())
.map(msgCache::getMsg) .map(msgCache::getMsg)
.filter(a -> Objects.equals(a.getStatus(), MessageStatusEnum.NORMAL.getStatus())); .filter(a -> Objects.equals(a.getStatus(), MessageStatusEnum.NORMAL.getStatus()));