fix: 教师端课程包按 学校->套餐->课程包 层级查询
- 新增 getTenantPackageCoursePage 方法实现层级分页查询 - TeacherCourseController 使用新方法替代直接按 tenant_id 查询 - 修复 /api/v1/teacher/courses 无数据问题 Made-with: Cursor
This commit is contained in:
parent
ccce7e66bb
commit
c652cda7a8
@ -69,16 +69,21 @@ public class TeacherCourseController {
|
||||
@RequestParam(required = false) String keyword,
|
||||
@RequestParam(required = false) String category) {
|
||||
Long tenantId = SecurityUtils.getCurrentTenantId();
|
||||
Page<CoursePackage> page = courseService.getCoursePage(tenantId, pageNum, pageSize, keyword, category, CourseStatus.PUBLISHED.getCode());
|
||||
// 按 学校 -> 套餐 -> 课程包 层级查询教师可用课程
|
||||
Page<CoursePackage> page = courseService.getTenantPackageCoursePage(
|
||||
tenantId, pageNum, pageSize, keyword, category, CourseStatus.PUBLISHED.getCode());
|
||||
List<CourseResponse> voList = courseMapper.toVO(page.getRecords());
|
||||
return Result.success(PageResult.of(voList, page.getTotal(), page.getCurrent(), page.getSize()));
|
||||
}
|
||||
|
||||
@Operation(summary = "获取所有课程")
|
||||
@GetMapping("/courses/all")
|
||||
public Result<List<CourseResponse>> getAllCourses() {
|
||||
public Result<List<CourseResponse>> getAllCourses(
|
||||
@RequestParam(required = false) String keyword,
|
||||
@RequestParam(required = false) String category) {
|
||||
Long tenantId = SecurityUtils.getCurrentTenantId();
|
||||
List<CoursePackage> courses = courseService.getCoursesByTenantId(tenantId);
|
||||
// 按 学校 -> 套餐 -> 课程包 层级查询
|
||||
List<CoursePackage> courses = courseService.getTenantPackageCourses(tenantId, keyword, category);
|
||||
return Result.success(courseMapper.toVO(courses));
|
||||
}
|
||||
|
||||
|
||||
@ -65,4 +65,18 @@ public interface CoursePackageService extends com.baomidou.mybatisplus.extension
|
||||
*/
|
||||
List<CoursePackage> getTenantPackageCourses(Long tenantId, String keyword, String grade);
|
||||
|
||||
/**
|
||||
* 按 学校 -> 套餐 -> 课程包 层级分页查询教师可用课程
|
||||
* 教师端课程中心应使用此方法,通过租户已购买的套餐获取课程包
|
||||
*
|
||||
* @param tenantId 租户(学校)ID
|
||||
* @param pageNum 页码
|
||||
* @param pageSize 每页数量
|
||||
* @param keyword 关键词(课程名称、绘本名称,可选)
|
||||
* @param grade 年级/领域筛选(可选)
|
||||
* @param status 课程状态(如 PUBLISHED)
|
||||
*/
|
||||
Page<CoursePackage> getTenantPackageCoursePage(Long tenantId, Integer pageNum, Integer pageSize,
|
||||
String keyword, String grade, String status);
|
||||
|
||||
}
|
||||
|
||||
@ -275,6 +275,66 @@ public class CoursePackageServiceImpl extends ServiceImpl<CoursePackageMapper, C
|
||||
return coursePackageMapper.selectList(wrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<CoursePackage> 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<Long> collectionIds = tenantPackageMapper.selectList(
|
||||
new LambdaQueryWrapper<TenantPackage>()
|
||||
.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<Long> packageIds = collectionPackageMapper.selectList(
|
||||
new LambdaQueryWrapper<CourseCollectionPackage>()
|
||||
.in(CourseCollectionPackage::getCollectionId, collectionIds))
|
||||
.stream()
|
||||
.map(CourseCollectionPackage::getPackageId)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (packageIds.isEmpty()) {
|
||||
return new Page<>(current, size, 0);
|
||||
}
|
||||
|
||||
// 3. 分页查询课程包
|
||||
Page<CoursePackage> page = new Page<>(current, size);
|
||||
LambdaQueryWrapper<CoursePackage> 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());
|
||||
|
||||
Loading…
Reference in New Issue
Block a user