fix(service): 限制聊天查询仅活跃会话
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user