From 5705bb852938116c9193a8b163129fc8fd722d37 Mon Sep 17 00:00:00 2001 From: sunhonglai Date: Mon, 31 Mar 2025 13:14:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=AF=BE=E7=A8=8B=E5=92=8C?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AF=BE=E7=A8=8B=E5=AD=A6=E4=B9=A0=E4=B8=8A?= =?UTF-8?q?=E6=8A=A5=E8=BF=9B=E5=BA=A6=EF=BC=8C=E5=A2=9E=E5=8A=A0=E8=A7=86?= =?UTF-8?q?=E9=A2=91=E6=92=AD=E6=94=BE=E8=BF=9B=E5=BA=A6=E7=9A=84=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xboe/school/study/api/StudyCourseApi.java | 37 ++++++++++++++++++- .../school/study/entity/StudyCourseItem.java | 7 ++-- .../school/study/service/IStudyService.java | 3 +- .../study/service/impl/StudyServiceImpl.java | 5 +-- 4 files changed, 42 insertions(+), 10 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java index 72830e71..0245480f 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java @@ -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,36 @@ public class StudyCourseApi extends ApiBaseController{ rs.put("progress", sc.getProgress()); //查询上次学习的是什么资源。查询用户的学习情况 List items=studyService.findByStudyId(sc.getId()); + // 和内容匹配,根据内容的视频时长,计算学习进度 + if(CollectionUtil.isNotEmpty(items) && CollectionUtil.isNotEmpty(cclist)){ + // 根据ID转换map + Map contentMap = cclist.stream().collect(Collectors.toMap(CourseContent::getId, Function.identity())); + for (StudyCourseItem item : items) { + CourseContent content = contentMap.get(item.getContentId()); + if(item.getContentId().equals(content.getId())){ + // 计算学习进度item.getLastStudyTime() /content.getDuration() + if(null==item.getLastStudyTime() + || item.getLastStudyTime()<=0 + || null==content.getDuration() + || content.getDuration()<=0){ + continue; + } + + BigDecimal lastStudyTime = new BigDecimal(item.getLastStudyTime()); + BigDecimal duration = new BigDecimal(content.getDuration()); + BigDecimal progress = lastStudyTime.divide(duration, 10, RoundingMode.HALF_UP); + // 如果progress<0则为0,如果progress>1则为1 + 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);//学习的内容 } @@ -555,7 +590,7 @@ public class StudyCourseApi extends ApiBaseController{ } //检查是否已存在 try { - studyService.updateLastTime(itemId,videoTime, getCurrent().getAccountId(), progressVideo); + studyService.updateLastTime(itemId,videoTime, getCurrent().getAccountId()); if (contentId != null && courseId != null && progressVideo != null){ contentService.updateProcessVideo(contentId, courseId, progressVideo); } diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/entity/StudyCourseItem.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/entity/StudyCourseItem.java index e6eb1c88..7b442d7f 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/entity/StudyCourseItem.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/entity/StudyCourseItem.java @@ -1,5 +1,6 @@ package com.xboe.school.study.entity; +import java.math.BigDecimal; import java.time.LocalDateTime; import javax.persistence.Column; @@ -132,7 +133,7 @@ public class StudyCourseItem extends IdEntity { /** * 视频播放进度 * */ - @Column(name = "progress_video") - private Float progressVideo; - +// @Column(name = "progress_video") + private BigDecimal progressVideo; + } diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyService.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyService.java index 7f2598d6..42a12c23 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyService.java @@ -38,9 +38,8 @@ public interface IStudyService { * @param studyContentId * @param lastStudyTime * @param aid - * @param progressVideo */ - void updateLastTime(String studyContentId, int lastStudyTime, String aid, Float progressVideo); + void updateLastTime(String studyContentId, int lastStudyTime, String aid); /** * 资源学习记录 diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java index ce2e6085..c3c2870a 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java @@ -321,7 +321,7 @@ public class StudyServiceImpl implements IStudyService{ // 更新 前端传输已学习时长 @Override @Transactional - public void updateLastTime(String studyContentId, int lastStudyTime, String aid, Float progressVideo) { + public void updateLastTime(String studyContentId, int lastStudyTime, String aid) { // 更新最后的学习时间点 LocalDateTime now=LocalDateTime.now(); UpdateBuilder update=UpdateBuilder.from(StudyCourseItem.class); @@ -330,9 +330,6 @@ public class StudyServiceImpl implements IStudyService{ update.addFilter(FieldFilters.lt("lastStudyTime", lastStudyTime)); update.addUpdateField("lastStudyTime", lastStudyTime); update.addUpdateField("lastTime", now); - if(progressVideo!=null) { - update.addUpdateField("progressVideo", progressVideo); - } scItemDao.update(update.builder()); //增加用户的学习时长,在api中调用 }