diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/controller/OcrCheckController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/controller/OcrCheckController.java
index e1f35b555..3d2992248 100644
--- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/controller/OcrCheckController.java
+++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/controller/OcrCheckController.java
@@ -1,19 +1,27 @@
package com.jero.modules.ocr.controller;
+import cn.hutool.core.util.ObjectUtil;
+import com.jero.common.api.vo.Result;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
+import com.jero.modules.ocr.entity.OcrRecordEO;
+import com.jero.modules.ocr.enums.CheckFlagEnum;
import com.jero.modules.ocr.helpers.ConfigManager;
import com.jero.modules.ocr.helpers.DocumentManager;
import com.jero.modules.ocr.helpers.FileUtility;
import com.jero.modules.ocr.helpers.ServiceConverter;
+import com.jero.modules.ocr.service.IOcrRecordEOService;
+import com.jero.modules.ocr.service.WebSocketServer;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@@ -40,6 +48,11 @@ import java.util.Scanner;
@Slf4j
public class OcrCheckController {
+ @Autowired
+ private IOcrRecordEOService ocrRecordService;
+ @Autowired
+ private WebSocketServer webSocketServer;
+
@Value("${OCR.ocrDownPath}")
private String ocrDownPath;
@@ -78,14 +91,37 @@ public class OcrCheckController {
}
}
+ @ApiOperation(value = "验证文档是否被锁定")
+ @GetMapping("/verifyCheckFlag")
+ public Result> verifyCheckFlag(String id) {
+ if(StringUtils.isBlank(id)){
+ return Result.error("参数不能为空");
+ }
+
+ OcrRecordEO ocrRecordEO = ocrRecordService.getById(id);
+ if (CheckFlagEnum.LOCK.getValue().equals(ocrRecordEO.getCheckFlag())) {
+ return Result.error("该文档当前正在被校核,请稍后重试!");
+
+ } else if (CheckFlagEnum.UNLOCK.getValue().equals(ocrRecordEO.getCheckFlag())) {
+ return Result.OK();
+ }
+ // 文档没被校核过
+ return Result.OK();
+ }
+
@ApiOperation(value = "编辑文件")
@RequestMapping("/editorFile")
public ModelAndView index(HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
String fileName = "";
- if (request.getParameterMap().containsKey("fileName")) {
- fileName = request.getParameter("fileName");
- }
+ String id = "";
+ try {
+ if (request.getParameterMap().containsKey("fileName")) {
+ fileName = request.getParameter("fileName");
+ }
+ if (request.getParameterMap().containsKey("id")) {
+ id = request.getParameter("id");
+ }
// String fileExt = null;
// if (request.getParameterMap().containsKey("fileExt")) {
// fileExt = request.getParameter("fileExt");
@@ -111,37 +147,48 @@ public class OcrCheckController {
// file.SetTypeDesktop(desktopMode);
// file.SetFileName(fileName);
- log.info("==========EditorFile==========");
- DocumentManager.Init(request, response);
- //要编辑的文件名
- model.addAttribute("fileName", fileName) ;
- //要编辑的文件类型
- model.addAttribute("fileType", FileUtility.GetFileExtension(fileName).replace(".", "")) ;
- //要编辑的文档类型
- model.addAttribute("documentType",FileUtility.GetFileType(fileName).toString().toLowerCase()) ;
- //要编辑的文档访问url
+ log.info("==========EditorFile==========");
+
+ DocumentManager.Init(request, response);
+ //要编辑的文件名
+ model.addAttribute("fileName", fileName);
+ //要编辑的文件类型
+ model.addAttribute("fileType", FileUtility.GetFileExtension(fileName).replace(".", ""));
+ //要编辑的文档类型
+ model.addAttribute("documentType", FileUtility.GetFileType(fileName).toString().toLowerCase());
+ //要编辑的文档访问url
// model.addAttribute("fileUri",DocumentManager.GetFileUri(fileName, true)) ;
// model.addAttribute("callbackUrl", DocumentManager.GetCallback(fileName)) ;
// model.addAttribute("serverUrl", DocumentManager.GetServerUrl(true)) ;
- model.addAttribute("fileUri", ocrDownPath + "?fileName=" + fileName) ;
- model.addAttribute("callbackUrl", ocrSavePath + "?fileName=" + fileName) ;
- model.addAttribute("serverUrl", serverUrl) ;
- model.addAttribute("fileKey", ServiceConverter.GenerateRevisionId(DocumentManager.CurUserHostAddress(null) + ocrDownPath + "?fileName=" + fileName)) ;
- model.addAttribute("editorMode", DocumentManager.GetEditedExts().contains(FileUtility.GetFileExtension(fileName)) && !"view".equals(request.getAttribute("mode")) ? "edit" : "view") ;
- model.addAttribute("editorUserId",DocumentManager.CurUserHostAddress(null)) ;
- LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
- model.addAttribute("editorUserName", loginUser.getUsername()) ;
+ model.addAttribute("fileUri", ocrDownPath + "?fileName=" + fileName);
+ model.addAttribute("callbackUrl", ocrSavePath + "?id=" + id);
+ model.addAttribute("serverUrl", serverUrl);
+ model.addAttribute("fileKey", ServiceConverter.GenerateRevisionId(DocumentManager.CurUserHostAddress(null) + ocrDownPath + "?fileName=" + fileName));
+ model.addAttribute("editorMode", DocumentManager.GetEditedExts().contains(FileUtility.GetFileExtension(fileName)) && !"view".equals(request.getAttribute("mode")) ? "edit" : "view");
+ model.addAttribute("editorUserId", DocumentManager.CurUserHostAddress(null));
+ LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+ model.addAttribute("editorUserName", loginUser.getUsername());
// model.addAttribute("type", desktopMode ? "desktop" : "embedded");
- model.addAttribute("type", true ? "desktop" : "embedded");
- model.addAttribute("docserviceApiUrl", ConfigManager.GetProperty("files.docservice.url.api"));
- model.addAttribute("docServiceUrlPreloader", ConfigManager.GetProperty("files.docservice.url.preloader")) ;
- model.addAttribute("currentYear", "2022") ;
- model.addAttribute("convertExts", String.join(",", DocumentManager.GetConvertExts())) ;
- model.addAttribute("editedExts", String.join(",", DocumentManager.GetEditedExts())) ;
- model.addAttribute("documentCreated", new SimpleDateFormat("MM/dd/yyyy").format(new Date())) ;
- model.addAttribute("permissionsEdit", Boolean.toString(DocumentManager.GetEditedExts().contains(FileUtility.GetFileExtension(fileName))).toLowerCase()) ;
- return new ModelAndView("editor") ;
+ model.addAttribute("type", true ? "desktop" : "embedded");
+ model.addAttribute("docserviceApiUrl", ConfigManager.GetProperty("files.docservice.url.api"));
+ model.addAttribute("docServiceUrlPreloader", ConfigManager.GetProperty("files.docservice.url.preloader"));
+ model.addAttribute("currentYear", "2022");
+ model.addAttribute("convertExts", String.join(",", DocumentManager.GetConvertExts()));
+ model.addAttribute("editedExts", String.join(",", DocumentManager.GetEditedExts()));
+ model.addAttribute("documentCreated", new SimpleDateFormat("MM/dd/yyyy").format(new Date()));
+ model.addAttribute("permissionsEdit", Boolean.toString(DocumentManager.GetEditedExts().contains(FileUtility.GetFileExtension(fileName))).toLowerCase());
+ return new ModelAndView("editor");
+ } finally {
+ // 校核锁定
+ if (StringUtils.isNotBlank(id)) {
+ OcrRecordEO ocrRecordEO = new OcrRecordEO();
+ ocrRecordEO.setId(id);
+ ocrRecordEO.setCheckFlag(CheckFlagEnum.LOCK.getValue());
+ // 校核锁定
+ ocrRecordService.updateById(ocrRecordEO);
+ }
+ }
}
/**
@@ -164,17 +211,25 @@ public class OcrCheckController {
@ApiOperation(value = "保存文件")
@RequestMapping("/saveFile")
public void saveFile(HttpServletRequest request, HttpServletResponse response) {
+ String id = "";
String fileName = "";
- if (request.getParameterMap().containsKey("fileName")) {
- fileName = request.getParameter("fileName");
- }
PrintWriter writer = null;
- log.info("==========SaveEditedFile==========");
try {
+ if (request.getParameterMap().containsKey("id")) {
+ id = request.getParameter("id");
+ OcrRecordEO ocrRecordEO = ocrRecordService.getById(id);
+ if(ObjectUtil.isNotEmpty(ocrRecordEO)){
+ fileName = ocrRecordEO.getDocRealName();
+ }
+ }
+
+ log.info("==========SaveEditedFile==========");
+
writer = response.getWriter();
Scanner scanner = new Scanner(request.getInputStream()).useDelimiter("\\A");
String body = scanner.hasNext() ? scanner.next() : "";
JSONObject jsonObj = (JSONObject) new JSONParser().parse(body);
+ log.info("返回结果:" + jsonObj.toString());
log.info("status:" + jsonObj.get("status"));
/*
0 - no document with the key identifier could be found,
@@ -185,7 +240,16 @@ public class OcrCheckController {
6 - document is being edited, but the current document state is saved,
7 - error has occurred while force saving the document.
* */
- if ((long) jsonObj.get("status") == 2) {
+ if ((long) jsonObj.get("status") == 4) {
+ // status=4 没有编辑内容,直接关闭编辑窗口
+ // 校核解锁
+ if(StringUtils.isNotBlank(id)){
+ OcrRecordEO ocrRecordEO = new OcrRecordEO();
+ ocrRecordEO.setId(id);
+ ocrRecordEO.setCheckFlag(CheckFlagEnum.UNLOCK.getValue());
+ ocrRecordService.updateById(ocrRecordEO);
+ }
+ } else if ((long) jsonObj.get("status") == 2) {
/*
* 当我们关闭编辑窗口后,十秒钟左右onlyoffice会将它存储的我们的编辑后的文件,,此时status = 2,通过request发给我们,我们需要做的就是接收到文件然后回写该文件。
* */
@@ -213,17 +277,40 @@ public class OcrCheckController {
out.flush();
}
connection.disconnect();
+ // 校核解锁
+ if(StringUtils.isNotBlank(id)){
+ OcrRecordEO ocrRecordEO = new OcrRecordEO();
+ ocrRecordEO.setId(id);
+ ocrRecordEO.setCheckFlag(CheckFlagEnum.UNLOCK.getValue());
+ // 校核解锁
+ ocrRecordService.updateById(ocrRecordEO);
+ }
}
} catch (IOException e) {
// TODO Auto-generated catch block
- e.printStackTrace();
+ log.error(e.getMessage());
+ // 校核解锁
+ if(StringUtils.isNotBlank(id)){
+ OcrRecordEO ocrRecordEO = new OcrRecordEO();
+ ocrRecordEO.setId(id);
+ ocrRecordEO.setCheckFlag(CheckFlagEnum.UNLOCK.getValue());
+ ocrRecordService.updateById(ocrRecordEO);
+ }
} catch (ParseException e) {
// TODO Auto-generated catch block
- e.printStackTrace();
+ log.error(e.getMessage());
+ // 校核解锁
+ if(StringUtils.isNotBlank(id)){
+ OcrRecordEO ocrRecordEO = new OcrRecordEO();
+ ocrRecordEO.setId(id);
+ ocrRecordEO.setCheckFlag(CheckFlagEnum.UNLOCK.getValue());
+ ocrRecordService.updateById(ocrRecordEO);
+ }
}
/*
* status = 1,我们给onlyoffice的服务返回{"error":"0"}的信息,这样onlyoffice会认为回调接口是没问题的,这样就可以在线编辑文档了,否则的话会弹出窗口说明
* */
writer.write("{\"error\":0}");
+
}
}
diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/entity/OcrRecordEO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/entity/OcrRecordEO.java
index 89449b4c4..64be420bc 100644
--- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/entity/OcrRecordEO.java
+++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/entity/OcrRecordEO.java
@@ -129,6 +129,10 @@ public class OcrRecordEO implements Serializable {
/**文档库关联文件id*/
@ApiModelProperty(value = "文档库关联文件id")
private String connectId;
+
+ /**校核锁定标识*/
+ @ApiModelProperty(value = "校核锁定标识")
+ private String checkFlag;
@TableField(exist = false)
private String docRealFile;
diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/enums/CheckFlagEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/enums/CheckFlagEnum.java
new file mode 100644
index 000000000..7b1156a8d
--- /dev/null
+++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/enums/CheckFlagEnum.java
@@ -0,0 +1,35 @@
+package com.jero.modules.ocr.enums;
+
+/**
+ * @Author: liyawei
+ * @Description:
+ * @Date: Created in 11:20 2022/4/14
+ */
+public enum CheckFlagEnum {
+ LOCK("锁定","1"),
+ UNLOCK("解锁","0");
+
+ String name;
+ String value;
+
+ CheckFlagEnum(String name, String value) {
+ this.name = name;
+ this.value = value;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+}
diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/mapper/xml/OcrRecordEOMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/mapper/xml/OcrRecordEOMapper.xml
index 6c646df99..f874c878d 100644
--- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/mapper/xml/OcrRecordEOMapper.xml
+++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/mapper/xml/OcrRecordEOMapper.xml
@@ -22,5 +22,6 @@
+
\ No newline at end of file