pans 6 месяцев назад
Родитель
Сommit
d3b5b28077
11 измененных файлов с 692 добавлено и 0 удалено
  1. 126 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/CourseLogController.java
  2. 83 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/CourseLog.java
  3. 34 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/enums/CourseLogEnum.java
  4. 26 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/CourseLogMapper.java
  5. 5 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/mapping/CourseLogMapper.xml
  6. 64 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/courselog/CourseLogAddParam.java
  7. 71 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/courselog/CourseLogEditParam.java
  8. 35 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/courselog/CourseLogIdParam.java
  9. 51 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/courselog/CourseLogPageParam.java
  10. 81 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/CourseLogService.java
  11. 116 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/impl/CourseLogServiceImpl.java

+ 126 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/CourseLogController.java

@@ -0,0 +1,126 @@
+/*
+ * 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 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.CourseLog;
+import vip.xiaonuo.disk.param.courselog.CourseLogAddParam;
+import vip.xiaonuo.disk.param.courselog.CourseLogEditParam;
+import vip.xiaonuo.disk.param.courselog.CourseLogIdParam;
+import vip.xiaonuo.disk.param.courselog.CourseLogPageParam;
+import vip.xiaonuo.disk.service.CourseLogService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 课程足迹控制器
+ *
+ * @author pans
+ * @date  2025/08/05 10:48
+ */
+@Api(tags = "课程足迹控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class CourseLogController {
+
+    @Resource
+    private CourseLogService courseLogService;
+
+    /**
+     * 获取课程足迹分页
+     *
+     * @author pans
+     * @date  2025/08/05 10:48
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取课程足迹分页")
+    @GetMapping("/disk/courselog/page")
+    public CommonResult<Page<CourseLog>> page(CourseLogPageParam courseLogPageParam) {
+        return CommonResult.data(courseLogService.page(courseLogPageParam));
+    }
+
+    /**
+     * 添加课程足迹
+     *
+     * @author pans
+     * @date  2025/08/05 10:48
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加课程足迹")
+    @CommonLog("添加课程足迹")
+    @PostMapping("/disk/courselog/add")
+    public CommonResult<String> add(@RequestBody @Valid CourseLogAddParam courseLogAddParam) {
+        courseLogService.add(courseLogAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑课程足迹
+     *
+     * @author pans
+     * @date  2025/08/05 10:48
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑课程足迹")
+    @CommonLog("编辑课程足迹")
+    @PostMapping("/disk/courselog/edit")
+    public CommonResult<String> edit(@RequestBody @Valid CourseLogEditParam courseLogEditParam) {
+        courseLogService.edit(courseLogEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除课程足迹
+     *
+     * @author pans
+     * @date  2025/08/05 10:48
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除课程足迹")
+    @CommonLog("删除课程足迹")
+    @PostMapping("/disk/courselog/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<CourseLogIdParam> courseLogIdParamList) {
+        courseLogService.delete(courseLogIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取课程足迹详情
+     *
+     * @author pans
+     * @date  2025/08/05 10:48
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取课程足迹详情")
+    @GetMapping("/disk/courselog/detail")
+    public CommonResult<CourseLog> detail(@Valid CourseLogIdParam courseLogIdParam) {
+        return CommonResult.data(courseLogService.detail(courseLogIdParam));
+    }
+
+}

+ 83 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/CourseLog.java

@@ -0,0 +1,83 @@
+/*
+ * 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;
+
+/**
+ * 课程足迹实体
+ *
+ * @author pans
+ * @date  2025/08/05 10:48
+ **/
+@Getter
+@Setter
+@TableName("COURSE_LOG")
+public class CourseLog {
+
+    /** ID */
+    @TableId
+    @ApiModelProperty(value = "ID", position = 1)
+    private String id;
+
+    /** 课时名称 */
+    @ApiModelProperty(value = "课时名称", position = 2)
+    private String hourName;
+
+    /** 章节名称 */
+    @ApiModelProperty(value = "章节名称", position = 3)
+    private String chapterName;
+
+    /** 课程名称 */
+    @ApiModelProperty(value = "课程名称", position = 4)
+    private String courseName;
+
+    /** 课时id */
+    @ApiModelProperty(value = "课时id", position = 5)
+    private String hourId;
+
+    /** 章节id */
+    @ApiModelProperty(value = "章节id", position = 6)
+    private String chapterId;
+
+    /** 课程id */
+    @ApiModelProperty(value = "课程id", position = 7)
+    private String courseId;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 8)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 创建者 */
+    @ApiModelProperty(value = "创建者", position = 9)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+    /** 文件id */
+    private String fileId;
+    /** 文件名称 */
+    @ApiModelProperty(value = "文件名称", position = 10)
+    private String fileName;
+
+    /** 文件路径 */
+    @ApiModelProperty(value = "文件路径", position = 11)
+    private String filePath;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/enums/CourseLogEnum.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;
+
+/**
+ * 课程足迹枚举
+ *
+ * @author pans
+ * @date  2025/08/05 10:48
+ **/
+@Getter
+public enum CourseLogEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    CourseLogEnum(String value) {
+        this.value = value;
+    }
+}

