Browse Source

1、更改上传文件最大限制
2、补充查询条件删除标识
3、课程加入内容类型(综合、文本、音频、视频、问题、ai实验室)
4、课程类型大纲增加封面、节点、排序
5、通用上传功能新增64M限制
6、新增前端免登录接口模块

liyanbo 10 months ago
parent
commit
af7bb10a5b
21 changed files with 229 additions and 22 deletions
  1. 28 0
      bjdx-web/pom.xml
  2. 62 0
      bjdx-web/src/main/java/cn/iocoder/bjdx/web/course/controller/WebCourseController.java
  3. 13 4
      byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/controller/admin/course/vo/CoursePageReqVO.java
  4. 11 4
      byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/controller/admin/course/vo/CourseRespVO.java
  5. 13 4
      byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/controller/admin/course/vo/CourseSaveReqVO.java
  6. 9 0
      byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/controller/admin/coursetype/vo/CourseTypeListReqVO.java
  7. 9 0
      byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/controller/admin/coursetype/vo/CourseTypeRespVO.java
  8. 9 0
      byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/controller/admin/coursetype/vo/CourseTypeSaveReqVO.java
  9. 20 2
      byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/dal/dataobject/course/CourseDO.java
  10. 13 0
      byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/dal/dataobject/coursetype/CourseTypeDO.java
  11. 1 1
      byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/dal/mysql/course/CourseMapper.java
  12. 3 2
      byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/dal/mysql/coursetype/CourseTypeMapper.java
  13. 8 0
      byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/service/course/CourseService.java
  14. 5 0
      byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/service/course/CourseServiceImpl.java
  15. 5 1
      byzs-course/src/main/resources/mapper/course/CourseMapper.xml
  16. 1 0
      byzs-course/src/main/resources/mapper/courseconfig/CourseConfigMapper.xml
  17. 8 1
      byzs-module-infra/src/main/java/cn/iocoder/byzs/module/infra/controller/admin/file/FileController.java
  18. 1 1
      byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/dal/mysql/dict/DictDataMapper.java
  19. 7 0
      byzs-server/pom.xml
  20. 2 2
      byzs-server/src/main/resources/application.yaml
  21. 1 0
      pom.xml

+ 28 - 0
bjdx-web/pom.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>cn.iocoder.boot</groupId>
+        <artifactId>byzs-bjdx</artifactId>
+        <version>2.6.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>bjdx-web</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>byzs-course</artifactId>
+            <version>2.6.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+
+</project>

+ 62 - 0
bjdx-web/src/main/java/cn/iocoder/bjdx/web/course/controller/WebCourseController.java

@@ -0,0 +1,62 @@
+package cn.iocoder.bjdx.web.course.controller;
+
+import cn.iocoder.byzs.module.bjdx.controller.admin.course.vo.CoursePageReqVO;
+import cn.iocoder.byzs.module.bjdx.controller.admin.coursetype.vo.CourseTypeListReqVO;
+import cn.iocoder.byzs.module.bjdx.controller.admin.coursetype.vo.CourseTypeRespVO;
+import cn.iocoder.byzs.module.bjdx.dal.dataobject.coursetype.CourseTypeDO;
+import cn.iocoder.byzs.module.bjdx.service.coursetype.CourseTypeService;
+import jakarta.annotation.security.PermitAll;
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import java.util.*;
+
+import cn.iocoder.byzs.framework.common.util.object.BeanUtils;
+
+import cn.iocoder.byzs.module.bjdx.service.course.CourseService;
+
+@Tag(name = "管理后台 - 课程")
+@RestController
+@RequestMapping("/bjdx/web/course")
+@Validated
+public class WebCourseController {
+
+    @Resource
+    private CourseService courseService;
+    @Resource
+    private CourseTypeService courseTypeService;
+
+
+    @PermitAll
+    @GetMapping("/getCourseByTypeId")
+    @Operation(summary = "根据类型获得课程列表")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    public List<CoursePageReqVO> getCourseByTypeId(@RequestParam("typeId") String typeId) {
+        List<CoursePageReqVO> courseList = courseService.getCourseList(new CoursePageReqVO().setCourseType(typeId));
+        return courseList;
+    }
+
+    @PermitAll
+    @GetMapping("/getTypeGrade")
+    @Operation(summary = "获得课程-年级")
+    public List<CourseTypeRespVO> getTypeGrade() {
+        CourseTypeListReqVO listReqVO = new CourseTypeListReqVO().setCtTypeNode("0");
+        List<CourseTypeDO> list = courseTypeService.getCourseTypeList(listReqVO);
+        List<CourseTypeRespVO> listVo = BeanUtils.toBean(list, CourseTypeRespVO.class);
+        return listVo;
+    }
+
+    @PermitAll
+    @GetMapping("/getTypeByGradeId")
+    @Operation(summary = "获得课程-年级大纲")
+    public List<CourseTypeRespVO> getTypeByGradeId(@RequestParam("id") Integer id) {
+        CourseTypeListReqVO listReqVO = new CourseTypeListReqVO().setCtParentId(id).setCtTypeNode("1");
+        List<CourseTypeDO> list = courseTypeService.getCourseTypeList(listReqVO);
+        List<CourseTypeRespVO> listVo = BeanUtils.toBean(list, CourseTypeRespVO.class);
+        return listVo;
+    }
+}

