Browse Source

最近文件处理,文件下载权限处理

wukai 1 year ago
parent
commit
5cc7441dca

+ 57 - 39
doc-biz/src/main/java/com/doc/biz/controller/ApiController.java

@@ -17,8 +17,10 @@ import org.springframework.web.multipart.MultipartFile;
 import org.yaml.snakeyaml.util.UriEncoder;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.IOException;
+import java.io.OutputStream;
 import java.nio.file.Files;
 import java.util.HashMap;
 import java.util.Objects;
@@ -43,45 +45,61 @@ public class ApiController extends BaseController {
     @Resource
     private ISysConfigService configService;
 
-    /**
-     * 文件下载
-     *
-     * @param fileId fileId
-     * @return
-     */
-    @ApiOperation("文件预览")
-    @GetMapping("/access/{fileId}")
-    public ResponseEntity<Object> access(@PathVariable(name = "fileId") String fileId) {
-        return down(fileId, false);
-    }
-
-    /**
-     * 文件下载
-     *
-     * @param fileId fileId
-     * @return
-     */
-    @ApiOperation("文件下载")
-    @GetMapping("/download/{fileId}")
-    public ResponseEntity<Object> download(@PathVariable(name = "fileId") String fileId) {
-        return down(fileId, true);
-    }
-
-    private ResponseEntity<Object> down(String fileId, boolean down) {
-        DocumentVO vo = mongoService.downloadFile(fileId);
-        if (Objects.nonNull(vo)) {
-            String disposition = down ? "attachment" : "inline";
-            disposition += "; filename=\"" + UriEncoder.encode(vo.getFileName()) + "\"";
-            return ResponseEntity.ok()
-                    .header(HttpHeaders.CONTENT_DISPOSITION, disposition)
-                    .header(HttpHeaders.CONTENT_TYPE, vo.getContentType())
-                    .header(HttpHeaders.CONTENT_LENGTH, vo.getFileSize() + "")
-                    .header("Connection", "close")
-                    .body(vo.getData());
-        } else {
-            return ResponseEntity.status(HttpStatus.NOT_FOUND).body("file does not exist");
-        }
-    }
+//    /**
+//     * 文件下载
+//     *
+//     * @param fileId fileId
+//     * @return
+//     */
+//    @ApiOperation("文件预览")
+//    @GetMapping("/access/{fileId}")
+//    public ResponseEntity<Object> access(@PathVariable(name = "fileId") String fileId) {
+//        return down(fileId, false);
+//    }
+//
+//    /**
+//     * 文件下载
+//     *
+//     * @param fileId fileId
+//     * @return
+//     */
+//    @ApiOperation("文件下载")
+//    @GetMapping("/download/{fileId}")
+//    public ResponseEntity<Object> download(@PathVariable(name = "fileId") String fileId) {
+//        return down(fileId, true);
+//    }
+//
+//    private ResponseEntity<Object> down(String fileId, boolean down) {
+//        DocumentVO vo = mongoService.downloadFile(fileId);
+//        if (Objects.nonNull(vo)) {
+//            String disposition = down ? "attachment" : "inline";
+//            disposition += "; filename=\"" + UriEncoder.encode(vo.getFileName()) + "\"";
+//            return ResponseEntity.ok()
+//                    .header(HttpHeaders.CONTENT_DISPOSITION, disposition)
+//                    .header(HttpHeaders.CONTENT_TYPE, vo.getContentType())
+//                    .header(HttpHeaders.CONTENT_LENGTH, vo.getFileSize() + "")
+//                    .header("Connection", "close")
+//                    .body(vo.getData());
+//        } else {
+//            return ResponseEntity.status(HttpStatus.NOT_FOUND).body("file does not exist");
+//        }
+//    }
+//
+//    @ApiOperation("文件下载")
+//    @GetMapping("/down/{fileId}")
+//    public void download(@PathVariable(name = "fileId") String fileId, HttpServletResponse response) {
+//        DocumentVO vo = mongoService.downloadFile(fileId);
+//        response.setContentType(vo.getContentType());
+//        response.setHeader("Content-Disposition", "attachment; filename=\"" + UriEncoder.encode(vo.getFileName()) + "\"");
+//        response.addHeader("Content-Length", "" + vo.getFileSize());
+//
+//        try (OutputStream stream = response.getOutputStream()) {
+//            stream.write(vo.getData());
+//            stream.flush();
+//        } catch (IOException e) {
+//            throw new RuntimeException(e);
+//        }
+//    }
 
     /**
      * 文字识别

+ 12 - 4
doc-biz/src/main/java/com/doc/biz/controller/DocDirController.java

@@ -1,9 +1,6 @@
 package com.doc.biz.controller;
 
-import com.doc.biz.domain.DocDir;
-import com.doc.biz.domain.DocDirUser;
-import com.doc.biz.domain.DocInfo;
-import com.doc.biz.domain.DocSpace;
+import com.doc.biz.domain.*;
 import com.doc.biz.service.*;
 import com.doc.biz.vo.TreeVO;
 import com.doc.common.annotation.Log;
@@ -41,6 +38,8 @@ public class DocDirController extends BaseController {
     private IDocDirUserService dirUserService;
     @Resource
     private IDocFavoriteService favoriteService;
+    @Resource
+    private IDocRecentService recentService;
 
     /**
      * 获取顶层目录
@@ -172,6 +171,15 @@ public class DocDirController extends BaseController {
     @GetMapping("/list")
     public AjaxResult list(DocDir docDir) {
         List<DocDir> list = docDirService.selectDocDirList(docDir);
+        /**
+         * 插入最近访问记录
+         */
+        DocRecent recent = new DocRecent();
+        recent.setIsFolder("Y");
+        recent.setOwner(SecurityUtils.getUserId());
+        recent.setRelaId(docDir.getParentId());
+        recentService.insertDocRecent(recent);
+
         return success(list);
     }
 

