From 0ebd71029384f271dcdff44ce80601a6bdc0588c Mon Sep 17 00:00:00 2001 From: "liu.zixi" Date: Thu, 20 Nov 2025 13:13:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AF=BE=E7=A8=8B=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=BA=86=E2=80=9C=E6=9F=A5=E7=9C=8B=E7=BD=AE=E9=A1=B6=E8=AF=BE?= =?UTF-8?q?=E7=A8=8B=E5=88=97=E8=A1=A8=E2=80=9D=E3=80=81=E2=80=9C=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E7=BD=AE=E9=A1=B6=E2=80=9D=E3=80=81=E2=80=9C=E7=BD=AE?= =?UTF-8?q?=E9=A1=B6=E6=8E=92=E5=BA=8F=E2=80=9D=E3=80=81=E2=80=9C=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E8=AF=BE=E7=A8=8B=E5=88=97=E8=A1=A8=E2=80=9D=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=8C=E9=83=A8=E5=88=86=E6=9C=AA=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/course/dto/ServiceResponse.java | 52 +++++++++++++ .../course/service/ICoursePageService.java | 35 +++++++++ .../service/impl/CoursePageServiceImpl.java | 74 ++++++++++++++++++- 3 files changed, 159 insertions(+), 2 deletions(-) create mode 100644 servers/boe-server-all/src/main/java/com/xboe/module/course/dto/ServiceResponse.java diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/ServiceResponse.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/ServiceResponse.java new file mode 100644 index 00000000..81caa907 --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/ServiceResponse.java @@ -0,0 +1,52 @@ +package com.xboe.module.course.dto; + +/** + * 服务层返回 + * @param + */ +public class ServiceResponse { + + private boolean success; + + private String message; + + private T data; + + public static ServiceResponse success(V data) { + ServiceResponse response = new ServiceResponse<>(); + response.setSuccess(true); + response.setData(data); + return response; + } + + public static ServiceResponse failure(String message) { + ServiceResponse response = new ServiceResponse<>(); + response.setSuccess(false); + response.setMessage(message); + return response; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICoursePageService.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICoursePageService.java index e6719825..f0cb2ee2 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICoursePageService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICoursePageService.java @@ -3,7 +3,12 @@ package com.xboe.module.course.service; import com.xboe.common.PageList; import com.xboe.core.CurrentUser; import com.xboe.module.course.dto.CoursePageQueryDTO; +import com.xboe.module.course.dto.ServiceResponse; import com.xboe.module.course.vo.CoursePageVo; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; public interface ICoursePageService { @@ -14,4 +19,34 @@ public interface ICoursePageService { * @return */ PageList pageQuery(CurrentUser currentUser, CoursePageQueryDTO coursePageQueryDTO); + + /** + * 置顶列表 + * @return + */ + List topList(); + + /** + * 置顶/取消置顶 + * @param courseId + * @param top true代表执行置顶操作,false代表执行取消置顶操作 + * @return + */ + @Transactional + ServiceResponse top(String courseId, boolean top); + + /** + * 置顶列表排序修改 + * @param topList + * @return + */ + @Transactional + ServiceResponse> topListSortChange(List topList); + + /** + * 导出课程列表 + * @param coursePageQueryDTO + * @param response + */ + void exportCourseList(CoursePageQueryDTO coursePageQueryDTO, HttpServletResponse response); } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CoursePageServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CoursePageServiceImpl.java index e5764c84..06d87e07 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CoursePageServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CoursePageServiceImpl.java @@ -11,6 +11,7 @@ import com.xboe.data.outside.IOutSideDataService; import com.xboe.module.course.dao.CourseDao; import com.xboe.module.course.dao.CourseTeacherDao; import com.xboe.module.course.dto.CoursePageQueryDTO; +import com.xboe.module.course.dto.ServiceResponse; import com.xboe.module.course.entity.Course; import com.xboe.module.course.entity.CourseTeacher; import com.xboe.module.course.service.ICoursePageService; @@ -21,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -42,7 +44,8 @@ public class CoursePageServiceImpl implements ICoursePageService { public PageList pageQuery(CurrentUser currentUser, CoursePageQueryDTO coursePageQueryDTO) { /* * 1. 前置权限过滤 - * 权限说明:管理员登录后当前页面只可查看本人创建的课程及被授权的课程,其他课程不可见,被赋予查看权的用户可直接引用可查看的课程 + * 权限说明:管理员端 可查看本人创建的课程及被授权的课程,其他课程不可见,被赋予查看权的用户可直接引用可查看的课程; + * 教师端 当前用户创建的课程及具有管理权、查看权的课程清单 */ UserOrgIds userOrgIds = outSideDataService.getOrgIds(); @@ -54,7 +57,7 @@ public class CoursePageServiceImpl implements ICoursePageService { String currentAccountId = currentUser == null ? null : currentUser.getAccountId(); // 构建查询条件 - List filters = createFilters(coursePageQueryDTO); + List filters = new ArrayList<>(); // 自动添加过滤已删除 filters.add(FieldFilters.eq("c.deleted", false)); @@ -79,6 +82,7 @@ public class CoursePageServiceImpl implements ICoursePageService { filters.add(FieldFilters.or(permissionFilters)); } } + filters.addAll(createFilters(coursePageQueryDTO)); QueryBuilder query = QueryBuilder.from(Course.class.getSimpleName() + " c").addFilters(filters); // 处理排序 @@ -111,6 +115,69 @@ public class CoursePageServiceImpl implements ICoursePageService { return result; } + @Override + public List topList() { + // 构建查询条件 + IFieldFilter fieldFilter = FieldFilters.eq("isTop", true); + List courseList = courseDao.findList(fieldFilter); + // 如果有值,查询教师数据 + List courseTeacherList; + if (!courseList.isEmpty()) { + List courseIds = courseList.stream() + .map(Course::getId) + .collect(Collectors.toList()); + courseTeacherList = getCourseTeacherList(courseIds); + } else { + courseTeacherList = new ArrayList<>(); + } + return courseList.stream() + .map(c -> convertToVo(c, courseTeacherList)) + .collect(Collectors.toList()); + } + + @Override + public ServiceResponse top(String courseId, boolean top) { + // 1. 查询课程数据 + Course course = courseDao.get(courseId); + if (top) { + // 2. 执行置顶操作 + // 2.1 目前课程是否已置顶 + if (course.getIsTop() != null && course.getIsTop()) { + // 错误提示:已置顶 + return ServiceResponse.failure("已置顶"); + } + // 2.2 查看置顶列表数量 + IFieldFilter fieldFilter = FieldFilters.eq("isTop", true); + int topCount = courseDao.count(fieldFilter); + if (topCount >= 10) { + return ServiceResponse.failure("最多只能置顶10个课程"); + } + // 2.3 设置置顶 + course.setIsTop(true); + courseDao.update(course); + } else { + // 3. 取消置顶 + // 3.1 课程是否已置顶 + if (course.getIsTop() == null || !course.getIsTop()) { + return ServiceResponse.failure("未置顶"); + } + // 3.2 取消置顶 + course.setIsTop(false); + course.setSortWeight(9999); + courseDao.update(course); + } + return ServiceResponse.success(true); + } + + @Override + public ServiceResponse> topListSortChange(List topList) { + return null; + } + + @Override + public void exportCourseList(CoursePageQueryDTO coursePageQueryDTO, HttpServletResponse response) { + } + /** * 生成过滤条件 * @@ -252,6 +319,9 @@ public class CoursePageServiceImpl implements ICoursePageService { OrderCondition sortWeightOc = OrderCondition.asc("c.sortWeight"); query.addOrder(sortWeightOc); + + OrderCondition createTimeOc = OrderCondition.desc("c.sysCreateTime"); + query.addOrder(createTimeOc); } } } \ No newline at end of file