diff --git a/src/main/java/com/yolo/keyborad/service/impl/KeyboardAiChatMessageServiceImpl.java b/src/main/java/com/yolo/keyborad/service/impl/KeyboardAiChatMessageServiceImpl.java index 9e37efe..258e99c 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/KeyboardAiChatMessageServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/KeyboardAiChatMessageServiceImpl.java @@ -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 implements KeyboardAiChatMessageService { + @Resource + private KeyboardAiChatSessionService sessionService; + @Override public IPage pageHistory(Long userId, Long companionId, Integer pageNum, Integer pageSize) { + // 获取当前活跃会话 + LambdaQueryWrapper 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(pageNum, pageSize).setRecords(Collections.emptyList()); + } + Page page = new Page<>(pageNum, pageSize); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(KeyboardAiChatMessage::getUserId, userId) .eq(KeyboardAiChatMessage::getCompanionId, companionId) + .eq(KeyboardAiChatMessage::getSessionId, activeSession.getId()) .orderByDesc(KeyboardAiChatMessage::getCreatedAt); IPage entityPage = this.page(page, queryWrapper); return entityPage.convert(entity -> BeanUtil.copyProperties(entity, ChatMessageHistoryVO.class)); @@ -34,9 +53,22 @@ public class KeyboardAiChatMessageServiceImpl extends ServiceImpl getRecentMessages(Long userId, Long companionId, int limit) { + // 获取当前活跃会话 + LambdaQueryWrapper 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 queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(KeyboardAiChatMessage::getUserId, userId) .eq(KeyboardAiChatMessage::getCompanionId, companionId) + .eq(KeyboardAiChatMessage::getSessionId, activeSession.getId()) .orderByDesc(KeyboardAiChatMessage::getCreatedAt) .last("LIMIT " + limit); List messages = this.list(queryWrapper);