+ 26 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/CourseLogMapper.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.CourseLog;
+
+
+/**
+ * 课程足迹Mapper接口
+ *
+ * @author pans
+ * @date  2025/08/05 10:48
+ **/
+public interface CourseLogMapper extends BaseMapper<CourseLog> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/mapping/CourseLogMapper.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.CourseLogMapper">
+
+</mapper>

+ 64 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/courselog/CourseLogAddParam.java

@@ -0,0 +1,64 @@
+/*
+ * 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.courselog;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 课程足迹添加参数
+ *
+ * @author pans
+ * @date  2025/08/05 10:48
+ **/
+@Getter
+@Setter
+public class CourseLogAddParam {
+
+    /** 课时名称 */
+    @ApiModelProperty(value = "课时名称", position = 2)
+    private String hourName;
+
+    /** 章节名称 */
+    @ApiModelProperty(value = "章节名称", position = 3)
+    private String chapterName;
+
+    /** 课程名称 */
+    @ApiModelProperty(value = "课程名称", position = 4)
+    private String courseName;
+
+    /** 课时id */
+    @ApiModelProperty(value = "课时id", position = 5)
+    private String hourId;
+
+    /** 章节id */
+    @ApiModelProperty(value = "章节id", position = 6)
+    private String chapterId;
+
+    /** 课程id */
+    @ApiModelProperty(value = "课程id", position = 7)
+    private String courseId;
+
+    /** 文件id */
+    private String fileId;
+
+    /** 文件名称 */
+    @ApiModelProperty(value = "文件名称", position = 10)
+    private String fileName;
+
+    /** 文件路径 */
+    @ApiModelProperty(value = "文件路径", position = 11)
+    private String filePath;
+
+}

+ 71 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/courselog/CourseLogEditParam.java

