导出课程学习记录添加用户、状态、时间等查询字段支持

This commit is contained in:
miaowenbo
2025-11-26 11:13:56 +08:00
parent f3e2908b41
commit 50c7cb4dba
2 changed files with 35 additions and 6 deletions

View File

@@ -306,15 +306,16 @@ public class StudyCourseApi extends ApiBaseController{
* 数据维度:(单门课程、多个学生)
* 25.11.20新增
*
* @param courseId 课程id
* @param sc 课程学习记录查询参数
*/
@RequestMapping(value="/export",method = {RequestMethod.GET,RequestMethod.POST})
public void export(String courseId, HttpServletResponse response) {
public void export(StudyCourse sc, HttpServletResponse response) {
// 入参校验
if (StringUtils.isBlank(courseId)) {
if (StringUtils.isBlank(sc.getCourseId())) {
log.error("【导出课程学习记录】课程id不能为空");
return;
}
String courseId = sc.getCourseId();
// 定义输出流
OutputStream outputStream = null;
try {
@@ -378,9 +379,7 @@ public class StudyCourseApi extends ApiBaseController{
}
}
// 3.查询课程学习记录信息并拼接导出信息
StudyCourse studyCourse = new StudyCourse();
studyCourse.setCourseId(courseId);
List<StudyCourse> studyCourses = service.findList(studyCourse, null, null);
List<StudyCourse> studyCourses = service.findList(sc, null, null);
// 通过studyCourses中的人员id集合(去重),调用用户中心接口获取人员信息,填充部门字段
List<String> userIds = studyCourses.stream().map(StudyCourse::getAid).filter(Objects::nonNull).collect(Collectors.toList());
if (!userIds.isEmpty()) {

View File

@@ -806,6 +806,36 @@ public class StudyCourseServiceImpl implements IStudyCourseService{
if (StringUtils.isNotBlank(sc.getAid())) {
query.addFilter(FieldFilters.eq("aid", sc.getAid()));
}
// 25.11.25新增:添加基于时间的查询条件
if (sc.getQueryStartTime() != null && sc.getQueryFinishTime() != null) {
// 开始结束时间均传入的情况,实现筛选逻辑
// (startTime >= 查询开始时间 AND startTime <= 查询结束时间) OR (finishTime >= 查询开始时间 AND finishTime <= 查询结束时间)
// 这样兼容查询结束时间为空值的情况,因为学员课程未结束时没有结束时间
LocalDate startDate = LocalDate.parse(sc.getQueryStartTime());
LocalDateTime startDateTime = startDate.atStartOfDay();
LocalDate finishDate = LocalDate.parse(sc.getQueryFinishTime());
LocalDateTime finishDateTime = finishDate.atTime(LocalTime.MAX);
// 筛选开始时间
IFieldFilter startTimeInRange = FieldFilters.and(FieldFilters.ge("startTime", startDateTime), FieldFilters.le("startTime", finishDateTime));
// 筛选结束时间
IFieldFilter finishTimeInRange = FieldFilters.and(FieldFilters.ge("finishTime", startDateTime), FieldFilters.le("finishTime", finishDateTime));
// OR条件查询
query.addFilter(FieldFilters.or(startTimeInRange, finishTimeInRange));
} else {
// 只输出单个参数情况
// 筛选开始时间
if (sc.getQueryStartTime() != null) {
LocalDate startDate = LocalDate.parse(sc.getQueryStartTime());
LocalDateTime startDateTime = startDate.atStartOfDay();
query.addFilter(FieldFilters.ge("startTime", startDateTime));
}
// 筛选结束时间
if (sc.getQueryFinishTime() != null) {
LocalDate finishDate = LocalDate.parse(sc.getQueryFinishTime());
LocalDateTime finishDateTime = finishDate.atTime(LocalTime.MAX);
query.addFilter(FieldFilters.le("finishTime", finishDateTime));
}
}
}
if (isFinish != null) {
if (isFinish) {