+ 13 - 4
byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/controller/admin/course/vo/CoursePageReqVO.java

@@ -15,8 +15,17 @@ public class CoursePageReqVO extends PageParam {
     @Schema(description = "课程名称")
     private String courseName;
 
-    @Schema(description = "课程路径")
-    private String coursePath;
+    @Schema(description = "课程内容类型")
+    private String courseContentType;
+
+    @Schema(description = "课程图片路径")
+    private String courseImagePath;
+
+    @Schema(description = "课程音频路径")
+    private String courseMusicPath;
+
+    @Schema(description = "课程视频路径")
+    private String courseVideoPath;
 
     @Schema(description = "课程内容")
     private String courseContent;
@@ -36,10 +45,10 @@ public class CoursePageReqVO extends PageParam {
     @Schema(description = "课程是否有检查")
     private String courseIsInspect;
 
-    @Schema(description = "课程类型")
+    @Schema(description = "课程类型id")
     private String courseType;
 
-    @Schema(description = "课程类型")
+    @Schema(description = "课程类型名称")
     private String courseTypeName;
 
     @Schema(description = "课程标签")

+ 11 - 4
byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/controller/admin/course/vo/CourseRespVO.java

@@ -19,12 +19,19 @@ public class CourseRespVO {
     @ExcelProperty("课程名称")
     private String courseName;
 
-    @Schema(description = "课程路径")
-    @ExcelProperty("课程路径")
-    private String coursePath;
+    @Schema(description = "课程内容类型")
+    private String courseContentType;
+
+    @Schema(description = "课程图片路径")
+    private String courseImagePath;
+
+    @Schema(description = "课程音频路径")
+    private String courseMusicPath;
+
+    @Schema(description = "课程视频路径")
+    private String courseVideoPath;
 
     @Schema(description = "课程内容")
-    @ExcelProperty("课程内容")
     private String courseContent;
 
     @Schema(description = "课程作者")

+ 13 - 4
byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/controller/admin/course/vo/CourseSaveReqVO.java

@@ -15,8 +15,17 @@ public class CourseSaveReqVO {
     @Schema(description = "课程名称")
     private String courseName;
 
-    @Schema(description = "课程路径")
-    private String coursePath;
+    @Schema(description = "课程内容类型")
+    private String courseContentType;
+
+    @Schema(description = "课程图片路径")
+    private String courseImagePath;
+
+    @Schema(description = "课程音频路径")
+    private String courseMusicPath;
+
+    @Schema(description = "课程视频路径")
+    private String courseVideoPath;
 
     @Schema(description = "课程内容")
     private String courseContent;
@@ -28,11 +37,11 @@ public class CourseSaveReqVO {
     private String courseTeacher;
 
     @Schema(description = "课程大小", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "课程大小不能为空")
+//    @NotNull(message = "课程大小不能为空")
     private Double courseSize;
 
     @Schema(description = "课程时长", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "课程时长不能为空")
+//    @NotNull(message = "课程时长不能为空")
     private Integer courseTime;
 
     @Schema(description = "课程是否有检查")

+ 9 - 0
byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/controller/admin/coursetype/vo/CourseTypeListReqVO.java

@@ -10,9 +10,18 @@ public class CourseTypeListReqVO {
     @Schema(description = "课程类型名称")
     private String ctType;
 
+    @Schema(description = "课程类型封面")
+    private String ctTypeImage;
+
     @Schema(description = "课程类型父级id")
     private Integer ctParentId;
 
+    @Schema(description = "课程节点")
+    private String ctTypeNode;
+
+    @Schema(description = "课程排序")
+    private Integer ctTypeSort;
+
     @Schema(description = "课程类型描述")
     private String ctTypeDescribe;
 

+ 9 - 0
byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/controller/admin/coursetype/vo/CourseTypeRespVO.java

@@ -18,10 +18,19 @@ public class CourseTypeRespVO {
     @ExcelProperty("课程类型名称")
     private String ctType;
 
+    @Schema(description = "课程类型封面")
+    private String ctTypeImage;
+
     @Schema(description = "课程类型父级id")
     @ExcelProperty("课程类型父级id")
     private Integer ctParentId;
 
+    @Schema(description = "课程节点")
+    private String ctTypeNode;
+
+    @Schema(description = "课程排序")
+    private Integer ctTypeSort;
+
     @Schema(description = "课程类型描述")
     @ExcelProperty("课程类型描述")
     private String ctTypeDescribe;

+ 9 - 0
byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/controller/admin/coursetype/vo/CourseTypeSaveReqVO.java

@@ -15,9 +15,18 @@ public class CourseTypeSaveReqVO {
     @Schema(description = "课程类型名称")
     private String ctType;
 
+    @Schema(description = "课程类型封面")
+    private String ctTypeImage;
+
     @Schema(description = "课程类型父级id")
     private Long ctParentId;
 
+    @Schema(description = "课程节点")
+    private String ctTypeNode;
+
+    @Schema(description = "课程排序")
+    private Integer ctTypeSort;
+
     @Schema(description = "课程类型描述")
     private String ctTypeDescribe;
 

+ 20 - 2
byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/dal/dataobject/course/CourseDO.java

@@ -1,5 +1,6 @@
 package cn.iocoder.byzs.module.bjdx.dal.dataobject.course;
 
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import com.baomidou.mybatisplus.annotation.*;
 import cn.iocoder.byzs.framework.mybatis.core.dataobject.BaseDO;
@@ -28,10 +29,27 @@ public class CourseDO extends BaseDO {
      * 课程名称
      */
     private String courseName;
+
+    /**
+     * 课程内容类型
+     */
+    private String courseContentType;
+
     /**
-     * 课程路径
+     * 课程图片路径
      */
-    private String coursePath;
+    private String courseImagePath;
+
+    /**
+     * 课程音频路径
+     */
+    private String courseMusicPath;
+
+    /**
+     * 课程视频路径
+     */
+    private String courseVideoPath;
+
     /**
      * 课程内容
      */

+ 13 - 0
byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/dal/dataobject/coursetype/CourseTypeDO.java

@@ -1,5 +1,6 @@
 package cn.iocoder.byzs.module.bjdx.dal.dataobject.coursetype;
 
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import com.baomidou.mybatisplus.annotation.*;
 import cn.iocoder.byzs.framework.mybatis.core.dataobject.BaseDO;
@@ -30,10 +31,22 @@ public class CourseTypeDO extends BaseDO {
      * 课程类型名称
      */
     private String ctType;
+    /**
+     * 课程类型封面
+     */
+    private String ctTypeImage;
     /**
      * 课程类型父级id
      */
     private Long ctParentId;
+    /**
+     * 课程节点
+     */
+    private String ctTypeNode;
+    /**
+     * 课程排序
+     */
+    private Integer ctTypeSort;
     /**
      * 课程类型描述
      */

+ 1 - 1
byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/dal/mysql/course/CourseMapper.java

@@ -22,7 +22,7 @@ public interface CourseMapper extends BaseMapperX<CourseDO> {
     default PageResult<CourseDO> selectPage(CoursePageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<CourseDO>()
                 .likeIfPresent(CourseDO::getCourseName, reqVO.getCourseName())
-                .eqIfPresent(CourseDO::getCoursePath, reqVO.getCoursePath())
+                .eqIfPresent(CourseDO::getCourseContentType, reqVO.getCourseContentType())
                 .eqIfPresent(CourseDO::getCourseContent, reqVO.getCourseContent())
                 .likeIfPresent(CourseDO::getCourseAuthor, reqVO.getCourseAuthor())
                 .likeIfPresent(CourseDO::getCourseTeacher, reqVO.getCourseTeacher())

+ 3 - 2
byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/dal/mysql/coursetype/CourseTypeMapper.java

@@ -21,8 +21,9 @@ public interface CourseTypeMapper extends BaseMapperX<CourseTypeDO> {
         return selectList(new LambdaQueryWrapperX<CourseTypeDO>()
                 .likeIfPresent(CourseTypeDO::getCtType, reqVO.getCtType())
                 .eqIfPresent(CourseTypeDO::getCtParentId, reqVO.getCtParentId())
-                .eqIfPresent(CourseTypeDO::getCtTypeDescribe, reqVO.getCtTypeDescribe())
-                .orderByDesc(CourseTypeDO::getId));
+                .eqIfPresent(CourseTypeDO::getCtTypeNode, reqVO.getCtTypeNode())
+                .likeIfPresent(CourseTypeDO::getCtTypeDescribe, reqVO.getCtTypeDescribe())
+                .orderByAsc(CourseTypeDO::getCtTypeSort));
     }
 
 	default CourseTypeDO selectByCtParentIdAndCtType(Long ctParentId, String ctType) {

+ 8 - 0
byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/service/course/CourseService.java

@@ -61,4 +61,12 @@ public interface CourseService {
      */
     PageResult<CourseRespVO> getCoursePage(CoursePageReqVO pageReqVO);
 
+    /**
+     * 获得课程
+     *
+     * @param pageReqVO 查询
+     * @return 课程分页
+     */
+    List<CoursePageReqVO> getCourseList(CoursePageReqVO pageReqVO);
+
 }

+ 5 - 0
byzs-course/src/main/java/cn/iocoder/byzs/module/bjdx/service/course/CourseServiceImpl.java

@@ -100,4 +100,9 @@ public class CourseServiceImpl implements CourseService {
         );
     }
 
+    @Override
+    public List<CoursePageReqVO> getCourseList(CoursePageReqVO pageReqVO) {
+        return courseMapper.selectCoursePage(pageReqVO);
+    }
+
 }

+ 5 - 1
byzs-course/src/main/resources/mapper/course/CourseMapper.xml

@@ -5,11 +5,12 @@
     <select id="selectCoursePage" parameterType="cn.iocoder.byzs.module.bjdx.controller.admin.course.vo.CoursePageReqVO"
             resultType="cn.iocoder.byzs.module.bjdx.controller.admin.course.vo.CoursePageReqVO">
 
-        SELECT c.id, c.course_name courseName, c.course_path coursePath, c.course_content courseContent, c.course_author courseAuthor, c.course_teacher courseTeacher, c.course_size courseSize,
+        SELECT c.id, c.course_name courseName, c.course_image_path courseImagePath, c.course_music_path courseMusicPath, c.course_video_path courseVideoPath, c.course_content_type courseContentType, c.course_author courseAuthor, c.course_teacher courseTeacher, c.course_size courseSize,
                c.course_time courseTime, c.course_is_inspect courseIsInspect, c.course_status courseStatus, ct.ct_type courseTypeName
         FROM bjdx_course c
         LEFT JOIN bjdx_course_type ct ON c.course_type = ct.id
         <where>
+                c.deleted = 0
             <if test="courseName != null and courseName != ''">
                 AND c.course_name LIKE CONCAT('%', #{courseName}, '%')
             </if>
@@ -22,6 +23,9 @@
             <if test="courseType!= null and courseType!= ''">
                 AND c.course_type = #{courseType}
             </if>
+            <if test="courseContentType!= null and courseContentType!= ''">
+                AND c.course_content_type = #{courseContentType}
+            </if>
         </where>
 
     </select>

+ 1 - 0
byzs-course/src/main/resources/mapper/courseconfig/CourseConfigMapper.xml

@@ -11,6 +11,7 @@
         LEFT JOIN bjdx_course c ON cc.cc_course_id = c.id
         LEFT JOIN bjdx_course_question cq ON cc.cc_quest_id = cq.id
         <where>
+                c.deleted = 0 and cq.deleted = 0 and cc.deleted = 0
             <if test="ccCourseId != null and ccCourseId != ''">
                 AND cc.cc_course_id  = #{ccCourseId}
             </if>

+ 8 - 1
byzs-module-infra/src/main/java/cn/iocoder/byzs/module/infra/controller/admin/file/FileController.java

@@ -41,9 +41,16 @@ public class FileController {
     private FileService fileService;
 
     @PostMapping("/upload")
-    @Operation(summary = "上传文件", description = "模式一:后端上传文件")
+    @Operation(summary = "上传文件", description = "模式一:后端上传文件(仅建议小文件使用)")
     public CommonResult<String> uploadFile(FileUploadReqVO uploadReqVO) throws Exception {
         MultipartFile file = uploadReqVO.getFile();
+
+        // 新增:文件大小校验(假设数据库限制 64MB)
+        long maxFileSize = 64 * 1024 * 1024; // 64MB
+        if (file.getSize() > maxFileSize) {
+            throw new IllegalArgumentException("文件大小超过限制,仅支持 200MB 以内的文件(大文件请使用前端直传模式)");
+        }
+
         byte[] content = IoUtil.readBytes(file.getInputStream());
         return success(fileService.createFile(content, file.getOriginalFilename(),
                 uploadReqVO.getDirectory(), file.getContentType()));

+ 1 - 1
byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/dal/mysql/dict/DictDataMapper.java

@@ -37,7 +37,7 @@ public interface DictDataMapper extends BaseMapperX<DictDataDO> {
                 .likeIfPresent(DictDataDO::getLabel, reqVO.getLabel())
                 .eqIfPresent(DictDataDO::getDictType, reqVO.getDictType())
                 .eqIfPresent(DictDataDO::getStatus, reqVO.getStatus())
-                .orderByDesc(Arrays.asList(DictDataDO::getDictType, DictDataDO::getSort)));
+                .orderByAsc(Arrays.asList(DictDataDO::getDictType, DictDataDO::getSort)));
     }
 
     default List<DictDataDO> selectListByStatusAndDictType(Integer status, String dictType) {

+ 7 - 0
byzs-server/pom.xml

@@ -124,6 +124,13 @@
             <version>${revision}</version>
         </dependency>
 
+        <!-- WEB -->
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>bjdx-web</artifactId>
+            <version>${revision}</version>
+        </dependency>
+
         <!-- spring boot 配置所需依赖 -->
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 2 - 2
byzs-server/src/main/resources/application.yaml

@@ -12,8 +12,8 @@ spring:
   servlet:
     # 文件上传相关配置项
     multipart:
-      max-file-size: 50MB # 单个文件大小
-      max-request-size: 100MB # 设置总上传的文件大小
+      max-file-size: 100MB # 单个文件大小
+      max-request-size: 200MB # 设置总上传的文件大小
 
   # Jackson 配置项
   jackson:

+ 1 - 0
pom.xml

@@ -30,6 +30,7 @@
         <module>byzs-module-ai</module>
 
         <module>byzs-course</module>
+        <module>bjdx-web</module>
     </modules>
 
     <name>${project.artifactId}</name>