PaperBasicInfo

dev-tmp1
luotaiqian 2026-08-21 17:36:01 +08:00
parent 2e89f7244c
commit 43383b701f
5 changed files with 98 additions and 1 deletions

View File

@ -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);
}

View File

@ -32,4 +32,10 @@ public class ClassCourseVO extends BaseVO {
@ApiModelProperty("课件id集合")
private List<String> coursewareId;
@ApiModelProperty("上课学员数")
private Long studentCount;
@ApiModelProperty("已完成学员数")
private Long completedCount;
}

View File

@ -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;
}

View File

@ -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

View File

@ -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>