Explorar el Código

Merge remote-tracking branch 'origin/dev' into dev

jasonk5949 hace 6 meses
padre
commit
c62ddfe822
Se han modificado 14 ficheros con 680 adiciones y 11 borrados
  1. 44 3
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/CourseChapterController.java
  2. 132 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/CourseChapterKnowledgeController.java
  3. 72 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/CourseChapterKnowledge.java
  4. 34 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/enums/CourseChapterKnowledgeEnum.java
  5. 26 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/CourseChapterKnowledgeMapper.java
  6. 5 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/mapping/CourseChapterKnowledgeMapper.xml
  7. 5 4
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ChapterAddParam.java
  8. 2 4
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ChapterEditParam.java
  9. 46 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/konwledge/CourseChapterKnowledgeAddParam.java
  10. 51 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/konwledge/CourseChapterKnowledgeEditParam.java
  11. 35 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/konwledge/CourseChapterKnowledgeIdParam.java
  12. 51 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/konwledge/CourseChapterKnowledgePageParam.java
  13. 81 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/CourseChapterKnowledgeService.java
  14. 96 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/impl/CourseChapterKnowledgeServiceImpl.java

+ 44 - 3
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/CourseChapterController.java

@@ -15,6 +15,7 @@ package vip.xiaonuo.disk.controller;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.IdUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.github.xiaoymin.knife4j.annotations.ApiSupport;
@@ -30,22 +31,25 @@ import vip.xiaonuo.common.annotation.CommonLog;
 import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.common.pojo.CommonValidList;
 import vip.xiaonuo.disk.domain.Chapter;
-import vip.xiaonuo.disk.domain.CourseInfo;
+import vip.xiaonuo.disk.domain.CourseChapterKnowledge;
 import vip.xiaonuo.disk.domain.CourseRelate;
-import vip.xiaonuo.disk.domain.ResourceRecordUserRelate;
 import vip.xiaonuo.disk.param.ChapterAddParam;
 import vip.xiaonuo.disk.param.ChapterEditParam;
 import vip.xiaonuo.disk.param.ChapterIdParam;
 import vip.xiaonuo.disk.param.ChapterPageParam;
 import vip.xiaonuo.disk.service.ChapterService;
 import vip.xiaonuo.disk.service.ClassHourService;
