feat(会话):分页查询任务的历史残片/报告接口

StudySessionsService 新增:
- getTaskFragments(taskNum, page, size, keyword) → Page<FragmentsEntity>
- getTaskReports(taskNum, page, size, keyword) → Page<ReportsEntity>

通过子查询 session_num in (select session_num from study_sessions
where task_num = ?) 实现跨 session 聚合,keyword 支持 content
字段 LIKE 搜索。接口使用 MyBatis-Plus Page 分页。

控制器新增两个 GET 端点:
- /study-sessions/tasks/{taskNum}/fragments
- /study-sessions/tasks/{taskNum}/reports
This commit is contained in:
2026-07-05 10:35:45 +08:00
parent eaa0e20c81
commit c1385911c6
3 changed files with 58 additions and 0 deletions
@@ -1,6 +1,7 @@
package com.guo.learningprogresstracker.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.protobuf.ServiceException;
import com.guo.learningprogresstracker.dto.StudySessionsDto;
@@ -190,4 +191,30 @@ public class StudySessionsServiceImpl extends ServiceImpl<StudySessionsMapper, S
.orElseGet(() -> String.join("\n", fragments));
}
// ============ 分页查询任务的历史残片/报告 ============
@Override
public Page<StudyReportFragmentsEntity> getTaskFragments(String taskNum, int page, int size, String keyword) {
Page<StudyReportFragmentsEntity> pg = new Page<>(page, size);
var wrapper = Wrappers.lambdaQuery(StudyReportFragmentsEntity.class)
.apply("session_num in (select session_num from study_sessions where task_num = {0})", taskNum)
.orderByDesc(StudyReportFragmentsEntity::getCreatedTime);
if (keyword != null && !keyword.isBlank()) {
wrapper.like(StudyReportFragmentsEntity::getContent, keyword);
}
return studyReportFragmentsMapper.selectPage(pg, wrapper);
}
@Override
public Page<StudyReportsEntity> getTaskReports(String taskNum, int page, int size, String keyword) {
Page<StudyReportsEntity> pg = new Page<>(page, size);
var wrapper = Wrappers.lambdaQuery(StudyReportsEntity.class)
.apply("session_num in (select session_num from study_sessions where task_num = {0})", taskNum)
.orderByDesc(StudyReportsEntity::getCreatedTime);
if (keyword != null && !keyword.isBlank()) {
wrapper.like(StudyReportsEntity::getContent, keyword);
}
return studyReportsMapper.selectPage(pg, wrapper);
}
}