新版onlyoffice

This commit is contained in:
wangqiong
2024-03-14 17:59:11 +08:00
parent 7c9681b236
commit 1ae3b82282
78 changed files with 475 additions and 3079 deletions
@@ -6,9 +6,12 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.oo.demo.entity.OnFile;
import com.oo.demo.entity.Result;
import com.oo.demo.entity.SysUser;
import com.oo.demo.entity.WebsocketResult;
import com.oo.demo.service.FileService;
import com.oo.demo.service.OnFileService;
import com.oo.demo.service.TempUser;
import com.oo.demo.service.Oprator;
import com.oo.demo.service.WebSocketServer;
import com.oo.onlyoffice.api.OnlyServiceAPI;
import com.oo.onlyoffice.dto.edit.FileUser;
import com.oo.onlyoffice.tools.FileUtil;
@@ -16,6 +19,7 @@ import com.oo.onlyoffice.tools.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
@@ -31,7 +35,6 @@ import java.util.*;
/**
* @BelongsProject: leaf-onlyoffice
* @BelongsPackage: com.ideayp.leaf.onlyoffice.controller
* @Author: TongHui
* @CreateTime: 2022-11-08 18:11
* @Description: TODO
* @Version: 1.0
@@ -78,7 +81,7 @@ public class OnlyOfficeController {
@PostMapping("/files/upload")
@ResponseBody
public Object upload(@RequestParam("file") MultipartFile[] file) {
public Object upload(@RequestParam("file") MultipartFile[] file, @RequestParam(name = "caseId") String caseId) {
List<OnFile> result = new ArrayList<>();
int i = 0;
for (MultipartFile multipartFile : file) {
@@ -101,6 +104,7 @@ public class OnlyOfficeController {
onFile.setFileSize(commonsMultipartFile.getSize());
onFile.setFileType(suffix);
onFile.setFilePath(filepath + "/" + fileId + "." + suffix);
onFile.setCaseId(caseId);
onFileService.save(onFile);
result.add(onFile);
i++;
@@ -112,13 +116,16 @@ public class OnlyOfficeController {
return Result.error("文件上传失败");
}
@Autowired
StringRedisTemplate stringRedisTemplate;
final static String REDISUSERPREFIX = "user_key:";
/**
* 打开编辑
*/
@RequestMapping("/onlyOfficeConfig/{mode}/{id}")
@RequestMapping("/onlyOfficeConfig/{mode}/{id}/{userId}")
@ResponseBody
public Object openDocument(@PathVariable(required = false) String mode, @PathVariable(required = false) String id, Model model) {//@RequestParam("url") String url,
public Object openDocument(@PathVariable(required = false) String mode, @PathVariable(required = false) String id, @PathVariable(required = true) Integer userId, Model model) {//@RequestParam("url") String url,
log.info("only office file:" + id);
OnFile onFile = onFileService.getById(id);
if (onFile == null) {
@@ -128,9 +135,20 @@ public class OnlyOfficeController {
* 必要步骤
*/
FileUser user = new FileUser();
user.setId(TempUser.getUserId());
user.setName(TempUser.getUserName());
SecurityUtils.setUserSession(user);
//获取缓存Redis中的用户信息
String userString = stringRedisTemplate.opsForValue().get(REDISUSERPREFIX + userId);
if (userString != null && !"".equals(userString)) {
JSONObject userObj = JSON.parseObject(userString);
String userId1 = userObj.getString("userId");
String userName1 = userObj.getString("userName");
String nickName1 = userObj.getString("nickName");
user.setId(userId1);
user.setName(userName1);
user.setNickname(nickName1);
SecurityUtils.setUserSession(user);
} else {
return Result.error("当前用户不存在");
}
/**
* 必要步骤
*/
@@ -197,7 +215,7 @@ public class OnlyOfficeController {
*/
@RequestMapping("/onlyOffice/save")
@ResponseBody
public Object saveFile(HttpServletRequest request, HttpServletResponse response) {
public void saveFile(HttpServletRequest request, HttpServletResponse response) {
PrintWriter writer = null;
try {
writer = response.getWriter();
@@ -206,24 +224,19 @@ public class OnlyOfficeController {
String body = scanner.hasNext() ? scanner.next() : "";
JSONObject jsonObject = JSONObject.parseObject(body);
log.info("{}", jsonObject);
Object result = fileService.documentSave(jsonObject);
WebsocketResult result = fileService.documentSave(jsonObject);
/*
* status = 1,我们给onlyOffice的服务返回{"error":"0"}的信息。
* 这样onlyOffice会认为回调接口是没问题的,这样就可以在线编辑文档了,否则的话会弹出窗口说明
*/
if (Objects.nonNull(writer)) {
writer.write("{\"error\":0}");
}
return result;
WebSocketServer.sendInfo(JSON.toJSONString(result.getOnFile()),result.getUserId());
} catch (Exception e) {
e.printStackTrace();
writer.write("{\"error\":-1}");
return Result.error("保存出错");
}
/*
* status = 1,我们给onlyOffice的服务返回{"error":"0"}的信息。
* 这样onlyOffice会认为回调接口是没问题的,这样就可以在线编辑文档了,否则的话会弹出窗口说明
*/
// if (Objects.nonNull(writer)) {
// writer.write("{\"error\":0}");
// }
}
@PostMapping("/save/{id}")
@@ -238,11 +251,11 @@ public class OnlyOfficeController {
*/
try {
FileUser user = new FileUser();
user.setId(TempUser.getUserId());
user.setName(TempUser.getUserName());
user.setId(Oprator.getUserId());
user.setName(Oprator.getUserName());
SecurityUtils.setUserSession(user);
String key = onlyServiceAPI.getKey(onFile.getFileId());
String msg = onlyServiceAPI.save(key, TempUser.getUserId());
String msg = onlyServiceAPI.save(key, Oprator.getUserId());
SecurityUtils.removeUserSession();
OnFile fileInfo = new OnFile();
fileInfo.setFileId(id);