@@ -0,0 +1,71 @@
+/*
+ * 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.courselog;
+
+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;
+
+/**
+ * 课程足迹编辑参数
+ *
+ * @author pans
+ * @date  2025/08/05 10:48
+ **/
+@Getter
+@Setter
+public class CourseLogEditParam {
+
+    /** ID */
+    @ApiModelProperty(value = "ID", required = true, position = 1)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 课时名称 */
+    @ApiModelProperty(value = "课时名称", position = 2)
+    private String hourName;
+
+    /** 章节名称 */
+    @ApiModelProperty(value = "章节名称", position = 3)
+    private String chapterName;
+
+    /** 课程名称 */
+    @ApiModelProperty(value = "课程名称", position = 4)
+    private String courseName;
+
+    /** 课时id */
+    @ApiModelProperty(value = "课时id", position = 5)
+    private String hourId;
+
+    /** 章节id */
+    @ApiModelProperty(value = "章节id", position = 6)
+    private String chapterId;
+
+    /** 课程id */
+    @ApiModelProperty(value = "课程id", position = 7)
+    private String courseId;
+
+    /** 文件名称 */
+    @ApiModelProperty(value = "文件名称", position = 10)
+    private String fileName;
+
+    /** 文件路径 */
+    @ApiModelProperty(value = "文件路径", position = 11)
+    private String filePath;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/courselog/CourseLogIdParam.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.courselog;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 课程足迹Id参数
+ *
+ * @author pans
+ * @date  2025/08/05 10:48
+ **/
+@Getter
+@Setter
+public class CourseLogIdParam {
+
+    /** 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/courselog/CourseLogPageParam.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.courselog;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 课程足迹查询参数
+ *
+ * @author pans
+ * @date  2025/08/05 10:48
+ **/
+@Getter
+@Setter
+public class CourseLogPageParam {
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @ApiModelProperty(value = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @ApiModelProperty(value = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    private String fileName;
+
+    private String courseName;
+
+    private String chapterName;
+
+}

+ 81 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/CourseLogService.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.CourseLog;
+import vip.xiaonuo.disk.param.courselog.CourseLogAddParam;
+import vip.xiaonuo.disk.param.courselog.CourseLogEditParam;
+import vip.xiaonuo.disk.param.courselog.CourseLogIdParam;
+import vip.xiaonuo.disk.param.courselog.CourseLogPageParam;
+
+import java.util.List;
+
+/**
+ * 课程足迹Service接口
+ *
+ * @author pans
+ * @date  2025/08/05 10:48
+ **/
+public interface CourseLogService extends IService<CourseLog> {
+
+    /**
+     * 获取课程足迹分页
+     *
+     * @author pans
+     * @date  2025/08/05 10:48
+     */
+    Page<CourseLog> page(CourseLogPageParam courseLogPageParam);
+
+    /**
+     * 添加课程足迹
+     *
+     * @author pans
+     * @date  2025/08/05 10:48
+     */
+    void add(CourseLogAddParam courseLogAddParam);
+
+    /**
+     * 编辑课程足迹
+     *
+     * @author pans
+     * @date  2025/08/05 10:48
+     */
+    void edit(CourseLogEditParam courseLogEditParam);
+
+    /**
+     * 删除课程足迹
+     *
+     * @author pans
+     * @date  2025/08/05 10:48
+     */
+    void delete(List<CourseLogIdParam> courseLogIdParamList);
+
+    /**
+     * 获取课程足迹详情
+     *
+     * @author pans
+     * @date  2025/08/05 10:48
+     */
+    CourseLog detail(CourseLogIdParam courseLogIdParam);
+
+    /**
+     * 获取课程足迹详情
+     *
+     * @author pans
+     * @date  2025/08/05 10:48
+     **/
+    CourseLog queryEntity(String id);
+
+}

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

@@ -0,0 +1,116 @@
+/*
+ * 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.IdUtil;
+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.auth.core.util.StpLoginUserUtil;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.disk.domain.CourseLog;
+import vip.xiaonuo.disk.mapper.CourseLogMapper;
+import vip.xiaonuo.disk.param.courselog.CourseLogAddParam;
+import vip.xiaonuo.disk.param.courselog.CourseLogEditParam;
+import vip.xiaonuo.disk.param.courselog.CourseLogIdParam;
+import vip.xiaonuo.disk.param.courselog.CourseLogPageParam;
+import vip.xiaonuo.disk.service.CourseLogService;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 课程足迹Service接口实现类
+ *
+ * @author pans
+ * @date  2025/08/05 10:48
+ **/
+@Service
+public class CourseLogServiceImpl extends ServiceImpl<CourseLogMapper, CourseLog> implements CourseLogService {
+
+
+    @Override
+    public Page<CourseLog> page(CourseLogPageParam courseLogPageParam) {
+        QueryWrapper<CourseLog> queryWrapper = new QueryWrapper<>();
+
+        if(ObjectUtil.isNotEmpty(courseLogPageParam.getCourseName())){
+            queryWrapper.lambda().like(CourseLog::getCourseName, courseLogPageParam.getCourseName());
+        }
+
+        if(ObjectUtil.isNotEmpty(courseLogPageParam.getChapterName())){
+            queryWrapper.lambda().like(CourseLog::getChapterName, courseLogPageParam.getChapterName());
+        }
+
+        if(ObjectUtil.isNotEmpty(courseLogPageParam.getFileName())){
+            queryWrapper.lambda().like(CourseLog::getFileName, courseLogPageParam.getFileName());
+        }
+
+
+        if(ObjectUtil.isAllNotEmpty(courseLogPageParam.getSortField(), courseLogPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(courseLogPageParam.getSortOrder());
+            queryWrapper.orderBy(true, courseLogPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(courseLogPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(CourseLog::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(CourseLogAddParam courseLogAddParam) {
+        CourseLog courseLog = BeanUtil.toBean(courseLogAddParam, CourseLog.class);
+        courseLog.setId(IdUtil.getSnowflakeNextIdStr());
+        courseLog.setCreateUser(StpLoginUserUtil.getLoginUser().getId());
+        courseLog.setCreateTime(new Date());
+        this.save(courseLog);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(CourseLogEditParam courseLogEditParam) {
+        CourseLog courseLog = this.queryEntity(courseLogEditParam.getId());
+        BeanUtil.copyProperties(courseLogEditParam, courseLog);
+        this.updateById(courseLog);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<CourseLogIdParam> courseLogIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(courseLogIdParamList, CourseLogIdParam::getId));
+    }
+
+    @Override
+    public CourseLog detail(CourseLogIdParam courseLogIdParam) {
+        return this.queryEntity(courseLogIdParam.getId());
+    }
+
+    @Override
+    public CourseLog queryEntity(String id) {
+        CourseLog courseLog = this.getById(id);
+        if(ObjectUtil.isEmpty(courseLog)) {
+            throw new CommonException("课程足迹不存在,id值为:{}", id);
+        }
+        return courseLog;
+    }
+
+}