+ 53 - 4
doc-biz/src/main/java/com/doc/biz/controller/DocInfoController.java

@@ -2,6 +2,7 @@ package com.doc.biz.controller;
 
 import com.doc.biz.domain.DocDir;
 import com.doc.biz.domain.DocInfo;
+import com.doc.biz.domain.DocRecent;
 import com.doc.biz.domain.DocSpace;
 import com.doc.biz.service.*;
 import com.doc.biz.vo.DocInfoVO;
@@ -19,16 +20,17 @@ import com.doc.common.utils.poi.ExcelUtil;
 import io.swagger.annotations.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.elasticsearch.NoSuchIndexException;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
+import org.yaml.snakeyaml.util.UriEncoder;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 文件基本信息表Controller
@@ -53,6 +55,8 @@ public class DocInfoController extends BaseController {
     private IEsDocInfoService esDocInfoService;
     @Resource
     private IDocFavoriteService favoriteService;
+    @Resource
+    private IDocRecentService recentService;
 
     /**
      * 文件上传
@@ -347,4 +351,49 @@ public class DocInfoController extends BaseController {
     }
 
 
+    /**
+     * 文件下载
+     */
+    @ApiOperation("文件预览")
+    @GetMapping("/access/{fileId}")
+    public ResponseEntity<Object> access(@PathVariable(name = "fileId") String fileId) {
+        DocInfo docInfo = docInfoService.selectDocInfoByFileId(fileId);
+        /**
+         * 插入最近访问记录
+         */
+        DocRecent recent = new DocRecent();
+        recent.setIsFolder("N");
+        recent.setOwner(SecurityUtils.getUserId());
+        recent.setRelaId(docInfo.getDocId());
+        recentService.insertDocRecent(recent);
+        
+        return down(fileId, false);
+    }
+
+    /**
+     * 文件下载
+     */
+    @ApiOperation("文件下载")
+    @GetMapping("/download/{fileId}")
+    public ResponseEntity<Object> download(@PathVariable(name = "fileId") String fileId) {
+        return down(fileId, true);
+    }
+
+    private ResponseEntity<Object> down(String fileId, boolean down) {
+        DocumentVO vo = mongoService.downloadFile(fileId);
+        if (Objects.nonNull(vo)) {
+            String disposition = down ? "attachment" : "inline";
+            disposition += "; filename=\"" + UriEncoder.encode(vo.getFileName()) + "\"";
+            return ResponseEntity.ok()
+                    .header(HttpHeaders.CONTENT_DISPOSITION, disposition)
+                    .header(HttpHeaders.CONTENT_TYPE, vo.getContentType())
+                    .header(HttpHeaders.CONTENT_LENGTH, vo.getFileSize() + "")
+                    .header("Connection", "close")
+                    .body(vo.getData());
+        } else {
+            return ResponseEntity.status(HttpStatus.NOT_FOUND).body("file does not exist");
+        }
+    }
+
+
 }

