From 2fd8b654d1eb9f1eb5e1a5537df845752f24726a Mon Sep 17 00:00:00 2001
From: linwei <872216696@qq.com>
Date: Fri, 10 Jul 2026 13:26:19 +0800
Subject: [PATCH] feat(resource): 集成OnlyOffice文档编辑功能

---
 drone-ops/drone-resource/src/main/java/org/sxkj/resource/controller/AttachController.java |   86 +++++++++++++++++++++++++-----------------
 1 files changed, 51 insertions(+), 35 deletions(-)

diff --git a/drone-ops/drone-resource/src/main/java/org/sxkj/resource/controller/AttachController.java b/drone-ops/drone-resource/src/main/java/org/sxkj/resource/controller/AttachController.java
index 7f7d5b0..7fefbaa 100644
--- a/drone-ops/drone-resource/src/main/java/org/sxkj/resource/controller/AttachController.java
+++ b/drone-ops/drone-resource/src/main/java/org/sxkj/resource/controller/AttachController.java
@@ -9,7 +9,7 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
@@ -21,6 +21,8 @@
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.DateTimeUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 import org.sxkj.common.model.ResponseResult;
@@ -57,12 +59,21 @@
 @Slf4j
 @NonDS
 @RestController
-@AllArgsConstructor
+@RequiredArgsConstructor
 @RequestMapping("/attach")
 @Api(value = "附件表接口", tags = "附件")
 public class AttachController extends BladeController {
 
 	private final IAttachService attachService;
+	private final OnlyofficeJwt onlyofficeJwt;
+
+	/** OnlyOffice应用服务基础URL,供Document Server访问代理下载接口 */
+	@Value("${onlyoffice.base-url:}")
+	private String onlyofficeBaseUrl;
+
+	/** OnlyOffice回调地址 */
+	@Value("${onlyoffice.callback-url:}")
+	private String onlyofficeCallbackUrl;
 
 	/** 远程文件URL缓存,key为attachId,value为远程文件URL */
 	private static final ConcurrentHashMap<Long, String> REMOTE_URL_CACHE = new ConcurrentHashMap<>();
@@ -435,8 +446,7 @@
 		Map<String, Object> editorConfig = new HashMap<>();
 		editorConfig.put("customization", customization);
 		editorConfig.put("mode", "edit");
-		// editorConfig.put("callbackUrl", "http://192.168.1.33:8310/office/callback");
-		editorConfig.put("callbackUrl", "http://172.18.10.4:8010/office/callback");
+		editorConfig.put("callbackUrl", onlyofficeCallbackUrl);
 		editorConfig.put("lang", "zh-CN");
 		editorConfig.put("user", userConfig);
 
@@ -467,7 +477,14 @@
 
 		// 10. 构建代理下载URL,替代直接使用远程URL
 		// Document Server通过代理下载接口获取文件,避免无法直接访问远程URL的问题
-		String proxyDownloadUrl = buildProxyDownloadUrl(request, attachId);
+		String documentUrl = buildProxyDownloadUrl(request, attachId);
+		// if (onlyofficeBaseUrl != null && !onlyofficeBaseUrl.isEmpty()) {
+		// 	// 使用代理下载URL,Document Server通过本服务的代理接口获取文件
+		// 	documentUrl = onlyofficeBaseUrl + "/attach/onlyoffice-download?attachId=" + attachId;
+		// } else {
+		// 	// 未配置baseUrl时回退到直接使用远程URL
+		// 	documentUrl = fileUrl != null ? fileUrl : "";
+		// }
 
 		// 11. 生成文档唯一标识
 		String key = generateRevisionId(fileName);
@@ -475,9 +492,8 @@
 		// 12. 构建文档配置,使用代理下载URL替代远程URL
 		Map<String, Object> document = new HashMap<>();
 		document.put("title", fileName != null ? fileName : "未命名文档");
-		document.put("url", proxyDownloadUrl); // 使用代理下载URL
+		document.put("url", documentUrl);
 		document.put("fileType", fileType);
-		document.put("attachId", attach.getId());
 		document.put("key", attach.getMd5());
 
 		// 13. 构建最终返回结果
@@ -487,8 +503,8 @@
 		result.put("editorConfig", editorConfig);
 
 		// 14. 生成 JWT token
-		Map<String, Object> result1 = OnlyofficeJwt.getToken(result);
-		log.info("ONLYOFFICE配置生成完成,attachId: {}, 代理下载URL: {}", attachId, proxyDownloadUrl);
+		Map<String, Object> result1 = onlyofficeJwt.getToken(result);
+		log.info("ONLYOFFICE配置生成完成,attachId: {}, documentUrl: {}", attachId, documentUrl);
 		return R.data(result1);
 	}
 	public static final Integer MAX_KEY_LENGTH = 20;
@@ -502,6 +518,32 @@
 		String key = formatKey.replace("[^0-9-.a-zA-Z_=]", "_");
 
 		return key.substring(0, Math.min(key.length(), MAX_KEY_LENGTH));  // the resulting key length is 20 or less
+	}
+
+	/**
+	 * 构建当前服务器的代理下载URL
+	 *
+	 * @param request  HTTP请求对象,用于获取服务器地址
+	 * @param attachId 附件ID
+	 * @return 代理下载URL地址
+	 */
+	private String buildProxyDownloadUrl(HttpServletRequest request, Long attachId) {
+		// 1. 获取请求的协议、主机名和端口
+		String scheme = request.getScheme();
+		String serverName = request.getServerName();
+		int serverPort = request.getServerPort();
+
+		// 2. 构建服务器基础URL(省略默认端口)
+		StringBuilder baseUrl = new StringBuilder();
+		baseUrl.append(scheme).append("://").append(serverName);
+		if (("http".equals(scheme) && serverPort != 80) || ("https".equals(scheme) && serverPort != 443)) {
+			baseUrl.append(":").append(serverPort);
+		}
+
+		// baseUrl.append("http:192.168.1.33:80/blade-resource");
+
+		// 3. 拼接代理下载URL
+		return baseUrl.toString() + "/attach/onlyoffice-download?attachId=" + attachId;
 	}
 
 	/**
@@ -586,32 +628,6 @@
 				connection.disconnect();
 			}
 		}
-	}
-
-	/**
-	 * 构建当前服务器的代理下载URL
-	 *
-	 * @param request  HTTP请求对象,用于获取服务器地址
-	 * @param attachId 附件ID
-	 * @return 代理下载URL地址
-	 */
-	private String buildProxyDownloadUrl(HttpServletRequest request, Long attachId) {
-		// 1. 获取请求的协议、主机名和端口
-		String scheme = request.getScheme();
-		String serverName = request.getServerName();
-		int serverPort = request.getServerPort();
-
-		// 2. 构建服务器基础URL(省略默认端口)
-		StringBuilder baseUrl = new StringBuilder();
-		baseUrl.append(scheme).append("://").append(serverName);
-		if (("http".equals(scheme) && serverPort != 80) || ("https".equals(scheme) && serverPort != 443)) {
-			baseUrl.append(":").append(serverPort);
-		}
-
-		// baseUrl.append("http:192.168.1.33:80/blade-resource");
-
-		// 3. 拼接代理下载URL
-		return baseUrl.toString() + "/attach/onlyoffice-download?attachId=" + attachId;
 	}
 
 }

--
Gitblit v1.9.3