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/ 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/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/controller/backend/CourseUserController.java b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java index 289db8e..897907d 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,9 @@ */ 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; import org.springframework.context.ApplicationContext; @@ -22,19 +25,21 @@ 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.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; -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 杭州白书科技有限公司 @@ -42,17 +47,25 @@ import java.util.List; * @create 2023/3/24 16:08 */ @RestController +@Slf4j @RequestMapping("/backend/v1/course/{courseId}/user") public class CourseUserController { + @Autowired private CourseService courseService; + @Autowired private UserCourseRecordService userCourseRecordService; + @Autowired private UserCourseHourRecordService userCourseHourRecordService; + @Autowired private UserService userService; + @Autowired private DepartmentService departmentService; + @Autowired private ApplicationContext ctx; @BackendPermissionMiddleware(slug = BPermissionConstant.COURSE_USER) @GetMapping("/index") + @SneakyThrows public JsonResponse index( @PathVariable(name = "courseId") Integer courseId, @RequestParam HashMap params) { @@ -63,25 +76,64 @@ 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"); - 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); + // 所属部门 + 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); + + 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( - "users", - userService.chunks( - result.getData().stream().map(UserCourseRecord::getUserId).toList())); + "user_course_records", + userCourseRecordService + .chunk( + userIds, + new ArrayList<>() { + { + add(courseId); + } + }) + .stream() + .collect(Collectors.toMap(UserCourseRecord::getUserId, e -> e))); + data.put( + "user_course_hour_user_first_at", + userCourseHourRecordService + .getUserCourseHourUserFirstCreatedAt(courseId, userIds) + .stream() + .collect( + Collectors.toMap( + UserCourseHourRecordUserFirstCreatedAtMapper::getUserId, + 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); } 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 6ad3556..a05335b 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.UserCourseHourRecordCourseCountMapper; import xyz.playedu.api.types.paginate.PaginationResult; import xyz.playedu.api.types.paginate.UserCourseHourRecordPaginateFilter; import xyz.playedu.api.types.paginate.UserCourseRecordPaginateFilter; @@ -98,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() { { @@ -110,7 +120,7 @@ public class UserController { setIsLock(isLock); setIsVerify(isVerify); setIsSetPassword(isSetPassword); - setDepIds(depIds); + setDepIds(finalDepIds); setSortAlgo(sortAlgo); setSortField(sortField); } @@ -482,6 +492,14 @@ public class UserController { userCourseRecords = userCourseRecordService.chunk(id, courseIds); } + // 获取学员线上课的课时学习数量(只要学习了就算,不一定需要已完成) + Map userCourseHourCount = + userCourseHourRecordService.getUserCourseHourCount(id, courseIds, null).stream() + .collect( + Collectors.toMap( + UserCourseHourRecordCourseCountMapper::getCourseId, + UserCourseHourRecordCourseCountMapper::getTotal)); + HashMap data = new HashMap<>(); data.put("open_courses", openCourses); data.put("departments", departments); @@ -490,6 +508,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); } 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..95b9cd0 --- /dev/null +++ b/src/main/java/xyz/playedu/api/controller/frontend/CategoryController.java @@ -0,0 +1,46 @@ +/* + * 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.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/api/v1/category") +public class CategoryController { + + @Autowired private ResourceCategoryService resourceCategoryService; + + @GetMapping("/all") + public JsonResponse all() { + List categories = resourceCategoryService.all(); + HashMap data = new HashMap<>(); + data.put( + "categories", + categories.stream().collect(Collectors.groupingBy(ResourceCategory::getParentId))); + return JsonResponse.data(data); + } +} 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..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; @@ -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); @@ -218,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/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/mapper/UserCourseHourRecordMapper.java b/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java index e3072cd..b15d3a9 100644 --- a/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java +++ b/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java @@ -20,7 +20,9 @@ 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.mapper.UserCourseHourRecordUserFirstCreatedAtMapper; import xyz.playedu.api.types.paginate.UserCourseHourRecordPaginateFilter; import java.util.List; @@ -34,9 +36,15 @@ 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 getUserCourseHourUserFirstCreatedAt( + Integer courseId, List userIds); + List paginate(UserCourseHourRecordPaginateFilter filter); Long paginateCount(UserCourseHourRecordPaginateFilter filter); 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/UserCourseHourRecordService.java b/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java index 1a61e59..cf84b71 100644 --- a/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java +++ b/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java @@ -18,7 +18,9 @@ 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.mapper.UserCourseHourRecordUserFirstCreatedAtMapper; import xyz.playedu.api.types.paginate.PaginationResult; import xyz.playedu.api.types.paginate.UserCourseHourRecordPaginateFilter; @@ -51,9 +53,15 @@ public interface UserCourseHourRecordService extends IService getUserCourseHourCount( + List getUserCourseHourCount( Integer userId, List courseIds, Integer isFinished); + List 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/CourseServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/CourseServiceImpl.java index 23225fc..23b2513 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,40 @@ 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 = courseIds.stream().filter(tmpCourseIds::contains).toList(); + if (courseIds.size() == 0) { + return new ArrayList<>(); + } + } + return list(query().getWrapper().in("id", courseIds).eq("is_show", 1)); } @Override 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..112953f 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,9 @@ 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.mapper.UserCourseHourRecordUserFirstCreatedAtMapper; import xyz.playedu.api.types.paginate.PaginationResult; import xyz.playedu.api.types.paginate.UserCourseHourRecordPaginateFilter; @@ -127,7 +129,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 +137,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)); @@ -162,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/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/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/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/CourseMapper.xml b/src/main/resources/mapper/CourseMapper.xml index d99fd66..45b095d 100644 --- a/src/main/resources/mapper/CourseMapper.xml +++ b/src/main/resources/mapper/CourseMapper.xml @@ -171,9 +171,15 @@ diff --git a/src/main/resources/mapper/UserCourseHourRecordMapper.xml b/src/main/resources/mapper/UserCourseHourRecordMapper.xml index 106ec63..f2038dc 100644 --- a/src/main/resources/mapper/UserCourseHourRecordMapper.xml +++ b/src/main/resources/mapper/UserCourseHourRecordMapper.xml @@ -38,11 +38,11 @@ limit #{size}; + + 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}