From c8182447ba2a6c139583a3050ea80da6c3506fc1 Mon Sep 17 00:00:00 2001 From: none Date: Mon, 27 Mar 2023 15:32:35 +0800 Subject: [PATCH] =?UTF-8?q?added:=20=E6=9C=80=E8=BF=91=E5=AD=A6=E4=B9=A0ap?= =?UTF-8?q?i?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/frontend/UserController.java | 37 +++++++++++++++++++ .../mapper/UserCourseHourRecordMapper.java | 14 ++++--- .../service/UserCourseHourRecordService.java | 2 + .../impl/UserCourseHourRecordServiceImpl.java | 5 +++ .../api/types/response/UserLatestLearn.java | 18 +++++++++ .../mapper/UserCourseHourRecordMapper.xml | 36 +++++++++++------- 6 files changed, 92 insertions(+), 20 deletions(-) create mode 100644 src/main/java/xyz/playedu/api/types/response/UserLatestLearn.java diff --git a/src/main/java/xyz/playedu/api/controller/frontend/UserController.java b/src/main/java/xyz/playedu/api/controller/frontend/UserController.java index 3331e77..05ae98f 100644 --- a/src/main/java/xyz/playedu/api/controller/frontend/UserController.java +++ b/src/main/java/xyz/playedu/api/controller/frontend/UserController.java @@ -13,6 +13,7 @@ import xyz.playedu.api.exception.ServiceException; import xyz.playedu.api.request.frontend.ChangePasswordRequest; import xyz.playedu.api.service.*; import xyz.playedu.api.types.JsonResponse; +import xyz.playedu.api.types.response.UserLatestLearn; import xyz.playedu.api.util.PrivacyUtil; import java.util.*; @@ -39,6 +40,9 @@ public class UserController { @Autowired private UserCourseRecordService userCourseRecordService; + @Autowired + private UserCourseHourRecordService userCourseHourRecordService; + @Autowired private UserLearnDurationStatsService userLearnDurationStatsService; @@ -159,4 +163,37 @@ public class UserController { return JsonResponse.data(data); } + @GetMapping("/latest-learn") + public JsonResponse latestLearn() { + // 读取当前学员最近100条学习的线上课 + List courseIds = userCourseHourRecordService.getLatestCourseIds(FCtx.getId(), 100); + if (courseIds == null || courseIds.size() == 0) { + return JsonResponse.data(new ArrayList<>()); + } + + // 线上课 + Map courses = courseService.chunks(courseIds, new ArrayList<>() {{ + add("id"); + add("title"); + add("thumb"); + add("short_desc"); + add("class_hour"); + add("is_required"); + }}).stream().collect(Collectors.toMap(Course::getId, e -> e)); + + // 获取学员的线上课进度 + Map records = userCourseRecordService.chunk(FCtx.getId(), courseIds).stream().collect(Collectors.toMap(UserCourseRecord::getCourseId, e -> e)); + List userLatestLearns = new ArrayList<>(); + for (Integer courseId : courseIds) { + UserCourseRecord record = records.get(courseId); + Course tmpCourse = courses.get(courseId); + userLatestLearns.add(new UserLatestLearn() {{ + setCourse(tmpCourse); + setUserCourseRecord(record); + }}); + } + + return JsonResponse.data(userLatestLearns); + } + } \ No newline at end of file diff --git a/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java b/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java index b39d858..e0dd65d 100644 --- a/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java +++ b/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java @@ -4,15 +4,17 @@ import org.apache.ibatis.annotations.Mapper; import xyz.playedu.api.domain.UserCourseHourRecord; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; + /** -* @author tengteng -* @description 针对表【user_course_hour_records】的数据库操作Mapper -* @createDate 2023-03-20 16:41:08 -* @Entity xyz.playedu.api.domain.UserCourseHourRecord -*/ + * @author tengteng + * @description 针对表【user_course_hour_records】的数据库操作Mapper + * @createDate 2023-03-20 16:41:08 + * @Entity xyz.playedu.api.domain.UserCourseHourRecord + */ @Mapper public interface UserCourseHourRecordMapper extends BaseMapper { - + List getLatestCourseIds(Integer userId, Integer size); } diff --git a/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java b/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java index 7548b1a..15ecf96 100644 --- a/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java +++ b/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java @@ -18,4 +18,6 @@ public interface UserCourseHourRecordService extends IService getRecords(Integer userId, Integer courseId); + + List getLatestCourseIds(Integer userId, Integer size); } diff --git a/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java index cca2d39..c53aa0f 100644 --- a/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java @@ -87,6 +87,11 @@ public class UserCourseHourRecordServiceImpl extends ServiceImpl getRecords(Integer userId, Integer courseId) { return list(query().getWrapper().eq("user_id", userId).eq("course_id", courseId)); } + + @Override + public List getLatestCourseIds(Integer userId, Integer size) { + return getBaseMapper().getLatestCourseIds(userId, size); + } } diff --git a/src/main/java/xyz/playedu/api/types/response/UserLatestLearn.java b/src/main/java/xyz/playedu/api/types/response/UserLatestLearn.java new file mode 100644 index 0000000..a179b83 --- /dev/null +++ b/src/main/java/xyz/playedu/api/types/response/UserLatestLearn.java @@ -0,0 +1,18 @@ +package xyz.playedu.api.types.response; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import xyz.playedu.api.domain.Course; +import xyz.playedu.api.domain.UserCourseRecord; + +/** + * @Author 杭州白书科技有限公司 + * @create 2023/3/27 15:29 + */ +@Data +public class UserLatestLearn { + @JsonProperty("course") + private Course course; + @JsonProperty("record") + private UserCourseRecord userCourseRecord; +} diff --git a/src/main/resources/mapper/UserCourseHourRecordMapper.xml b/src/main/resources/mapper/UserCourseHourRecordMapper.xml index 0ded197..5df3505 100644 --- a/src/main/resources/mapper/UserCourseHourRecordMapper.xml +++ b/src/main/resources/mapper/UserCourseHourRecordMapper.xml @@ -5,23 +5,31 @@ - - - - - - - - - - - + + + + + + + + + + + - id,user_id,course_id, - hour_id,total_duration,finished_duration, - real_duration,is_finished,finished_at, + id + ,user_id,course_id, + hour_id,total_duration,finished_duration, + real_duration,is_finished,finished_at, created_at,updated_at + +