From 4c4046dff521fd68c58fb87c89d4826e3af0ef97 Mon Sep 17 00:00:00 2001 From: none Date: Mon, 8 May 2023 10:27:49 +0800 Subject: [PATCH 01/15] =?UTF-8?q?added:=20=E8=B5=84=E6=BA=90=E5=88=86?= =?UTF-8?q?=E7=B1=BBapi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../frontend/CategoryController.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/main/java/xyz/playedu/api/controller/frontend/CategoryController.java diff --git a/src/main/java/xyz/playedu/api/controller/frontend/CategoryController.java b/src/main/java/xyz/playedu/api/controller/frontend/CategoryController.java new file mode 100644 index 0000000..74ec3e8 --- /dev/null +++ b/src/main/java/xyz/playedu/api/controller/frontend/CategoryController.java @@ -0,0 +1,40 @@ +/* + * Copyright 2023 杭州白书科技有限公司 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package xyz.playedu.api.controller.frontend; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import xyz.playedu.api.domain.ResourceCategory; +import xyz.playedu.api.service.ResourceCategoryService; +import xyz.playedu.api.types.JsonResponse; + +import java.util.List; + +@RestController +@RequestMapping("/api/v1/category") +public class CategoryController { + + @Autowired private ResourceCategoryService resourceCategoryService; + + @GetMapping("/all") + public JsonResponse all() { + List categories = resourceCategoryService.all(); + return JsonResponse.data(categories); + } +} From 2bb9e7491b3a7b15fbc75b184fadd6a52340369a Mon Sep 17 00:00:00 2001 From: none Date: Mon, 8 May 2023 10:41:55 +0800 Subject: [PATCH 02/15] =?UTF-8?q?=E5=AD=A6=E5=91=98=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E8=AF=BE=E7=A8=8Bapi=E5=A2=9E=E5=8A=A0=E5=88=86=E7=B1=BB?= =?UTF-8?q?=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/frontend/UserController.java | 7 ++-- .../xyz/playedu/api/mapper/CourseMapper.java | 2 +- .../playedu/api/service/CourseService.java | 4 +++ .../api/service/impl/CourseServiceImpl.java | 36 ++++++++++++++++++- src/main/resources/mapper/CourseMapper.xml | 9 +++-- 5 files changed, 51 insertions(+), 7 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 06fd273..17f9c52 100644 --- a/src/main/java/xyz/playedu/api/controller/frontend/UserController.java +++ b/src/main/java/xyz/playedu/api/controller/frontend/UserController.java @@ -106,6 +106,8 @@ public class UserController { return JsonResponse.error("请选择部门"); } + Integer categoryId = MapUtils.getInteger(params, "category_id"); + List userJoinDepIds = userService.getDepIdsByUserId(FCtx.getId()); if (userJoinDepIds == null) { return JsonResponse.error("当前学员未加入任何部门"); @@ -126,9 +128,10 @@ public class UserController { { add(depId); } - }); + }, + categoryId); // 全部部门课 - List openCourses = courseService.getOpenCoursesAndShow(500); + List openCourses = courseService.getOpenCoursesAndShow(500, categoryId); // 汇总到一个list中 if (depCourses != null && depCourses.size() > 0) { courses.addAll(depCourses); diff --git a/src/main/java/xyz/playedu/api/mapper/CourseMapper.java b/src/main/java/xyz/playedu/api/mapper/CourseMapper.java index 140f0e1..591ff57 100644 --- a/src/main/java/xyz/playedu/api/mapper/CourseMapper.java +++ b/src/main/java/xyz/playedu/api/mapper/CourseMapper.java @@ -36,5 +36,5 @@ public interface CourseMapper extends BaseMapper { Long paginateCount(CoursePaginateFiler filer); - List openCoursesAndShow(Integer limit); + List openCoursesAndShow(Integer limit, Integer categoryId); } diff --git a/src/main/java/xyz/playedu/api/service/CourseService.java b/src/main/java/xyz/playedu/api/service/CourseService.java index 3b2caf1..d82a7a3 100644 --- a/src/main/java/xyz/playedu/api/service/CourseService.java +++ b/src/main/java/xyz/playedu/api/service/CourseService.java @@ -77,8 +77,12 @@ public interface CourseService extends IService { List getOpenCoursesAndShow(Integer limit); + List getOpenCoursesAndShow(Integer limit, Integer categoryId); + List getDepCoursesAndShow(List depIds); + List getDepCoursesAndShow(List depIds, Integer categoryId); + Map> getCategoryIdsGroup(List courseIds); Map> getDepIdsGroup(List courseIds); diff --git a/src/main/java/xyz/playedu/api/service/impl/CourseServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/CourseServiceImpl.java index 23225fc..c784c3c 100644 --- a/src/main/java/xyz/playedu/api/service/impl/CourseServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/CourseServiceImpl.java @@ -209,7 +209,41 @@ public class CourseServiceImpl extends ServiceImpl impleme @Override public List getOpenCoursesAndShow(Integer limit) { - return getBaseMapper().openCoursesAndShow(limit); + return getBaseMapper().openCoursesAndShow(limit, 0); + } + + @Override + public List getOpenCoursesAndShow(Integer limit, Integer categoryId) { + return getBaseMapper().openCoursesAndShow(limit, categoryId); + } + + @Override + public List getDepCoursesAndShow(List depIds, Integer categoryId) { + if (depIds == null || depIds.size() == 0) { + return new ArrayList<>(); + } + List courseIds = courseDepartmentService.getCourseIdsByDepIds(depIds); + if (courseIds == null || courseIds.size() == 0) { + return new ArrayList<>(); + } + if (categoryId != null && categoryId > 0) { + List tmpCourseIds = + courseCategoryService.getCourseIdsByCategoryIds( + new ArrayList<>() { + { + add(categoryId); + } + }); + if (tmpCourseIds == null || tmpCourseIds.size() == 0) { + return new ArrayList<>(); + } + // 取交集 + courseIds.retainAll(tmpCourseIds); + } + if (courseIds.size() == 0) { + return new ArrayList<>(); + } + return list(query().getWrapper().in("id", courseIds).eq("is_show", 1)); } @Override diff --git a/src/main/resources/mapper/CourseMapper.xml b/src/main/resources/mapper/CourseMapper.xml index d99fd66..f03a8b1 100644 --- a/src/main/resources/mapper/CourseMapper.xml +++ b/src/main/resources/mapper/CourseMapper.xml @@ -171,9 +171,12 @@ From b4bcb74e468675390d3f1b1118f984dfa354cc08 Mon Sep 17 00:00:00 2001 From: none Date: Mon, 8 May 2023 11:13:25 +0800 Subject: [PATCH 03/15] =?UTF-8?q?=E7=BA=BF=E4=B8=8A=E8=AF=BE-=E5=AD=A6?= =?UTF-8?q?=E5=91=98api=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/CourseUserController.java | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java index 289db8e..7ac92cc 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java @@ -22,19 +22,22 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import xyz.playedu.api.constant.BPermissionConstant; +import xyz.playedu.api.domain.User; import xyz.playedu.api.domain.UserCourseRecord; import xyz.playedu.api.event.UserCourseRecordDestroyEvent; import xyz.playedu.api.middleware.BackendPermissionMiddleware; import xyz.playedu.api.request.backend.CourseUserDestroyRequest; +import xyz.playedu.api.service.CourseService; 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.UserCourseRecordPaginateFilter; +import xyz.playedu.api.types.paginate.UserPaginateFilter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.stream.Collectors; /** * @Author 杭州白书科技有限公司 @@ -45,6 +48,8 @@ import java.util.List; @RequestMapping("/backend/v1/course/{courseId}/user") public class CourseUserController { + @Autowired private CourseService courseService; + @Autowired private UserCourseRecordService userCourseRecordService; @Autowired private UserService userService; @@ -64,24 +69,34 @@ public class CourseUserController { String email = MapUtils.getString(params, "email"); String idCard = MapUtils.getString(params, "id_card"); - UserCourseRecordPaginateFilter filter = new UserCourseRecordPaginateFilter(); - filter.setCourseId(courseId); + UserPaginateFilter filter = new UserPaginateFilter(); filter.setName(name); filter.setEmail(email); - filter.setIdCard(idCard); filter.setSortAlgo(sortAlgo); filter.setSortField(sortField); + filter.setIdCard(idCard); - PaginationResult result = - userCourseRecordService.paginate(page, size, filter); + // 所属部门 + List depIds = courseService.getDepIdsByCourseId(courseId); + if (depIds != null && depIds.size() > 0) { + filter.setDepIds( + depIds.stream().map(String::valueOf).collect(Collectors.joining(",", "", ""))); + } + + PaginationResult result = userService.paginate(page, size, filter); HashMap data = new HashMap<>(); data.put("data", result.getData()); data.put("total", result.getTotal()); data.put( - "users", - userService.chunks( - result.getData().stream().map(UserCourseRecord::getUserId).toList())); + "user_course_records", + userCourseRecordService.chunk( + result.getData().stream().map(User::getId).toList(), + new ArrayList<>() { + { + add(courseId); + } + })); return JsonResponse.data(data); } From 72d05b8e16251febaed988191fb33de31d79bdf9 Mon Sep 17 00:00:00 2001 From: none Date: Mon, 8 May 2023 11:19:28 +0800 Subject: [PATCH 04/15] =?UTF-8?q?=E5=AD=A6=E5=91=98=E7=BA=BF=E4=B8=8A?= =?UTF-8?q?=E8=AF=BE=E5=AD=A6=E4=B9=A0=E8=AE=B0=E5=BD=95api=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=B7=B2=E5=AD=A6=E7=BA=BF=E4=B8=8A=E8=AF=BE=E8=AF=BE?= =?UTF-8?q?=E6=97=B6=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../playedu/api/controller/backend/UserController.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/xyz/playedu/api/controller/backend/UserController.java b/src/main/java/xyz/playedu/api/controller/backend/UserController.java index 6ad3556..ee37175 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/UserController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/UserController.java @@ -43,6 +43,7 @@ import xyz.playedu.api.request.backend.UserRequest; import xyz.playedu.api.service.*; import xyz.playedu.api.service.internal.UserDepartmentService; import xyz.playedu.api.types.JsonResponse; +import xyz.playedu.api.types.mapper.UserCourseHourRecordCountMapper; import xyz.playedu.api.types.paginate.PaginationResult; import xyz.playedu.api.types.paginate.UserCourseHourRecordPaginateFilter; import xyz.playedu.api.types.paginate.UserCourseRecordPaginateFilter; @@ -482,6 +483,14 @@ public class UserController { userCourseRecords = userCourseRecordService.chunk(id, courseIds); } + // 获取学员线上课的课时学习数量(只要学习了就算,不一定需要已完成) + Map userCourseHourCount = + userCourseHourRecordService.getUserCourseHourCount(id, courseIds, null).stream() + .collect( + Collectors.toMap( + UserCourseHourRecordCountMapper::getCourseId, + UserCourseHourRecordCountMapper::getTotal)); + HashMap data = new HashMap<>(); data.put("open_courses", openCourses); data.put("departments", departments); @@ -490,6 +499,7 @@ public class UserController { "user_course_records", userCourseRecords.stream() .collect(Collectors.toMap(UserCourseRecord::getCourseId, e -> e))); + data.put("user_course_hour_count", userCourseHourCount); return JsonResponse.data(data); } From f0378c832dc1ca645f6851ce4a400d2c20af3dd6 Mon Sep 17 00:00:00 2001 From: none Date: Mon, 8 May 2023 11:28:33 +0800 Subject: [PATCH 05/15] =?UTF-8?q?=E7=BA=BF=E4=B8=8A=E8=AF=BE-=E5=AD=A6?= =?UTF-8?q?=E5=91=98api=E8=BF=94=E5=9B=9E=E5=AD=A6=E5=91=98=E7=9A=84?= =?UTF-8?q?=E7=BA=BF=E4=B8=8A=E8=AF=BE=E5=B7=B2=E5=AD=A6=E8=AF=BE=E6=97=B6?= =?UTF-8?q?=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../backend/CourseUserController.java | 17 +++++++++- .../controller/backend/UserController.java | 6 ++-- .../controller/frontend/UserController.java | 6 ++-- .../mapper/UserCourseHourRecordMapper.java | 8 +++-- .../service/UserCourseHourRecordService.java | 8 +++-- .../impl/UserCourseHourRecordServiceImpl.java | 14 ++++++-- ...serCourseHourRecordCourseCountMapper.java} | 2 +- .../UserCourseHourRecordUserCountMapper.java | 33 +++++++++++++++++++ .../mapper/UserCourseHourRecordMapper.xml | 15 ++++++++- 10 files changed, 95 insertions(+), 16 deletions(-) rename src/main/java/xyz/playedu/api/types/mapper/{UserCourseHourRecordCountMapper.java => UserCourseHourRecordCourseCountMapper.java} (94%) create mode 100644 src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordUserCountMapper.java diff --git a/pom.xml b/pom.xml index a4bd74b..50bf3a4 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ xyz.playedu playedu-api - 1.0-beta.4 + 1.0-beta.5 playedu-api playedu-api diff --git a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java index 7ac92cc..e75bbe0 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java @@ -28,9 +28,11 @@ import xyz.playedu.api.event.UserCourseRecordDestroyEvent; import xyz.playedu.api.middleware.BackendPermissionMiddleware; import xyz.playedu.api.request.backend.CourseUserDestroyRequest; import xyz.playedu.api.service.CourseService; +import xyz.playedu.api.service.UserCourseHourRecordService; import xyz.playedu.api.service.UserCourseRecordService; import xyz.playedu.api.service.UserService; import xyz.playedu.api.types.JsonResponse; +import xyz.playedu.api.types.mapper.UserCourseHourRecordUserCountMapper; import xyz.playedu.api.types.paginate.PaginationResult; import xyz.playedu.api.types.paginate.UserPaginateFilter; @@ -52,6 +54,8 @@ public class CourseUserController { @Autowired private UserCourseRecordService userCourseRecordService; + @Autowired private UserCourseHourRecordService userCourseHourRecordService; + @Autowired private UserService userService; @Autowired private ApplicationContext ctx; @@ -85,18 +89,29 @@ public class CourseUserController { PaginationResult result = userService.paginate(page, size, filter); + List userIds = result.getData().stream().map(User::getId).toList(); + HashMap data = new HashMap<>(); data.put("data", result.getData()); data.put("total", result.getTotal()); data.put( "user_course_records", userCourseRecordService.chunk( - result.getData().stream().map(User::getId).toList(), + userIds, new ArrayList<>() { { add(courseId); } })); + data.put( + "user_course_hour_user_count", + userCourseHourRecordService + .getUserCourseHourUserCount(courseId, userIds, null) + .stream() + .collect( + Collectors.toMap( + UserCourseHourRecordUserCountMapper::getUserId, + UserCourseHourRecordUserCountMapper::getTotal))); return JsonResponse.data(data); } diff --git a/src/main/java/xyz/playedu/api/controller/backend/UserController.java b/src/main/java/xyz/playedu/api/controller/backend/UserController.java index ee37175..5de663f 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/UserController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/UserController.java @@ -43,7 +43,7 @@ import xyz.playedu.api.request.backend.UserRequest; import xyz.playedu.api.service.*; import xyz.playedu.api.service.internal.UserDepartmentService; import xyz.playedu.api.types.JsonResponse; -import xyz.playedu.api.types.mapper.UserCourseHourRecordCountMapper; +import xyz.playedu.api.types.mapper.UserCourseHourRecordCourseCountMapper; import xyz.playedu.api.types.paginate.PaginationResult; import xyz.playedu.api.types.paginate.UserCourseHourRecordPaginateFilter; import xyz.playedu.api.types.paginate.UserCourseRecordPaginateFilter; @@ -488,8 +488,8 @@ public class UserController { userCourseHourRecordService.getUserCourseHourCount(id, courseIds, null).stream() .collect( Collectors.toMap( - UserCourseHourRecordCountMapper::getCourseId, - UserCourseHourRecordCountMapper::getTotal)); + UserCourseHourRecordCourseCountMapper::getCourseId, + UserCourseHourRecordCourseCountMapper::getTotal)); HashMap data = new HashMap<>(); data.put("open_courses", openCourses); 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 17f9c52..08ef0e5 100644 --- a/src/main/java/xyz/playedu/api/controller/frontend/UserController.java +++ b/src/main/java/xyz/playedu/api/controller/frontend/UserController.java @@ -30,7 +30,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.mapper.UserCourseHourRecordCountMapper; +import xyz.playedu.api.types.mapper.UserCourseHourRecordCourseCountMapper; import xyz.playedu.api.types.response.UserLatestLearn; import xyz.playedu.api.util.PrivacyUtil; @@ -221,8 +221,8 @@ public class UserController { .stream() .collect( Collectors.toMap( - UserCourseHourRecordCountMapper::getCourseId, - UserCourseHourRecordCountMapper::getTotal))); + UserCourseHourRecordCourseCountMapper::getCourseId, + UserCourseHourRecordCourseCountMapper::getTotal))); return JsonResponse.data(data); } diff --git a/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java b/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java index e3072cd..e0258a2 100644 --- a/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java +++ b/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java @@ -20,7 +20,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import xyz.playedu.api.domain.UserCourseHourRecord; -import xyz.playedu.api.types.mapper.UserCourseHourRecordCountMapper; +import xyz.playedu.api.types.mapper.UserCourseHourRecordCourseCountMapper; +import xyz.playedu.api.types.mapper.UserCourseHourRecordUserCountMapper; import xyz.playedu.api.types.paginate.UserCourseHourRecordPaginateFilter; import java.util.List; @@ -34,9 +35,12 @@ import java.util.List; public interface UserCourseHourRecordMapper extends BaseMapper { List getUserLatestRecords(Integer userId, Integer size); - List getUserCourseHourCount( + List getUserCourseHourCount( Integer userId, List courseIds, Integer isFinished); + List getUserCourseHourUserCount( + Integer courseId, List userIds, Integer isFinished); + List paginate(UserCourseHourRecordPaginateFilter filter); Long paginateCount(UserCourseHourRecordPaginateFilter filter); diff --git a/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java b/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java index 1a61e59..406459b 100644 --- a/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java +++ b/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java @@ -18,7 +18,8 @@ package xyz.playedu.api.service; import com.baomidou.mybatisplus.extension.service.IService; import xyz.playedu.api.domain.UserCourseHourRecord; -import xyz.playedu.api.types.mapper.UserCourseHourRecordCountMapper; +import xyz.playedu.api.types.mapper.UserCourseHourRecordCourseCountMapper; +import xyz.playedu.api.types.mapper.UserCourseHourRecordUserCountMapper; import xyz.playedu.api.types.paginate.PaginationResult; import xyz.playedu.api.types.paginate.UserCourseHourRecordPaginateFilter; @@ -51,9 +52,12 @@ public interface UserCourseHourRecordService extends IService getUserCourseHourCount( + List getUserCourseHourCount( Integer userId, List courseIds, Integer isFinished); + List getUserCourseHourUserCount( + Integer courseId, List userIds, Integer isFinished); + PaginationResult paginate( int page, int size, UserCourseHourRecordPaginateFilter filter); } 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 1743325..19f18ef 100644 --- a/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java @@ -25,7 +25,8 @@ import xyz.playedu.api.domain.UserCourseHourRecord; import xyz.playedu.api.event.UserCourseHourFinishedEvent; import xyz.playedu.api.mapper.UserCourseHourRecordMapper; import xyz.playedu.api.service.UserCourseHourRecordService; -import xyz.playedu.api.types.mapper.UserCourseHourRecordCountMapper; +import xyz.playedu.api.types.mapper.UserCourseHourRecordCourseCountMapper; +import xyz.playedu.api.types.mapper.UserCourseHourRecordUserCountMapper; import xyz.playedu.api.types.paginate.PaginationResult; import xyz.playedu.api.types.paginate.UserCourseHourRecordPaginateFilter; @@ -127,7 +128,7 @@ public class UserCourseHourRecordServiceImpl } @Override - public List getUserCourseHourCount( + public List getUserCourseHourCount( Integer userId, List courseIds, Integer isFinished) { if (courseIds == null || courseIds.size() == 0) { return new ArrayList<>(); @@ -135,6 +136,15 @@ public class UserCourseHourRecordServiceImpl return getBaseMapper().getUserCourseHourCount(userId, courseIds, isFinished); } + @Override + public List getUserCourseHourUserCount( + Integer courseId, List userIds, Integer isFinished) { + if (userIds == null || userIds.size() == 0) { + return new ArrayList<>(); + } + return getBaseMapper().getUserCourseHourUserCount(courseId, userIds, isFinished); + } + @Override public void remove(Integer userId, Integer courseId) { remove(query().getWrapper().eq("user_id", userId).eq("course_id", courseId)); diff --git a/src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordCountMapper.java b/src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordCourseCountMapper.java similarity index 94% rename from src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordCountMapper.java rename to src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordCourseCountMapper.java index a855b48..0130f2d 100644 --- a/src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordCountMapper.java +++ b/src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordCourseCountMapper.java @@ -25,7 +25,7 @@ import lombok.Data; * @create 2023/3/29 10:01 */ @Data -public class UserCourseHourRecordCountMapper { +public class UserCourseHourRecordCourseCountMapper { @JsonProperty("course_id") private Integer courseId; diff --git a/src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordUserCountMapper.java b/src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordUserCountMapper.java new file mode 100644 index 0000000..a218219 --- /dev/null +++ b/src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordUserCountMapper.java @@ -0,0 +1,33 @@ +/* + * Copyright 2023 杭州白书科技有限公司 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package xyz.playedu.api.types.mapper; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Data; + +/** + * @Author 杭州白书科技有限公司 + * + * @create 2023/5/8 11:22 + */ +@Data +public class UserCourseHourRecordUserCountMapper { + @JsonProperty("user_id") + private Integer userId; + + private Integer total; +} diff --git a/src/main/resources/mapper/UserCourseHourRecordMapper.xml b/src/main/resources/mapper/UserCourseHourRecordMapper.xml index 106ec63..6d04cc9 100644 --- a/src/main/resources/mapper/UserCourseHourRecordMapper.xml +++ b/src/main/resources/mapper/UserCourseHourRecordMapper.xml @@ -38,7 +38,7 @@ limit #{size}; + From d498799a738025b14ccdeb0882f79ff24834cd99 Mon Sep 17 00:00:00 2001 From: none Date: Mon, 8 May 2023 11:37:24 +0800 Subject: [PATCH 06/15] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/CourseUserController.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java index e75bbe0..f300caf 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java @@ -96,13 +96,16 @@ public class CourseUserController { data.put("total", result.getTotal()); data.put( "user_course_records", - userCourseRecordService.chunk( - userIds, - new ArrayList<>() { - { - add(courseId); - } - })); + userCourseRecordService + .chunk( + userIds, + new ArrayList<>() { + { + add(courseId); + } + }) + .stream() + .collect(Collectors.toMap(UserCourseRecord::getUserId, e -> e))); data.put( "user_course_hour_user_count", userCourseHourRecordService From cedc363f0987cf96f50a409a92fda15ed7d31d82 Mon Sep 17 00:00:00 2001 From: none Date: Mon, 8 May 2023 13:47:34 +0800 Subject: [PATCH 07/15] =?UTF-8?q?=E7=BA=BF=E4=B8=8A=E8=AF=BE-=E5=AD=A6?= =?UTF-8?q?=E5=91=98api=E8=BF=94=E5=9B=9E=E7=BA=BF=E4=B8=8A=E8=AF=BE?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../playedu/api/controller/backend/CourseUserController.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java index f300caf..5031371 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java @@ -15,6 +15,8 @@ */ package xyz.playedu.api.controller.backend; +import lombok.SneakyThrows; + import org.apache.commons.collections4.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; @@ -62,6 +64,7 @@ public class CourseUserController { @BackendPermissionMiddleware(slug = BPermissionConstant.COURSE_USER) @GetMapping("/index") + @SneakyThrows public JsonResponse index( @PathVariable(name = "courseId") Integer courseId, @RequestParam HashMap params) { @@ -115,6 +118,7 @@ public class CourseUserController { Collectors.toMap( UserCourseHourRecordUserCountMapper::getUserId, UserCourseHourRecordUserCountMapper::getTotal))); + data.put("courses", courseService.findOrFail(courseId)); return JsonResponse.data(data); } From 5fd6b8c2d8bf07be2baa6a7fa753ff73f0394759 Mon Sep 17 00:00:00 2001 From: none Date: Mon, 8 May 2023 14:01:03 +0800 Subject: [PATCH 08/15] fixed:typo --- .../playedu/api/controller/backend/CourseUserController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java index 5031371..112032f 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java @@ -118,7 +118,7 @@ public class CourseUserController { Collectors.toMap( UserCourseHourRecordUserCountMapper::getUserId, UserCourseHourRecordUserCountMapper::getTotal))); - data.put("courses", courseService.findOrFail(courseId)); + data.put("course", courseService.findOrFail(courseId)); return JsonResponse.data(data); } From 6b19c461f10b49c5072bb038016b427647230e0b Mon Sep 17 00:00:00 2001 From: none Date: Mon, 8 May 2023 14:54:42 +0800 Subject: [PATCH 09/15] =?UTF-8?q?=E7=BA=BF=E4=B8=8A=E8=AF=BE-=E5=AD=A6?= =?UTF-8?q?=E5=91=98=E8=BF=94=E5=9B=9E=E5=AD=A6=E5=91=98=E7=9A=84=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E6=AC=A1=E5=AD=A6=E4=B9=A0=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/CourseUserController.java | 11 +++--- .../mapper/UserCourseHourRecordMapper.java | 4 +++ .../service/UserCourseHourRecordService.java | 4 +++ .../impl/UserCourseHourRecordServiceImpl.java | 10 ++++++ ...rseHourRecordUserFirstCreatedAtMapper.java | 36 +++++++++++++++++++ .../mapper/UserCourseHourRecordMapper.xml | 18 ++++++++++ 6 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordUserFirstCreatedAtMapper.java diff --git a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java index 112032f..600eaee 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java @@ -34,7 +34,7 @@ import xyz.playedu.api.service.UserCourseHourRecordService; import xyz.playedu.api.service.UserCourseRecordService; import xyz.playedu.api.service.UserService; import xyz.playedu.api.types.JsonResponse; -import xyz.playedu.api.types.mapper.UserCourseHourRecordUserCountMapper; +import xyz.playedu.api.types.mapper.UserCourseHourRecordUserFirstCreatedAtMapper; import xyz.playedu.api.types.paginate.PaginationResult; import xyz.playedu.api.types.paginate.UserPaginateFilter; @@ -110,14 +110,15 @@ public class CourseUserController { .stream() .collect(Collectors.toMap(UserCourseRecord::getUserId, e -> e))); data.put( - "user_course_hour_user_count", + "user_course_hour_user_first_at", userCourseHourRecordService - .getUserCourseHourUserCount(courseId, userIds, null) + .getUserCourseHourUserFirstCreatedAt(courseId, userIds) .stream() .collect( Collectors.toMap( - UserCourseHourRecordUserCountMapper::getUserId, - UserCourseHourRecordUserCountMapper::getTotal))); + UserCourseHourRecordUserFirstCreatedAtMapper::getUserId, + UserCourseHourRecordUserFirstCreatedAtMapper + ::getCreatedAt))); data.put("course", courseService.findOrFail(courseId)); return JsonResponse.data(data); diff --git a/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java b/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java index e0258a2..b15d3a9 100644 --- a/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java +++ b/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java @@ -22,6 +22,7 @@ import org.apache.ibatis.annotations.Mapper; import xyz.playedu.api.domain.UserCourseHourRecord; import xyz.playedu.api.types.mapper.UserCourseHourRecordCourseCountMapper; import xyz.playedu.api.types.mapper.UserCourseHourRecordUserCountMapper; +import xyz.playedu.api.types.mapper.UserCourseHourRecordUserFirstCreatedAtMapper; import xyz.playedu.api.types.paginate.UserCourseHourRecordPaginateFilter; import java.util.List; @@ -41,6 +42,9 @@ public interface UserCourseHourRecordMapper extends BaseMapper getUserCourseHourUserCount( Integer courseId, List userIds, Integer isFinished); + List getUserCourseHourUserFirstCreatedAt( + Integer courseId, List userIds); + List paginate(UserCourseHourRecordPaginateFilter filter); Long paginateCount(UserCourseHourRecordPaginateFilter filter); diff --git a/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java b/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java index 406459b..cf84b71 100644 --- a/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java +++ b/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java @@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import xyz.playedu.api.domain.UserCourseHourRecord; import xyz.playedu.api.types.mapper.UserCourseHourRecordCourseCountMapper; import xyz.playedu.api.types.mapper.UserCourseHourRecordUserCountMapper; +import xyz.playedu.api.types.mapper.UserCourseHourRecordUserFirstCreatedAtMapper; import xyz.playedu.api.types.paginate.PaginationResult; import xyz.playedu.api.types.paginate.UserCourseHourRecordPaginateFilter; @@ -58,6 +59,9 @@ public interface UserCourseHourRecordService extends IService getUserCourseHourUserCount( Integer courseId, List userIds, Integer isFinished); + List getUserCourseHourUserFirstCreatedAt( + Integer courseId, List userIds); + PaginationResult paginate( int page, int size, UserCourseHourRecordPaginateFilter filter); } 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 19f18ef..112953f 100644 --- a/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java @@ -27,6 +27,7 @@ import xyz.playedu.api.mapper.UserCourseHourRecordMapper; import xyz.playedu.api.service.UserCourseHourRecordService; import xyz.playedu.api.types.mapper.UserCourseHourRecordCourseCountMapper; import xyz.playedu.api.types.mapper.UserCourseHourRecordUserCountMapper; +import xyz.playedu.api.types.mapper.UserCourseHourRecordUserFirstCreatedAtMapper; import xyz.playedu.api.types.paginate.PaginationResult; import xyz.playedu.api.types.paginate.UserCourseHourRecordPaginateFilter; @@ -172,4 +173,13 @@ public class UserCourseHourRecordServiceImpl .eq("course_id", courseId) .eq("hour_id", hourId)); } + + @Override + public List getUserCourseHourUserFirstCreatedAt( + Integer courseId, List userIds) { + if (userIds == null || userIds.size() == 0) { + return new ArrayList<>(); + } + return getBaseMapper().getUserCourseHourUserFirstCreatedAt(courseId, userIds); + } } diff --git a/src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordUserFirstCreatedAtMapper.java b/src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordUserFirstCreatedAtMapper.java new file mode 100644 index 0000000..ef7c4cc --- /dev/null +++ b/src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordUserFirstCreatedAtMapper.java @@ -0,0 +1,36 @@ +/* + * Copyright 2023 杭州白书科技有限公司 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package xyz.playedu.api.types.mapper; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Data; + +import java.util.Date; + +/** + * @Author 杭州白书科技有限公司 + * + * @create 2023/5/8 14:42 + */ +@Data +public class UserCourseHourRecordUserFirstCreatedAtMapper { + @JsonProperty("user_id") + private Integer userId; + + @JsonProperty("created_at") + private Date createdAt; +} diff --git a/src/main/resources/mapper/UserCourseHourRecordMapper.xml b/src/main/resources/mapper/UserCourseHourRecordMapper.xml index 6d04cc9..2331146 100644 --- a/src/main/resources/mapper/UserCourseHourRecordMapper.xml +++ b/src/main/resources/mapper/UserCourseHourRecordMapper.xml @@ -128,4 +128,22 @@ GROUP BY `user_id`; + From dbae07de95776d58b3b951160a591b3b0f180609 Mon Sep 17 00:00:00 2001 From: none Date: Mon, 8 May 2023 15:49:57 +0800 Subject: [PATCH 10/15] =?UTF-8?q?=E5=85=A8=E9=83=A8=E5=88=86=E7=B1=BBapi?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E7=BB=93=E6=9E=84=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/controller/frontend/CategoryController.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/xyz/playedu/api/controller/frontend/CategoryController.java b/src/main/java/xyz/playedu/api/controller/frontend/CategoryController.java index 74ec3e8..95b9cd0 100644 --- a/src/main/java/xyz/playedu/api/controller/frontend/CategoryController.java +++ b/src/main/java/xyz/playedu/api/controller/frontend/CategoryController.java @@ -24,7 +24,9 @@ import xyz.playedu.api.domain.ResourceCategory; import xyz.playedu.api.service.ResourceCategoryService; import xyz.playedu.api.types.JsonResponse; +import java.util.HashMap; import java.util.List; +import java.util.stream.Collectors; @RestController @RequestMapping("/api/v1/category") @@ -35,6 +37,10 @@ public class CategoryController { @GetMapping("/all") public JsonResponse all() { List categories = resourceCategoryService.all(); - return JsonResponse.data(categories); + HashMap data = new HashMap<>(); + data.put( + "categories", + categories.stream().collect(Collectors.groupingBy(ResourceCategory::getParentId))); + return JsonResponse.data(data); } } From af913bf4e4738dc853b9daafdf144fac85aba055 Mon Sep 17 00:00:00 2001 From: none Date: Mon, 8 May 2023 17:08:35 +0800 Subject: [PATCH 11/15] =?UTF-8?q?=E4=BF=AE=E5=A4=8D/user/courses=20?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3category=5Fid=E5=8F=82=E6=95=B0=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../playedu/api/controller/ExceptionController.java | 10 +++++----- .../playedu/api/service/impl/CourseServiceImpl.java | 9 ++++----- src/main/resources/mapper/CourseMapper.xml | 5 ++++- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/java/xyz/playedu/api/controller/ExceptionController.java b/src/main/java/xyz/playedu/api/controller/ExceptionController.java index 5bc268b..6358dd2 100644 --- a/src/main/java/xyz/playedu/api/controller/ExceptionController.java +++ b/src/main/java/xyz/playedu/api/controller/ExceptionController.java @@ -37,11 +37,11 @@ import java.util.List; @Slf4j public class ExceptionController { - @ExceptionHandler(Exception.class) - public JsonResponse exceptionHandler(Exception e) { - log.error(e.getMessage()); - return JsonResponse.error("系统错误", 500); - } + // @ExceptionHandler(Exception.class) + // public JsonResponse exceptionHandler(Exception e) { + // log.error(e.getMessage()); + // return JsonResponse.error("系统错误", 500); + // } @ExceptionHandler(ServiceException.class) public JsonResponse serviceExceptionHandler(ServiceException e) { diff --git a/src/main/java/xyz/playedu/api/service/impl/CourseServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/CourseServiceImpl.java index c784c3c..23b2513 100644 --- a/src/main/java/xyz/playedu/api/service/impl/CourseServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/CourseServiceImpl.java @@ -237,11 +237,10 @@ public class CourseServiceImpl extends ServiceImpl impleme if (tmpCourseIds == null || tmpCourseIds.size() == 0) { return new ArrayList<>(); } - // 取交集 - courseIds.retainAll(tmpCourseIds); - } - if (courseIds.size() == 0) { - return new ArrayList<>(); + courseIds = courseIds.stream().filter(tmpCourseIds::contains).toList(); + if (courseIds.size() == 0) { + return new ArrayList<>(); + } } return list(query().getWrapper().in("id", courseIds).eq("is_show", 1)); } diff --git a/src/main/resources/mapper/CourseMapper.xml b/src/main/resources/mapper/CourseMapper.xml index f03a8b1..45b095d 100644 --- a/src/main/resources/mapper/CourseMapper.xml +++ b/src/main/resources/mapper/CourseMapper.xml @@ -172,10 +172,13 @@ SELECT `courses`.* FROM `courses` LEFT JOIN `course_department` ON `course_department`.`course_id` = `courses`.`id` + + INNER JOIN `resource_course_category` ON `resource_course_category`.`course_id` = `courses`.`id` + WHERE `course_department`.`course_id` IS NULL AND `courses`.`is_show` = 1 - AND `course_department`.`caetgory_id` = #{categoryId} + AND `resource_course_category`.`category_id` = #{categoryId} LIMIT #{limit} From 08cad48fa4770986b998cbe5a8c26bb382b86032 Mon Sep 17 00:00:00 2001 From: none Date: Mon, 8 May 2023 17:35:06 +0800 Subject: [PATCH 12/15] docker --- docker/.m2/settings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/.m2/settings.xml b/docker/.m2/settings.xml index 4ae00f9..720b722 100755 --- a/docker/.m2/settings.xml +++ b/docker/.m2/settings.xml @@ -4,10 +4,10 @@ xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> - ali - ali Maven + Ali + Ali Maven * - http://maven.aliyun.com/nexus/content/groups/public/ + https://maven.aliyun.com/nexus/content/groups/public/ From 669e4fe47b17688214482a2a3ea5869538ea035d Mon Sep 17 00:00:00 2001 From: none Date: Tue, 9 May 2023 10:30:31 +0800 Subject: [PATCH 13/15] =?UTF-8?q?fixed:=20=E5=AD=A6=E5=91=98=E7=9A=84?= =?UTF-8?q?=E5=A4=9A=E9=83=A8=E9=97=A8=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/CourseUserController.java | 5 +- .../backend/DepartmentController.java | 7 ++- .../controller/backend/UserController.java | 13 ++++- .../types/paginate/UserPaginateFilter.java | 4 +- src/main/resources/mapper/UserMapper.xml | 58 +++++++++---------- 5 files changed, 51 insertions(+), 36 deletions(-) diff --git a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java index 600eaee..c2e9cb5 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java @@ -16,6 +16,7 @@ package xyz.playedu.api.controller.backend; import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.MapUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -49,6 +50,7 @@ import java.util.stream.Collectors; * @create 2023/3/24 16:08 */ @RestController +@Slf4j @RequestMapping("/backend/v1/course/{courseId}/user") public class CourseUserController { @@ -86,8 +88,7 @@ public class CourseUserController { // 所属部门 List depIds = courseService.getDepIdsByCourseId(courseId); if (depIds != null && depIds.size() > 0) { - filter.setDepIds( - depIds.stream().map(String::valueOf).collect(Collectors.joining(",", "", ""))); + filter.setDepIds(depIds); } PaginationResult result = userService.paginate(page, size, filter); 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 16c7b2b..e08c54a 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/DepartmentController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/DepartmentController.java @@ -188,7 +188,12 @@ public class DepartmentController { String name = MapUtils.getString(params, "name"); String email = MapUtils.getString(params, "email"); String idCard = MapUtils.getString(params, "id_card"); - String depIds = String.valueOf(id); + List depIds = + new ArrayList<>() { + { + add(id); + } + }; String courseIdsStr = MapUtils.getString(params, "course_ids"); String showMode = MapUtils.getString(params, "show_mode"); diff --git a/src/main/java/xyz/playedu/api/controller/backend/UserController.java b/src/main/java/xyz/playedu/api/controller/backend/UserController.java index 5de663f..a05335b 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/UserController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/UserController.java @@ -99,8 +99,17 @@ public class UserController { Integer isVerify = MapUtils.getInteger(params, "is_verify"); Integer isSetPassword = MapUtils.getInteger(params, "is_set_password"); String createdAt = MapUtils.getString(params, "created_at"); - String depIds = MapUtils.getString(params, "dep_ids"); + String depIdsStr = MapUtils.getString(params, "dep_ids"); + List depIds = null; + if (depIdsStr != null && depIdsStr.trim().length() > 0) { + if ("0".equals(depIdsStr)) { + depIds = new ArrayList<>(); + } else { + depIds = Arrays.stream(depIdsStr.split(",")).map(Integer::valueOf).toList(); + } + } + List finalDepIds = depIds; UserPaginateFilter filter = new UserPaginateFilter() { { @@ -111,7 +120,7 @@ public class UserController { setIsLock(isLock); setIsVerify(isVerify); setIsSetPassword(isSetPassword); - setDepIds(depIds); + setDepIds(finalDepIds); setSortAlgo(sortAlgo); setSortField(sortField); } diff --git a/src/main/java/xyz/playedu/api/types/paginate/UserPaginateFilter.java b/src/main/java/xyz/playedu/api/types/paginate/UserPaginateFilter.java index 990785c..d548249 100644 --- a/src/main/java/xyz/playedu/api/types/paginate/UserPaginateFilter.java +++ b/src/main/java/xyz/playedu/api/types/paginate/UserPaginateFilter.java @@ -17,6 +17,8 @@ package xyz.playedu.api.types.paginate; import lombok.Data; +import java.util.List; + /** * @Author 杭州白书科技有限公司 * @@ -36,7 +38,7 @@ public class UserPaginateFilter { // 创建时间范围过滤 private String[] createdAt; - private String depIds; + private List depIds; // 排序控制 private String sortField; diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index cc0474b..f72f9ae 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -36,24 +36,23 @@ SELECT `users`.* FROM `users` - - - - LEFT JOIN `user_department` ON `user_department`.`user_id` = `users`.`id` - - - INNER JOIN `user_department` ON `user_department`.`user_id` = `users`.`id` - - - - + - - AND `user_department`.`user_id` IS NULL + + AND `users`.`id` IN ( + SELECT `users`.`id` from `users` LEFT JOIN `user_department` ON `user_department`.`user_id` = + `users`.`id` + WHERE `user_department`.`user_id` IS NULL + ) - AND `user_department`.`dep_id` IN (#{depIds}) + AND `users`.`id` IN ( + SELECT `users`.`id` from `users` LEFT JOIN `user_department` ON `user_department`.`user_id` = + `users`.`id` + WHERE `user_department`.`dep_id` IN ( + #{depId}) + ) @@ -130,7 +128,7 @@ AND `users`.`is_set_password` = #{isSetPassword} - + AND `users`.`created_at` BETWEEN #{createdAtItem} From bf956b4742c7ba0775afb849bb9c6e630ee07144 Mon Sep 17 00:00:00 2001 From: none Date: Tue, 9 May 2023 10:32:18 +0800 Subject: [PATCH 14/15] =?UTF-8?q?fixed:=20sql=E4=B8=AD=E7=9A=84size()?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E7=9A=84=E9=94=99=E8=AF=AF=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mapper/UserCourseHourRecordMapper.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/mapper/UserCourseHourRecordMapper.xml b/src/main/resources/mapper/UserCourseHourRecordMapper.xml index 2331146..f2038dc 100644 --- a/src/main/resources/mapper/UserCourseHourRecordMapper.xml +++ b/src/main/resources/mapper/UserCourseHourRecordMapper.xml @@ -42,7 +42,7 @@ SELECT `course_id`, count(1) AS `total` FROM `user_course_hour_records` WHERE `user_id` = #{userId} - + AND `course_id` IN (#{courseId}) @@ -120,7 +120,7 @@ SELECT `user_id`, count(1) AS `total` FROM `user_course_hour_records` WHERE `course_id` = #{courseId} - + AND `user_id` IN (#{userId}) @@ -135,14 +135,14 @@ INNER JOIN (SELECT `t2`.`user_id`, min(`t2`.`created_at`) as `created_at` FROM `user_course_hour_records` AS `t2` WHERE `t2`.`course_id` = #{courseId} - + AND `t2`.`user_id` IN (#{userId}) GROUP BY `t2`.`user_id`) AS `t3` ON `t3`.`user_id` = `t1`.`user_id` AND `t3`.`created_at` = `t1`.`created_at` WHERE `t1`.`course_id` = #{courseId} - + AND `t1`.`user_id` IN (#{userId}) From 19be6d96f95e3e704b313721afd5c147c44efe68 Mon Sep 17 00:00:00 2001 From: none Date: Wed, 10 May 2023 10:31:16 +0800 Subject: [PATCH 15/15] =?UTF-8?q?=E7=BA=BF=E4=B8=8A=E8=AF=BE=E5=AD=A6?= =?UTF-8?q?=E5=91=98=E5=88=97=E8=A1=A8=E8=BF=94=E5=9B=9E=E5=AD=A6=E5=91=98?= =?UTF-8?q?=E7=9A=84=E9=83=A8=E9=97=A8=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/CourseUserController.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java index c2e9cb5..897907d 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java @@ -30,10 +30,7 @@ import xyz.playedu.api.domain.UserCourseRecord; import xyz.playedu.api.event.UserCourseRecordDestroyEvent; import xyz.playedu.api.middleware.BackendPermissionMiddleware; import xyz.playedu.api.request.backend.CourseUserDestroyRequest; -import xyz.playedu.api.service.CourseService; -import xyz.playedu.api.service.UserCourseHourRecordService; -import xyz.playedu.api.service.UserCourseRecordService; -import xyz.playedu.api.service.UserService; +import xyz.playedu.api.service.*; import xyz.playedu.api.types.JsonResponse; import xyz.playedu.api.types.mapper.UserCourseHourRecordUserFirstCreatedAtMapper; import xyz.playedu.api.types.paginate.PaginationResult; @@ -62,6 +59,8 @@ public class CourseUserController { @Autowired private UserService userService; + @Autowired private DepartmentService departmentService; + @Autowired private ApplicationContext ctx; @BackendPermissionMiddleware(slug = BPermissionConstant.COURSE_USER) @@ -77,6 +76,7 @@ public class CourseUserController { String name = MapUtils.getString(params, "name"); String email = MapUtils.getString(params, "email"); String idCard = MapUtils.getString(params, "id_card"); + Integer depId = MapUtils.getInteger(params, "dep_id"); UserPaginateFilter filter = new UserPaginateFilter(); filter.setName(name); @@ -86,9 +86,18 @@ public class CourseUserController { filter.setIdCard(idCard); // 所属部门 - List depIds = courseService.getDepIdsByCourseId(courseId); - if (depIds != null && depIds.size() > 0) { - filter.setDepIds(depIds); + if (depId != null && depId > 0) { // 设置过滤部门 + filter.setDepIds( + new ArrayList<>() { + { + add(depId); + } + }); + } else { // 默认读取课程关联的全部部门 + List depIds = courseService.getDepIdsByCourseId(courseId); + if (depIds != null && depIds.size() > 0) { + filter.setDepIds(depIds); + } } PaginationResult result = userService.paginate(page, size, filter); @@ -121,6 +130,10 @@ public class CourseUserController { UserCourseHourRecordUserFirstCreatedAtMapper ::getCreatedAt))); data.put("course", courseService.findOrFail(courseId)); + data.put( + "user_dep_ids", + userService.getDepIdsGroup(result.getData().stream().map(User::getId).toList())); + data.put("departments", departmentService.id2name()); return JsonResponse.data(data); }