Ver código fonte

add file version

zero 7 meses atrás
pai
commit
575c1c5703

+ 9 - 1
pom.xml

@@ -24,7 +24,11 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+            <version>5.3.15</version>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
@@ -86,6 +90,10 @@
             <artifactId>aliyun-sdk-oss</artifactId>
             <version>3.10.2</version>
         </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

+ 0 - 11
src/main/java/com/example/fms/common/model/dto/FileVersionCallbackHistoryDTO.java

@@ -1,11 +0,0 @@
-package com.example.fms.common.model.dto;
-
-import lombok.Data;
-
-@Data
-public class FileVersionCallbackHistoryDTO {
-
-    private String changes;
-
-    private String serverVersion;
-}

+ 1 - 1
src/main/java/com/example/fms/common/model/dto/RestoreFileVersionDTO.java

@@ -5,7 +5,7 @@ import lombok.Data;
 @Data
 public class RestoreFileVersionDTO {
 
-    private String originalFile;
+    private String guid;
 
     private Integer previousVersion;
 

+ 1 - 1
src/main/java/com/example/fms/common/model/vo/QueryFileVersionHistoryVO.java

@@ -9,5 +9,5 @@ public class QueryFileVersionHistoryVO {
 
     private Integer currentVersion;
 
-    private List<FileVersionInfoVO> fileVersionInfoVOS;
+    private List<FileVersionInfoVO> history;
 }

+ 14 - 2
src/main/java/com/example/fms/common/utils/FileUtils.java

@@ -3,12 +3,19 @@ package com.example.fms.common.utils;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.IdUtil;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.example.fms.common.model.dto.SystemFileDTO;
 import com.example.fms.common.model.dto.UploadFileDTO;
+import okhttp3.*;
+import okhttp3.Response;
+import org.apache.commons.compress.utils.IOUtils;
 import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.disk.DiskFileItem;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.system.ApplicationHome;
+import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
@@ -16,6 +23,12 @@ import org.springframework.web.multipart.commons.CommonsMultipartFile;
 import java.io.*;
 import java.net.URL;
 import java.nio.file.Files;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+
+import static cn.hutool.core.io.FileUtil.getMimeType;
 
 @Service
 public class FileUtils {
@@ -257,10 +270,9 @@ public class FileUtils {
         } catch (IOException e) {
             e.printStackTrace();
         }
-        return (MultipartFile) new CommonsMultipartFile(item);
+        return new CommonsMultipartFile(item);
     }
 
-
     public UploadFileDTO uploadToLocal(String url, String type) throws Exception {
         MultipartFile file = FileUtils.urlToMultipartFile(url, type);
         UploadFileDTO fileDTO = fileUtils.uploadFile(file);

+ 3 - 7
src/main/java/com/example/fms/controller/FileVersionController.java

@@ -16,7 +16,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.Map;
 
 @Tag(name = "文件版本模块")
@@ -31,13 +30,10 @@ public class FileVersionController {
 
     @PostMapping("/callback")
     @Operation(summary = "onlyoffice回调函数(文件保存)")
-    public Map<String,Integer> callback(@RequestBody Map<String, Object> params, @RequestParam String guid,
-                                          @RequestParam String fileName, @RequestParam String user,
-                                          @RequestParam Integer previousVersion) throws IOException {
+    public String callback(@RequestBody Map<String, Object> params, String guid,
+                           String fileName, String user, String previousVersion) throws Exception {
         Integer code = fileVersionService.callback(params, guid, fileName, user, previousVersion);
-        Map<String, Integer> map = new HashMap<>();
-        map.put("error", code);
-        return map;
+        return "{\"error\":" + code + "}";
     }
 
     @PostMapping("/restoreVersion")

+ 57 - 32
src/main/java/com/example/fms/service/FileVersionService.java

@@ -5,10 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.example.fms.common.model.dto.FileVersionCallbackHistoryDTO;
-import com.example.fms.common.model.dto.ForceSaveDTO;
-import com.example.fms.common.model.dto.QueryFileVersionDTO;
-import com.example.fms.common.model.dto.RestoreFileVersionDTO;
+import com.example.fms.common.model.dto.*;
 import com.example.fms.common.model.vo.FileVersionInfoVO;
 import com.example.fms.common.model.vo.ForceSaveVO;
 import com.example.fms.common.model.vo.QueryFileVersionHistoryVO;
@@ -25,6 +22,7 @@ import com.example.fms.service.permissions.MessageService;
 import com.example.fms.service.permissions.PermissionService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.compress.utils.IOUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -34,8 +32,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.File;
-import java.io.IOException;
+import java.io.*;
 import java.util.*;
 
 @RequiredArgsConstructor
@@ -70,16 +67,24 @@ public class FileVersionService {
      * @throws IOException
      */
     public Integer callback(Map<String, Object> params, String guid, String fileName,
-                            String user, Integer previousVersion) throws IOException {
+                            String user, String previousVersion) throws Exception {
         boolean flag = true;
         if (!CollectionUtils.isEmpty(params)) {
             int status = Integer.parseInt(params.get("status").toString());
-            String url = params.get("url").toString();
-            String changesUrl = params.get("changesurl").toString();
+            if (status != 2 && status != 6) {
+                return 0;
+            }
+            String url = "";
+            if (ObjectUtils.isNotEmpty(params.get("url"))) {
+                url = params.get("url").toString();
+            }
+            String changesUrl = "";
+            if (ObjectUtils.isNotEmpty(params.get("changesurl"))) {
+                changesUrl = params.get("changesurl").toString();
+            }
             if (status == 6 && StringUtils.isNotEmpty(url)) {
-                File file = FileUtils.urlToFile(url);
-                MultipartFile multipartFile = FileUtils.fileToMultipartFile(file);
-                String replaceFile = fileMangerService.replaceFile(multipartFile, guid, 1);
+                MultipartFile multipartFile = FileUtils.urlToMultipartFile(url, fileName);
+                String replaceFile = fileMangerService.replaceFile(multipartFile, guid, 6);
                 if (StringUtils.isEmpty(replaceFile)) {
                     flag = false;
                 }
@@ -90,9 +95,8 @@ public class FileVersionService {
             }
             if (status == 2) {
                 if (StringUtils.isNotEmpty(url)) {
-                    File file = FileUtils.urlToFile(url);
-                    MultipartFile multipartFile = FileUtils.fileToMultipartFile(file);
-                    List<String> list = fileMangerService.uploadFile(Arrays.asList(multipartFile), 1);
+                    MultipartFile multipartFile = FileUtils.urlToMultipartFile(url, fileName);
+                    List<String> list = fileMangerService.uploadFile(Collections.singletonList(multipartFile), 6);
                     if (!CollectionUtils.isEmpty(list)) {
                         url = list.get(0);
                     } else {
@@ -100,15 +104,23 @@ public class FileVersionService {
                     }
                 }
                 if (StringUtils.isNotEmpty(changesUrl)) {
-                    File file1 = FileUtils.urlToFile(changesUrl);
-                    MultipartFile multipartFile1 = FileUtils.fileToMultipartFile(file1);
-                    List<String> list1 = fileMangerService.uploadFile(Arrays.asList(multipartFile1), 1);
+                    MultipartFile multipartFile1 = FileUtils.urlToMultipartFile(changesUrl, fileName);
+                    List<String> list1 = fileMangerService.uploadFile(Collections.singletonList(multipartFile1), 6);
                     if (!CollectionUtils.isEmpty(list1)) {
                         changesUrl = list1.get(0);
                     } else {
                         changesUrl = "";
                     }
                 }
+                if (StringUtils.equals(fileName, "undefined")) {
+                    fileName = "";
+                }
+                if (StringUtils.equals(user, "undefined")) {
+                    user = "";
+                }
+                if (StringUtils.equals(previousVersion, "undefined")) {
+                    previousVersion = "";
+                }
                 this.addFileVersion(params, guid, fileName, user, previousVersion, url, changesUrl);
             }
         }
@@ -120,17 +132,25 @@ public class FileVersionService {
     }
 
     public void addFileVersion(Map<String, Object> params, String guid, String fileName,
-                               String user, Integer previousVersion, String url,
+                               String user, String previousVersion, String url,
                                String changesUrl) throws IOException {
-        String fileType = params.get("filetype").toString();
-        String key = RandomUtil.generateInvitationCode();
+        String fileType = "";
+        if (ObjectUtils.isNotEmpty(params.get("filetype"))) {
+            fileType = params.get("filetype").toString();
+        }
         String changes = "";
         String serverVersion = "";
-        String history = params.get("history").toString();
+        String history = "";
+        if (ObjectUtils.isNotEmpty(params.get("history"))) {
+            history = params.get("history").toString();
+        }
         if (StringUtils.isNotEmpty(history)) {
-            FileVersionCallbackHistoryDTO historyDTO = JSONObject.parseObject(history, FileVersionCallbackHistoryDTO.class);
-            changes = historyDTO.getChanges();
-            serverVersion = historyDTO.getServerVersion();
+            String strip = StringUtils.strip(history, "{}");
+            int i = strip.indexOf(",");
+            String s1 = strip.substring(0, i);
+            serverVersion = s1.trim().substring(s1.indexOf("=") + 1);
+            String s2 = strip.substring(i + 1);
+            changes = s2.trim().substring(s2.indexOf("=") + 1);
         }
         int version = 1;
         String originalFile = guid;
@@ -142,26 +162,29 @@ public class FileVersionService {
             FileVersion fileVersion1 = new FileVersion();
             fileVersion1.setFileName(fileName);
             fileVersion1.setFileType(fileType);
-            fileVersion1.setFileKey(key);
-            fileVersion1.setUrl(url);
+            fileVersion1.setFileKey(RandomUtil.generateInvitationCode());
+            fileVersion1.setUrl(guid);
             fileVersion1.setVersion(version);
             fileVersion1.setOriginalFile(guid);
             fileVersion1.setUser(user);
             fileVersion1.insert();
+            previousVersion = "1";
         }
         version += 1;
         //添加新版本数据
         FileVersion version1 = new FileVersion();
         version1.setFileName(fileName);
         version1.setFileType(fileType);
-        version1.setFileKey(key);
+        version1.setFileKey(RandomUtil.generateInvitationCode());
         version1.setUrl(url);
         version1.setChangesUrl(changesUrl);
         version1.setVersion(version);
         version1.setOriginalFile(originalFile);
         version1.setChanges(changes);
         version1.setServerVersion(serverVersion);
-        version1.setPreviousVersion(previousVersion);
+        if (StringUtils.isNotEmpty(previousVersion)) {
+            version1.setPreviousVersion(Integer.valueOf(previousVersion));
+        }
         version1.setUser(user);
         version1.insert();
 
@@ -180,7 +203,9 @@ public class FileVersionService {
             operateRecord.setUserName(personnel.getPersonnelName());
         }
         operateRecord.setCurrentVersion(version);
-        operateRecord.setPreviousVersion(previousVersion);
+        if (StringUtils.isNotEmpty(previousVersion)) {
+            operateRecord.setPreviousVersion(Integer.valueOf(previousVersion));
+        }
         operateRecord.setOperate("2");
         operateRecord.setOriginalFile(originalFile);
         operateRecord.insert();
@@ -193,7 +218,7 @@ public class FileVersionService {
     public void restoreFileVersion(RestoreFileVersionDTO vo) {
         Integer currentVersion = vo.getRestoreVersion();
         Integer previousVersion = vo.getPreviousVersion();
-        String guid = vo.getOriginalFile();
+        String guid = vo.getGuid();
         String userId = vo.getUserId();
         String userName = vo.getUserName();
         //新增操作记录
@@ -291,7 +316,7 @@ public class FileVersionService {
                 infoVO.setKey(i.getFileKey());
                 fileVersionInfoVOS.add(infoVO);
             });
-            historyVO.setFileVersionInfoVOS(fileVersionInfoVOS);
+            historyVO.setHistory(fileVersionInfoVOS);
         }
         FileOperateRecord operateRecord = fileVersionMapper.queryFileOperateRecord(vo.getGuid());
         if (ObjectUtils.isNotEmpty(operateRecord)) {

+ 33 - 6
src/test/java/com/example/fms/FileVersionTest.java

@@ -1,18 +1,23 @@
 package com.example.fms;
 
-import com.example.fms.common.model.dto.ForceSaveDTO;
-import com.example.fms.common.model.dto.QueryFileVersionDTO;
-import com.example.fms.common.model.dto.RestoreFileVersionDTO;
+import com.alibaba.fastjson.JSONObject;
+import com.example.fms.common.model.dto.*;
 import com.example.fms.common.model.vo.FileVersionInfoVO;
 import com.example.fms.common.model.vo.ForceSaveVO;
 import com.example.fms.common.model.vo.QueryFileVersionHistoryVO;
 import com.example.fms.service.FileVersionService;
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import org.apache.commons.lang3.StringUtils;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @SpringBootTest
@@ -22,7 +27,7 @@ public class FileVersionTest {
     private FileVersionService fileVersionService;
 
     @Test
-    public void callback() throws IOException {
+    public void callback() throws Exception {
         Map<String, Object> params = new HashMap<>();
         params.put("status", 2);
         params.put("url", "");
@@ -30,7 +35,7 @@ public class FileVersionTest {
         String guid = "1";
         String fileName = "1";
         String user = "1";
-        Integer previousVersion = 1;
+        String previousVersion = "1";
         Integer num = fileVersionService.callback(params, guid, fileName, user, previousVersion);
         System.out.println(num);
     }
@@ -40,7 +45,7 @@ public class FileVersionTest {
         RestoreFileVersionDTO vo = new RestoreFileVersionDTO();
         vo.setRestoreVersion(2);
         vo.setPreviousVersion(1);
-        vo.setOriginalFile("1");
+        vo.setGuid("1");
         fileVersionService.restoreFileVersion(vo);
         System.out.println("finished");
     }
@@ -69,4 +74,26 @@ public class FileVersionTest {
         System.out.println(historyVO);
     }
 
+    @Test
+    public void test() {
+        String input = "{serverVersion=8.1.3, changes=[{created=2025-02-19 08:52:16, user={id=1, name=管理员}}]}";
+        final String strip = StringUtils.strip(input, "{}");
+        System.out.println(strip);
+        final int i = strip.indexOf(",");
+        final String s1 = strip.substring(0, i);
+        System.out.println(s1);
+        final String sub = s1.substring(0, s1.indexOf("="));
+        System.out.println(sub);
+        final String ss1 = s1.substring(s1.indexOf("=") + 1);
+        System.out.println(ss1);
+        final String s2 = strip.substring(i + 1);
+        System.out.println(s2);
+        final String trim = s2.trim();
+        System.out.println(trim);
+        final String sub1 = trim.substring(0, s2.indexOf("="));
+        System.out.println(sub1);
+        final String ss2 = s2.substring(s2.indexOf("=") + 1);
+        System.out.println(ss2);
+    }
+
 }