PaperBasicInfo
parent
2e89f7244c
commit
43383b701f
|
|
@ -2,11 +2,24 @@ package org.qinan.cedu.mapper;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.qinan.cedu.model.entity.ClassStudentLearningRecordDO;
|
import org.qinan.cedu.model.entity.ClassStudentLearningRecordDO;
|
||||||
|
import org.qinan.cedu.model.vo.CourseStudentStatVO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 学员学习记录 Mapper
|
* 学员学习记录 Mapper
|
||||||
*/
|
*/
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface ClassStudentLearningRecordMapper extends BaseMapper<ClassStudentLearningRecordDO> {
|
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集合")
|
@ApiModelProperty("课件id集合")
|
||||||
private List<String> coursewareId;
|
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.convertor.ClassCourseConvertor;
|
||||||
import org.qinan.cedu.enums.DeleteEnum;
|
import org.qinan.cedu.enums.DeleteEnum;
|
||||||
import org.qinan.cedu.mapper.ClassCourseMapper;
|
import org.qinan.cedu.mapper.ClassCourseMapper;
|
||||||
|
import org.qinan.cedu.mapper.ClassStudentLearningRecordMapper;
|
||||||
import org.qinan.cedu.model.dto.ClassCourseDTO;
|
import org.qinan.cedu.model.dto.ClassCourseDTO;
|
||||||
import org.qinan.cedu.model.entity.ClassCourseDO;
|
import org.qinan.cedu.model.entity.ClassCourseDO;
|
||||||
import org.qinan.cedu.model.query.ClassCoursePageQuery;
|
import org.qinan.cedu.model.query.ClassCoursePageQuery;
|
||||||
import org.qinan.cedu.model.vo.ClassCourseVO;
|
import org.qinan.cedu.model.vo.ClassCourseVO;
|
||||||
|
import org.qinan.cedu.model.vo.CourseStudentStatVO;
|
||||||
import org.qinan.cedu.service.ClassCourseService;
|
import org.qinan.cedu.service.ClassCourseService;
|
||||||
import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults;
|
import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
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
|
@Autowired
|
||||||
private ClassCourseConvertor classCourseConvertor;
|
private ClassCourseConvertor classCourseConvertor;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ClassStudentLearningRecordMapper learningRecordMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IPage<ClassCourseVO> pageQuery(ClassCoursePageQuery query) {
|
public IPage<ClassCourseVO> pageQuery(ClassCoursePageQuery query) {
|
||||||
return this.lambdaQuery()
|
IPage<ClassCourseVO> page = this.lambdaQuery()
|
||||||
.eq(ClassCourseDO::getDeleteEnum, DeleteEnum.FALSE.getCode())
|
.eq(ClassCourseDO::getDeleteEnum, DeleteEnum.FALSE.getCode())
|
||||||
.eq(query.getClassId() != null, ClassCourseDO::getClassId, query.getClassId())
|
.eq(query.getClassId() != null, ClassCourseDO::getClassId, query.getClassId())
|
||||||
.like(StringUtils.hasText(query.getCourseName()), ClassCourseDO::getCourseName, query.getCourseName())
|
.like(StringUtils.hasText(query.getCourseName()), ClassCourseDO::getCourseName, query.getCourseName())
|
||||||
|
|
@ -38,6 +48,33 @@ public class ClassCourseServiceImpl extends ServiceImpl<ClassCourseMapper, Class
|
||||||
.orderByDesc(ClassCourseDO::getCreateTime)
|
.orderByDesc(ClassCourseDO::getCreateTime)
|
||||||
.page(new Page<>(query.getCurrent(), query.getSize()))
|
.page(new Page<>(query.getCurrent(), query.getSize()))
|
||||||
.convert(classCourseConvertor::convertEToVo);
|
.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
|
@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