+import vip.xiaonuo.disk.service.CourseChapterKnowledgeService;
 import vip.xiaonuo.disk.service.CourseRelateService;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
 import javax.validation.constraints.NotEmpty;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -67,6 +71,10 @@ public class CourseChapterController {
     @Resource
     private CourseRelateService courseRelateService;
 
+    @Resource
+    private CourseChapterKnowledgeService courseChapterKnowledgeService;
+
+
     /**
      * 课程章节表-分页列表
      *
@@ -238,6 +246,18 @@ public class CourseChapterController {
                     .collect(Collectors.toList());
             courseRelateService.addBatch(courseRelates);
         }
+        //添加章节,设计知识点关联表
+        List<CourseChapterKnowledge> list=new ArrayList<>();
+        chapterAddParam.getKnowledgeIds().stream().forEach(knowledgeId -> {
+
+            CourseChapterKnowledge courseChapterKnowledge = new CourseChapterKnowledge();
+            courseChapterKnowledge.setCourseId(chapterAddParam.getCourseId());
+            courseChapterKnowledge.setChapterId(chapter.getId());
+            courseChapterKnowledge.setKnowledgeId(knowledgeId);
+            courseChapterKnowledge.setId(IdUtil.getSnowflake().nextIdStr());
+            list.add(courseChapterKnowledge);
+        });
+        courseChapterKnowledgeService.saveBatch(list);
         return CommonResult.ok();
     }
 
@@ -274,6 +294,27 @@ public class CourseChapterController {
                     .collect(Collectors.toList());
             courseRelateService.addBatch(courseRelates);
         }
+
+
+        //根据章节id和课程id删除关联表
+        Map<String, Object> knowledgeParam = new HashMap<>();
+        knowledgeParam.put("COURSE_ID", chapterEditParam.getCourseId());
+        knowledgeParam.put("CHAPTER_ID", chapter.getId());
+        courseChapterKnowledgeService.removeByMap(knowledgeParam);
+
+        //添加章节,设计知识点关联表
+        List<CourseChapterKnowledge> list=new ArrayList<>();
+        chapterEditParam.getKnowledgeIds().stream().forEach(knowledgeId -> {
+
+            CourseChapterKnowledge courseChapterKnowledge = new CourseChapterKnowledge();
+            courseChapterKnowledge.setCourseId(chapterEditParam.getCourseId());
+            courseChapterKnowledge.setChapterId(chapter.getId());
+            courseChapterKnowledge.setKnowledgeId(knowledgeId);
+            courseChapterKnowledge.setId(IdUtil.getSnowflake().nextIdStr());
+            list.add(courseChapterKnowledge);
+        });
+        courseChapterKnowledgeService.saveBatch(list);
+
         return CommonResult.ok();
     }
 

+ 132 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/CourseChapterKnowledgeController.java

@@ -0,0 +1,132 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.disk.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.common.pojo.CommonValidList;
+import vip.xiaonuo.disk.domain.CourseChapterKnowledge;
+import vip.xiaonuo.disk.param.konwledge.CourseChapterKnowledgeAddParam;
+import vip.xiaonuo.disk.param.konwledge.CourseChapterKnowledgeEditParam;
+import vip.xiaonuo.disk.param.konwledge.CourseChapterKnowledgeIdParam;
+import vip.xiaonuo.disk.param.konwledge.CourseChapterKnowledgePageParam;
+import vip.xiaonuo.disk.service.CourseChapterKnowledgeService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * COURSE_CHAPTER_KNOWLEDGE控制器
+ *
+ * @author pans
+ * @date  2025/08/04 17:14
+ */
+@Api(tags = "COURSE_CHAPTER_KNOWLEDGE控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class CourseChapterKnowledgeController {
+
+    @Resource
+    private CourseChapterKnowledgeService courseChapterKnowledgeService;
+
+    /**
+     * 获取COURSE_CHAPTER_KNOWLEDGE分页
+     *
+     * @author pans
+     * @date  2025/08/04 17:14
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取COURSE_CHAPTER_KNOWLEDGE分页")
+    @SaCheckPermission("/disk/chapterknowledge/page")
+    @GetMapping("/disk/chapterknowledge/page")
+    public CommonResult<Page<CourseChapterKnowledge>> page(CourseChapterKnowledgePageParam courseChapterKnowledgePageParam) {
+        return CommonResult.data(courseChapterKnowledgeService.page(courseChapterKnowledgePageParam));
+    }
+
+    /**
+     * 添加COURSE_CHAPTER_KNOWLEDGE
+     *
+     * @author pans
+     * @date  2025/08/04 17:14
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加COURSE_CHAPTER_KNOWLEDGE")
+    @CommonLog("添加COURSE_CHAPTER_KNOWLEDGE")
+    @SaCheckPermission("/disk/chapterknowledge/add")
+    @PostMapping("/disk/chapterknowledge/add")
+    public CommonResult<String> add(@RequestBody @Valid CourseChapterKnowledgeAddParam courseChapterKnowledgeAddParam) {
+        courseChapterKnowledgeService.add(courseChapterKnowledgeAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑COURSE_CHAPTER_KNOWLEDGE
+     *
+     * @author pans
+     * @date  2025/08/04 17:14
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑COURSE_CHAPTER_KNOWLEDGE")
+    @CommonLog("编辑COURSE_CHAPTER_KNOWLEDGE")
+    @SaCheckPermission("/disk/chapterknowledge/edit")
+    @PostMapping("/disk/chapterknowledge/edit")
+    public CommonResult<String> edit(@RequestBody @Valid CourseChapterKnowledgeEditParam courseChapterKnowledgeEditParam) {
+        courseChapterKnowledgeService.edit(courseChapterKnowledgeEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除COURSE_CHAPTER_KNOWLEDGE
+     *
+     * @author pans
+     * @date  2025/08/04 17:14
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除COURSE_CHAPTER_KNOWLEDGE")
+    @CommonLog("删除COURSE_CHAPTER_KNOWLEDGE")
+    @SaCheckPermission("/disk/chapterknowledge/delete")
+    @PostMapping("/disk/chapterknowledge/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<CourseChapterKnowledgeIdParam> courseChapterKnowledgeIdParamList) {
+        courseChapterKnowledgeService.delete(courseChapterKnowledgeIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取COURSE_CHAPTER_KNOWLEDGE详情
+     *
+     * @author pans
+     * @date  2025/08/04 17:14
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取COURSE_CHAPTER_KNOWLEDGE详情")
+    @SaCheckPermission("/disk/chapterknowledge/detail")
+    @GetMapping("/disk/chapterknowledge/detail")
+    public CommonResult<CourseChapterKnowledge> detail(@Valid CourseChapterKnowledgeIdParam courseChapterKnowledgeIdParam) {
+        return CommonResult.data(courseChapterKnowledgeService.detail(courseChapterKnowledgeIdParam));
+    }
+
+}

+ 72 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/CourseChapterKnowledge.java

@@ -0,0 +1,72 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.disk.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * COURSE_CHAPTER_KNOWLEDGE实体
+ *
+ * @author pans
+ * @date  2025/08/04 17:14
+ **/
+@Getter
+@Setter
+@TableName("COURSE_CHAPTER_KNOWLEDGE")
+public class CourseChapterKnowledge {
+
+    /** ID */
+    @TableId
+    @ApiModelProperty(value = "ID", position = 1)
+    private String id;
+
+    /** COURSE_ID */
+    @ApiModelProperty(value = "COURSE_ID", position = 2)
+    private String courseId;
+
+    /** CHAPTER_ID */
+    @ApiModelProperty(value = "CHAPTER_ID", position = 3)
+    private String chapterId;
+
+    /** KNOWLEDGE_ID */
+    @ApiModelProperty(value = "KNOWLEDGE_ID", position = 4)
+    private String knowledgeId;
+
+    /** UPDATE_TIME */
+    @ApiModelProperty(value = "UPDATE_TIME", position = 5)
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** CREATE_TIME */
+    @ApiModelProperty(value = "CREATE_TIME", position = 6)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** CREATE_USER */
+    @ApiModelProperty(value = "CREATE_USER", position = 7)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** UPDATE_USER */
+    @ApiModelProperty(value = "UPDATE_USER", position = 8)
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/enums/CourseChapterKnowledgeEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.disk.enums;
+
+import lombok.Getter;
+
+/**
+ * COURSE_CHAPTER_KNOWLEDGE枚举
+ *
+ * @author pans
+ * @date  2025/08/04 17:14
+ **/
+@Getter
+public enum CourseChapterKnowledgeEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    CourseChapterKnowledgeEnum(String value) {
+        this.value = value;
+    }
+}

+ 26 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/CourseChapterKnowledgeMapper.java

@@ -0,0 +1,26 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.disk.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.disk.domain.CourseChapterKnowledge;
+
+
+/**
+ * COURSE_CHAPTER_KNOWLEDGEMapper接口
+ *
+ * @author pans
+ * @date  2025/08/04 17:14
+ **/
+public interface CourseChapterKnowledgeMapper extends BaseMapper<CourseChapterKnowledge> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/mapping/CourseChapterKnowledgeMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.disk.mapper.CourseChapterKnowledgeMapper">
+
+</mapper>

+ 5 - 4
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ChapterAddParam.java

@@ -17,10 +17,6 @@ import lombok.Getter;
 import lombok.Setter;
 import vip.xiaonuo.disk.domain.CourseRelate;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
 import java.util.List;
 
 /**
@@ -53,4 +49,9 @@ public class ChapterAddParam {
     @ApiModelProperty(value = "关联信息", position = 6)
     private List<CourseRelate> courseRelates;
 
+    /** 设及知识点 */
+    private List<String> knowledgeIds;
+
+
+
 }

+ 2 - 4
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ChapterEditParam.java

@@ -17,10 +17,7 @@ import lombok.Getter;
 import lombok.Setter;
 import vip.xiaonuo.disk.domain.CourseRelate;
 
-import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
 import java.util.List;
 
 /**
@@ -58,5 +55,6 @@ public class ChapterEditParam {
     @ApiModelProperty(value = "关联信息", position = 6)
     private List<CourseRelate> courseRelates;
 
-
+    /** 设及知识点 */
+    private List<String> knowledgeIds;
 }

