Prechádzať zdrojové kódy

预览增删改查代码提交

pans 8 mesiacov pred
rodič
commit
ba2874d6db
16 zmenil súbory, kde vykonal 729 pridanie a 11 odobranie
  1. 132 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/ChapterController.java
  2. 4 1
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/TranscodingController.java
  3. 79 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/Chapter.java
  4. 6 3
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/ResourceFile.java
  5. 34 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/enums/ChapterEnum.java
  6. 26 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/ChapterMapper.java
  7. 5 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/mapping/ChapterMapper.xml
  8. 50 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ChapterAddParam.java
  9. 55 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ChapterEditParam.java
  10. 35 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ChapterIdParam.java
  11. 51 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ChapterPageParam.java
  12. 83 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/ChapterService.java
  13. 1 1
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/TranscodingService.java
  14. 96 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/impl/ChapterServiceImpl.java
  15. 2 6
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/impl/ResourceFileServiceImpl.java
  16. 70 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/impl/TranscodingServiceImpl.java

+ 132 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/ChapterController.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.Chapter;
+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 javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 课程章节表控制器
+ *
+ * @author pans
+ * @date  2025/07/02 15:34
+ */
+@Api(tags = "课程章节表控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class ChapterController {
+
+    @Resource
+    private ChapterService chapterService;
+
+    /**
+     * 获取课程章节表分页
+     *
+     * @author pans
+     * @date  2025/07/02 15:34
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取课程章节表分页")
+    @SaCheckPermission("/disk/chapter/page")
+    @GetMapping("/disk/chapter/page")
+    public CommonResult<Page<Chapter>> page(ChapterPageParam chapterPageParam) {
+        return CommonResult.data(chapterService.page(chapterPageParam));
+    }
+
+    /**
+     * 添加课程章节表
+     *
+     * @author pans
+     * @date  2025/07/02 15:34
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加课程章节表")
+    @CommonLog("添加课程章节表")
+    @SaCheckPermission("/disk/chapter/add")
+    @PostMapping("/disk/chapter/add")
+    public CommonResult<String> add(@RequestBody @Valid ChapterAddParam chapterAddParam) {
+        chapterService.add(chapterAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑课程章节表
+     *
+     * @author pans
+     * @date  2025/07/02 15:34
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑课程章节表")
+    @CommonLog("编辑课程章节表")
+    @SaCheckPermission("/disk/chapter/edit")
+    @PostMapping("/disk/chapter/edit")
+    public CommonResult<String> edit(@RequestBody @Valid ChapterEditParam chapterEditParam) {
+        chapterService.edit(chapterEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除课程章节表
+     *
+     * @author pans
+     * @date  2025/07/02 15:34
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除课程章节表")
+    @CommonLog("删除课程章节表")
+    @SaCheckPermission("/disk/chapter/delete")
+    @PostMapping("/disk/chapter/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<ChapterIdParam> chapterIdParamList) {
+        chapterService.delete(chapterIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取课程章节表详情
+     *
+     * @author pans
+     * @date  2025/07/02 15:34
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取课程章节表详情")
+    @SaCheckPermission("/disk/chapter/detail")
+    @GetMapping("/disk/chapter/detail")
+    public CommonResult<Chapter> detail(@Valid ChapterIdParam chapterIdParam) {
+        return CommonResult.data(chapterService.detail(chapterIdParam));
+    }
+
+}

+ 4 - 1
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/TranscodingController.java

@@ -37,6 +37,9 @@ public class TranscodingController {
     public CommonResult<String> transcodingVideo(@RequestBody TranscodingReqDTO transcodingReqDTO) {
         return transcodingService.transcodingVideo(transcodingReqDTO);
     }
-
+    @PostMapping("/transcodingResource/file")
+    public CommonResult<String> transcodingResource(@RequestBody TranscodingReqDTO transcodingReqDTO) {
+        return transcodingService.transcodingResource(transcodingReqDTO);
+    }
 
 }

+ 79 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/Chapter.java

@@ -0,0 +1,79 @@
+/*
+ * 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.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 课程章节表实体
+ *
+ * @author pans
+ * @date  2025/07/02 15:34
+ **/
+@Getter
+@Setter
+@TableName("chapter")
+public class Chapter {
+
+    /** 主键 */
+    @TableId
+    @ApiModelProperty(value = "主键", position = 1)
+    private Integer id;
+
+    /** 父id */
+    @ApiModelProperty(value = "父id", position = 2)
+    private String pid;
+
+    /** 章节名称 */
+    @ApiModelProperty(value = "章节名称", position = 3)
+    private String name;
+
+    /** 课程id */
+    @ApiModelProperty(value = "课程id", position = 4)
+    private String courseId;
+
+    /** DELETE_FLAG */
+    @ApiModelProperty(value = "DELETE_FLAG", position = 5)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private Integer deleteFlag;
+
+    /** UPDATE_TIME */
+    @ApiModelProperty(value = "UPDATE_TIME", position = 6)
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** CREATE_TIME */
+    @ApiModelProperty(value = "CREATE_TIME", position = 7)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** CREATE_USER */
+    @ApiModelProperty(value = "CREATE_USER", position = 8)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** UPDATE_USER */
+    @ApiModelProperty(value = "UPDATE_USER", position = 9)
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+
+    /** 文件id */
+    @ApiModelProperty(value = "文件id", position = 10)
+    private String userFileId;
+}

+ 6 - 3
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/ResourceFile.java

@@ -13,14 +13,15 @@
 package vip.xiaonuo.disk.domain;
 
 import cn.hutool.core.util.IdUtil;
-import com.baomidou.mybatisplus.annotation.*;
+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 com.qiwenshare.common.util.DateUtil;
 import com.qiwenshare.ufop.operation.upload.domain.UploadFileResult;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
-import java.math.BigDecimal;
-import java.util.Date;
 
 /**
  * RESOURCE_FILE实体
@@ -79,6 +80,8 @@ public class ResourceFile {
     @ApiModelProperty(value = "FILE_RESOURCE", position = 11)
     private Integer fileResource;
 
+    @TableField(value="PRIVIEW_FILE_URL")
+    private String previewFileUrl;
 
     public ResourceFile(){
 

+ 34 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/enums/ChapterEnum.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/07/02 15:34
+ **/
+@Getter
+public enum ChapterEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    ChapterEnum(String value) {
+        this.value = value;
+    }
+}

