Explorar el Código

增加文件夹访问码相关功能实现

wukai hace 2 años
padre
commit
a7e8090b42

+ 13 - 1
doc-biz/src/main/java/com/doc/biz/controller/DocDirController.java

@@ -2,12 +2,14 @@ package com.doc.biz.controller;
 
 import com.doc.biz.domain.*;
 import com.doc.biz.service.*;
+import com.doc.biz.vo.MatchVO;
 import com.doc.biz.vo.TreeVO;
 import com.doc.common.annotation.Log;
 import com.doc.common.constant.Constants;
 import com.doc.common.core.controller.BaseController;
 import com.doc.common.core.domain.AjaxResult;
 import com.doc.common.enums.BusinessType;
+import com.doc.common.enums.EventLevel;
 import com.doc.common.utils.SecurityUtils;
 import com.doc.common.utils.poi.ExcelUtil;
 import io.swagger.annotations.*;
@@ -224,7 +226,7 @@ public class DocDirController extends BaseController {
     @PostMapping
     public AjaxResult add(@RequestBody DocDir docDir) {
         int i = docDirService.insertDocDir(docDir);
-        //如果是部门目录,则需要插入成员
+        //如果是组织目录,则需要插入成员
         String dept = "2";
         if (dept.equals(docDir.getDirType())) {
             docDir.getUsers().forEach(u -> {
@@ -236,6 +238,16 @@ public class DocDirController extends BaseController {
     }
 
     /**
+     * 新建目录
+     */
+    @ApiOperation("验证访问码")
+    @Log(title = "文档目录管理", businessType = BusinessType.OTHER, eventLevel = EventLevel.HIGH)
+    @PostMapping("/matches")
+    public AjaxResult matches(@RequestBody MatchVO vo) {
+        return success(docDirService.matchesCode(vo.getDirId(), vo.getCode()));
+    }
+
+    /**
      * 重命名
      */
     @ApiOperation("重命名")

+ 3 - 1
doc-biz/src/main/java/com/doc/biz/domain/DocDir.java

@@ -60,7 +60,8 @@ public class DocDir extends TreeEntity {
     private String isEncrypt;
     @ApiModelProperty("加密级别")
     private String encryptLevel;
-
+    @ApiModelProperty("访问码")
+    private String accessCode;
     /**
      * 目录路径
      */
@@ -68,6 +69,7 @@ public class DocDir extends TreeEntity {
     private String dirPath;
 
     @ApiModelProperty("是否收藏 Y/N")
+    @TableField(exist = false)
     private String isFavorite;
 
     @ApiModelProperty("目录人员")

+ 9 - 0
doc-biz/src/main/java/com/doc/biz/service/IDocDirService.java

@@ -22,6 +22,15 @@ public interface IDocDirService {
     public DocDir selectDocDirByDirId(Long dirId);
 
     /**
+     * 验证访问码
+     *
+     * @param dirId      文档目录管理主键
+     * @param accessCode SM3加密之后的访问码
+     * @return 文档目录管理
+     */
+    boolean matchesCode(Long dirId, String accessCode);
+
+    /**
      * 查询文档目录管理列表
      *
      * @param docDir 文档目录管理

+ 7 - 0
doc-biz/src/main/java/com/doc/biz/service/IDocInfoService.java

@@ -66,4 +66,11 @@ public interface IDocInfoService {
      * @return 对象
      */
     DocInfo selectDocInfoByFileId(String fileId);
+
+    /**
+     * only office更新文件内容
+     *
+     * @param info 文件信息
+     */
+    void updateDocInfoByOnlyOffice(DocInfo info);
 }

+ 21 - 0
doc-biz/src/main/java/com/doc/biz/service/impl/DocDirServiceImpl.java

@@ -9,6 +9,7 @@ import com.doc.biz.service.IDocFavoriteService;
 import com.doc.biz.service.IDocSpaceService;
 import com.doc.common.utils.DateUtils;
 import com.doc.common.utils.SecurityUtils;
+import com.doc.common.utils.StringUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -44,6 +45,19 @@ public class DocDirServiceImpl implements IDocDirService {
     }
 
     /**
+     * 验证访问码
+     *
+     * @param dirId      文档目录管理主键
+     * @param accessCode SM3加密之后的访问码
+     * @return 文档目录管理
+     */
+    @Override
+    public boolean matchesCode(Long dirId, String accessCode) {
+        DocDir dir = docDirMapper.selectById(dirId);
+        return SecurityUtils.matchesPassword(accessCode, dir.getAccessCode());
+    }
+
+    /**
      * 查询文档目录管理列表
      *
      * @param docDir 文档目录管理
@@ -90,6 +104,13 @@ public class DocDirServiceImpl implements IDocDirService {
             dirName = DateUtils.dateTimeNow() + "-" + dirName;
             docDir.setDirName(dirName);
         }
+
+        //如果设置了访问码,则需要加密存储
+        if (StringUtils.isNotEmpty(docDir.getAccessCode())) {
+            String pass = SecurityUtils.encryptPassword(docDir.getAccessCode());
+            docDir.setAccessCode(pass);
+        }
+
         return docDirMapper.insertDocDir(docDir);
     }
 

+ 19 - 0
doc-biz/src/main/java/com/doc/biz/service/impl/DocInfoServiceImpl.java

@@ -56,6 +56,25 @@ public class DocInfoServiceImpl implements IDocInfoService {
     }
 
     /**
+     * only office更新文件内容
+     *
+     * @param info 文件信息
+     */
+    @Override
+    public void updateDocInfoByOnlyOffice(DocInfo info) {
+
+        info.setUpdateTime(DateUtils.getNowDate());
+
+        docInfoMapper.updateDocInfo(info);
+
+        if (StringUtils.isNotEmpty(info.getFileId())) {
+            elasticSearchService.save(info);
+        }
+        //改变空间容量
+        spaceService.updateUsedCap(info.getSpaceId());
+    }
+
+    /**
      * 查询文件基本信息表列表
      *
      * @param docInfo 文件基本信息表

+ 21 - 0
doc-biz/src/main/java/com/doc/biz/vo/MatchVO.java

@@ -0,0 +1,21 @@
+package com.doc.biz.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 文件基本信息表对象 doc_info
+ *
+ * @author wukai
+ * @date 2023-08-21
+ */
+@ApiModel(value = "MatchVO", description = "访问码验证")
+@Data
+public class MatchVO {
+    @ApiModelProperty("目录ID")
+    private Long dirId;
+
+    @ApiModelProperty("访问码(需要SM3加密)")
+    private String code;
+}

+ 2 - 0
doc-biz/src/main/resources/mapper/biz/DocDirMapper.xml

@@ -82,6 +82,7 @@
             <if test="dirPath != null">DIR_PATH,</if>
             <if test="isEncrypt != null">IS_ENCRYPT,</if>
             <if test="encryptLevel != null">ENCRYPT_LEVEL,</if>
+            <if test="accessCode != null">ACCESS_CODE,</if>
             <if test="createBy != null">CREATE_BY,</if>
             <if test="createTime != null">CREATE_TIME,</if>
             <if test="updateBy != null">UPDATE_BY,</if>
@@ -97,6 +98,7 @@
             <if test="dirPath != null">#{dirPath},</if>
             <if test="isEncrypt != null">#{isEncrypt},</if>
             <if test="encryptLevel != null">#{encryptLevel},</if>
+            <if test="accessCode != null">#{accessCode},</if>
             <if test="createBy != null">#{createBy},</if>
             <if test="createTime != null">#{createTime},</if>
             <if test="updateBy != null">#{updateBy},</if>

+ 7 - 0
doc-common/src/main/java/com/doc/common/core/domain/TreeEntity.java

@@ -1,5 +1,7 @@
 package com.doc.common.core.domain;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -13,18 +15,23 @@ public class TreeEntity extends BaseEntity
     private static final long serialVersionUID = 1L;
 
     /** 父菜单名称 */
+    @TableField(exist = false)
     private String parentName;
 
     /** 父菜单ID */
+    @TableField(exist = false)
     private Long parentId;
 
     /** 显示顺序 */
+    @TableField(exist = false)
     private Integer orderNum;
 
     /** 祖级列表 */
+    @TableField(exist = false)
     private String ancestors;
 
     /** 子部门 */
+    @TableField(exist = false)
     private List<?> children = new ArrayList<>();
 
     public String getParentName()