| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- package com.oo.demo.service;
-
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.oo.demo.dao.OnFileMapper;
- import com.oo.demo.entity.OnFile;
- import com.oo.demo.entity.WebsocketResult;
- import com.oo.onlyoffice.api.OnlyServiceAPI;
- import com.oo.onlyoffice.dto.edit.FileUser;
- import com.oo.onlyoffice.tools.SecurityUtils;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
-
- import java.util.List;
- import java.util.Map;
-
- /**
- * @BelongsProject: onlyoffice-demo
- * @BelongsPackage: com.oo.demo.service
- * @CreateTime: 2023-08-02 09:57
- * @Description: TODO
- * @Version: 1.0
- */
- @Slf4j
- @Service
- public class FileService {
-
- @Autowired
- private OnlyServiceAPI onlyServiceAPI;
- @Autowired
- private DemoService demoService;
- @Autowired
- private OnFileService onFileService;
-
- /**
- * 文档服务器 保存文件回调
- * Defines the status of the document. Can have the following values:
- * 1 - document is being edited,
- * 2 - document is ready for saving,
- * 3 - document saving error has occurred,
- * 4 - document is closed with no changes,
- * 6 - document is being edited, but the current document state is saved,
- * 7 - error has occurred while force saving the document.
- *
- * @param jsonObject
- */
- @Transactional(rollbackFor = Exception.class)
- public WebsocketResult documentSave(JSONObject jsonObject) {
- WebsocketResult result = new WebsocketResult();
- String key = "";
- String fileId = jsonObject.getString("fileId");
- try {
- int status = jsonObject.getIntValue("status");
- log.info("status[{}]", status);
- if (6 == status) {
- log.info("开始保存文件");
- log.info("dayin:" + JSON.toJSONString(jsonObject));
- JSONArray jsonArray = jsonObject.getJSONObject("history").getJSONArray("changes");
- log.info("历史版本:" + JSON.toJSONString(jsonArray));
- JSONObject object = jsonArray.getJSONObject(0);
- String userId = object.getJSONObject("user").getString("id");
- FileUser fileUser = new FileUser();
- fileUser.setId(userId);
- SecurityUtils.setUserSession(fileUser);
- log.info("fileuser:" + JSON.toJSONString(fileUser));
- key = jsonObject.getString("key");
- log.info("key:" + JSON.toJSONString(key));
- //文件id
- Boolean isexistid = false;
- if (fileId != null && !"".equals(fileId)) {
- isexistid = true;
- }
- if (!isexistid) {
- fileId = onlyServiceAPI.getFileId(key);
- }
- log.info("fileId:" + JSON.toJSONString(fileId));
- if (fileId != null && !"".equals(fileId)) {
- //查询之前FileId对应的文件信息
- OnFile onfile = onFileService.getFileById(fileId);
- jsonObject.put("caseId", onfile.getCaseId());
- }
- //判断是否是最后一人进行保存
- int users = onlyServiceAPI.getUserNum(key);
- // if (users > 1) {
- // return null;
- // }
- //历史版本最大个数 获取当前文件的历史版本数量
- Integer histNum = onlyServiceAPI.getHistNum();
- log.info("历史版本最大个数" + histNum);
- /**
- * 如果有需要保存历史记录 可以进行相关操作
- */
- if (null != histNum) {
-
- }
- //处理文件的保存
- OnFile file = onlyServiceAPI.handlerStatus(jsonObject);
- //查询相同案件最新版本的文件信息
- if (fileId != null && !"".equals(fileId)) {
- file = getNewFileInofoByFileId(fileId);
- } else {
- file = getNewFileInofoByCaseId(file.getCaseId());
- }
- result = WebsocketResult.builder().onFile(file).userId(SecurityUtils.getUserSession().getId()).build();
- log.info("处理文件的保存:" + JSON.toJSONString(jsonObject));
- log.info("保存文件结束");
- SecurityUtils.removeUserSession();
- return result;
- } else if (0 == status || 2 == status || 4 == status) {
- onlyServiceAPI.close(jsonObject);
- log.info("文件关闭====",status);
- } else if (3 == status || 7 == status) {
- //保存文档错误
- onlyServiceAPI.close(jsonObject);
- log.info("保存文档错误====",status);
- } else if (1 == status) {
- log.info("文件正在编辑====",status);
- //文件服务的回调 获取key判断当前文档有多少人在这使用
- List<Map> actions = JSONObject.parseArray(jsonObject.getString("actions"), Map.class);
- if ((Integer) actions.get(0).get("type") == 1) {
- log.info("当前用户有[{}]", jsonObject.getString("users"));
- List<String> users = JSONObject.parseArray(jsonObject.getString("users"), String.class);
- onlyServiceAPI.iskey(jsonObject.getString("key"), users.size());
- }
- if ((Integer) actions.get(0).get("type") == 0) {
- onlyServiceAPI.iskey(jsonObject.getString("key"), null);
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- throw new RuntimeException(e);
- }
-
- return result;
- }
-
- @Autowired
- OnFileMapper onFileMapper;
-
- /**
- * 查询相同案件最新版本的文件信息
- *
- * @param caseId
- * @return
- */
- private OnFile getNewFileInofoByCaseId(String caseId) {
- OnFile file = new OnFile();
- QueryWrapper<OnFile> fileQueryWrapper = new QueryWrapper<>();
- fileQueryWrapper.eq("case_id", caseId);
- fileQueryWrapper.orderByDesc("created_time");
- List<OnFile> onFiles = onFileMapper.selectList(fileQueryWrapper);
- if (onFiles != null && onFiles.size() > 0) {
- file = onFiles.get(0);
- }
- log.info("caseId:" + caseId + ":fileinfo:" + JSON.toJSONString(file));
- return file;
- }
-
- /**
- * 根据文件的fileid查询文件信息
- */
- private OnFile getNewFileInofoByFileId(String fileId) {
- OnFile file = onFileMapper.selectById(fileId);
- if (file != null) {
- log.info("caseId:" + file.getCaseId() + ":fileinfo:" + JSON.toJSONString(file));
- } else {
- log.info("根据文件id未查询到文件信息");
- }
- return file;
- }
- }
|