From 43383b701f251d12c093ebb2bceb87c0723d1bdb Mon Sep 17 00:00:00 2001 From: luotaiqian <1147642922@qq.com> Date: Fri, 21 Aug 2026 17:36:01 +0800 Subject: [PATCH] PaperBasicInfo --- .../ClassStudentLearningRecordMapper.java | 13 +++++++ .../qinan/cedu/model/vo/ClassCourseVO.java | 6 +++ .../cedu/model/vo/CourseStudentStatVO.java | 20 ++++++++++ .../service/impl/ClassCourseServiceImpl.java | 39 ++++++++++++++++++- .../ClassStudentLearningRecordMapper.xml | 21 ++++++++++ 5 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/CourseStudentStatVO.java create mode 100644 safety-cedu-service/src/main/resources/mapper/ClassStudentLearningRecordMapper.xml diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/mapper/ClassStudentLearningRecordMapper.java b/safety-cedu-service/src/main/java/org/qinan/cedu/mapper/ClassStudentLearningRecordMapper.java index c6a26dc6..2dedbd91 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/mapper/ClassStudentLearningRecordMapper.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/mapper/ClassStudentLearningRecordMapper.java @@ -2,11 +2,24 @@ package org.qinan.cedu.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.qinan.cedu.model.entity.ClassStudentLearningRecordDO; +import org.qinan.cedu.model.vo.CourseStudentStatVO; + +import java.util.List; /** * 学员学习记录 Mapper */ @Mapper public interface ClassStudentLearningRecordMapper extends BaseMapper { + + /** + * 按课程分组统计学习记录数量(上课学员数、已完成学员数) + * + * @param classId 班级id(可为空,为空时不按班级过滤) + * @param courseIds 课程id集合 + * @return 各课程学员统计结果 + */ + List countByCourseIds(@Param("classId") Long classId, @Param("courseIds") List courseIds); } diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassCourseVO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassCourseVO.java index 0b7164f5..bea9ae98 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassCourseVO.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassCourseVO.java @@ -32,4 +32,10 @@ public class ClassCourseVO extends BaseVO { @ApiModelProperty("课件id集合") private List coursewareId; + + @ApiModelProperty("上课学员数") + private Long studentCount; + + @ApiModelProperty("已完成学员数") + private Long completedCount; } diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/CourseStudentStatVO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/CourseStudentStatVO.java new file mode 100644 index 00000000..63373e75 --- /dev/null +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/CourseStudentStatVO.java @@ -0,0 +1,20 @@ +package org.qinan.cedu.model.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 班级课程学员数量统计结果 + */ +@Data +public class CourseStudentStatVO { + + @ApiModelProperty("课程id") + private Long courseId; + + @ApiModelProperty("上课学员数") + private Long studentCount; + + @ApiModelProperty("已完成学员数") + private Long completedCount; +} diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassCourseServiceImpl.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassCourseServiceImpl.java index dbc56789..b6ef9343 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassCourseServiceImpl.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassCourseServiceImpl.java @@ -6,17 +6,24 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.qinan.cedu.convertor.ClassCourseConvertor; import org.qinan.cedu.enums.DeleteEnum; import org.qinan.cedu.mapper.ClassCourseMapper; +import org.qinan.cedu.mapper.ClassStudentLearningRecordMapper; import org.qinan.cedu.model.dto.ClassCourseDTO; import org.qinan.cedu.model.entity.ClassCourseDO; import org.qinan.cedu.model.query.ClassCoursePageQuery; import org.qinan.cedu.model.vo.ClassCourseVO; +import org.qinan.cedu.model.vo.CourseStudentStatVO; import org.qinan.cedu.service.ClassCourseService; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 班级课程服务实现 @@ -28,9 +35,12 @@ public class ClassCourseServiceImpl extends ServiceImpl pageQuery(ClassCoursePageQuery query) { - return this.lambdaQuery() + IPage page = this.lambdaQuery() .eq(ClassCourseDO::getDeleteEnum, DeleteEnum.FALSE.getCode()) .eq(query.getClassId() != null, ClassCourseDO::getClassId, query.getClassId()) .like(StringUtils.hasText(query.getCourseName()), ClassCourseDO::getCourseName, query.getCourseName()) @@ -38,6 +48,33 @@ public class ClassCourseServiceImpl extends ServiceImpl(query.getCurrent(), query.getSize())) .convert(classCourseConvertor::convertEToVo); + fillStudentCount(page.getRecords(), query.getClassId()); + return page; + } + + /** + * 填充当前页各课程的学员统计数(上课学员数、已完成学员数) + * + * @param records 当前页班级课程列表 + * @param classId 班级id(可为空,为空时不按班级过滤) + */ + private void fillStudentCount(List records, Long classId) { + if (CollectionUtils.isEmpty(records)) { + return; + } + List courseIds = records.stream() + .map(vo -> Long.valueOf(vo.getCourseId())) + .collect(Collectors.toList()); + Map statMap = learningRecordMapper.countByCourseIds(classId, courseIds).stream() + .collect(Collectors.toMap(CourseStudentStatVO::getCourseId, Function.identity())); + for (ClassCourseVO vo : records) { + CourseStudentStatVO stat = statMap.get(Long.valueOf(vo.getCourseId())); + if (stat == null) { + continue; + } + vo.setStudentCount(stat.getStudentCount()); + vo.setCompletedCount(stat.getCompletedCount()); + } } @Override diff --git a/safety-cedu-service/src/main/resources/mapper/ClassStudentLearningRecordMapper.xml b/safety-cedu-service/src/main/resources/mapper/ClassStudentLearningRecordMapper.xml new file mode 100644 index 00000000..d78d7b1a --- /dev/null +++ b/safety-cedu-service/src/main/resources/mapper/ClassStudentLearningRecordMapper.xml @@ -0,0 +1,21 @@ + + + + + +