+ 46 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/konwledge/CourseChapterKnowledgeAddParam.java

@@ -0,0 +1,46 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.disk.param.konwledge;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * COURSE_CHAPTER_KNOWLEDGE添加参数
+ *
+ * @author pans
+ * @date  2025/08/04 17:14
+ **/
+@Getter
+@Setter
+public class CourseChapterKnowledgeAddParam {
+
+    /** COURSE_ID */
+    @ApiModelProperty(value = "COURSE_ID", position = 2)
+    private String courseId;
+
+    /** CHAPTER_ID */
+    @ApiModelProperty(value = "CHAPTER_ID", position = 3)
+    private String chapterId;
+
+    /** KNOWLEDGE_ID */
+    @ApiModelProperty(value = "KNOWLEDGE_ID", position = 4)
+    private String knowledgeId;
+
+}

+ 51 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/konwledge/CourseChapterKnowledgeEditParam.java

@@ -0,0 +1,51 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.disk.param.konwledge;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * COURSE_CHAPTER_KNOWLEDGE编辑参数
+ *
+ * @author pans
+ * @date  2025/08/04 17:14
+ **/
+@Getter
+@Setter
+public class CourseChapterKnowledgeEditParam {
+
+    /** ID */
+    @ApiModelProperty(value = "ID", required = true, position = 1)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** COURSE_ID */
+    @ApiModelProperty(value = "COURSE_ID", position = 2)
+    private String courseId;
+
+    /** CHAPTER_ID */
+    @ApiModelProperty(value = "CHAPTER_ID", position = 3)
+    private String chapterId;
+
+    /** KNOWLEDGE_ID */
+    @ApiModelProperty(value = "KNOWLEDGE_ID", position = 4)
+    private String knowledgeId;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/konwledge/CourseChapterKnowledgeIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.disk.param.konwledge;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * COURSE_CHAPTER_KNOWLEDGEId参数
+ *
+ * @author pans
+ * @date  2025/08/04 17:14
+ **/
+@Getter
+@Setter
+public class CourseChapterKnowledgeIdParam {
+
+    /** ID */
+    @ApiModelProperty(value = "ID", required = true)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 51 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/konwledge/CourseChapterKnowledgePageParam.java

@@ -0,0 +1,51 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.disk.param.konwledge;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * COURSE_CHAPTER_KNOWLEDGE查询参数
+ *
+ * @author pans
+ * @date  2025/08/04 17:14
+ **/
+@Getter
+@Setter
+public class CourseChapterKnowledgePageParam {
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @ApiModelProperty(value = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @ApiModelProperty(value = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @ApiModelProperty(value = "关键词")
+    private String searchKey;
+
+}

+ 81 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/CourseChapterKnowledgeService.java

@@ -0,0 +1,81 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.disk.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.disk.domain.CourseChapterKnowledge;
+import vip.xiaonuo.disk.param.konwledge.CourseChapterKnowledgeAddParam;
+import vip.xiaonuo.disk.param.konwledge.CourseChapterKnowledgeEditParam;
+import vip.xiaonuo.disk.param.konwledge.CourseChapterKnowledgeIdParam;
+import vip.xiaonuo.disk.param.konwledge.CourseChapterKnowledgePageParam;
+
+import java.util.List;
+
+/**
+ * COURSE_CHAPTER_KNOWLEDGEService接口
+ *
+ * @author pans
+ * @date  2025/08/04 17:14
+ **/
+public interface CourseChapterKnowledgeService extends IService<CourseChapterKnowledge> {
+
+    /**
+     * 获取COURSE_CHAPTER_KNOWLEDGE分页
+     *
+     * @author pans
+     * @date  2025/08/04 17:14
+     */
+    Page<CourseChapterKnowledge> page(CourseChapterKnowledgePageParam courseChapterKnowledgePageParam);
+
+    /**
+     * 添加COURSE_CHAPTER_KNOWLEDGE
+     *
+     * @author pans
+     * @date  2025/08/04 17:14
+     */
+    void add(CourseChapterKnowledgeAddParam courseChapterKnowledgeAddParam);
+
+    /**
+     * 编辑COURSE_CHAPTER_KNOWLEDGE
+     *
+     * @author pans
+     * @date  2025/08/04 17:14
+     */
+    void edit(CourseChapterKnowledgeEditParam courseChapterKnowledgeEditParam);
+
+    /**
+     * 删除COURSE_CHAPTER_KNOWLEDGE
+     *
+     * @author pans
+     * @date  2025/08/04 17:14
+     */
+    void delete(List<CourseChapterKnowledgeIdParam> courseChapterKnowledgeIdParamList);
+
+    /**
+     * 获取COURSE_CHAPTER_KNOWLEDGE详情
+     *
+     * @author pans
+     * @date  2025/08/04 17:14
+     */
+    CourseChapterKnowledge detail(CourseChapterKnowledgeIdParam courseChapterKnowledgeIdParam);
+
+    /**
+     * 获取COURSE_CHAPTER_KNOWLEDGE详情
+     *
+     * @author pans
+     * @date  2025/08/04 17:14
+     **/
+    CourseChapterKnowledge queryEntity(String id);
+
+}

+ 96 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/impl/CourseChapterKnowledgeServiceImpl.java

@@ -0,0 +1,96 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.disk.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.disk.domain.CourseChapterKnowledge;
+import vip.xiaonuo.disk.mapper.CourseChapterKnowledgeMapper;
+import vip.xiaonuo.disk.param.konwledge.CourseChapterKnowledgeAddParam;
+import vip.xiaonuo.disk.param.konwledge.CourseChapterKnowledgeEditParam;
+import vip.xiaonuo.disk.param.konwledge.CourseChapterKnowledgeIdParam;
+import vip.xiaonuo.disk.param.konwledge.CourseChapterKnowledgePageParam;
+import vip.xiaonuo.disk.service.CourseChapterKnowledgeService;
+
+import java.util.List;
+
+/**
+ * COURSE_CHAPTER_KNOWLEDGEService接口实现类
+ *
+ * @author pans
+ * @date  2025/08/04 17:14
+ **/
+@Service
+public class CourseChapterKnowledgeServiceImpl extends ServiceImpl<CourseChapterKnowledgeMapper, CourseChapterKnowledge> implements CourseChapterKnowledgeService {
+
+
+    @Override
+    public Page<CourseChapterKnowledge> page(CourseChapterKnowledgePageParam courseChapterKnowledgePageParam) {
+        QueryWrapper<CourseChapterKnowledge> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isAllNotEmpty(courseChapterKnowledgePageParam.getSortField(), courseChapterKnowledgePageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(courseChapterKnowledgePageParam.getSortOrder());
+            queryWrapper.orderBy(true, courseChapterKnowledgePageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(courseChapterKnowledgePageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(CourseChapterKnowledge::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(CourseChapterKnowledgeAddParam courseChapterKnowledgeAddParam) {
+        CourseChapterKnowledge courseChapterKnowledge = BeanUtil.toBean(courseChapterKnowledgeAddParam, CourseChapterKnowledge.class);
+        this.save(courseChapterKnowledge);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(CourseChapterKnowledgeEditParam courseChapterKnowledgeEditParam) {
+        CourseChapterKnowledge courseChapterKnowledge = this.queryEntity(courseChapterKnowledgeEditParam.getId());
+        BeanUtil.copyProperties(courseChapterKnowledgeEditParam, courseChapterKnowledge);
+        this.updateById(courseChapterKnowledge);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<CourseChapterKnowledgeIdParam> courseChapterKnowledgeIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(courseChapterKnowledgeIdParamList, CourseChapterKnowledgeIdParam::getId));
+    }
+
+    @Override
+    public CourseChapterKnowledge detail(CourseChapterKnowledgeIdParam courseChapterKnowledgeIdParam) {
+        return this.queryEntity(courseChapterKnowledgeIdParam.getId());
+    }
+
+    @Override
+    public CourseChapterKnowledge queryEntity(String id) {
+        CourseChapterKnowledge courseChapterKnowledge = this.getById(id);
+        if(ObjectUtil.isEmpty(courseChapterKnowledge)) {
+            throw new CommonException("COURSE_CHAPTER_KNOWLEDGE不存在,id值为:{}", id);
+        }
+        return courseChapterKnowledge;
+    }
+
+}