|
@@ -1,12 +1,20 @@
|
|
|
package com.example.fms.service;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
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.vo.FileVersionInfoVO;
|
|
|
+import com.example.fms.common.model.vo.ForceSaveVO;
|
|
|
+import com.example.fms.common.model.vo.QueryFileVersionHistoryVO;
|
|
|
import com.example.fms.common.model.vo.WebSocketMessageVO;
|
|
|
import com.example.fms.common.utils.FileUtils;
|
|
|
+import com.example.fms.common.utils.JWTUtils;
|
|
|
import com.example.fms.common.utils.RandomUtil;
|
|
|
import com.example.fms.domain.FileOperateRecord;
|
|
|
import com.example.fms.domain.FileVersion;
|
|
@@ -21,6 +29,7 @@ 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.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
@@ -51,6 +60,7 @@ public class FileVersionService {
|
|
|
|
|
|
/**
|
|
|
* onlyoffice回调函数(文件保存)
|
|
|
+ *
|
|
|
* @param params
|
|
|
* @param guid
|
|
|
* @param fileName
|
|
@@ -74,7 +84,7 @@ public class FileVersionService {
|
|
|
flag = false;
|
|
|
}
|
|
|
WebSocketMessageVO messageVO = new WebSocketMessageVO();
|
|
|
- messageVO.setMessage("文件已保存");
|
|
|
+ messageVO.setMessage("版本文件已保存");
|
|
|
messageVO.setCode(702);
|
|
|
messageService.sendMessage(messageVO);
|
|
|
}
|
|
@@ -99,7 +109,7 @@ public class FileVersionService {
|
|
|
changesUrl = "";
|
|
|
}
|
|
|
}
|
|
|
- this.addFileVersion(params,guid,fileName,user,previousVersion,url,changesUrl);
|
|
|
+ this.addFileVersion(params, guid, fileName, user, previousVersion, url, changesUrl);
|
|
|
}
|
|
|
}
|
|
|
if (flag) {
|
|
@@ -177,7 +187,77 @@ public class FileVersionService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * onlyoffice版本恢复
|
|
|
+ * @param vo
|
|
|
+ */
|
|
|
+ public void restoreFileVersion(RestoreFileVersionDTO vo) {
|
|
|
+ Integer currentVersion = vo.getRestoreVersion();
|
|
|
+ Integer previousVersion = vo.getPreviousVersion();
|
|
|
+ String guid = vo.getOriginalFile();
|
|
|
+ String userId = vo.getUserId();
|
|
|
+ String userName = vo.getUserName();
|
|
|
+ //新增操作记录
|
|
|
+ FileOperateRecord record = new FileOperateRecord();
|
|
|
+ record.setPreviousVersion(previousVersion);
|
|
|
+ record.setCurrentVersion(currentVersion);
|
|
|
+ record.setOriginalFile(guid);
|
|
|
+ record.setUserId(userId);
|
|
|
+ record.setUserName(userName);
|
|
|
+ record.setOperate("1");
|
|
|
+ record.insert();
|
|
|
+ //更新版本
|
|
|
+ String key = RandomUtil.generateInvitationCode();
|
|
|
+ LambdaUpdateWrapper<FileVersion> wrapper = new UpdateWrapper<FileVersion>()
|
|
|
+ .lambda()
|
|
|
+ .set(FileVersion::getFileKey, key)
|
|
|
+ .eq(FileVersion::getVersion, currentVersion)
|
|
|
+ .eq(FileVersion::getOriginalFile, guid);
|
|
|
+ fileVersionMapper.update(null, wrapper);
|
|
|
+ //发送websocket
|
|
|
+ WebSocketMessageVO messageVO = new WebSocketMessageVO();
|
|
|
+ messageVO.setMessage("版本文件已恢复");
|
|
|
+ messageVO.setCode(703);
|
|
|
+ messageService.sendMessage(messageVO);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * onlyoffice强制保存
|
|
|
+ * @param vo
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public ForceSaveVO forceSave(ForceSaveDTO vo) throws IOException {
|
|
|
+ Map<Integer, String> map = new HashMap<>();
|
|
|
+ map.put(0,"没有错误");
|
|
|
+ map.put(1,"文档密钥丢失或找不到具有该密钥的文档");
|
|
|
+ map.put(2,"回调地址不正确");
|
|
|
+ map.put(3,"内部服务器错误");
|
|
|
+ map.put(4,"没有对文档进行任何更改");
|
|
|
+ map.put(5,"key不正确");
|
|
|
+ map.put(6,"令牌无效");
|
|
|
+ String officeInfo = permissionService.getOnlyOfficeInfo(vo);
|
|
|
+ int result = 1;
|
|
|
+ ForceSaveVO saveVO = new ForceSaveVO();
|
|
|
+ if (StringUtils.isNotEmpty(officeInfo)) {
|
|
|
+ JSONObject object = JSON.parseObject(officeInfo);
|
|
|
+ int error = Integer.parseInt(object.get("error").toString());
|
|
|
+ saveVO.setMessage(map.get(error));
|
|
|
+ if (error == 4) {
|
|
|
+ result = 1;
|
|
|
+ } else {
|
|
|
+ if (error == 0){
|
|
|
+ result = 2;
|
|
|
+ } else {
|
|
|
+ return saveVO;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ saveVO.setNum(result);
|
|
|
+ return saveVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 获取当前显示版本数据
|
|
|
+ *
|
|
|
* @param vo
|
|
|
* @return
|
|
|
*/
|
|
@@ -190,4 +270,31 @@ public class FileVersionService {
|
|
|
}
|
|
|
return infoVO;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * onlyoffice查询文件版本历史
|
|
|
+ * @param vo
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public QueryFileVersionHistoryVO queryFileVersionHistory(QueryFileVersionDTO vo) {
|
|
|
+ QueryFileVersionHistoryVO historyVO = new QueryFileVersionHistoryVO();
|
|
|
+ List<FileVersion> versions = fileVersionMapper.selectList(new LambdaQueryWrapper<FileVersion>()
|
|
|
+ .eq(FileVersion::getOriginalFile, vo.getGuid())
|
|
|
+ .orderByDesc(FileVersion::getVersion));
|
|
|
+ if (!CollectionUtils.isEmpty(versions)) {
|
|
|
+ List<FileVersionInfoVO> fileVersionInfoVOS = new ArrayList<>();
|
|
|
+ versions.forEach(i -> {
|
|
|
+ FileVersionInfoVO infoVO = new FileVersionInfoVO();
|
|
|
+ BeanUtils.copyProperties(i, infoVO);
|
|
|
+ infoVO.setFileVersionId(i.getId());
|
|
|
+ fileVersionInfoVOS.add(infoVO);
|
|
|
+ });
|
|
|
+ historyVO.setFileVersionInfoVOS(fileVersionInfoVOS);
|
|
|
+ }
|
|
|
+ FileOperateRecord operateRecord = fileVersionMapper.queryFileOperateRecord(vo.getGuid());
|
|
|
+ if (ObjectUtils.isNotEmpty(operateRecord)) {
|
|
|
+ historyVO.setCurrentVersion(operateRecord.getCurrentVersion());
|
|
|
+ }
|
|
|
+ return historyVO;
|
|
|
+ }
|
|
|
}
|