package com.gkhy.exam.system.service.impl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.gkhy.exam.common.constant.CacheConstant;
|
import com.gkhy.exam.common.enums.ResourceTypeEnum;
|
import com.gkhy.exam.common.exception.ApiException;
|
import com.gkhy.exam.common.utils.RedisUtils;
|
import com.gkhy.exam.system.domain.*;
|
import com.gkhy.exam.system.domain.vo.StudentStudyPeriodVO;
|
import com.gkhy.exam.system.domain.vo.StudentStudyVO;
|
import com.gkhy.exam.system.mapper.ExCoursePhaseMapper;
|
import com.gkhy.exam.system.mapper.ExResourceMapper;
|
import com.gkhy.exam.system.mapper.ExStudentStudyMapper;
|
import com.gkhy.exam.system.service.ExCourseChapterService;
|
import com.gkhy.exam.system.service.ExStudentStudyService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.concurrent.TimeUnit;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 课程学习学习日志表 服务实现类
|
* </p>
|
*
|
* @author kzy
|
* @since 2024-06-06 13:53:17
|
*/
|
@Service
|
public class ExStudentStudyServiceImpl extends ServiceImpl<ExStudentStudyMapper, ExStudentStudy> implements ExStudentStudyService {
|
@Autowired
|
private ExCourseChapterService courseChapterService;
|
@Autowired
|
private ExCoursePhaseMapper coursePhaseMapper;
|
@Autowired
|
private ExResourceMapper resourceMapper;
|
@Autowired
|
private RedisUtils redisUtils;
|
|
@Override
|
public Long insertStudentStudy(ExStudentStudy studentStudy) {
|
int row=0;
|
ExStudentStudy existStudentStudy=baseMapper.selectStudyByObject(studentStudy);
|
if(existStudentStudy!=null){
|
studentStudy.setId(existStudentStudy.getId());
|
row=baseMapper.updateById(existStudentStudy);
|
}else{
|
row=baseMapper.insert(studentStudy);
|
if(row<1){
|
throw new ApiException("新增学习记录失败");
|
}
|
}
|
System.out.println("student_study id:"+studentStudy.getId());
|
return studentStudy.getId();
|
}
|
|
@Override
|
public int deleteStudentStudyById(Long studyId) {
|
return baseMapper.deleteById(studyId);
|
}
|
|
@Override
|
public List<StudentStudyVO> selectStudyByPhaseAndStundentId(Long phaseId,Long studentId,Integer status) {
|
ExCoursePhase coursePhase=coursePhaseMapper.selectById(phaseId);
|
Long courseId=coursePhase.getCourseId();
|
List<ExStudentStudy> studentStudyList= baseMapper.selectStudyByPhaseAndStudentId(phaseId,courseId,studentId);
|
Map<Long,ExStudentStudy> studentStudyMap=studentStudyList.stream().collect(Collectors.toMap(ExStudentStudy::getPeriodId, item->item));
|
List<ExCourseChapter> courseChapterList=courseChapterService.selectChapterByCourseId(courseId, status);
|
List<StudentStudyVO> studentStudyVOList=courseChapterList.stream().map(item ->{
|
StudentStudyVO studentStudyVO=new StudentStudyVO();
|
studentStudyVO.setChapterId(item.getId());
|
studentStudyVO.setCourseId(item.getCourseId());
|
studentStudyVO.setChapterName(item.getName());
|
List<StudentStudyPeriodVO> studentStudyPeriodVOList=new ArrayList<>();
|
for(ExCourseChapterPeriod courseChapterPeriod:item.getChapterPeriods()){
|
StudentStudyPeriodVO studentStudyPeriodVO=new StudentStudyPeriodVO();
|
studentStudyPeriodVO.setPeriodName(courseChapterPeriod.getName());
|
studentStudyPeriodVO.setPeriodId(courseChapterPeriod.getId());
|
studentStudyPeriodVO.setPeriod(courseChapterPeriod.getPeriod());
|
studentStudyPeriodVO.setResourceId(courseChapterPeriod.getResourceId());
|
studentStudyPeriodVO.setResourceType(courseChapterPeriod.getResource()!=null?courseChapterPeriod.getResource().getResourceType():null);
|
ExStudentStudy exStudentStudy=studentStudyMap.get(courseChapterPeriod.getId());
|
if(exStudentStudy!=null){
|
studentStudyPeriodVO.setProgress(exStudentStudy.getProgress());
|
studentStudyPeriodVO.setCreateTime(exStudentStudy.getCreateTime());
|
studentStudyPeriodVO.setUpdateTime(exStudentStudy.getUpdateTime());
|
studentStudyPeriodVO.setStudyId(exStudentStudy.getId());
|
}
|
studentStudyPeriodVOList.add(studentStudyPeriodVO);
|
}
|
studentStudyVO.setStudentStudyPeriodVOList(studentStudyPeriodVOList);
|
return studentStudyVO;
|
}).collect(Collectors.toList());
|
|
return studentStudyVOList;
|
}
|
|
@Override
|
public void progress(ExStudentStudy studentStudy) {
|
if(studentStudy.getId()==null||studentStudy.getPhaseId()==null||studentStudy.getPeriodId()==null||studentStudy.getStudentId()==null||studentStudy.getResourceId()==null){
|
throw new ApiException("参数传参错误");
|
}
|
ExResource resource=resourceMapper.selectById(studentStudy.getResourceId());
|
if (ResourceTypeEnum.AUDIO.getCode().equals(resource.getResourceType()) || ResourceTypeEnum.VIDEO.getCode().equals(resource.getResourceType())) {
|
// 音视频处理
|
if (new BigDecimal(resource.getResourceLength()).subtract(new BigDecimal(studentStudy.getCurrentDuration())).intValue() < 1) {
|
// 学习完成
|
completeStudy(studentStudy);
|
}
|
} else if (ResourceTypeEnum.DOC.getCode().equals(resource.getResourceType())) {
|
// 文档类型处理
|
// if (studentStudy.getCurrentPage().compareTo(resource.getDocPage()) >= 0) {
|
// // 学习完成
|
// completeStudy(studentStudy);
|
// }
|
// 学习完成
|
completeStudy(studentStudy);
|
}
|
redisUtils.set(CacheConstant.STUDY_PROCESS_KEY + studentStudy.getId(), studentStudy, 1, TimeUnit.DAYS);
|
}
|
|
private void completeStudy(ExStudentStudy studentStudy) {
|
studentStudy.setProgress(BigDecimal.valueOf(100));
|
// 更新观看记录
|
baseMapper.updateById(studentStudy);
|
}
|
}
|