Merge remote-tracking branch 'origin/dev-tmp1' into dev-tmp1

dev-tmp1
luotaiqian 2026-08-25 17:57:31 +08:00
commit 4c29a8b077
5 changed files with 59 additions and 49 deletions

View File

@ -7,6 +7,7 @@ import io.swagger.annotations.ApiParam;
import org.qinan.cedu.model.dto.ClassCourseDTO; import org.qinan.cedu.model.dto.ClassCourseDTO;
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.ClassManagementVO;
import org.qinan.cedu.model.vo.ExamStatisticsAndRecordVO; import org.qinan.cedu.model.vo.ExamStatisticsAndRecordVO;
import org.qinan.cedu.service.ClassCourseService; import org.qinan.cedu.service.ClassCourseService;
import org.qinan.safetyeval.client.dto.PageResponse; import org.qinan.safetyeval.client.dto.PageResponse;
@ -71,8 +72,8 @@ public class ClassCourseController {
@ApiOperation("我的学习") @ApiOperation("我的学习")
@GetMapping("/myCoursePage") @GetMapping("/myCoursePage")
public SingleResponse<List<ClassCourseVO>> myCoursePage() { public SingleResponse<List<ClassManagementVO>> myCoursePage() {
List<ClassCourseVO> list = classCourseService.myCoursePage(); List<ClassManagementVO> list = classCourseService.myCoursePage();
return SingleResponse.success(list); return SingleResponse.success(list);
} }

View File

@ -8,7 +8,7 @@ import lombok.AllArgsConstructor;
import org.qinan.cedu.model.dto.AnswerQuestionDTO; import org.qinan.cedu.model.dto.AnswerQuestionDTO;
import org.qinan.cedu.model.dto.StartExamDTO; import org.qinan.cedu.model.dto.StartExamDTO;
import org.qinan.cedu.model.dto.SubmitExamDTO; import org.qinan.cedu.model.dto.SubmitExamDTO;
import org.qinan.cedu.model.vo.ClassCourseVO; import org.qinan.cedu.model.vo.ClassManagementVO;
import org.qinan.cedu.model.vo.ExamStatisticsAndRecordVO; import org.qinan.cedu.model.vo.ExamStatisticsAndRecordVO;
import org.qinan.cedu.model.vo.PaperExamDetailVO; import org.qinan.cedu.model.vo.PaperExamDetailVO;
import org.qinan.cedu.model.vo.StartExamVO; import org.qinan.cedu.model.vo.StartExamVO;
@ -34,8 +34,8 @@ public class StudyController {
@ApiOperation("我的学习") @ApiOperation("我的学习")
@GetMapping("/myCoursePage") @GetMapping("/myCoursePage")
public SingleResponse<List<ClassCourseVO>> myCoursePage() { public SingleResponse<List<ClassManagementVO>> myCoursePage() {
List<ClassCourseVO> list = classCourseService.myCoursePage(); List<ClassManagementVO> list = classCourseService.myCoursePage();
return SingleResponse.success(list); return SingleResponse.success(list);
} }

View File

@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
/** /**
* *
@ -101,4 +102,7 @@ public class ClassManagementVO extends BaseVO {
@ApiModelProperty("完成人员数") @ApiModelProperty("完成人员数")
private Long completedCount; private Long completedCount;
@ApiModelProperty("班级课程列表")
private List<ClassCourseVO> classCourseList;
} }

View File

@ -6,6 +6,7 @@ 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.ClassManagementVO;
import org.qinan.cedu.model.vo.ExamStatisticsAndRecordVO; import org.qinan.cedu.model.vo.ExamStatisticsAndRecordVO;
import java.util.List; import java.util.List;
@ -33,7 +34,7 @@ public interface ClassCourseService extends IService<ClassCourseDO> {
boolean deleteById(Long id); boolean deleteById(Long id);
List<ClassCourseVO> myCoursePage(); List<ClassManagementVO> myCoursePage();
ExamStatisticsAndRecordVO scoreQuery(); ExamStatisticsAndRecordVO scoreQuery();

View File

@ -4,19 +4,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.qinan.cedu.convertor.ClassCourseConvertor; import org.qinan.cedu.convertor.*;
import org.qinan.cedu.convertor.ClassStudentExamRecordConvertor;
import org.qinan.cedu.convertor.CourseRelCoursewareConvertor;
import org.qinan.cedu.convertor.CoursewareManagementConvertor;
import org.qinan.cedu.enums.DeleteEnum; import org.qinan.cedu.enums.DeleteEnum;
import org.qinan.cedu.mapper.*; import org.qinan.cedu.mapper.*;
import org.qinan.cedu.model.dto.ClassCourseDTO; import org.qinan.cedu.model.dto.ClassCourseDTO;
import org.qinan.cedu.model.entity.*; import org.qinan.cedu.model.entity.*;
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.*;
import org.qinan.cedu.model.vo.ClassStudentExamRecordVO;
import org.qinan.cedu.model.vo.CourseStudentStatVO;
import org.qinan.cedu.model.vo.ExamStatisticsAndRecordVO;
import org.qinan.cedu.service.ClassCourseService; import org.qinan.cedu.service.ClassCourseService;
import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter;
import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults;
@ -63,6 +57,8 @@ public class ClassCourseServiceImpl extends ServiceImpl<ClassCourseMapper, Class
private ClassStudentExamRecordMapper classStudentExamRecordMapper; private ClassStudentExamRecordMapper classStudentExamRecordMapper;
@Autowired @Autowired
private ClassStudentExamRecordConvertor classStudentExamRecordConvertor; private ClassStudentExamRecordConvertor classStudentExamRecordConvertor;
@Autowired
private ClassManagementConvertor classManagementConvertor;
@Override @Override
public IPage<ClassCourseVO> pageQuery(ClassCoursePageQuery query) { public IPage<ClassCourseVO> pageQuery(ClassCoursePageQuery query) {
@ -201,46 +197,54 @@ public class ClassCourseServiceImpl extends ServiceImpl<ClassCourseMapper, Class
} }
@Override @Override
public List<ClassCourseVO> myCoursePage() { public List<ClassManagementVO> myCoursePage() {
List<Long> classId = classStudentMapper.selectList(new LambdaQueryWrapper<ClassStudentDO>() List<Long> classId = classStudentMapper.selectList(new LambdaQueryWrapper<ClassStudentDO>()
.eq(ClassStudentDO::getStudentId, AuthUserContextAdapter.getCurrentUserId())) .eq(ClassStudentDO::getStudentId, AuthUserContextAdapter.getCurrentUserId()))
.stream().map(ClassStudentDO::getClassId).distinct().collect(Collectors.toList()); .stream().map(ClassStudentDO::getClassId).distinct().collect(Collectors.toList());
List<ClassCourseDO> classCourseDOS = baseMapper.selectList(new LambdaQueryWrapper<ClassCourseDO>() if (!CollectionUtils.isEmpty(classId)) {
.eq(ClassCourseDO::getClassId, CollectionUtils.isEmpty(classId) ? Collections.singletonList(0L) : classId) List<ClassCourseDO> classCourseDOS = baseMapper.selectList(new LambdaQueryWrapper<ClassCourseDO>()
.eq(ClassCourseDO::getDeleteEnum, DeleteEnum.FALSE.getCode())); .eq(ClassCourseDO::getClassId, classId)
//查询班级 .eq(ClassCourseDO::getDeleteEnum, DeleteEnum.FALSE.getCode()));
Map<Long, ClassManagementDO> collectClassMap = classManagementMapper.selectList(new LambdaQueryWrapper<ClassManagementDO>() //查询班级
.in(ClassManagementDO::getId, CollectionUtils.isEmpty(classId) ? Collections.singletonList(0L) : classId)) Map<Long, ClassManagementDO> collectClassMap = classManagementMapper.selectList(new LambdaQueryWrapper<ClassManagementDO>()
.stream().collect(Collectors.toMap(ClassManagementDO::getId, Function.identity())); .in(ClassManagementDO::getId, classId))
return classCourseDOS.stream().map(item -> { .stream().collect(Collectors.toMap(ClassManagementDO::getId, Function.identity()));
ClassCourseVO classCourseVO = classCourseConvertor.convertEToVo(item); List<ClassCourseVO> classCourseVOS = classCourseDOS.stream().map(item -> {
List<ClassStudentLearningRecordDO> classStudentLearningRecordDOS = learningRecordMapper.selectList(new LambdaQueryWrapper<ClassStudentLearningRecordDO>() ClassCourseVO classCourseVO = classCourseConvertor.convertEToVo(item);
.eq(ClassStudentLearningRecordDO::getStudentId, AuthUserContextAdapter.getCurrentUserId()) List<ClassStudentLearningRecordDO> classStudentLearningRecordDOS = learningRecordMapper.selectList(new LambdaQueryWrapper<ClassStudentLearningRecordDO>()
.eq(ClassStudentLearningRecordDO::getCourseId, item.getId()) .eq(ClassStudentLearningRecordDO::getStudentId, AuthUserContextAdapter.getCurrentUserId())
.eq(ClassStudentLearningRecordDO::getClassId, item.getClassId())); .eq(ClassStudentLearningRecordDO::getCourseId, item.getId())
// getStudyStatus()都为2就是完成, 否则为未完成 .eq(ClassStudentLearningRecordDO::getClassId, item.getClassId()));
int completed = classStudentLearningRecordDOS.stream().allMatch(record -> record.getStudyStatus() != null && record.getStudyStatus() == 2) ? 2 : 0; // getStudyStatus()都为2就是完成, 否则为未完成
ClassManagementDO classManagementDO = collectClassMap.get(item.getClassId()); int completed = classStudentLearningRecordDOS.stream().allMatch(record -> record.getStudyStatus() != null && record.getStudyStatus() == 2) ? 2 : 0;
if (classManagementDO != null) { ClassManagementDO classManagementDO = collectClassMap.get(item.getClassId());
classCourseVO.setClassName(classManagementDO.getClassName()); if (classManagementDO != null) {
LocalDateTime endDate = classManagementDO.getEndDate(); classCourseVO.setClassName(classManagementDO.getClassName());
if (classManagementDO.getDelayTime() != null && classManagementDO.getDelayTime().isAfter(endDate)) { LocalDateTime endDate = classManagementDO.getEndDate();
endDate = classManagementDO.getDelayTime(); if (classManagementDO.getDelayTime() != null && classManagementDO.getDelayTime().isAfter(endDate)) {
endDate = classManagementDO.getDelayTime();
}
classCourseVO.setEndDate(endDate);
} }
classCourseVO.setEndDate(endDate); if (completed == 0) {
} LocalDateTime endDate = classCourseVO.getEndDate();
if (completed == 0) { if (LocalDateTime.now().isBefore(endDate)) {
LocalDateTime endDate = classCourseVO.getEndDate(); classCourseVO.setCompleted(1);
if (LocalDateTime.now().isBefore(endDate)) { }
classCourseVO.setCompleted(1);
} }
} classCourseVO.setCompleted(completed);
classCourseVO.setCompleted(completed); // 查询课件
// 查询课件 classCourseVO.setCoursewareList(coursewareManagementMapper.selectBatchIds(item.getCoursewareId())
classCourseVO.setCoursewareList(coursewareManagementMapper.selectBatchIds(item.getCoursewareId()) .stream().map(coursewareManagementConvertor::convertEToVo).collect(Collectors.toList()));
.stream().map(coursewareManagementConvertor::convertEToVo).collect(Collectors.toList())); return classCourseVO;
return classCourseVO; }).collect(Collectors.toList());
}).collect(Collectors.toList()); return classManagementMapper.selectBatchIds(classId).stream().map(item -> {
ClassManagementVO classManagementVO = classManagementConvertor.convertEToVo(item);
classManagementVO.setClassCourseList(classCourseVOS.stream().filter(f -> f.getClassId().equals(String.valueOf(item.getId()))).collect(Collectors.toList()));
return classManagementVO;
}).collect(Collectors.toList());
}
return Collections.emptyList();
} }
@Override @Override