From 87e5dd81f8abcf32e4cb5fb5178c318b21d64af3 Mon Sep 17 00:00:00 2001 From: sunhonglai Date: Mon, 31 Mar 2025 11:27:13 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E5=92=8C=E4=BF=AE=E6=94=B9=E8=AF=BE=E7=A8=8B=E5=AD=A6=E4=B9=A0?= =?UTF-8?q?=E4=B8=8A=E6=8A=A5=E8=BF=9B=E5=BA=A6=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E6=92=AD=E6=94=BE=E8=BF=9B=E5=BA=A6=E7=9A=84?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xboe/school/study/api/StudyCourseApi.java | 2 +- .../com/xboe/school/study/entity/StudyCourseItem.java | 6 ++++++ .../com/xboe/school/study/service/IStudyService.java | 5 +++-- .../xboe/school/study/service/impl/StudyServiceImpl.java | 9 ++++----- 4 files changed, 14 insertions(+), 8 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 40b4c09b..72830e71 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 @@ -555,7 +555,7 @@ public class StudyCourseApi extends ApiBaseController{ } //检查是否已存在 try { - studyService.updateLastTime(itemId,videoTime, getCurrent().getAccountId()); + studyService.updateLastTime(itemId,videoTime, getCurrent().getAccountId(), progressVideo); 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 09fad657..e6eb1c88 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 @@ -128,5 +128,11 @@ public class StudyCourseItem extends IdEntity { */ @Column(name = "status",length=1) private Integer status; + + /** + * 视频播放进度 + * */ + @Column(name = "progress_video") + private Float 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 2d25fd37..7f2598d6 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 @@ -7,7 +7,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; /** * 学习情况处理,比较综合一个处理类 @@ -35,11 +34,13 @@ public interface IStudyService { /** * 更新最后的学习时间,及学习时间点 + * * @param studyContentId * @param lastStudyTime * @param aid + * @param progressVideo */ - void updateLastTime(String studyContentId,int lastStudyTime,String aid); + void updateLastTime(String studyContentId, int lastStudyTime, String aid, Float progressVideo); /** * 资源学习记录 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 9351fdd1..ce2e6085 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 @@ -9,10 +9,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.stereotype.Service; @@ -325,7 +321,7 @@ public class StudyServiceImpl implements IStudyService{ // 更新 前端传输已学习时长 @Override @Transactional - public void updateLastTime(String studyContentId, int lastStudyTime,String aid) { + public void updateLastTime(String studyContentId, int lastStudyTime, String aid, Float progressVideo) { // 更新最后的学习时间点 LocalDateTime now=LocalDateTime.now(); UpdateBuilder update=UpdateBuilder.from(StudyCourseItem.class); @@ -334,6 +330,9 @@ 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中调用 } From 5705bb852938116c9193a8b163129fc8fd722d37 Mon Sep 17 00:00:00 2001 From: sunhonglai Date: Mon, 31 Mar 2025 13:14:14 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E5=92=8C=E4=BF=AE=E6=94=B9=E8=AF=BE=E7=A8=8B=E5=AD=A6=E4=B9=A0?= =?UTF-8?q?=E4=B8=8A=E6=8A=A5=E8=BF=9B=E5=BA=A6=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E6=92=AD=E6=94=BE=E8=BF=9B=E5=BA=A6=E7=9A=84?= =?UTF-8?q?=E5=A4=84=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中调用 } From 175e7f6c289bc5cb2f555fe3229e6030afe8b332 Mon Sep 17 00:00:00 2001 From: sunhonglai Date: Tue, 1 Apr 2025 08:32:41 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E5=92=8C=E4=BF=AE=E6=94=B9=E8=AF=BE=E7=A8=8B=E5=AD=A6=E4=B9=A0?= =?UTF-8?q?=E4=B8=8A=E6=8A=A5=E8=BF=9B=E5=BA=A6=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E6=92=AD=E6=94=BE=E8=BF=9B=E5=BA=A6=E7=9A=84?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xboe/school/study/api/StudyCourseApi.java | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 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 0245480f..e9d03030 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 @@ -264,27 +264,27 @@ public class StudyCourseApi extends ApiBaseController{ 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); + if(null == content){ + continue; } + + 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); + if(progress.compareTo(BigDecimal.ZERO) < 0){ + progress = BigDecimal.ZERO; + }else if(progress.compareTo(BigDecimal.ONE) > 0){ + progress = BigDecimal.ONE; + } + + item.setProgressVideo(progress); } }