PaperBasicInfo
parent
2e89f7244c
commit
43383b701f
|
|
@ -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<ClassStudentLearningRecordDO> {
|
||||
|
||||
/**
|
||||
* 按课程分组统计学习记录数量(上课学员数、已完成学员数)
|
||||
*
|
||||
* @param classId 班级id(可为空,为空时不按班级过滤)
|
||||
* @param courseIds 课程id集合
|
||||
* @return 各课程学员统计结果
|
||||
*/
|
||||
List<CourseStudentStatVO> countByCourseIds(@Param("classId") Long classId, @Param("courseIds") List<Long> courseIds);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,4 +32,10 @@ public class ClassCourseVO extends BaseVO {
|
|||
|
||||
@ApiModelProperty("课件id集合")
|
||||
private List<String> coursewareId;
|
||||
|
||||
@ApiModelProperty("上课学员数")
|
||||
private Long studentCount;
|
||||
|
||||
@ApiModelProperty("已完成学员数")
|
||||
private Long completedCount;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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<ClassCourseMapper, Class
|
|||
@Autowired
|
||||
private ClassCourseConvertor classCourseConvertor;
|
||||
|
||||
@Autowired
|
||||
private ClassStudentLearningRecordMapper learningRecordMapper;
|
||||
|
||||
@Override
|
||||
public IPage<ClassCourseVO> pageQuery(ClassCoursePageQuery query) {
|
||||
return this.lambdaQuery()
|
||||
IPage<ClassCourseVO> 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<ClassCourseMapper, Class
|
|||
.orderByDesc(ClassCourseDO::getCreateTime)
|
||||
.page(new Page<>(query.getCurrent(), query.getSize()))
|
||||
.convert(classCourseConvertor::convertEToVo);
|
||||
fillStudentCount(page.getRecords(), query.getClassId());
|
||||
return page;
|
||||
}
|
||||
|
||||
/**
|
||||
* 填充当前页各课程的学员统计数(上课学员数、已完成学员数)
|
||||
*
|
||||
* @param records 当前页班级课程列表
|
||||
* @param classId 班级id(可为空,为空时不按班级过滤)
|
||||
*/
|
||||
private void fillStudentCount(List<ClassCourseVO> records, Long classId) {
|
||||
if (CollectionUtils.isEmpty(records)) {
|
||||
return;
|
||||
}
|
||||
List<Long> courseIds = records.stream()
|
||||
.map(vo -> Long.valueOf(vo.getCourseId()))
|
||||
.collect(Collectors.toList());
|
||||
Map<Long, CourseStudentStatVO> 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
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.qinan.cedu.mapper.ClassStudentLearningRecordMapper">
|
||||
|
||||
<select id="countByCourseIds" resultType="org.qinan.cedu.model.vo.CourseStudentStatVO">
|
||||
SELECT course_id AS courseId
|
||||
, COUNT(*) AS studentCount
|
||||
<!-- 学习状态:2-已完成 -->
|
||||
, SUM(study_status = 2) AS completedCount
|
||||
FROM class_student_learning_record
|
||||
WHERE delete_enum = 'false'
|
||||
<if test="classId != null">
|
||||
AND class_id = #{classId}
|
||||
</if>
|
||||
AND course_id IN
|
||||
<foreach collection="courseIds" item="courseId" open="(" separator="," close=")">
|
||||
#{courseId}
|
||||
</foreach>
|
||||
GROUP BY course_id
|
||||
</select>
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue