From 83717baafebc4c1d313019db039ba664daf70f50 Mon Sep 17 00:00:00 2001 From: none Date: Fri, 24 Mar 2023 11:21:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84/user/courses=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=20&&=20fixed:=20=E5=90=8E=E5=8F=B0=E5=AD=A6=E5=91=98t?= =?UTF-8?q?op10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/xyz/playedu/api/bus/UserBus.java | 2 +- .../backend/DashboardController.java | 2 +- .../controller/frontend/UserController.java | 42 +++++++++++++++---- .../api/service/UserCourseRecordService.java | 4 ++ .../impl/UserCourseRecordServiceImpl.java | 10 +++++ .../api/service/impl/UserServiceImpl.java | 8 ++-- 6 files changed, 53 insertions(+), 15 deletions(-) diff --git a/src/main/java/xyz/playedu/api/bus/UserBus.java b/src/main/java/xyz/playedu/api/bus/UserBus.java index 698eed9..d2487b5 100644 --- a/src/main/java/xyz/playedu/api/bus/UserBus.java +++ b/src/main/java/xyz/playedu/api/bus/UserBus.java @@ -37,7 +37,7 @@ public class UserBus { public boolean canSeeCourse(User user, Course course) { List courseDepIds = courseService.getDepIdsByCourseId(course.getId()); if (courseDepIds == null || courseDepIds.size() == 0) { - //线上课无所属部门=>公开课=>任何学员都可以学习 + //线上课无所属部门=>任何学员都可以学习 return true; } List userDepIds = userService.getDepIdsByUserId(user.getId()); diff --git a/src/main/java/xyz/playedu/api/controller/backend/DashboardController.java b/src/main/java/xyz/playedu/api/controller/backend/DashboardController.java index 147b606..7ccaf5d 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/DashboardController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/DashboardController.java @@ -68,7 +68,7 @@ public class DashboardController { data.put("user_learn_yesterday", userLearnDurationStatsService.yesterdayTotal()); List userLearnTop10 = userLearnDurationStatsService.top10(); - Map top10Users = userService.chunks(userLearnTop10.stream().map(UserLearnDurationStats::getUserId).toList(), new ArrayList() {{ + Map top10Users = userService.chunks(userLearnTop10.stream().map(UserLearnDurationStats::getUserId).toList(), new ArrayList<>() {{ add("id"); add("name"); add("avatar"); 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 6d2e625..dcfd39c 100644 --- a/src/main/java/xyz/playedu/api/controller/frontend/UserController.java +++ b/src/main/java/xyz/playedu/api/controller/frontend/UserController.java @@ -9,16 +9,16 @@ import xyz.playedu.api.FCtx; import xyz.playedu.api.domain.Course; import xyz.playedu.api.domain.Department; import xyz.playedu.api.domain.User; +import xyz.playedu.api.domain.UserCourseRecord; import xyz.playedu.api.exception.ServiceException; import xyz.playedu.api.request.frontend.ChangePasswordRequest; import xyz.playedu.api.service.CourseService; import xyz.playedu.api.service.DepartmentService; +import xyz.playedu.api.service.UserCourseRecordService; import xyz.playedu.api.service.UserService; import xyz.playedu.api.types.JsonResponse; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -39,6 +39,9 @@ public class UserController { @Autowired private CourseService courseService; + @Autowired + private UserCourseRecordService userCourseRecordService; + @GetMapping("/detail") public JsonResponse detail() { User user = FCtx.getUser(); @@ -77,20 +80,41 @@ public class UserController { return JsonResponse.error("当前学员未加入所选择部门"); } + HashMap data = new HashMap<>(); + data.put("learn_course_records", new HashMap<>()); + + // -------- 读取当前学员可以参加的课程 ---------- + List courses = new ArrayList<>(); // 读取部门课 List depCourses = courseService.getDepCoursesAndShow(new ArrayList<>() {{ add(depId); }}); + // 全部部门课 + List openCourses = courseService.getOpenCoursesAndShow(500); + if (depCourses != null && depCourses.size() > 0) { + courses.addAll(depCourses); + } + if (openCourses != null && openCourses.size() > 0) { + courses.addAll(openCourses); + } - // 公开课 - List openCourses = courseService.getOpenCoursesAndShow(200); + if (courses.size() > 0) { + courses = courses.stream().sorted(Comparator.comparing(Course::getId).reversed()).toList(); + } - HashMap data = new HashMap<>(); - data.put("open", openCourses.stream().collect(Collectors.groupingBy(Course::getIsRequired))); - data.put("department", depCourses.stream().collect(Collectors.groupingBy(Course::getIsRequired))); + data.put("courses", courses); + + // -------- 读取学习进度 ---------- + Map learnCourseRecords = new HashMap<>(); + if (courses.size() > 0) { + learnCourseRecords = userCourseRecordService + .chunk(FCtx.getUserId(), courses.stream().map(Course::getId).toList()) + .stream() + .collect(Collectors.toMap(UserCourseRecord::getCourseId, e -> e)); + } + data.put("learn_course_records", learnCourseRecords); return JsonResponse.data(data); } - } \ No newline at end of file diff --git a/src/main/java/xyz/playedu/api/service/UserCourseRecordService.java b/src/main/java/xyz/playedu/api/service/UserCourseRecordService.java index 484bcce..14265d3 100644 --- a/src/main/java/xyz/playedu/api/service/UserCourseRecordService.java +++ b/src/main/java/xyz/playedu/api/service/UserCourseRecordService.java @@ -3,6 +3,8 @@ package xyz.playedu.api.service; import xyz.playedu.api.domain.UserCourseRecord; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * @author tengteng * @description 针对表【user_course_records】的数据库操作Service @@ -13,4 +15,6 @@ public interface UserCourseRecordService extends IService { UserCourseRecord find(Integer userId, Integer courseId); void storeOrUpdate(Integer userId, Integer courseId, Integer hourCount, Integer finishedCount); + + List chunk(Integer userId, List courseIds); } diff --git a/src/main/java/xyz/playedu/api/service/impl/UserCourseRecordServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/UserCourseRecordServiceImpl.java index 7ce143c..d6ba966 100644 --- a/src/main/java/xyz/playedu/api/service/impl/UserCourseRecordServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/UserCourseRecordServiceImpl.java @@ -6,7 +6,9 @@ import xyz.playedu.api.service.UserCourseRecordService; import xyz.playedu.api.mapper.UserCourseRecordMapper; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** * @author tengteng @@ -64,6 +66,14 @@ public class UserCourseRecordServiceImpl extends ServiceImpl chunk(Integer userId, List courseIds) { + if (courseIds == null || courseIds.size() == 0) { + return new ArrayList<>(); + } + return list(query().getWrapper().eq("user_id", userId).in("course_id", courseIds)); + } } diff --git a/src/main/java/xyz/playedu/api/service/impl/UserServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/UserServiceImpl.java index 6c34673..ee90434 100644 --- a/src/main/java/xyz/playedu/api/service/impl/UserServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/UserServiceImpl.java @@ -18,10 +18,7 @@ import xyz.playedu.api.types.paginate.UserPaginateFilter; import xyz.playedu.api.util.HelperUtil; import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -163,6 +160,9 @@ public class UserServiceImpl extends ServiceImpl implements Us @Override public List chunks(List ids, List fields) { + if (ids == null || ids.size() == 0) { + return new ArrayList<>(); + } return list(query().getWrapper().in("id", ids).select(fields)); }