From 9778f1c06aa8074a18042d4a37ab8fe4168d27bf Mon Sep 17 00:00:00 2001 From: none Date: Mon, 27 Mar 2023 17:26:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AD=A6=E5=91=98=E6=9C=80?= =?UTF-8?q?=E8=BF=91=E5=AD=A6=E4=B9=A0=E8=AE=B0=E5=BD=95api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/frontend/UserController.java | 25 ++++++++++++++++--- .../mapper/UserCourseHourRecordMapper.java | 2 +- .../api/service/CourseHourService.java | 2 ++ .../service/UserCourseHourRecordService.java | 2 +- .../service/impl/CourseHourServiceImpl.java | 5 ++++ .../impl/UserCourseHourRecordServiceImpl.java | 4 +-- .../api/types/response/UserLatestLearn.java | 6 +++++ .../mapper/UserCourseHourRecordMapper.xml | 16 ++++++++---- 8 files changed, 49 insertions(+), 13 deletions(-) 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 05ae98f..018b6f1 100644 --- a/src/main/java/xyz/playedu/api/controller/frontend/UserController.java +++ b/src/main/java/xyz/playedu/api/controller/frontend/UserController.java @@ -37,6 +37,9 @@ public class UserController { @Autowired private CourseService courseService; + @Autowired + private CourseHourService hourService; + @Autowired private UserCourseRecordService userCourseRecordService; @@ -166,11 +169,16 @@ public class UserController { @GetMapping("/latest-learn") public JsonResponse latestLearn() { // 读取当前学员最近100条学习的线上课 - List courseIds = userCourseHourRecordService.getLatestCourseIds(FCtx.getId(), 100); - if (courseIds == null || courseIds.size() == 0) { + List userCourseHourRecords = userCourseHourRecordService.getLatestCourseIds(FCtx.getId(), 100); + if (userCourseHourRecords == null || userCourseHourRecords.size() == 0) { return JsonResponse.data(new ArrayList<>()); } + List courseIds = userCourseHourRecords.stream().map(UserCourseHourRecord::getCourseId).toList(); + List hourIds = userCourseHourRecords.stream().map(UserCourseHourRecord::getHourId).toList(); + Map hour2Record = userCourseHourRecords.stream().collect(Collectors.toMap(UserCourseHourRecord::getHourId, e -> e)); + Map course2hour = userCourseHourRecords.stream().collect(Collectors.toMap(UserCourseHourRecord::getCourseId, UserCourseHourRecord::getHourId)); + // 线上课 Map courses = courseService.chunks(courseIds, new ArrayList<>() {{ add("id"); @@ -181,15 +189,24 @@ public class UserController { add("is_required"); }}).stream().collect(Collectors.toMap(Course::getId, e -> e)); + // 线上课课时 + Map hours = hourService.chunk(hourIds).stream().collect(Collectors.toMap(CourseHour::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); + UserCourseRecord record = records.get(courseId);//线上课学习进度 + Course tmpCourse = courses.get(courseId);//线上课 + Integer tmpHourId = course2hour.get(courseId);//最近学习的课时id + UserCourseHourRecord tmpUserCourseHourRecord = hour2Record.get(tmpHourId);//课时学习进度 + CourseHour tmpHour = hours.get(tmpHourId);//课时 + userLatestLearns.add(new UserLatestLearn() {{ setCourse(tmpCourse); setUserCourseRecord(record); + setHourRecord(tmpUserCourseHourRecord); + setLastLearnHour(tmpHour); }}); } diff --git a/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java b/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java index e0dd65d..8c00fc0 100644 --- a/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java +++ b/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java @@ -14,7 +14,7 @@ import java.util.List; */ @Mapper public interface UserCourseHourRecordMapper extends BaseMapper { - List getLatestCourseIds(Integer userId, Integer size); + List getUserLatestRecords(Integer userId, Integer size); } diff --git a/src/main/java/xyz/playedu/api/service/CourseHourService.java b/src/main/java/xyz/playedu/api/service/CourseHourService.java index b07de47..64b9b16 100644 --- a/src/main/java/xyz/playedu/api/service/CourseHourService.java +++ b/src/main/java/xyz/playedu/api/service/CourseHourService.java @@ -30,4 +30,6 @@ public interface CourseHourService extends IService { void updateSort(List ids, Integer cid); List getRidsByCourseId(Integer courseId, String type); + + List chunk(List hourIds); } diff --git a/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java b/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java index 15ecf96..7ab1b24 100644 --- a/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java +++ b/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java @@ -19,5 +19,5 @@ public interface UserCourseHourRecordService extends IService getRecords(Integer userId, Integer courseId); - List getLatestCourseIds(Integer userId, Integer size); + List getLatestCourseIds(Integer userId, Integer size); } diff --git a/src/main/java/xyz/playedu/api/service/impl/CourseHourServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/CourseHourServiceImpl.java index 5883dd3..35a92b5 100644 --- a/src/main/java/xyz/playedu/api/service/impl/CourseHourServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/CourseHourServiceImpl.java @@ -99,6 +99,11 @@ public class CourseHourServiceImpl extends ServiceImpl getRidsByCourseId(Integer courseId, String type) { return list(query().getWrapper().eq("course_id", courseId).eq("type", type)).stream().map(CourseHour::getRid).toList(); } + + @Override + public List chunk(List hourIds) { + return list(query().getWrapper().in("id", hourIds)); + } } 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 b0b4545..7377ddf 100644 --- a/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java @@ -90,8 +90,8 @@ public class UserCourseHourRecordServiceImpl extends ServiceImpl getLatestCourseIds(Integer userId, Integer size) { - return getBaseMapper().getLatestCourseIds(userId, size); + public List getLatestCourseIds(Integer userId, Integer size) { + return getBaseMapper().getUserLatestRecords(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 index a179b83..83318f2 100644 --- a/src/main/java/xyz/playedu/api/types/response/UserLatestLearn.java +++ b/src/main/java/xyz/playedu/api/types/response/UserLatestLearn.java @@ -3,6 +3,8 @@ 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.CourseHour; +import xyz.playedu.api.domain.UserCourseHourRecord; import xyz.playedu.api.domain.UserCourseRecord; /** @@ -15,4 +17,8 @@ public class UserLatestLearn { private Course course; @JsonProperty("record") private UserCourseRecord userCourseRecord; + @JsonProperty("last_learn_hour") + private CourseHour lastLearnHour; + @JsonProperty("hour_record") + private UserCourseHourRecord hourRecord; } diff --git a/src/main/resources/mapper/UserCourseHourRecordMapper.xml b/src/main/resources/mapper/UserCourseHourRecordMapper.xml index 5df3505..da8c467 100644 --- a/src/main/resources/mapper/UserCourseHourRecordMapper.xml +++ b/src/main/resources/mapper/UserCourseHourRecordMapper.xml @@ -26,10 +26,16 @@ created_at,updated_at - + select `t1`.* + from `user_course_hour_records` as `t1` + inner join (select `course_id`, max(`updated_at`) as `latest_at` + from `user_course_hour_records` + group by `course_id`) as `t2` + on `t2`.`course_id` = `t1`.`course_id` and + `t2`.`latest_at` = `t1`.`updated_at` + where `t1`.`user_id` = #{userId} + order by `t1`.`updated_at` desc + limit #{size};