Compare commits

...

6 Commits

Author SHA1 Message Date
sunhonglai
cdf9698f71 修改注解 2025-04-07 15:09:04 +08:00
sunhonglai
74bcec72bc 修改学习时长取值 2025-04-01 09:59:59 +08:00
sunhonglai
b8c171bf86 Merge branch '250331-bugfix-shl-newmaster' into 250331-bugfix-shl
# Conflicts:
#	servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java
2025-04-01 09:51:14 +08:00
sunhonglai
175e7f6c28 查询课程和修改课程学习上报进度,增加视频播放进度的处理 2025-04-01 08:32:41 +08:00
sunhonglai
5705bb8529 查询课程和修改课程学习上报进度,增加视频播放进度的处理 2025-03-31 13:14:14 +08:00
sunhonglai
87e5dd81f8 查询课程和修改课程学习上报进度,增加视频播放进度的处理 2025-03-31 11:27:13 +08:00
4 changed files with 59 additions and 7 deletions

View File

@@ -1,9 +1,14 @@
package com.xboe.school.study.api;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.nacos.shaded.com.google.common.util.concurrent.RateLimiter;
import com.xboe.api.ThirdApi;
import com.xboe.constants.CacheName;
@@ -253,6 +258,49 @@ public class StudyCourseApi extends ApiBaseController{
rs.put("progress", sc.getProgress());
//查询上次学习的是什么资源。查询用户的学习情况
List<StudyCourseItem> items=studyService.findByStudyId(sc.getId());
// 和内容匹配,根据内容的视频时长,计算学习进度
if(CollectionUtil.isNotEmpty(items) && CollectionUtil.isNotEmpty(cclist)){
// 根据ID转换map
Map<String, CourseContent> contentMap = cclist.stream().collect(Collectors.toMap(CourseContent::getId, Function.identity()));
for (StudyCourseItem item : items) {
CourseContent content = contentMap.get(item.getContentId());
if(null == content){
continue;
}
if(null==item.getLastStudyTime()
|| item.getLastStudyTime()<=0
|| null==content.getDuration()
|| content.getDuration()<=0){
continue;
}
// 查询redis上面的key并解析value获取到lastStudyTime
String lastActive = redisTemplate.opsForValue().get("studyContentId:" + item.getId() + ":last_active");
if (StringUtil.isNotBlank(lastActive)) {
String[] parts = lastActive.split("&");
if (parts.length == 2) {
int lastStudyTimeRedis = Integer.parseInt(parts[0]);
log.info("study-video-time-redis获取---lastStudyTimeRedis = " + lastStudyTimeRedis);
if(lastStudyTimeRedis>0){
item.setLastStudyTime(lastStudyTimeRedis);
}
}
}
BigDecimal lastStudyTime = new BigDecimal(item.getLastStudyTime());
BigDecimal duration = new BigDecimal(content.getDuration());
BigDecimal progress = lastStudyTime.divide(duration, 10, RoundingMode.HALF_UP);
if(progress.compareTo(BigDecimal.ZERO) < 0){
progress = BigDecimal.ZERO;
}else if(progress.compareTo(BigDecimal.ONE) > 0){
progress = BigDecimal.ONE;
}
item.setProgressVideo(progress);
}
}
rs.put("contentStudys",items);//学习的内容
}

View File

@@ -1,10 +1,12 @@
package com.xboe.school.study.entity;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xboe.core.SysConstant;
@@ -128,5 +130,11 @@ public class StudyCourseItem extends IdEntity {
*/
@Column(name = "status",length=1)
private Integer status;
/**
* 视频播放进度
* */
@Transient
private BigDecimal progressVideo;
}

View File

@@ -8,7 +8,6 @@ import com.xboe.common.PageList;
import com.xboe.school.study.dto.StudyContentDto;
import com.xboe.school.study.entity.StudyCourseItem;
import com.xboe.school.study.entity.StudyTime;
import com.xboe.system.user.entity.User;
/**
* 学习情况处理,比较综合一个处理类
@@ -36,11 +35,12 @@ public interface IStudyService {
/**
* 更新最后的学习时间,及学习时间点
*
* @param studyContentId
* @param lastStudyTime
* @param aid
*/
void updateLastTime(String studyContentId,int lastStudyTime,String aid);
void updateLastTime(String studyContentId, int lastStudyTime, String aid);
/**
* 资源学习记录

View File

@@ -10,10 +10,6 @@ import java.util.Map;
import javax.transaction.Transactional;
import com.xboe.module.article.entity.Article;
import com.xboe.module.interaction.entity.Shares;
import com.xboe.school.study.entity.StudyCourse;
import com.xboe.system.user.entity.User;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;