diff --git a/pom.xml b/pom.xml
index e77e588..a5d0531 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,7 +41,7 @@
com.github.pagehelper
pagehelper-spring-boot-starter
- 1.3.0
+ 2.1.0
com.github.xiaoymin
diff --git a/src/main/java/com/bicloud/Interceptor/RequestLogInterceptor.java b/src/main/java/com/bicloud/Interceptor/RequestLogInterceptor.java
new file mode 100644
index 0000000..7047f73
--- /dev/null
+++ b/src/main/java/com/bicloud/Interceptor/RequestLogInterceptor.java
@@ -0,0 +1,50 @@
+package com.bicloud.Interceptor;
+
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import java.time.LocalDateTime;
+
+
+/*
+拦截器,请求打印请求状态
+ */
+@Component
+public class RequestLogInterceptor implements HandlerInterceptor {
+
+ private static final Logger log = LoggerFactory.getLogger(RequestLogInterceptor.class);
+ private static final String START_TIME = "REQ_START_TIME";
+
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+ request.setAttribute(START_TIME, System.currentTimeMillis());
+
+ log.info("[REQ] time={}, method={}, uri={}, ip={}",
+ LocalDateTime.now(),
+ request.getMethod(),
+ request.getRequestURI(),
+ request.getRemoteAddr());
+
+ return true;
+ }
+
+ @Override
+ public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
+ Object handler, Exception ex) {
+ Long start = (Long) request.getAttribute(START_TIME);
+ long cost = (start == null) ? -1 : (System.currentTimeMillis() - start);
+
+ if (ex == null) {
+ log.info("[RES] status={}, costMs={}, uri={}",
+ response.getStatus(), cost, request.getRequestURI());
+ } else {
+ log.warn("[RES] status={}, costMs={}, uri={}, ex={}",
+ response.getStatus(), cost, request.getRequestURI(), ex.toString());
+ }
+ }
+}
+
diff --git a/src/main/java/com/bicloud/config/OpenApiConfig.java b/src/main/java/com/bicloud/config/OpenApiConfig.java
index b692a9f..444ca36 100644
--- a/src/main/java/com/bicloud/config/OpenApiConfig.java
+++ b/src/main/java/com/bicloud/config/OpenApiConfig.java
@@ -33,7 +33,7 @@ public class OpenApiConfig {
@Bean
public GroupedOpenApi literatureApi() {
return GroupedOpenApi.builder()
- .group("文献管理接口") // 分组名称
+ .group("bicloud接口") // 分组名称
.packagesToScan("com.bicloud.controller") // 匹配的接口路径
.build();
}
diff --git a/src/main/java/com/bicloud/config/WebMvcConfig.java b/src/main/java/com/bicloud/config/WebMvcConfig.java
new file mode 100644
index 0000000..3a1018b
--- /dev/null
+++ b/src/main/java/com/bicloud/config/WebMvcConfig.java
@@ -0,0 +1,22 @@
+package com.bicloud.config;
+
+import com.bicloud.Interceptor.RequestLogInterceptor;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class WebMvcConfig implements WebMvcConfigurer {
+
+ private final RequestLogInterceptor requestLogInterceptor;
+
+ public WebMvcConfig(RequestLogInterceptor requestLogInterceptor) {
+ this.requestLogInterceptor = requestLogInterceptor;
+ }
+
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ registry.addInterceptor(requestLogInterceptor)
+ .addPathPatterns("/**");
+ }
+}
diff --git a/src/main/java/com/bicloud/controller/CourseController.java b/src/main/java/com/bicloud/controller/CourseController.java
index 591325c..3b8ed03 100644
--- a/src/main/java/com/bicloud/controller/CourseController.java
+++ b/src/main/java/com/bicloud/controller/CourseController.java
@@ -1,12 +1,15 @@
package com.bicloud.controller;
+import com.bicloud.common.result.PageResult;
import com.bicloud.common.result.Result;
+import com.bicloud.pojo.dto.CoursePageQueryDto;
+import com.bicloud.pojo.vo.CourseCardVo;
import com.bicloud.pojo.vo.CourseCatVo;
import com.bicloud.service.CourseService;
+import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
-
import java.util.List;
@CrossOrigin //跨域
@@ -23,9 +26,17 @@ public class CourseController {
// 获取课程分类列表
@GetMapping("/cats")
+ @Operation(summary = "获取分类列表")
public Result> listCourseCats() {
List cats = courseService.listCourseCats();
return Result.success(cats);
}
+ // 课程中心分页查询
+ @GetMapping("/page")
+ @Operation(summary = "课程条件查询")
+ public Result> pageQuery(CoursePageQueryDto queryDTO) {
+ return Result.success(courseService.pageQuery(queryDTO));
+ }
+
}
diff --git a/src/main/java/com/bicloud/mapper/CourseMapper.java b/src/main/java/com/bicloud/mapper/CourseMapper.java
index c54fc4d..e782b83 100644
--- a/src/main/java/com/bicloud/mapper/CourseMapper.java
+++ b/src/main/java/com/bicloud/mapper/CourseMapper.java
@@ -1,6 +1,9 @@
package com.bicloud.mapper;
+import com.bicloud.pojo.dto.CoursePageQueryDto;
+import com.bicloud.pojo.vo.CourseCardVo;
import com.bicloud.pojo.vo.CourseCatVo;
+import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@@ -10,4 +13,7 @@ public interface CourseMapper {
// 课程分类列表
List listCourseCats();
+
+ // 分页查询课程卡片列表
+ Page pageQuery(CoursePageQueryDto queryDTO);
}
diff --git a/src/main/java/com/bicloud/pojo/dto/CoursePageQueryDto.java b/src/main/java/com/bicloud/pojo/dto/CoursePageQueryDto.java
new file mode 100644
index 0000000..e9f7866
--- /dev/null
+++ b/src/main/java/com/bicloud/pojo/dto/CoursePageQueryDto.java
@@ -0,0 +1,16 @@
+package com.bicloud.pojo.dto;
+
+import lombok.Data;
+
+/**
+ * 课程分页查询参数
+ */
+@Data
+public class CoursePageQueryDto {
+ private Integer page; // 页码(从1开始)
+ private Integer pageSize; // 每页条数
+
+ private Integer catId; // 分类ID(可空:全部)
+ private String keyword; // 课程名关键字(可空)
+ private String sort; // latest / hot(可空:默认 latest)
+}
diff --git a/src/main/java/com/bicloud/pojo/vo/CourseCardVo.java b/src/main/java/com/bicloud/pojo/vo/CourseCardVo.java
new file mode 100644
index 0000000..6a8b12b
--- /dev/null
+++ b/src/main/java/com/bicloud/pojo/vo/CourseCardVo.java
@@ -0,0 +1,19 @@
+package com.bicloud.pojo.vo;
+
+import lombok.Data;
+
+import java.sql.Timestamp;
+
+/**
+ * 课程卡片返回对象(列表页展示用)
+ */
+@Data
+public class CourseCardVo {
+ private Integer id; // 课程ID
+ private String courseName; // 课程标题
+ private String courseIcon; // 封面路径
+ private Timestamp addtime; // 发布时间
+ private Integer hot; // 热度(先用course_collect)
+ private Integer catId; // 分类ID
+ private String catName; // 分类名(用于卡片标签)
+}
diff --git a/src/main/java/com/bicloud/service/CourseService.java b/src/main/java/com/bicloud/service/CourseService.java
index 2e79ab6..51b7eb6 100644
--- a/src/main/java/com/bicloud/service/CourseService.java
+++ b/src/main/java/com/bicloud/service/CourseService.java
@@ -1,5 +1,8 @@
package com.bicloud.service;
+import com.bicloud.common.result.PageResult;
+import com.bicloud.pojo.dto.CoursePageQueryDto;
+import com.bicloud.pojo.vo.CourseCardVo;
import com.bicloud.pojo.vo.CourseCatVo;
import java.util.List;
@@ -8,4 +11,7 @@ public interface CourseService {
// 获取课程分类列表
List listCourseCats();
+
+ // 课程中心分页查询
+ PageResult pageQuery(CoursePageQueryDto queryDTO);
}
diff --git a/src/main/java/com/bicloud/service/impl/CourseServiceImpl.java b/src/main/java/com/bicloud/service/impl/CourseServiceImpl.java
index 102a5a1..2f544d6 100644
--- a/src/main/java/com/bicloud/service/impl/CourseServiceImpl.java
+++ b/src/main/java/com/bicloud/service/impl/CourseServiceImpl.java
@@ -1,8 +1,13 @@
package com.bicloud.service.impl;
+import com.bicloud.common.result.PageResult;
import com.bicloud.mapper.CourseMapper;
+import com.bicloud.pojo.dto.CoursePageQueryDto;
+import com.bicloud.pojo.vo.CourseCardVo;
import com.bicloud.pojo.vo.CourseCatVo;
import com.bicloud.service.CourseService;
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -21,4 +26,20 @@ public class CourseServiceImpl implements CourseService {
public List listCourseCats() {
return courseMapper.listCourseCats();
}
+
+ // 课程中心分页查询
+ @Override
+ public PageResult pageQuery(CoursePageQueryDto queryDTO) {
+
+ // 1) PageHelper 开始分页(兜底默认值,避免空指针)
+ int page = (queryDTO.getPage() == null || queryDTO.getPage() < 1) ? 1 : queryDTO.getPage();
+ int pageSize = (queryDTO.getPageSize() == null || queryDTO.getPageSize() < 1) ? 12 : queryDTO.getPageSize();
+ PageHelper.startPage(page, pageSize);
+
+ // 2) 执行 mapper 查询(PageHelper 自动加 limit)
+ Page p = courseMapper.pageQuery(queryDTO);
+
+ // 3) 取 total + records
+ return new PageResult<>(p.getTotal(), p.getResult());
+ }
}
diff --git a/src/main/resources/mapper/CourseMapper.xml b/src/main/resources/mapper/CourseMapper.xml
index 4f2b3e7..07700b6 100644
--- a/src/main/resources/mapper/CourseMapper.xml
+++ b/src/main/resources/mapper/CourseMapper.xml
@@ -14,4 +14,37 @@
ORDER BY position ASC, id ASC
+
+
+
+