فهرست منبع

1.资源管理加入私密权限控制:
1)创建私密资源用户关联相关代码
2)修改资源管理原本增删改查接口,加入私密资源权限相关控制
3)编写资源中心获取是否拥有查看权限接口

honorfire 7 ماه پیش
والد
کامیت
45b1d8651a
15فایلهای تغییر یافته به همراه714 افزوده شده و 3 حذف شده
  1. 121 2
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/ResourceRecordController.java
  2. 4 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/CourseAuditRecord.java
  3. 71 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/ResourceRecordUserRelate.java
  4. 34 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/ResourceRecordUserRelateEnum.java
  5. 9 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/dto/courseauditrecord/CourseAuditRecordAddParam.java
  6. 8 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/dto/courseauditrecord/CourseAuditRecordEditParam.java
  7. 25 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/ResourceRecordUserRelateMapper.java
  8. 17 1
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/mapping/CourseAuditRecordMapper.xml
  9. 5 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/mapping/ResourceRecordUserRelateMapper.xml
  10. 42 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ResourceRecordUserRelateAddParam.java
  11. 47 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ResourceRecordUserRelateEditParam.java
  12. 35 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ResourceRecordUserRelateIdParam.java
  13. 51 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ResourceRecordUserRelatePageParam.java
  14. 107 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/ResourceRecordUserRelateService.java
  15. 138 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/impl/ResourceRecordUserRelateServiceImpl.java

+ 121 - 2
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/ResourceRecordController.java

@@ -32,6 +32,7 @@ import vip.xiaonuo.common.pojo.CommonValidList;
 import vip.xiaonuo.common.util.PinyinUtils;
 import vip.xiaonuo.disk.domain.CourseAuditRecord;
 import vip.xiaonuo.disk.domain.KeyWord;
+import vip.xiaonuo.disk.domain.ResourceRecordUserRelate;
 import vip.xiaonuo.disk.dto.courseauditrecord.CourseAuditRecordAddParam;
 import vip.xiaonuo.disk.dto.courseauditrecord.CourseAuditRecordEditParam;
 import vip.xiaonuo.disk.dto.courseauditrecord.CourseAuditRecordIdParam;
