完善/user/courses接口 && fixed: 后台学员top10

This commit is contained in:
none 2023-03-24 11:21:08 +08:00
parent 6c57a5f917
commit 83717baafe
6 changed files with 53 additions and 15 deletions

View File

@ -37,7 +37,7 @@ public class UserBus {
public boolean canSeeCourse(User user, Course course) { public boolean canSeeCourse(User user, Course course) {
List<Integer> courseDepIds = courseService.getDepIdsByCourseId(course.getId()); List<Integer> courseDepIds = courseService.getDepIdsByCourseId(course.getId());
if (courseDepIds == null || courseDepIds.size() == 0) { if (courseDepIds == null || courseDepIds.size() == 0) {
//线上课无所属部门=>公开课=>任何学员都可以学习 //线上课无所属部门=>任何学员都可以学习
return true; return true;
} }
List<Integer> userDepIds = userService.getDepIdsByUserId(user.getId()); List<Integer> userDepIds = userService.getDepIdsByUserId(user.getId());

View File

@ -68,7 +68,7 @@ public class DashboardController {
data.put("user_learn_yesterday", userLearnDurationStatsService.yesterdayTotal()); data.put("user_learn_yesterday", userLearnDurationStatsService.yesterdayTotal());
List<UserLearnDurationStats> userLearnTop10 = userLearnDurationStatsService.top10(); List<UserLearnDurationStats> userLearnTop10 = userLearnDurationStatsService.top10();
Map<Integer, User> top10Users = userService.chunks(userLearnTop10.stream().map(UserLearnDurationStats::getUserId).toList(), new ArrayList<String>() {{ Map<Integer, User> top10Users = userService.chunks(userLearnTop10.stream().map(UserLearnDurationStats::getUserId).toList(), new ArrayList<>() {{
add("id"); add("id");
add("name"); add("name");
add("avatar"); add("avatar");

View File

@ -9,16 +9,16 @@ import xyz.playedu.api.FCtx;
import xyz.playedu.api.domain.Course; import xyz.playedu.api.domain.Course;
import xyz.playedu.api.domain.Department; import xyz.playedu.api.domain.Department;
import xyz.playedu.api.domain.User; import xyz.playedu.api.domain.User;
import xyz.playedu.api.domain.UserCourseRecord;
import xyz.playedu.api.exception.ServiceException; import xyz.playedu.api.exception.ServiceException;
import xyz.playedu.api.request.frontend.ChangePasswordRequest; import xyz.playedu.api.request.frontend.ChangePasswordRequest;
import xyz.playedu.api.service.CourseService; import xyz.playedu.api.service.CourseService;
import xyz.playedu.api.service.DepartmentService; import xyz.playedu.api.service.DepartmentService;
import xyz.playedu.api.service.UserCourseRecordService;
import xyz.playedu.api.service.UserService; import xyz.playedu.api.service.UserService;
import xyz.playedu.api.types.JsonResponse; import xyz.playedu.api.types.JsonResponse;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -39,6 +39,9 @@ public class UserController {
@Autowired @Autowired
private CourseService courseService; private CourseService courseService;
@Autowired
private UserCourseRecordService userCourseRecordService;
@GetMapping("/detail") @GetMapping("/detail")
public JsonResponse detail() { public JsonResponse detail() {
User user = FCtx.getUser(); User user = FCtx.getUser();
@ -77,20 +80,41 @@ public class UserController {
return JsonResponse.error("当前学员未加入所选择部门"); return JsonResponse.error("当前学员未加入所选择部门");
} }
HashMap<String, Object> data = new HashMap<>();
data.put("learn_course_records", new HashMap<>());
// -------- 读取当前学员可以参加的课程 ----------
List<Course> courses = new ArrayList<>();
// 读取部门课 // 读取部门课
List<Course> depCourses = courseService.getDepCoursesAndShow(new ArrayList<>() {{ List<Course> depCourses = courseService.getDepCoursesAndShow(new ArrayList<>() {{
add(depId); add(depId);
}}); }});
// 全部部门课
List<Course> openCourses = courseService.getOpenCoursesAndShow(500);
if (depCourses != null && depCourses.size() > 0) {
courses.addAll(depCourses);
}
if (openCourses != null && openCourses.size() > 0) {
courses.addAll(openCourses);
}
// 公开课 if (courses.size() > 0) {
List<Course> openCourses = courseService.getOpenCoursesAndShow(200); courses = courses.stream().sorted(Comparator.comparing(Course::getId).reversed()).toList();
}
HashMap<String, Object> data = new HashMap<>(); data.put("courses", courses);
data.put("open", openCourses.stream().collect(Collectors.groupingBy(Course::getIsRequired)));
data.put("department", depCourses.stream().collect(Collectors.groupingBy(Course::getIsRequired))); // -------- 读取学习进度 ----------
Map<Integer, UserCourseRecord> 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); return JsonResponse.data(data);
} }
} }

View File

@ -3,6 +3,8 @@ package xyz.playedu.api.service;
import xyz.playedu.api.domain.UserCourseRecord; import xyz.playedu.api.domain.UserCourseRecord;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/** /**
* @author tengteng * @author tengteng
* @description 针对表user_course_records的数据库操作Service * @description 针对表user_course_records的数据库操作Service
@ -13,4 +15,6 @@ public interface UserCourseRecordService extends IService<UserCourseRecord> {
UserCourseRecord find(Integer userId, Integer courseId); UserCourseRecord find(Integer userId, Integer courseId);
void storeOrUpdate(Integer userId, Integer courseId, Integer hourCount, Integer finishedCount); void storeOrUpdate(Integer userId, Integer courseId, Integer hourCount, Integer finishedCount);
List<UserCourseRecord> chunk(Integer userId, List<Integer> courseIds);
} }

View File

@ -6,7 +6,9 @@ import xyz.playedu.api.service.UserCourseRecordService;
import xyz.playedu.api.mapper.UserCourseRecordMapper; import xyz.playedu.api.mapper.UserCourseRecordMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* @author tengteng * @author tengteng
@ -64,6 +66,14 @@ public class UserCourseRecordServiceImpl extends ServiceImpl<UserCourseRecordMap
updateById(updateRecord); updateById(updateRecord);
} }
} }
@Override
public List<UserCourseRecord> chunk(Integer userId, List<Integer> courseIds) {
if (courseIds == null || courseIds.size() == 0) {
return new ArrayList<>();
}
return list(query().getWrapper().eq("user_id", userId).in("course_id", courseIds));
}
} }

View File

@ -18,10 +18,7 @@ import xyz.playedu.api.types.paginate.UserPaginateFilter;
import xyz.playedu.api.util.HelperUtil; import xyz.playedu.api.util.HelperUtil;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -163,6 +160,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
@Override @Override
public List<User> chunks(List<Integer> ids, List<String> fields) { public List<User> chunks(List<Integer> ids, List<String> fields) {
if (ids == null || ids.size() == 0) {
return new ArrayList<>();
}
return list(query().getWrapper().in("id", ids).select(fields)); return list(query().getWrapper().in("id", ids).select(fields));
} }