diff --git a/reading-platform-java/src/main/java/com/reading/platform/controller/teacher/TeacherCourseController.java b/reading-platform-java/src/main/java/com/reading/platform/controller/teacher/TeacherCourseController.java index e47687b..91567ac 100644 --- a/reading-platform-java/src/main/java/com/reading/platform/controller/teacher/TeacherCourseController.java +++ b/reading-platform-java/src/main/java/com/reading/platform/controller/teacher/TeacherCourseController.java @@ -69,16 +69,21 @@ public class TeacherCourseController { @RequestParam(required = false) String keyword, @RequestParam(required = false) String category) { Long tenantId = SecurityUtils.getCurrentTenantId(); - Page page = courseService.getCoursePage(tenantId, pageNum, pageSize, keyword, category, CourseStatus.PUBLISHED.getCode()); + // 按 学校 -> 套餐 -> 课程包 层级查询教师可用课程 + Page page = courseService.getTenantPackageCoursePage( + tenantId, pageNum, pageSize, keyword, category, CourseStatus.PUBLISHED.getCode()); List voList = courseMapper.toVO(page.getRecords()); return Result.success(PageResult.of(voList, page.getTotal(), page.getCurrent(), page.getSize())); } @Operation(summary = "获取所有课程") @GetMapping("/courses/all") - public Result> getAllCourses() { + public Result> getAllCourses( + @RequestParam(required = false) String keyword, + @RequestParam(required = false) String category) { Long tenantId = SecurityUtils.getCurrentTenantId(); - List courses = courseService.getCoursesByTenantId(tenantId); + // 按 学校 -> 套餐 -> 课程包 层级查询 + List courses = courseService.getTenantPackageCourses(tenantId, keyword, category); return Result.success(courseMapper.toVO(courses)); } diff --git a/reading-platform-java/src/main/java/com/reading/platform/service/CoursePackageService.java b/reading-platform-java/src/main/java/com/reading/platform/service/CoursePackageService.java index f4926bc..28f789c 100644 --- a/reading-platform-java/src/main/java/com/reading/platform/service/CoursePackageService.java +++ b/reading-platform-java/src/main/java/com/reading/platform/service/CoursePackageService.java @@ -65,4 +65,18 @@ public interface CoursePackageService extends com.baomidou.mybatisplus.extension */ List getTenantPackageCourses(Long tenantId, String keyword, String grade); + /** + * 按 学校 -> 套餐 -> 课程包 层级分页查询教师可用课程 + * 教师端课程中心应使用此方法,通过租户已购买的套餐获取课程包 + * + * @param tenantId 租户(学校)ID + * @param pageNum 页码 + * @param pageSize 每页数量 + * @param keyword 关键词(课程名称、绘本名称,可选) + * @param grade 年级/领域筛选(可选) + * @param status 课程状态(如 PUBLISHED) + */ + Page getTenantPackageCoursePage(Long tenantId, Integer pageNum, Integer pageSize, + String keyword, String grade, String status); + } diff --git a/reading-platform-java/src/main/java/com/reading/platform/service/impl/CoursePackageServiceImpl.java b/reading-platform-java/src/main/java/com/reading/platform/service/impl/CoursePackageServiceImpl.java index 018540b..4f51583 100644 --- a/reading-platform-java/src/main/java/com/reading/platform/service/impl/CoursePackageServiceImpl.java +++ b/reading-platform-java/src/main/java/com/reading/platform/service/impl/CoursePackageServiceImpl.java @@ -275,6 +275,66 @@ public class CoursePackageServiceImpl extends ServiceImpl getTenantPackageCoursePage(Long tenantId, Integer pageNum, Integer pageSize, + String keyword, String grade, String status) { + int current = pageNum != null && pageNum > 0 ? pageNum : 1; + int size = pageSize != null && pageSize > 0 ? pageSize : 10; + + // 1. 学校 -> 套餐:查询租户已购买的套餐(collection) + List collectionIds = tenantPackageMapper.selectList( + new LambdaQueryWrapper() + .eq(TenantPackage::getTenantId, tenantId) + .eq(TenantPackage::getStatus, TenantPackageStatus.ACTIVE.getCode()) + .isNotNull(TenantPackage::getCollectionId)) + .stream() + .map(TenantPackage::getCollectionId) + .distinct() + .collect(Collectors.toList()); + + if (collectionIds.isEmpty()) { + return new Page<>(current, size, 0); + } + + // 2. 套餐 -> 课程包:查询套餐下的课程包 ID + List packageIds = collectionPackageMapper.selectList( + new LambdaQueryWrapper() + .in(CourseCollectionPackage::getCollectionId, collectionIds)) + .stream() + .map(CourseCollectionPackage::getPackageId) + .distinct() + .collect(Collectors.toList()); + + if (packageIds.isEmpty()) { + return new Page<>(current, size, 0); + } + + // 3. 分页查询课程包 + Page page = new Page<>(current, size); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(CoursePackage::getId, packageIds) + .eq(CoursePackage::getStatus, status != null ? status : CourseStatus.PUBLISHED.getCode()); + + if (StringUtils.hasText(keyword)) { + wrapper.and(w -> w + .like(CoursePackage::getName, keyword) + .or().like(CoursePackage::getPictureBookName, keyword) + .or().like(CoursePackage::getCode, keyword)); + } + if (StringUtils.hasText(grade)) { + String gradeLower = grade.toLowerCase(); + wrapper.and(w -> w + .like(CoursePackage::getGradeTags, grade) + .or().like(CoursePackage::getGradeTags, gradeLower) + .or().like(CoursePackage::getGradeTags, "\"" + grade + "\"") + .or().like(CoursePackage::getGradeTags, "\"" + gradeLower + "\"") + .or().like(CoursePackage::getDomainTags, grade) + .or().like(CoursePackage::getDomainTags, gradeLower)); + } + wrapper.orderByDesc(CoursePackage::getUsageCount); + return coursePackageMapper.selectPage(page, wrapper); + } + private CoursePackage buildEntityFromRequest(CourseCreateRequest request) { CoursePackage entity = new CoursePackage(); entity.setName(request.getName());