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 @@