From bb619db3c4942a419c4dcf4eeb27cc8b5383e7fd Mon Sep 17 00:00:00 2001 From: none Date: Tue, 18 Apr 2023 17:00:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=90=8E=E5=8F=B0=E9=83=A8?= =?UTF-8?q?=E9=97=A8=E5=AD=A6=E4=B9=A0=E8=BF=9B=E5=BA=A6api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/DepartmentController.java | 81 +++++++++++++++++-- .../api/service/UserCourseRecordService.java | 2 + .../impl/UserCourseRecordServiceImpl.java | 8 ++ 3 files changed, 86 insertions(+), 5 deletions(-) diff --git a/src/main/java/xyz/playedu/api/controller/backend/DepartmentController.java b/src/main/java/xyz/playedu/api/controller/backend/DepartmentController.java index d834619..86e19e9 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/DepartmentController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/DepartmentController.java @@ -17,6 +17,7 @@ package xyz.playedu.api.controller.backend; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.validation.annotation.Validated; @@ -24,21 +25,27 @@ import org.springframework.web.bind.annotation.*; import xyz.playedu.api.BCtx; import xyz.playedu.api.constant.BPermissionConstant; +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.event.DepartmentDestroyEvent; import xyz.playedu.api.exception.NotFoundException; import xyz.playedu.api.middleware.BackendPermissionMiddleware; import xyz.playedu.api.request.backend.*; 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 xyz.playedu.api.types.paginate.PaginationResult; +import xyz.playedu.api.types.paginate.UserPaginateFilter; import java.util.*; +import java.util.stream.Collectors; /** * @Author 杭州白书科技有限公司 - * * @create 2023/2/19 10:33 */ @RestController @@ -46,13 +53,20 @@ import java.util.*; @RequestMapping("/backend/v1/department") public class DepartmentController { - @Autowired private DepartmentService departmentService; + @Autowired + private DepartmentService departmentService; - @Autowired private UserService userService; + @Autowired + private UserService userService; - @Autowired private CourseService courseService; + @Autowired + private CourseService courseService; - @Autowired private ApplicationContext ctx; + @Autowired + private UserCourseRecordService userCourseRecordService; + + @Autowired + private ApplicationContext ctx; @GetMapping("/index") public JsonResponse index() { @@ -162,4 +176,61 @@ public class DepartmentController { departmentService.changeParent(req.getId(), req.getParentId(), req.getIds()); return JsonResponse.success(); } + + @GetMapping("/{id}/users") + public JsonResponse users( + @PathVariable(name = "id") Integer id, @RequestParam HashMap params) { + Integer page = MapUtils.getInteger(params, "page", 1); + Integer size = MapUtils.getInteger(params, "size", 10); + String sortField = MapUtils.getString(params, "sort_field"); + String sortAlgo = MapUtils.getString(params, "sort_algo"); + + String name = MapUtils.getString(params, "name"); + String email = MapUtils.getString(params, "email"); + String idCard = MapUtils.getString(params, "id_card"); + String depIds = String.valueOf(id); + + UserPaginateFilter filter = + new UserPaginateFilter() { + { + setName(name); + setEmail(email); + setIdCard(idCard); + setDepIds(depIds); + setSortAlgo(sortAlgo); + setSortField(sortField); + } + }; + + PaginationResult users = userService.paginate(page, size, filter); + + // 部门关联线上课 + List courses = + courseService.getDepCoursesAndShow( + new ArrayList<>() { + { + add(id); + } + }); + + // 学员的课程学习进度 + Map> userCourseRecords = userCourseRecordService + .chunk( + users.getData().stream().map(User::getId).toList(), + courses.stream().map(Course::getId).toList()) + .stream() + .collect(Collectors.groupingBy(UserCourseRecord::getUserId)); + Map> userCourseRecordsMap = new HashMap<>(); + userCourseRecords.forEach((userId, records) -> { + userCourseRecordsMap.put(userId, records.stream().collect(Collectors.toMap(UserCourseRecord::getCourseId, e -> e))); + }); + + HashMap data = new HashMap<>(); + data.put("data", users.getData()); + data.put("total", users.getTotal()); + data.put("courses", courses.stream().collect(Collectors.groupingBy(Course::getId))); + data.put("user_course_records", userCourseRecordsMap); + + return JsonResponse.data(data); + } } diff --git a/src/main/java/xyz/playedu/api/service/UserCourseRecordService.java b/src/main/java/xyz/playedu/api/service/UserCourseRecordService.java index 24edec6..83603fd 100644 --- a/src/main/java/xyz/playedu/api/service/UserCourseRecordService.java +++ b/src/main/java/xyz/playedu/api/service/UserCourseRecordService.java @@ -36,6 +36,8 @@ public interface UserCourseRecordService extends IService { List chunk(Integer userId, List courseIds); + List chunk(List userId, List courseIds); + PaginationResult paginate( int page, int size, UserCourseRecordPaginateFilter filter); 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 082813b..975df66 100644 --- a/src/main/java/xyz/playedu/api/service/impl/UserCourseRecordServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/UserCourseRecordServiceImpl.java @@ -96,6 +96,14 @@ public class UserCourseRecordServiceImpl return list(query().getWrapper().eq("user_id", userId).in("course_id", courseIds)); } + @Override + public List chunk(List userIds, List courseIds) { + if (courseIds == null || courseIds.size() == 0) { + return new ArrayList<>(); + } + return list(query().getWrapper().in("user_id", userIds).in("course_id", courseIds)); + } + @Override public PaginationResult paginate( int page, int size, UserCourseRecordPaginateFilter filter) {