|
@@ -0,0 +1,193 @@
|
|
|
+package com.example.fms.service;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.example.fms.common.model.dto.FileVersionCallbackHistoryDTO;
|
|
|
+import com.example.fms.common.model.dto.QueryFileVersionDTO;
|
|
|
+import com.example.fms.common.model.vo.FileVersionInfoVO;
|
|
|
+import com.example.fms.common.model.vo.WebSocketMessageVO;
|
|
|
+import com.example.fms.common.utils.FileUtils;
|
|
|
+import com.example.fms.common.utils.RandomUtil;
|
|
|
+import com.example.fms.domain.FileOperateRecord;
|
|
|
+import com.example.fms.domain.FileVersion;
|
|
|
+import com.example.fms.domain.Personnel;
|
|
|
+import com.example.fms.mapper.FileOperateRecordMapper;
|
|
|
+import com.example.fms.mapper.FileVersionMapper;
|
|
|
+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.lang3.ObjectUtils;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+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.util.*;
|
|
|
+
|
|
|
+@RequiredArgsConstructor
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+public class FileVersionService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MessageService messageService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private PermissionService permissionService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private FileMangerService fileMangerService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private FileVersionMapper fileVersionMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private FileOperateRecordMapper fileOperateRecordMapper;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * onlyoffice回调函数(文件保存)
|
|
|
+ * @param params
|
|
|
+ * @param guid
|
|
|
+ * @param fileName
|
|
|
+ * @param user
|
|
|
+ * @param previousVersion
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public Integer callback(Map<String, Object> params, String guid, String fileName,
|
|
|
+ String user, Integer previousVersion) throws IOException {
|
|
|
+ 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 == 6 && StringUtils.isNotEmpty(url)) {
|
|
|
+ File file = FileUtils.urlToFile(url);
|
|
|
+ MultipartFile multipartFile = FileUtils.fileToMultipartFile(file);
|
|
|
+ String replaceFile = fileMangerService.replaceFile(multipartFile, guid, 1);
|
|
|
+ if (StringUtils.isEmpty(replaceFile)) {
|
|
|
+ flag = false;
|
|
|
+ }
|
|
|
+ WebSocketMessageVO messageVO = new WebSocketMessageVO();
|
|
|
+ messageVO.setMessage("文件已保存");
|
|
|
+ messageVO.setCode(702);
|
|
|
+ messageService.sendMessage(messageVO);
|
|
|
+ }
|
|
|
+ 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);
|
|
|
+ if (!CollectionUtils.isEmpty(list)) {
|
|
|
+ url = list.get(0);
|
|
|
+ } else {
|
|
|
+ url = "";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(changesUrl)) {
|
|
|
+ File file1 = FileUtils.urlToFile(changesUrl);
|
|
|
+ MultipartFile multipartFile1 = FileUtils.fileToMultipartFile(file1);
|
|
|
+ List<String> list1 = fileMangerService.uploadFile(Arrays.asList(multipartFile1), 1);
|
|
|
+ if (!CollectionUtils.isEmpty(list1)) {
|
|
|
+ changesUrl = list1.get(0);
|
|
|
+ } else {
|
|
|
+ changesUrl = "";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.addFileVersion(params,guid,fileName,user,previousVersion,url,changesUrl);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (flag) {
|
|
|
+ return 0;
|
|
|
+ } else {
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void addFileVersion(Map<String, Object> params, String guid, String fileName,
|
|
|
+ String user, Integer previousVersion, String url,
|
|
|
+ String changesUrl) throws IOException {
|
|
|
+ String fileType = params.get("filetype").toString();
|
|
|
+ String key = RandomUtil.generateInvitationCode();
|
|
|
+ String changes = "";
|
|
|
+ String serverVersion = "";
|
|
|
+ String history = params.get("history").toString();
|
|
|
+ if (StringUtils.isNotEmpty(history)) {
|
|
|
+ FileVersionCallbackHistoryDTO historyDTO = JSONObject.parseObject(history, FileVersionCallbackHistoryDTO.class);
|
|
|
+ changes = historyDTO.getChanges();
|
|
|
+ serverVersion = historyDTO.getServerVersion();
|
|
|
+ }
|
|
|
+ int version = 1;
|
|
|
+ String originalFile = guid;
|
|
|
+ FileVersion fileVersion = fileVersionMapper.queryFileVersionByGuid(originalFile);
|
|
|
+ if (ObjectUtils.isNotEmpty(fileVersion)) {
|
|
|
+ version = fileVersion.getVersion();
|
|
|
+ originalFile = fileVersion.getOriginalFile();
|
|
|
+ } else {
|
|
|
+ FileVersion fileVersion1 = new FileVersion();
|
|
|
+ fileVersion1.setFileName(fileName);
|
|
|
+ fileVersion1.setFileType(fileType);
|
|
|
+ fileVersion1.setFileKey(key);
|
|
|
+ fileVersion1.setUrl(url);
|
|
|
+ fileVersion1.setVersion(version);
|
|
|
+ fileVersion1.setOriginalFile(guid);
|
|
|
+ fileVersion1.setUser(user);
|
|
|
+ fileVersion1.insert();
|
|
|
+ }
|
|
|
+ version += 1;
|
|
|
+ //添加新版本数据
|
|
|
+ FileVersion version1 = new FileVersion();
|
|
|
+ version1.setFileName(fileName);
|
|
|
+ version1.setFileType(fileType);
|
|
|
+ version1.setFileKey(key);
|
|
|
+ version1.setUrl(url);
|
|
|
+ version1.setChangesUrl(changesUrl);
|
|
|
+ version1.setVersion(version);
|
|
|
+ version1.setOriginalFile(originalFile);
|
|
|
+ version1.setChanges(changes);
|
|
|
+ version1.setServerVersion(serverVersion);
|
|
|
+ version1.setPreviousVersion(previousVersion);
|
|
|
+ version1.setUser(user);
|
|
|
+ version1.insert();
|
|
|
+
|
|
|
+ //查询编辑人
|
|
|
+ List<Personnel> personnels = new ArrayList<>();
|
|
|
+ if (StringUtils.isNotEmpty(user)) {
|
|
|
+ String res = permissionService.getPersonnelByIdsFromPCS(Collections.singletonList(user));
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(res);
|
|
|
+ personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
|
|
|
+ }
|
|
|
+ //添加当前操作版本
|
|
|
+ FileOperateRecord operateRecord = new FileOperateRecord();
|
|
|
+ operateRecord.setUserId(user);
|
|
|
+ Personnel personnel = personnels.stream().filter(i -> i.getId().toString().equals(user)).findFirst().orElse(null);
|
|
|
+ if (ObjectUtils.isNotEmpty(personnel)) {
|
|
|
+ operateRecord.setUserName(personnel.getPersonnelName());
|
|
|
+ }
|
|
|
+ operateRecord.setCurrentVersion(version);
|
|
|
+ operateRecord.setPreviousVersion(previousVersion);
|
|
|
+ operateRecord.setOperate("2");
|
|
|
+ operateRecord.setOriginalFile(originalFile);
|
|
|
+ operateRecord.insert();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前显示版本数据
|
|
|
+ * @param vo
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public FileVersionInfoVO getCurrentVersionData(QueryFileVersionDTO vo) {
|
|
|
+ FileVersion fileVersion = fileVersionMapper.queryCurrentFileVersionInfo(vo.getGuid());
|
|
|
+ FileVersionInfoVO infoVO = new FileVersionInfoVO();
|
|
|
+ if (ObjectUtils.isNotEmpty(fileVersion)) {
|
|
|
+ BeanUtils.copyProperties(fileVersion, infoVO);
|
|
|
+ infoVO.setFileVersionId(fileVersion.getId());
|
|
|
+ }
|
|
|
+ return infoVO;
|
|
|
+ }
|
|
|
+}
|