From 4514adb9d05406bcd4bde2829f2ceaf123c90561 Mon Sep 17 00:00:00 2001 From: none Date: Fri, 24 Mar 2023 16:29:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=90=8E=E5=8F=B0=E7=9A=84?= =?UTF-8?q?=E7=BA=BF=E4=B8=8A=E8=AF=BE-=E5=AD=A6=E5=91=98api=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/constant/BPermissionConstant.java | 1 + .../backend/CourseUserController.java | 68 +++++++++++++++ .../api/mapper/UserCourseRecordMapper.java | 15 ++-- .../backend/CourseUserDestroyRequest.java | 16 ++++ .../api/service/UserCourseRecordService.java | 6 ++ .../xyz/playedu/api/service/UserService.java | 2 + .../impl/UserCourseRecordServiceImpl.java | 20 +++++ .../api/service/impl/UserServiceImpl.java | 8 ++ .../paginate/CourseUserPaginateFilter.java | 19 +++++ .../mapper/UserCourseRecordMapper.xml | 83 ++++++++++++++++++- 10 files changed, 230 insertions(+), 8 deletions(-) create mode 100644 src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java create mode 100644 src/main/java/xyz/playedu/api/request/backend/CourseUserDestroyRequest.java create mode 100644 src/main/java/xyz/playedu/api/types/paginate/CourseUserPaginateFilter.java diff --git a/src/main/java/xyz/playedu/api/constant/BPermissionConstant.java b/src/main/java/xyz/playedu/api/constant/BPermissionConstant.java index c2d21a2..8592742 100644 --- a/src/main/java/xyz/playedu/api/constant/BPermissionConstant.java +++ b/src/main/java/xyz/playedu/api/constant/BPermissionConstant.java @@ -24,6 +24,7 @@ public class BPermissionConstant { public final static String USER_DESTROY = "user-destroy"; public final static String COURSE = "course"; + public final static String COURSE_USER = "course-user"; public final static String RESOURCE_DESTROY = "resource-destroy"; diff --git a/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java new file mode 100644 index 0000000..534eee6 --- /dev/null +++ b/src/main/java/xyz/playedu/api/controller/backend/CourseUserController.java @@ -0,0 +1,68 @@ +package xyz.playedu.api.controller.backend; + +import org.apache.commons.collections4.MapUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import xyz.playedu.api.domain.UserCourseRecord; +import xyz.playedu.api.request.backend.CourseUserDestroyRequest; +import xyz.playedu.api.service.UserCourseRecordService; +import xyz.playedu.api.service.UserService; +import xyz.playedu.api.types.JsonResponse; +import xyz.playedu.api.types.paginate.CourseUserPaginateFilter; +import xyz.playedu.api.types.paginate.PaginationResult; + +import java.util.HashMap; + +/** + * @Author 杭州白书科技有限公司 + * @create 2023/3/24 16:08 + */ +@RestController +@RequestMapping("/backend/v1/course/{courseId}/user") +public class CourseUserController { + + @Autowired + private UserCourseRecordService userCourseRecordService; + + @Autowired + private UserService userService; + + @GetMapping("/index") + public JsonResponse index(@PathVariable(name = "courseId") Integer courseId, @RequestParam HashMap params) { + Integer page = MapUtils.getInteger(params, "page", 1); + Integer size = MapUtils.getInteger(params, "size", 10); + String sortField = MapUtils.getString(params, "sort_field"); + String sortAlgo = MapUtils.getString(params, "sort_algo"); + String name = MapUtils.getString(params, "name"); + String email = MapUtils.getString(params, "email"); + String idCard = MapUtils.getString(params, "id_card"); + + CourseUserPaginateFilter filter = new CourseUserPaginateFilter(); + filter.setCourseId(courseId); + filter.setName(name); + filter.setEmail(email); + filter.setIdCard(idCard); + filter.setSortAlgo(sortAlgo); + filter.setSortField(sortField); + + PaginationResult result = userCourseRecordService.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())); + + return JsonResponse.data(data); + } + + @PostMapping("/destroy") + public JsonResponse destroy(@PathVariable(name = "courseId") Integer courseId, @RequestBody @Validated CourseUserDestroyRequest req) { + if (req.getIds().size() == 0) { + return JsonResponse.error("请选择需要删除的数据"); + } + userCourseRecordService.destroy(courseId, req.getIds()); + return JsonResponse.success(); + } + +} diff --git a/src/main/java/xyz/playedu/api/mapper/UserCourseRecordMapper.java b/src/main/java/xyz/playedu/api/mapper/UserCourseRecordMapper.java index b5a2dbf..92915b4 100644 --- a/src/main/java/xyz/playedu/api/mapper/UserCourseRecordMapper.java +++ b/src/main/java/xyz/playedu/api/mapper/UserCourseRecordMapper.java @@ -3,16 +3,21 @@ package xyz.playedu.api.mapper; import org.apache.ibatis.annotations.Mapper; import xyz.playedu.api.domain.UserCourseRecord; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import xyz.playedu.api.types.paginate.CourseUserPaginateFilter; + +import java.util.List; /** -* @author tengteng -* @description 针对表【user_course_records】的数据库操作Mapper -* @createDate 2023-03-20 16:41:04 -* @Entity xyz.playedu.api.domain.UserCourseRecord -*/ + * @author tengteng + * @description 针对表【user_course_records】的数据库操作Mapper + * @createDate 2023-03-20 16:41:04 + * @Entity xyz.playedu.api.domain.UserCourseRecord + */ @Mapper public interface UserCourseRecordMapper extends BaseMapper { + List paginate(CourseUserPaginateFilter filter); + long paginateTotal(CourseUserPaginateFilter filter); } diff --git a/src/main/java/xyz/playedu/api/request/backend/CourseUserDestroyRequest.java b/src/main/java/xyz/playedu/api/request/backend/CourseUserDestroyRequest.java new file mode 100644 index 0000000..40bdad5 --- /dev/null +++ b/src/main/java/xyz/playedu/api/request/backend/CourseUserDestroyRequest.java @@ -0,0 +1,16 @@ +package xyz.playedu.api.request.backend; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; + +/** + * @Author 杭州白书科技有限公司 + * @create 2023/3/24 16:22 + */ +@Data +public class CourseUserDestroyRequest { + @NotNull(message = "ids参数不存在") + private List ids; +} diff --git a/src/main/java/xyz/playedu/api/service/UserCourseRecordService.java b/src/main/java/xyz/playedu/api/service/UserCourseRecordService.java index 14265d3..87857f9 100644 --- a/src/main/java/xyz/playedu/api/service/UserCourseRecordService.java +++ b/src/main/java/xyz/playedu/api/service/UserCourseRecordService.java @@ -2,6 +2,8 @@ package xyz.playedu.api.service; import xyz.playedu.api.domain.UserCourseRecord; import com.baomidou.mybatisplus.extension.service.IService; +import xyz.playedu.api.types.paginate.PaginationResult; +import xyz.playedu.api.types.paginate.CourseUserPaginateFilter; import java.util.List; @@ -17,4 +19,8 @@ public interface UserCourseRecordService extends IService { void storeOrUpdate(Integer userId, Integer courseId, Integer hourCount, Integer finishedCount); List chunk(Integer userId, List courseIds); + + PaginationResult paginate(int page, int size, CourseUserPaginateFilter filter); + + void destroy(Integer courseId, List ids); } diff --git a/src/main/java/xyz/playedu/api/service/UserService.java b/src/main/java/xyz/playedu/api/service/UserService.java index 29e4da0..e0b38b3 100644 --- a/src/main/java/xyz/playedu/api/service/UserService.java +++ b/src/main/java/xyz/playedu/api/service/UserService.java @@ -40,6 +40,8 @@ public interface UserService extends IService { List chunks(List ids, List fields); + List chunks(List ids); + Long total(); Long todayCount(); diff --git a/src/main/java/xyz/playedu/api/service/impl/UserCourseRecordServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/UserCourseRecordServiceImpl.java index d6ba966..1c99007 100644 --- a/src/main/java/xyz/playedu/api/service/impl/UserCourseRecordServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/UserCourseRecordServiceImpl.java @@ -5,6 +5,8 @@ import xyz.playedu.api.domain.UserCourseRecord; import xyz.playedu.api.service.UserCourseRecordService; import xyz.playedu.api.mapper.UserCourseRecordMapper; import org.springframework.stereotype.Service; +import xyz.playedu.api.types.paginate.CourseUserPaginateFilter; +import xyz.playedu.api.types.paginate.PaginationResult; import java.util.ArrayList; import java.util.Date; @@ -74,6 +76,24 @@ public class UserCourseRecordServiceImpl extends ServiceImpl paginate(int page, int size, CourseUserPaginateFilter filter) { + Integer pageStart = (page - 1) * size; + filter.setPageStart(pageStart); + filter.setPageSize(size); + + PaginationResult result = new PaginationResult<>(); + result.setTotal(getBaseMapper().paginateTotal(filter)); + result.setData(getBaseMapper().paginate(filter)); + + return result; + } + + @Override + public void destroy(Integer courseId, List ids) { + remove(query().getWrapper().in("id", ids).eq("course_id", courseId)); + } } diff --git a/src/main/java/xyz/playedu/api/service/impl/UserServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/UserServiceImpl.java index 9612445..4e61432 100644 --- a/src/main/java/xyz/playedu/api/service/impl/UserServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/UserServiceImpl.java @@ -166,6 +166,14 @@ public class UserServiceImpl extends ServiceImpl implements Us return list(query().getWrapper().in("id", ids).select(fields)); } + @Override + public List chunks(List ids) { + if (ids == null || ids.size() == 0) { + return new ArrayList<>(); + } + return list(query().getWrapper().in("id", ids)); + } + @Override public Long total() { return count(); diff --git a/src/main/java/xyz/playedu/api/types/paginate/CourseUserPaginateFilter.java b/src/main/java/xyz/playedu/api/types/paginate/CourseUserPaginateFilter.java new file mode 100644 index 0000000..77287d5 --- /dev/null +++ b/src/main/java/xyz/playedu/api/types/paginate/CourseUserPaginateFilter.java @@ -0,0 +1,19 @@ +package xyz.playedu.api.types.paginate; + +import lombok.Data; + +/** + * @Author 杭州白书科技有限公司 + * @create 2023/3/24 16:10 + */ +@Data +public class CourseUserPaginateFilter { + private Integer courseId; + private String email; + private String name; + private String idCard; + private String sortField; + private String sortAlgo; + private Integer pageStart; + private Integer pageSize; +} diff --git a/src/main/resources/mapper/UserCourseRecordMapper.xml b/src/main/resources/mapper/UserCourseRecordMapper.xml index 9af7632..5bde160 100644 --- a/src/main/resources/mapper/UserCourseRecordMapper.xml +++ b/src/main/resources/mapper/UserCourseRecordMapper.xml @@ -18,9 +18,86 @@ - id,user_id,course_id, - hour_count,finished_count,progress, - is_finished,finished_at,created_at, + id,user_id,course_id, + hour_count,finished_count,progress, + is_finished,finished_at,created_at, updated_at + +