+ 8 - 0
doc-biz/src/main/java/com/doc/biz/mapper/DocInfoMapper.java

@@ -59,4 +59,12 @@ public interface DocInfoMapper extends BaseMapper<DocInfo> {
      * @return 结果
      */
     public int deleteDocInfoByDocIds(Long[] docIds);
+
+    /**
+     * 通过fileID查询文件基本信息
+     *
+     * @param fileId mongo文件ID
+     * @return 对象
+     */
+    DocInfo selectDocInfoByFileId(String fileId);
 }

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

@@ -58,4 +58,12 @@ public interface IDocInfoService {
      * @return 结果
      */
     public int deleteDocInfoByDocId(Long docId);
+
+    /**
+     * 通过fileID查询文件基本信息
+     *
+     * @param fileId mongo文件ID
+     * @return 对象
+     */
+    DocInfo selectDocInfoByFileId(String fileId);
 }

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

@@ -81,6 +81,15 @@ public class DocDirServiceImpl implements IDocDirService {
     @Override
     public int insertDocDir(DocDir docDir) {
         docDir.setCreateTime(DateUtils.getNowDate());
+        DocDir query = new DocDir();
+        query.setParentId(docDir.getParentId());
+        query.setSearchValue(docDir.getDirName());
+        List list = selectDocDirList(query);
+        if (list.size() > 0) {
+            String dirName = docDir.getDirName();
+            dirName = DateUtils.dateTimeNow() + "-" + dirName;
+            docDir.setDirName(dirName);
+        }
         return docDirMapper.insertDocDir(docDir);
     }
 

+ 15 - 4
doc-biz/src/main/java/com/doc/biz/service/impl/DocInfoServiceImpl.java

@@ -2,11 +2,9 @@ package com.doc.biz.service.impl;
 
 import com.doc.biz.domain.DocFavorite;
 import com.doc.biz.domain.DocInfo;
+import com.doc.biz.domain.DocRecent;
 import com.doc.biz.mapper.DocInfoMapper;
-import com.doc.biz.service.IDocFavoriteService;
-import com.doc.biz.service.IDocInfoService;
-import com.doc.biz.service.IDocSpaceService;
-import com.doc.biz.service.IElasticSearchService;
+import com.doc.biz.service.*;
 import com.doc.common.utils.DateUtils;
 import com.doc.common.utils.SecurityUtils;
 import com.doc.common.utils.StringUtils;
@@ -33,6 +31,7 @@ public class DocInfoServiceImpl implements IDocInfoService {
     @Resource
     private IDocFavoriteService favoriteService;
 
+
     /**
      * 查询文件基本信息表
      *
@@ -45,6 +44,16 @@ public class DocInfoServiceImpl implements IDocInfoService {
     }
 
     /**
+     * 通过fileID查询文件基本信息
+     *
+     * @param fileId mongo文件ID
+     */
+    @Override
+    public DocInfo selectDocInfoByFileId(String fileId) {
+        return docInfoMapper.selectDocInfoByFileId(fileId);
+    }
+
+    /**
      * 查询文件基本信息表列表
      *
      * @param docInfo 文件基本信息表
@@ -156,4 +165,6 @@ public class DocInfoServiceImpl implements IDocInfoService {
 
         return i;
     }
+
+
 }

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

@@ -46,6 +46,7 @@
             <if test="dirRole != null  and dirRole != ''">and DIR_ROLE = #{dirRole}</if>
             <if test="spaceId != null  and spaceId != ''">and SPACE_ID = #{spaceId}</if>
             <if test="dirName != null  and dirName != ''">and DIR_NAME like concat('%', #{dirName}, '%')</if>
+            <if test="searchValue != null  and searchValue != ''">and DIR_NAME =#{searchValue}</if>
             <if test="parentId != null ">and PARENT_ID = #{parentId}</if>
         </where>
     </select>

+ 4 - 0
doc-biz/src/main/resources/mapper/biz/DocInfoMapper.xml

@@ -51,6 +51,10 @@
         <include refid="selectDocInfoVo"/>
         where DOC_ID = #{docId}
     </select>
+    <select id="selectDocInfoByFileId" parameterType="String" resultMap="DocInfoResult">
+        <include refid="selectDocInfoVo"/>
+        where FILE_ID = #{fileId}
+    </select>
 
     <insert id="insertDocInfo" parameterType="DocInfo" useGeneratedKeys="true" keyProperty="docId">
         insert into doc_info