+ 26 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/ChapterMapper.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.Chapter;
+
+
+/**
+ * 课程章节表Mapper接口
+ *
+ * @author pans
+ * @date  2025/07/02 15:34
+ **/
+public interface ChapterMapper extends BaseMapper<Chapter> {
+}

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

+ 50 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ChapterAddParam.java

@@ -0,0 +1,50 @@
+/*
+ * 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;
+
+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/07/02 15:34
+ **/
+@Getter
+@Setter
+public class ChapterAddParam {
+
+    /** 父id */
+    @ApiModelProperty(value = "父id", position = 2)
+    private String pid;
+
+    /** 章节名称 */
+    @ApiModelProperty(value = "章节名称", position = 3)
+    private String name;
+
+    /** 课程id */
+    @ApiModelProperty(value = "课程id", position = 4)
+    private String courseId;
+
+    /** 文件id */
+    @ApiModelProperty(value = "文件id", position = 10)
+    private String userFileId;
+
+}

+ 55 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ChapterEditParam.java

@@ -0,0 +1,55 @@
+/*
+ * 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;
+
+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/07/02 15:34
+ **/
+@Getter
+@Setter
+public class ChapterEditParam {
+
+    /** 主键 */
+    @ApiModelProperty(value = "主键", required = true, position = 1)
+    @NotNull(message = "id不能为空")
+    private Integer id;
+
+    /** 父id */
+    @ApiModelProperty(value = "父id", position = 2)
+    private String pid;
+
+    /** 章节名称 */
+    @ApiModelProperty(value = "章节名称", position = 3)
+    private String name;
+
+    /** 课程id */
+    @ApiModelProperty(value = "课程id", position = 4)
+    private String courseId;
+
+    /** 文件id */
+    @ApiModelProperty(value = "文件id", position = 10)
+    private String userFileId;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ChapterIdParam.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;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 课程章节表Id参数
+ *
+ * @author pans
+ * @date  2025/07/02 15:34
+ **/
+@Getter
+@Setter
+public class ChapterIdParam {
+
+    /** 主键 */
+    @ApiModelProperty(value = "主键", required = true)
+    @NotBlank(message = "id不能为空")
+    private Integer id;
+}

+ 51 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ChapterPageParam.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;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 课程章节表查询参数
+ *
+ * @author pans
+ * @date  2025/07/02 15:34
+ **/
+@Getter
+@Setter
+public class ChapterPageParam {
+
+    /** 当前页 */
+    @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;
+
+}

+ 83 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/ChapterService.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.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.disk.domain.Chapter;
+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 java.util.List;
+
+;
+
+/**
+ * 课程章节表Service接口
+ *
+ * @author pans
+ * @date  2025/07/02 15:34
+ **/
+public interface ChapterService extends IService<Chapter> {
+
+    /**
+     * 获取课程章节表分页
+     *
+     * @author pans
+     * @date  2025/07/02 15:34
+     */
+    Page<Chapter> page(ChapterPageParam chapterPageParam);
+
+    /**
+     * 添加课程章节表
+     *
+     * @author pans
+     * @date  2025/07/02 15:34
+     */
+    void add(ChapterAddParam chapterAddParam);
+
+    /**
+     * 编辑课程章节表
+     *
+     * @author pans
+     * @date  2025/07/02 15:34
+     */
+    void edit(ChapterEditParam chapterEditParam);
+
+    /**
+     * 删除课程章节表
+     *
+     * @author pans
+     * @date  2025/07/02 15:34
+     */
+    void delete(List<ChapterIdParam> chapterIdParamList);
+
+    /**
+     * 获取课程章节表详情
+     *
+     * @author pans
+     * @date  2025/07/02 15:34
+     */
+    Chapter detail(ChapterIdParam chapterIdParam);
+
+    /**
+     * 获取课程章节表详情
+     *
+     * @author pans
+     * @date  2025/07/02 15:34
+     **/
+    Chapter queryEntity(Integer id);
+
+}

+ 1 - 1
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/TranscodingService.java

@@ -18,5 +18,5 @@ public interface TranscodingService {
      */
     CommonResult<String> transcodingVideo(TranscodingReqDTO transcodingReqDTO);
 
-
+    CommonResult<String> transcodingResource(TranscodingReqDTO transcodingReqDTO);
 }

+ 96 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/impl/ChapterServiceImpl.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.Chapter;
+import vip.xiaonuo.disk.mapper.ChapterMapper;
+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 java.util.List;
+
+/**
+ * 课程章节表Service接口实现类
+ *
+ * @author pans
+ * @date  2025/07/02 15:34
+ **/
+@Service
+public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> implements ChapterService {
+
+
+    @Override
+    public Page<Chapter> page(ChapterPageParam chapterPageParam) {
+        QueryWrapper<Chapter> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isAllNotEmpty(chapterPageParam.getSortField(), chapterPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(chapterPageParam.getSortOrder());
+            queryWrapper.orderBy(true, chapterPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(chapterPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(Chapter::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(ChapterAddParam chapterAddParam) {
+        Chapter chapter = BeanUtil.toBean(chapterAddParam, Chapter.class);
+        this.save(chapter);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(ChapterEditParam chapterEditParam) {
+        Chapter chapter = this.queryEntity(chapterEditParam.getId());
+        BeanUtil.copyProperties(chapterEditParam, chapter);
+        this.updateById(chapter);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<ChapterIdParam> chapterIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(chapterIdParamList, ChapterIdParam::getId));
+    }
+
+    @Override
+    public Chapter detail(ChapterIdParam chapterIdParam) {
+        return this.queryEntity(chapterIdParam.getId());
+    }
+
+    @Override
+    public Chapter queryEntity(Integer id) {
+        Chapter chapter = this.getById(id);
+        if(ObjectUtil.isEmpty(chapter)) {
+            throw new CommonException("课程章节表不存在,id值为:{}", id);
+        }
+        return chapter;
+    }
+
+}

+ 2 - 6
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/impl/ResourceFileServiceImpl.java

@@ -1,14 +1,11 @@
 package vip.xiaonuo.disk.service.impl;
 
-import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.qiwenshare.common.constant.FileConstant;
-import com.qiwenshare.common.result.RestResult;
 import com.qiwenshare.common.util.DateUtil;
 import com.qiwenshare.common.util.MimeUtils;
 import com.qiwenshare.ufop.constant.UploadFileStatusEnum;
@@ -24,7 +21,6 @@ import com.qiwenshare.ufop.operation.upload.domain.UploadFile;
 import com.qiwenshare.ufop.operation.upload.domain.UploadFileResult;
 import com.qiwenshare.ufop.util.UFOPUtils;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
@@ -46,7 +42,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.awt.image.BufferedImage;
 import java.io.*;
-import java.util.*;
+import java.util.Base64;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -454,7 +450,7 @@ public class ResourceFileServiceImpl extends ServiceImpl<ResourceFileMapper, Res
             throw new UploadException("预览失败");
         }
         PreviewFile previewFile = new PreviewFile();
-        previewFile.setFileUrl(resourceFile.getFileUrl());
+        previewFile.setFileUrl(resourceFile.getPreviewFileUrl());
         try {
             if ("true".equals(previewDTO.getIsMin())) {
                 previewer.imageThumbnailPreview(httpServletResponse, previewFile);

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

@@ -9,9 +9,13 @@ import org.springframework.transaction.annotation.Transactional;
 import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
 import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.disk.domain.FileBean;
+import vip.xiaonuo.disk.domain.ResourceFile;
+import vip.xiaonuo.disk.domain.ResourceUserFile;
 import vip.xiaonuo.disk.domain.UserFile;
 import vip.xiaonuo.disk.dto.file.TranscodingReqDTO;
 import vip.xiaonuo.disk.mapper.FileMapper;
+import vip.xiaonuo.disk.mapper.ResourceFileMapper;
+import vip.xiaonuo.disk.mapper.ResourceUserFileMapper;
 import vip.xiaonuo.disk.mapper.UserFileMapper;
 import vip.xiaonuo.disk.service.TranscodingService;
 import vip.xiaonuo.disk.util.OfficeConverter;
@@ -44,6 +48,15 @@ public class TranscodingServiceImpl implements TranscodingService {
     @Resource
     private OfficeConverter officeConverter;
 
+
+
+
+    @Resource
+    private ResourceUserFileMapper resourceUserFileMapper;
+
+
+    @Resource
+    private ResourceFileMapper resourceFileMapper;
     @Override
     @Transactional(rollbackFor = Exception.class)
     public CommonResult<String> transcodingVideo(TranscodingReqDTO transcodingReqDTO) {
@@ -95,6 +108,63 @@ public class TranscodingServiceImpl implements TranscodingService {
         return CommonResult.ok("格式转换成功");
     }
 
+    @Override
+    public CommonResult<String> transcodingResource(TranscodingReqDTO transcodingReqDTO) {
+        // 校验目标文件是否存在,是否是本人的
+        String userId = StpLoginUserUtil.getLoginUser().getId();
+        QueryWrapper<ResourceUserFile> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ResourceUserFile::getFileId, transcodingReqDTO.getFileId());
+        ResourceUserFile userFile = resourceUserFileMapper.selectOne(queryWrapper);
+        if (userFile == null || !userFile.getUserId().equals(userId)) {
+            return CommonResult.error("文件不存在或不是本人的");
+        }
+        ResourceFile fileBean = resourceFileMapper.selectById(userFile.getFileId());
+        if (fileBean == null) {
+            return CommonResult.error("文件不存在");
+        }
+        // 构建转码格式列表
+        ArrayList<String> formatList = new ArrayList<>();
+        formatList.add(transcodingReqDTO.getFormat());
+        // 判断视频还是图片
+        if (transcodingReqDTO.getTranscodingType() == 0) {
+            try {
+                // 转码视频
+                // mp4 wmv avi flv mpeg mpg rmvb mov 互相转
+                videoConverter.convertAndUpload(fileBean.getFileUrl(), fileBean.getFileId(), new String[]{transcodingReqDTO.getFormat()});
+                // 转换后把文件信息新增到数据库
+                saveResourceFile(fileBean, transcodingReqDTO);
+            } catch (Exception ex) {
+                log.error(ex.getMessage());
+                return CommonResult.error("格式转换失败");
+            }
+        } else if (transcodingReqDTO.getTranscodingType() == 1) {
+            // 转码文档
+            // pdf doc docx ppt pptx xls xlsx
+            // doc转docx,ppt转pptx,xls转xlsx 所有均转pdf
+            // 判断目标格式
+            try {
+                if ("pdf".equals(transcodingReqDTO.getFormat())) {
+                    pdfUtils.convertToPdf(fileBean.getFileUrl(), fileBean.getFileId() + "." + transcodingReqDTO.getFormat());
+                } else {
+                    officeConverter.convertAndUpload(fileBean.getFileUrl(), fileBean.getFileId() + "." + transcodingReqDTO.getFormat());
+                }
+                // 转换后把文件信息新增到数据库
+                saveResourceFile(fileBean, transcodingReqDTO);
+            } catch (Exception ex) {
+                log.error("格式转换:"+ex.getMessage());
+                return CommonResult.error("格式转换失败");
+            }
+        }
+        return CommonResult.ok("格式转换成功");
+    }
+
+    public void saveResourceFile(ResourceFile fileBean, TranscodingReqDTO transcodingReqDTO) {
+        ResourceFile newFile = new ResourceFile();
+        newFile.setFileId(fileBean.getFileId());
+        newFile.setPreviewFileUrl("converted/" + fileBean.getFileId() + "." + transcodingReqDTO.getFormat());
+        resourceFileMapper.updateById(newFile);
+    }
+
 
     /**
      * 封装参数,存储进数据库