fix(service): 限制聊天查询仅活跃会话

This commit is contained in:
2026-01-28 18:06:51 +08:00
parent ecab353802
commit 408d4d4bc1

View File

@@ -7,8 +7,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yolo.keyborad.mapper.KeyboardAiChatMessageMapper;
import com.yolo.keyborad.model.entity.KeyboardAiChatMessage;
import com.yolo.keyborad.model.entity.KeyboardAiChatSession;
import com.yolo.keyborad.model.vo.ChatMessageHistoryVO;
import com.yolo.keyborad.service.KeyboardAiChatMessageService;
import com.yolo.keyborad.service.KeyboardAiChatSessionService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.Collections;
@@ -21,12 +24,28 @@ import java.util.List;
@Service
public class KeyboardAiChatMessageServiceImpl extends ServiceImpl<KeyboardAiChatMessageMapper, KeyboardAiChatMessage> implements KeyboardAiChatMessageService {
@Resource
private KeyboardAiChatSessionService sessionService;
@Override
public IPage<ChatMessageHistoryVO> pageHistory(Long userId, Long companionId, Integer pageNum, Integer pageSize) {
// 获取当前活跃会话
LambdaQueryWrapper<KeyboardAiChatSession> sessionWrapper = new LambdaQueryWrapper<>();
sessionWrapper.eq(KeyboardAiChatSession::getUserId, userId)
.eq(KeyboardAiChatSession::getCompanionId, companionId)
.eq(KeyboardAiChatSession::getIsActive, true);
KeyboardAiChatSession activeSession = sessionService.getOne(sessionWrapper);
// 如果没有活跃会话,返回空分页
if (activeSession == null) {
return new Page<ChatMessageHistoryVO>(pageNum, pageSize).setRecords(Collections.emptyList());
}
Page<KeyboardAiChatMessage> page = new Page<>(pageNum, pageSize);
LambdaQueryWrapper<KeyboardAiChatMessage> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(KeyboardAiChatMessage::getUserId, userId)
.eq(KeyboardAiChatMessage::getCompanionId, companionId)
.eq(KeyboardAiChatMessage::getSessionId, activeSession.getId())
.orderByDesc(KeyboardAiChatMessage::getCreatedAt);
IPage<KeyboardAiChatMessage> entityPage = this.page(page, queryWrapper);
return entityPage.convert(entity -> BeanUtil.copyProperties(entity, ChatMessageHistoryVO.class));
@@ -34,9 +53,22 @@ public class KeyboardAiChatMessageServiceImpl extends ServiceImpl<KeyboardAiChat
@Override
public List<KeyboardAiChatMessage> getRecentMessages(Long userId, Long companionId, int limit) {
// 获取当前活跃会话
LambdaQueryWrapper<KeyboardAiChatSession> sessionWrapper = new LambdaQueryWrapper<>();
sessionWrapper.eq(KeyboardAiChatSession::getUserId, userId)
.eq(KeyboardAiChatSession::getCompanionId, companionId)
.eq(KeyboardAiChatSession::getIsActive, true);
KeyboardAiChatSession activeSession = sessionService.getOne(sessionWrapper);
// 如果没有活跃会话,返回空列表
if (activeSession == null) {
return Collections.emptyList();
}
LambdaQueryWrapper<KeyboardAiChatMessage> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(KeyboardAiChatMessage::getUserId, userId)
.eq(KeyboardAiChatMessage::getCompanionId, companionId)
.eq(KeyboardAiChatMessage::getSessionId, activeSession.getId())
.orderByDesc(KeyboardAiChatMessage::getCreatedAt)
.last("LIMIT " + limit);
List<KeyboardAiChatMessage> messages = this.list(queryWrapper);