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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.yolo.keyborad.mapper.KeyboardAiChatMessageMapper;
|
import com.yolo.keyborad.mapper.KeyboardAiChatMessageMapper;
|
||||||
import com.yolo.keyborad.model.entity.KeyboardAiChatMessage;
|
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.model.vo.ChatMessageHistoryVO;
|
||||||
import com.yolo.keyborad.service.KeyboardAiChatMessageService;
|
import com.yolo.keyborad.service.KeyboardAiChatMessageService;
|
||||||
|
import com.yolo.keyborad.service.KeyboardAiChatSessionService;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -21,12 +24,28 @@ import java.util.List;
|
|||||||
@Service
|
@Service
|
||||||
public class KeyboardAiChatMessageServiceImpl extends ServiceImpl<KeyboardAiChatMessageMapper, KeyboardAiChatMessage> implements KeyboardAiChatMessageService {
|
public class KeyboardAiChatMessageServiceImpl extends ServiceImpl<KeyboardAiChatMessageMapper, KeyboardAiChatMessage> implements KeyboardAiChatMessageService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private KeyboardAiChatSessionService sessionService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IPage<ChatMessageHistoryVO> pageHistory(Long userId, Long companionId, Integer pageNum, Integer pageSize) {
|
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);
|
Page<KeyboardAiChatMessage> page = new Page<>(pageNum, pageSize);
|
||||||
LambdaQueryWrapper<KeyboardAiChatMessage> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<KeyboardAiChatMessage> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
queryWrapper.eq(KeyboardAiChatMessage::getUserId, userId)
|
queryWrapper.eq(KeyboardAiChatMessage::getUserId, userId)
|
||||||
.eq(KeyboardAiChatMessage::getCompanionId, companionId)
|
.eq(KeyboardAiChatMessage::getCompanionId, companionId)
|
||||||
|
.eq(KeyboardAiChatMessage::getSessionId, activeSession.getId())
|
||||||
.orderByDesc(KeyboardAiChatMessage::getCreatedAt);
|
.orderByDesc(KeyboardAiChatMessage::getCreatedAt);
|
||||||
IPage<KeyboardAiChatMessage> entityPage = this.page(page, queryWrapper);
|
IPage<KeyboardAiChatMessage> entityPage = this.page(page, queryWrapper);
|
||||||
return entityPage.convert(entity -> BeanUtil.copyProperties(entity, ChatMessageHistoryVO.class));
|
return entityPage.convert(entity -> BeanUtil.copyProperties(entity, ChatMessageHistoryVO.class));
|
||||||
@@ -34,9 +53,22 @@ public class KeyboardAiChatMessageServiceImpl extends ServiceImpl<KeyboardAiChat
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<KeyboardAiChatMessage> getRecentMessages(Long userId, Long companionId, int limit) {
|
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<>();
|
LambdaQueryWrapper<KeyboardAiChatMessage> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
queryWrapper.eq(KeyboardAiChatMessage::getUserId, userId)
|
queryWrapper.eq(KeyboardAiChatMessage::getUserId, userId)
|
||||||
.eq(KeyboardAiChatMessage::getCompanionId, companionId)
|
.eq(KeyboardAiChatMessage::getCompanionId, companionId)
|
||||||
|
.eq(KeyboardAiChatMessage::getSessionId, activeSession.getId())
|
||||||
.orderByDesc(KeyboardAiChatMessage::getCreatedAt)
|
.orderByDesc(KeyboardAiChatMessage::getCreatedAt)
|
||||||
.last("LIMIT " + limit);
|
.last("LIMIT " + limit);
|
||||||
List<KeyboardAiChatMessage> messages = this.list(queryWrapper);
|
List<KeyboardAiChatMessage> messages = this.list(queryWrapper);
|
||||||
|
|||||||
Reference in New Issue
Block a user