@@ -72,6 +73,9 @@ public class ResourceRecordController {
     @Resource
     private KeyWordService keyWordService;
 
+    @Resource
+    private ResourceRecordUserRelateService resourceRecordUserRelateService;
+
     @Resource
     private CourseInfoService courseInfoService;
 
@@ -160,7 +164,12 @@ public class ResourceRecordController {
             String queryInfoPinyin=StringUtils.deleteWhitespace(pinyinUtils.toPinyin(queryInfo));
             param.put("queryInfoPinyin", queryInfoPinyin);
         }
-
+        //私密权限私可见资源
+        Map privacyParam=new HashMap();
+        privacyParam.put("userId", StpLoginUserUtil.getLoginUser().getId());
+        List<ResourceRecordUserRelate> userRelateList=resourceRecordUserRelateService.allList(privacyParam);
+        List<String> privacyList=userRelateList.stream().map(ResourceRecordUserRelate::getResourceRecord).collect(Collectors.toList());
+        param.put("privacyList",privacyList );
         param.put("collegeId", req.getParameter("collegeId"));
         param.put("collegeTwoId", req.getParameter("collegeTwoId"));
         param.put("collegeThreeId", req.getParameter("collegeThreeId"));
@@ -185,6 +194,10 @@ public class ResourceRecordController {
     public CommonResult<String> add(@RequestBody @Valid CourseAuditRecordAddParam courseAuditRecordAddParam) {
         //生成统一的上传批次号
         String uploadBatchNum = UUID.randomUUID().toString();
+        if("1".equals(courseAuditRecordAddParam.getAuthType()))
+        {
+            if(StringUtils.isEmpty(courseAuditRecordAddParam.getUserRelateIds()))return CommonResult.error("私密权限关联用户不能为空");
+        }
         //该次上传附件信息
         String userFileIdsStr=courseAuditRecordAddParam.getUserfileIds();
         String[] userFileIdList = userFileIdsStr.split(",");
@@ -199,8 +212,25 @@ public class ResourceRecordController {
             courseAuditRecord.setUploadBatchNum(uploadBatchNum);
             if(StringUtils.isNotEmpty(courseAuditRecordAddParam.getKeywordValue()))courseAuditRecord.setKeywordPinyin(StringUtils.deleteWhitespace(pinyinUtils.toPinyin(courseAuditRecordAddParam.getKeywordValue(),false)));
             courseAuditRecordList.add(courseAuditRecord);
+            courseAuditRecord=courseAuditRecordService.addOne(courseAuditRecord);
+            //存储私密权限下关联的用户
+            if("1".equals(courseAuditRecordAddParam.getAuthType()))
+            {
+                String userRelateIdsStr=courseAuditRecordAddParam.getUserRelateIds();
+                String[] userRelateIdList = userRelateIdsStr.split(",");
+                List<ResourceRecordUserRelate> resourceRecordUserRelateList = new ArrayList<>();
+                for(String userRelateId:userRelateIdList)
+                {
+                    ResourceRecordUserRelate resourceRecordUserRelate=new ResourceRecordUserRelate();
+                    resourceRecordUserRelate.setUserId(userRelateId);
+                    resourceRecordUserRelate.setResourceRecord(courseAuditRecord.getId());
+                    resourceRecordUserRelateList.add(resourceRecordUserRelate);
+                }
+                resourceRecordUserRelateService.addBatch(resourceRecordUserRelateList);
+            }
+
         }
-        courseAuditRecordService.addBatch(courseAuditRecordList);
+//        courseAuditRecordService.addBatch(courseAuditRecordList);
         return CommonResult.ok();
     }
 
@@ -217,9 +247,42 @@ public class ResourceRecordController {
     @PostMapping("/disk/courseauditrecord/edit")
     public CommonResult<String> edit(@RequestBody @Valid CourseAuditRecordEditParam courseAuditRecordEditParam) {
         if(StringUtils.isEmpty(courseAuditRecordEditParam.getId()))return CommonResult.error("id不能为空");
+        if(StringUtils.isNotEmpty(courseAuditRecordEditParam.getAuthType()))
+        {
+            if("1".equals(courseAuditRecordEditParam.getAuthType()))
+            {
+                if(StringUtils.isEmpty(courseAuditRecordEditParam.getUserRelateIds()))return CommonResult.error("私密权限关联用户不能为空");
+            }
+        }
+
         CourseAuditRecord courseAuditRecord = BeanUtil.toBean(courseAuditRecordEditParam, CourseAuditRecord.class);
         if(StringUtils.isNotEmpty(courseAuditRecordEditParam.getKeywordValue()))courseAuditRecord.setKeywordPinyin(StringUtils.deleteWhitespace(pinyinUtils.toPinyin(courseAuditRecordEditParam.getKeywordValue(),false)));
         courseAuditRecordService.editOne(courseAuditRecord);
+        //删除旧私密权限下关联的用户
+        Map deleteRelateParam=new HashMap();
+        deleteRelateParam.put("resourceRecord", courseAuditRecord.getId());
+        List<ResourceRecordUserRelate> deleteRelateList=resourceRecordUserRelateService.allList(deleteRelateParam);
+        List<String> deleteRelateIdList=deleteRelateList.stream().map(ResourceRecordUserRelate::getId).collect(Collectors.toList());
+        resourceRecordUserRelateService.deleteByIds(deleteRelateIdList);
+        if(StringUtils.isNotEmpty(courseAuditRecordEditParam.getAuthType()))
+        {
+            //存储私密权限下关联的用户
+            if("1".equals(courseAuditRecordEditParam.getAuthType()))
+            {
+                String userRelateIdsStr=courseAuditRecordEditParam.getUserRelateIds();
+                String[] userRelateIdList = userRelateIdsStr.split(",");
+                List<ResourceRecordUserRelate> resourceRecordUserRelateList = new ArrayList<>();
+                for(String userRelateId:userRelateIdList)
+                {
+                    ResourceRecordUserRelate resourceRecordUserRelate=new ResourceRecordUserRelate();
+                    resourceRecordUserRelate.setUserId(userRelateId);
+                    resourceRecordUserRelate.setResourceRecord(courseAuditRecord.getId());
+                    resourceRecordUserRelateList.add(resourceRecordUserRelate);
+                }
+                resourceRecordUserRelateService.addBatch(resourceRecordUserRelateList);
+            }
+        }
+
         return CommonResult.ok();
     }
 
@@ -367,6 +430,18 @@ public class ResourceRecordController {
             List<KeyWord>  keywordList=keyWordService.selectByIds(keywordIdList);
             result.put("keywordList",keywordList);
         }
+        //获取私密权限下关联的用户
+        param.clear();
+        if(StringUtils.isNotEmpty(String.valueOf(result.get("authType"))))
+        {
+            if("1".equals(String.valueOf(result.get("authType"))))
+            {
+                param.put("resourceRecord", req.getParameter("id"));
+                List<ResourceRecordUserRelate> userRelateList=resourceRecordUserRelateService.allList(param);
+                result.put("userRelateList",userRelateList);
+            }
+        }
+
         return CommonResult.data(result);
     }
 
@@ -409,6 +484,38 @@ public class ResourceRecordController {
         return CommonResult.data(result);
     }
 
+    /**
+     * 资源中心-资源是否有查看权限
+     *
+     * @author honorfire
+     * @date  2025/06/20 14:58
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("资源中心-资源是否有查看权限")
+    @GetMapping("/disk/resourcecentre/isHaveAuth")
+    public CommonResult<Map<String,Object>> isHaveAuth(@Valid CourseAuditRecordIdParam courseAuditRecordIdParam, HttpServletRequest req) {
+        Map param =new HashMap();
+        String isHaveAuth="0";
+        param.put("id", req.getParameter("id"));
+        Map result=new HashMap();
+        Map<String,Object> resourceResult=courseAuditRecordService.queryInfo(param);
+        //如果资源是公开的,直接放行
+        if("0".equals(resourceResult.get("authType")))
+        {
+            isHaveAuth="1";
+        }
+        else if("1".equals(resourceResult.get("authType")))//如果是私密的,检查是否有权限
+        {
+            param.put("resourceRecord", req.getParameter("id"));
+            param.put("userId", StpLoginUserUtil.getLoginUser().getId());
+            List<ResourceRecordUserRelate> userRelateList=resourceRecordUserRelateService.allList(param);
+            if(userRelateList.size()>0)isHaveAuth="1";
+        }
+
+        result.put("isHaveAuth",isHaveAuth);
+        return CommonResult.data(result);
+    }
+
     /**
      * 资源管理-查询最近一次信息
      *
@@ -436,6 +543,18 @@ public class ResourceRecordController {
             List<KeyWord>  keywordList=keyWordService.selectByIds(keywordIdList);
             result.put("keywordList",keywordList);
         }
+        //获取私密权限下关联的用户
+        param.clear();
+        if(StringUtils.isNotEmpty(String.valueOf(result.get("authType"))))
+        {
+            if("1".equals(String.valueOf(result.get("authType"))))
+            {
+                param.put("resourceRecord", req.getParameter("id"));
+                List<ResourceRecordUserRelate> userRelateList=resourceRecordUserRelateService.allList(param);
+                result.put("userRelateList",userRelateList);
+            }
+        }
+
         return CommonResult.data(result);
     }
 

+ 4 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/CourseAuditRecord.java

@@ -113,4 +113,8 @@ public class CourseAuditRecord extends CommonEntity {
     /** 统一上传批次号 */
     @ApiModelProperty(value = "统一上传批次号", position = 13)
     private String uploadBatchNum;
+
+    /** 权限类型,0公开1私密 */
+    @ApiModelProperty(value = "权限类型,0公开1私密", position = 7)
+    private String authType;
 }

+ 71 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/ResourceRecordUserRelate.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.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 honorfire
+ * @date  2025/07/08 09:22
+ **/
+@Getter
+@Setter
+@TableName("RESOURCE_RECORD_USER_RELATE")
+public class ResourceRecordUserRelate {
+
+    /** ID */
+    @TableId
+    @ApiModelProperty(value = "ID", position = 1)
+    private String id;
+
+    /** USER_ID */
+    @ApiModelProperty(value = "USER_ID", position = 2)
+    private String userId;
+
+    /** RESOURCE_RECORD */
+    @ApiModelProperty(value = "RESOURCE_RECORD", position = 3)
+    private String resourceRecord;
+
+    /** 删除标记(NOT_DELETE-未删除) */
+    @ApiModelProperty(value = "删除标记(NOT_DELETE-未删除)", position = 4)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+
+    /** 记录创建时间 */
+    @ApiModelProperty(value = "记录创建时间", position = 5)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 记录创建人 */
+    @ApiModelProperty(value = "记录创建人", position = 6)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 记录更新时间 */
+    @ApiModelProperty(value = "记录更新时间", position = 7)
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** 记录更新人 */
+    @ApiModelProperty(value = "记录更新人", 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/domain/ResourceRecordUserRelateEnum.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.domain;
+
+import lombok.Getter;
+
+/**
+ * 资源共享-用户-私密分享枚举
+ *
+ * @author honorfire
+ * @date  2025/07/08 09:22
+ **/
+@Getter
+public enum ResourceRecordUserRelateEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    ResourceRecordUserRelateEnum(String value) {
+        this.value = value;
+    }
+}

+ 9 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/dto/courseauditrecord/CourseAuditRecordAddParam.java

@@ -98,4 +98,13 @@ public class CourseAuditRecordAddParam {
     /** 是否热门 */
     @ApiModelProperty(value = "是否热门,0否1是", position = 7)
     private String isHot;
+
+    /** 权限类型,0公开1私密 */
+    @ApiModelProperty(value = "权限类型,0公开1私密", position = 7)
+    @NotBlank(message = "权限类型不能为空")
+    private String authType;
+
+    /** 私密权限关联用户id */
+    @ApiModelProperty(value = "私密权限关联用户id", position = 7)
+    private String userRelateIds;
 }

+ 8 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/dto/courseauditrecord/CourseAuditRecordEditParam.java

@@ -106,4 +106,12 @@ public class CourseAuditRecordEditParam {
     @ApiModelProperty(value = "资源封面id", position = 7)
     private String coverImage;
 
+    /** 权限类型,0公开1私密 */
+    @ApiModelProperty(value = "权限类型,0公开1私密", position = 7)
+    private String authType;
+
+    /** 私密权限关联用户id */
+    @ApiModelProperty(value = "私密权限关联用户id", position = 7)
+    private String userRelateIds;
+
 }

+ 25 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/ResourceRecordUserRelateMapper.java

@@ -0,0 +1,25 @@
+/*
+ * 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.ResourceRecordUserRelate;
+
+/**
+ * 资源共享-用户-私密分享Mapper接口
+ *
+ * @author honorfire
+ * @date  2025/07/08 09:22
+ **/
+public interface ResourceRecordUserRelateMapper extends BaseMapper<ResourceRecordUserRelate> {
+}

+ 17 - 1
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/mapping/CourseAuditRecordMapper.xml

@@ -143,6 +143,15 @@
             </if>
 
         </if>
+        AND (
+            t1.AUTH_TYPE ='0'
+        <if test="param.privacyList !=null and param.privacyList.size()>0">
+            OR t1.ID IN
+            <foreach collection=" param.privacyList" close=")" index="index" item="item" open="(" separator=",">
+                #{item}
+            </foreach>
+        </if>
+            )
         <if test="param.sortflag !=null and param.sortflag != ''">
             <if test=" param.sortflag == 0">
                 order by t1.CREATE_TIME desc
@@ -188,6 +197,8 @@
             IFNULL (t3.COURSE_NAME,'') AS courseIdName,
             IFNULL (t1.RESOURCE_DESC,'') AS resourceDesc,
             IFNULL (t7.NAME,'') AS resourceCreaterUserName,
+            IFNULL (t1.AUTH_TYPE,'') AS authType,
+            IFNULL(( SELECT dd1.DICT_LABEL FROM (SELECT d1.DICT_LABEL,d1.DICT_VALUE  FROM  DEV_DICT d1 WHERE PARENT_ID = (SELECT d2.ID  FROM  DEV_DICT d2 WHERE d2.DICT_VALUE='RESOURCE_RECORD_AUTH_TYPE') )dd1 WHERE dd1.DICT_VALUE = TRIM(t1.AUTH_TYPE) ),'') AS authTypeName,
             IFNULL (t1.COVER_IMAGE,'') AS coverImage,
             IFNULL (CAST(t6.DOWNLOAD_PATH AS VARCHAR),'') AS coverImagePath
         FROM RESOURCE_RECORD t1
@@ -227,8 +238,12 @@
             IFNULL (rt2.NAME,'') AS resourceTwoTypeName,
             CONCAT(t1.RESOURCE_TYPE,',',t1.RESOURCE_TWO_TYPE) AS resourceAllType,
             CONCAT(rt.NAME,',',rt2.NAME) AS resourceALLTypeName,
+            IFNULL (t1.AUTH_TYPE,'') AS authType,
+            IFNULL(( SELECT dd1.DICT_LABEL FROM (SELECT d1.DICT_LABEL,d1.DICT_VALUE  FROM  DEV_DICT d1 WHERE PARENT_ID = (SELECT d2.ID  FROM  DEV_DICT d2 WHERE d2.DICT_VALUE='RESOURCE_RECORD_AUTH_TYPE') )dd1 WHERE dd1.DICT_VALUE = TRIM(t1.AUTH_TYPE) ),'') AS authTypeName,
             IFNULL (t1.KEYWORD ,'') as keyword,
-            IFNULL (t1.KEYWORD_VALUE  ,'') as keywordValue
+            IFNULL (t1.KEYWORD_VALUE  ,'') as keywordValue,
+            IFNULL (t1.COVER_IMAGE,'') AS coverImage,
+            IFNULL (CAST(t6.DOWNLOAD_PATH AS VARCHAR),'') AS coverImagePath
         FROM RESOURCE_RECORD t1
         LEFT JOIN resource_type rt  ON t1.RESOURCE_TYPE =rt.ID AND rt.DELETE_FLAG ='NOT_DELETE'
         LEFT JOIN resource_type rt2  ON t1.RESOURCE_TWO_TYPE =rt2.ID AND rt2.DELETE_FLAG ='NOT_DELETE'
@@ -236,6 +251,7 @@
         LEFT JOIN major t5 ON t1.MAJOR_ID=t5.id AND t5.DELETE_FLAG ='NOT_DELETE'
         LEFT JOIN college t42 ON t1.COLLEGE_TWO_ID=t42.id AND t42.DELETE_FLAG ='NOT_DELETE'
         LEFT JOIN college t43 ON t1.COLLEGE_THREE_ID=t43.id AND t43.DELETE_FLAG ='NOT_DELETE'
+        LEFT JOIN DEV_FILE t6 ON t1.COVER_IMAGE=t6.ID AND t6.DELETE_FLAG ='NOT_DELETE'
         WHERE t1.DELETE_FLAG ='NOT_DELETE'
         <if test="userId!=null and userId != ''">
             and t1.CREATE_USER =#{userId}

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

+ 42 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ResourceRecordUserRelateAddParam.java

@@ -0,0 +1,42 @@
+/*
+ * 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 honorfire
+ * @date  2025/07/08 09:22
+ **/
+@Getter
+@Setter
+public class ResourceRecordUserRelateAddParam {
+
+    /** USER_ID */
+    @ApiModelProperty(value = "USER_ID", position = 2)
+    private String userId;
+
+    /** RESOURCE_RECORD */
+    @ApiModelProperty(value = "RESOURCE_RECORD", position = 3)
+    private String resourceRecord;
+
+}

+ 47 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ResourceRecordUserRelateEditParam.java

@@ -0,0 +1,47 @@
+/*
+ * 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 honorfire
+ * @date  2025/07/08 09:22
+ **/
+@Getter
+@Setter
+public class ResourceRecordUserRelateEditParam {
+
+    /** ID */
+    @ApiModelProperty(value = "ID", required = true, position = 1)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** USER_ID */
+    @ApiModelProperty(value = "USER_ID", position = 2)
+    private String userId;
+
+    /** RESOURCE_RECORD */
+    @ApiModelProperty(value = "RESOURCE_RECORD", position = 3)
+    private String resourceRecord;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/ResourceRecordUserRelateIdParam.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 honorfire
+ * @date  2025/07/08 09:22
+ **/
+@Getter
+@Setter
+public class ResourceRecordUserRelateIdParam {
+
+    /** 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/ResourceRecordUserRelatePageParam.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 honorfire
+ * @date  2025/07/08 09:22
+ **/
+@Getter
+@Setter
+public class ResourceRecordUserRelatePageParam {
+
+    /** 当前页 */
+    @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;
+
+}

+ 107 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/ResourceRecordUserRelateService.java

@@ -0,0 +1,107 @@
+/*
+ * 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.ResourceFileFormat;
+import vip.xiaonuo.disk.domain.ResourceRecordUserRelate;
+import vip.xiaonuo.disk.param.ResourceRecordUserRelateAddParam;
+import vip.xiaonuo.disk.param.ResourceRecordUserRelateEditParam;
+import vip.xiaonuo.disk.param.ResourceRecordUserRelateIdParam;
+import vip.xiaonuo.disk.param.ResourceRecordUserRelatePageParam;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 资源共享-用户-私密分享Service接口
+ *
+ * @author honorfire
+ * @date  2025/07/08 09:22
+ **/
+public interface ResourceRecordUserRelateService extends IService<ResourceRecordUserRelate> {
+
+    /**
+     * 获取资源共享-用户-私密分享分页
+     *
+     * @author honorfire
+     * @date  2025/07/08 09:22
+     */
+    Page<ResourceRecordUserRelate> page(ResourceRecordUserRelatePageParam resourceRecordUserRelatePageParam);
+
+    /**
+     * 资源共享-用户-私密分享-全量列表
+     *
+     * @author pans
+     * @date  2025/06/28 12:01
+     */
+    List<ResourceRecordUserRelate> allList(Map param);
+
+    /**
+     * 添加资源共享-用户-私密分享
+     *
+     * @author honorfire
+     * @date  2025/07/08 09:22
+     */
+    void add(ResourceRecordUserRelateAddParam resourceRecordUserRelateAddParam);
+
+    /**
+     * 资源共享-用户-私密分享-批量添加
+     *
+     * @author honorfire
+     * @date  2025/07/08 09:22
+     */
+    void addBatch(List<ResourceRecordUserRelate> resourceRecordUserRelateList);
+
+    /**
+     * 编辑资源共享-用户-私密分享
+     *
+     * @author honorfire
+     * @date  2025/07/08 09:22
+     */
+    void edit(ResourceRecordUserRelateEditParam resourceRecordUserRelateEditParam);
+
+    /**
+     * 删除资源共享-用户-私密分享
+     *
+     * @author honorfire
+     * @date  2025/07/08 09:22
+     */
+    void delete(List<ResourceRecordUserRelateIdParam> resourceRecordUserRelateIdParamList);
+
+    /**
+     * 删除资源共享-用户-私密分享
+     *
+     * @author honorfire
+     * @date  2025/07/08 09:22
+     */
+    void deleteByIds(List<String> resourceRecordUserRelateIdList);
+
+    /**
+     * 获取资源共享-用户-私密分享详情
+     *
+     * @author honorfire
+     * @date  2025/07/08 09:22
+     */
+    ResourceRecordUserRelate detail(ResourceRecordUserRelateIdParam resourceRecordUserRelateIdParam);
+
+    /**
+     * 获取资源共享-用户-私密分享详情
+     *
+     * @author honorfire
+     * @date  2025/07/08 09:22
+     **/
+    ResourceRecordUserRelate queryEntity(String id);
+
+}

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

@@ -0,0 +1,138 @@
+/*
+ * 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.apache.commons.lang3.StringUtils;
+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.CourseAuditRecord;
+import vip.xiaonuo.disk.domain.CourseInfo;
+import vip.xiaonuo.disk.domain.ResourceRecordUserRelate;
+import vip.xiaonuo.disk.mapper.ResourceRecordUserRelateMapper;
+import vip.xiaonuo.disk.param.ResourceRecordUserRelateAddParam;
+import vip.xiaonuo.disk.param.ResourceRecordUserRelateEditParam;
+import vip.xiaonuo.disk.param.ResourceRecordUserRelateIdParam;
+import vip.xiaonuo.disk.param.ResourceRecordUserRelatePageParam;
+import vip.xiaonuo.disk.service.ResourceRecordUserRelateService;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 资源共享-用户-私密分享Service接口实现类
+ *
+ * @author honorfire
+ * @date  2025/07/08 09:22
+ **/
+@Service
+public class ResourceRecordUserRelateServiceImpl extends ServiceImpl<ResourceRecordUserRelateMapper, ResourceRecordUserRelate> implements ResourceRecordUserRelateService {
+
+
+    @Override
+    public Page<ResourceRecordUserRelate> page(ResourceRecordUserRelatePageParam resourceRecordUserRelatePageParam) {
+        QueryWrapper<ResourceRecordUserRelate> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isAllNotEmpty(resourceRecordUserRelatePageParam.getSortField(), resourceRecordUserRelatePageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(resourceRecordUserRelatePageParam.getSortOrder());
+            queryWrapper.orderBy(true, resourceRecordUserRelatePageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(resourceRecordUserRelatePageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(ResourceRecordUserRelate::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    /**
+     *  资源共享-用户-私密分享-全量列表
+     */
+    @Override
+    public List<ResourceRecordUserRelate> allList(Map param)
+    {
+        QueryWrapper<ResourceRecordUserRelate> queryWrapper = new QueryWrapper<>();
+        if(param.get("userId") !=null)
+        {
+            queryWrapper.lambda().eq(ResourceRecordUserRelate::getUserId, param.get("userId"));
+        }
+        if(param.get("resourceRecord") !=null)
+        {
+            queryWrapper.lambda().eq(ResourceRecordUserRelate::getResourceRecord, param.get("resourceRecord"));
+        }
+        return this.list(queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(ResourceRecordUserRelateAddParam resourceRecordUserRelateAddParam) {
+        ResourceRecordUserRelate resourceRecordUserRelate = BeanUtil.toBean(resourceRecordUserRelateAddParam, ResourceRecordUserRelate.class);
+        this.save(resourceRecordUserRelate);
+    }
+
+    /**
+     * 资源共享-用户-私密分享-批量添加
+     *
+     * @author honorfire
+     * @date  2025/06/18 14:16
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void addBatch(List<ResourceRecordUserRelate> courseAuditRecordList)
+    {
+        this.saveBatch(courseAuditRecordList);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(ResourceRecordUserRelateEditParam resourceRecordUserRelateEditParam) {
+        ResourceRecordUserRelate resourceRecordUserRelate = this.queryEntity(resourceRecordUserRelateEditParam.getId());
+        BeanUtil.copyProperties(resourceRecordUserRelateEditParam, resourceRecordUserRelate);
+        this.updateById(resourceRecordUserRelate);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<ResourceRecordUserRelateIdParam> resourceRecordUserRelateIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(resourceRecordUserRelateIdParamList, ResourceRecordUserRelateIdParam::getId));
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void deleteByIds(List<String> resourceRecordUserRelateIdListt) {
+        // 执行删除
+        this.removeByIds(resourceRecordUserRelateIdListt);
+    }
+
+    @Override
+    public ResourceRecordUserRelate detail(ResourceRecordUserRelateIdParam resourceRecordUserRelateIdParam) {
+        return this.queryEntity(resourceRecordUserRelateIdParam.getId());
+    }
+
+    @Override
+    public ResourceRecordUserRelate queryEntity(String id) {
+        ResourceRecordUserRelate resourceRecordUserRelate = this.getById(id);
+        if(ObjectUtil.isEmpty(resourceRecordUserRelate)) {
+            throw new CommonException("资源共享-用户-私密分享不存在,id值为:{}", id);
+        }
+        return resourceRecordUserRelate;
+    }
+
+}