From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 jnpf-biz-common/jnpf-biz-common-onlyoffice/src/main/java/jnpf/bizcommon/onlyoffice/controller/OnlyOfficeController.java |   91 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 91 insertions(+), 0 deletions(-)

diff --git a/jnpf-biz-common/jnpf-biz-common-onlyoffice/src/main/java/jnpf/bizcommon/onlyoffice/controller/OnlyOfficeController.java b/jnpf-biz-common/jnpf-biz-common-onlyoffice/src/main/java/jnpf/bizcommon/onlyoffice/controller/OnlyOfficeController.java
new file mode 100644
index 0000000..0c48983
--- /dev/null
+++ b/jnpf-biz-common/jnpf-biz-common-onlyoffice/src/main/java/jnpf/bizcommon/onlyoffice/controller/OnlyOfficeController.java
@@ -0,0 +1,91 @@
+package jnpf.bizcommon.onlyoffice.controller;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jnpf.base.ActionResult;
+import jnpf.bizcommon.onlyoffice.entity.OnlyOfficeCallbackParam;
+import jnpf.bizcommon.onlyoffice.entity.OnlyOfficeConfigParam;
+import jnpf.bizcommon.onlyoffice.service.OnlyOfficeService;
+import jnpf.exception.DataException;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpHeaders;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * OnlyOffice 鏂囨。缂栬緫銆傜粡缃戝叧 /api/biz/onlyoffice/**锛圫tripPrefix=2锛夎惤鍒版湰绫汇��
+ *
+ * <p>鈿狅笍 鏈被涓嬬殑绔偣閴存潈褰㈡�佷笉缁熶竴锛屾柊澧炵鐐瑰墠鍏堟兂娓呮灞炰簬鍝竴绫伙細
+ * <ul>
+ *   <li>{@code /config} 鈥斺�� 闇�鐧诲綍鎬併�傚畠浼氫笅鍙� securityKey锛�**涓嶅彲鏀捐繘缃戝叧鐧藉悕鍗�**锛�</li>
+ *   <li>{@code /callback} 鈥斺�� 鍦ㄧ綉鍏崇櫧鍚嶅崟鍐咃紙骞冲彴琛ヤ竵 #9锛夛紝鍖垮悕鍙揪锛�
+ *       瀹夊叏杈圭晫鏄� OnlyOffice 鍥炶皟 JWT 鐨勯獙绛撅紝瑙侀噷绋嬬 2銆�</li>
+ * </ul>
+ */
+@Slf4j
+@Tag(name = "OnlyOffice 鏂囨。缂栬緫", description = "缂栬緫鍣ㄩ厤缃鍙戜笌淇濆瓨鍥炶皟")
+@RestController
+@RequestMapping("/onlyoffice")
+@RequiredArgsConstructor
+public class OnlyOfficeController {
+
+    private final OnlyOfficeService onlyOfficeService;
+
+    /**
+     * 绛惧彂缂栬緫鍣ㄩ厤缃�傚墠绔嬁杩斿洖鍊肩洿鎺ュ杺 {@code new DocsAPI.DocEditor(id, config)}銆�
+     *
+     * <p>鍏ュ弬閲岀殑 mode 鍙槸鏈熸湜鍊硷細鏍煎紡涓嶅彲缂栬緫銆佷粬浜烘鎸侀攣銆佷笂娆′繚瀛樺け璐ヤ笁绉嶆儏鍐典笅锛�
+     * 鍚庣浼氶檷绾т负鍙锛屼互瀹為檯杩斿洖鐨� editorConfig.mode 涓哄噯銆�
+     */
+    @Operation(summary = "绛惧彂缂栬緫鍣ㄩ厤缃�")
+    @GetMapping("/config")
+    public ActionResult<Map<String, Object>> config(OnlyOfficeConfigParam param) {
+        try {
+            return ActionResult.success(onlyOfficeService.buildEditorConfig(param));
+        } catch (DataException e) {
+            log.warn("绛惧彂 OnlyOffice 閰嶇疆澶辫触锛歿}", e.getMessage());
+            return ActionResult.fail(e.getMessage());
+        }
+    }
+
+    @Operation(summary = "鏌ヨ鏂囨。淇濆瓨鐘舵��")
+    @GetMapping("/save-status")
+    public ActionResult<Map<String, Object>> saveStatus(@RequestParam String fileId) {
+        try {
+            return ActionResult.success(onlyOfficeService.getSaveStatus(fileId));
+        } catch (DataException e) {
+            return ActionResult.fail(e.getMessage());
+        }
+    }
+
+    /**
+     * DS 淇濆瓨鍥炶皟銆�**鍖垮悕鍙揪**锛堣矾寰勫湪缃戝叧鐧藉悕鍗曞唴锛屽钩鍙拌ˉ涓� #9锛夛紝
+     * 瀹夊叏杈圭晫鏄� Service 鍐呭鍥炶皟 JWT 鐨勯獙绛俱��
+     *
+     * <p>杩斿洖鍊兼牸寮忔槸 OnlyOffice 瀹氭鐨� {@code {"error":0}}锛屼笉鑳藉 ActionResult銆�
+     * 涓�**鏃犺澶勭悊鎴愬姛涓庡惁閮借繑鍥� 0**鈥斺�旇繑鍥為潪 0 浼氳 DS 璁や负淇濆瓨澶辫触骞舵棤闄愰噸璇曪紝
+     * 鑰屽鏁板け璐ワ紙浼氳瘽涓嶅瓨鍦ㄣ�侀獙绛句笉杩囷級閲嶈瘯澶氬皯娆¢兘涓嶄細鍙樺ソ銆傜湡姝g殑闂闈犳棩蹇楁毚闇层��
+     */
+    @Operation(summary = "DS 淇濆瓨鍥炶皟")
+    @PostMapping("/callback")
+    public Map<String, Object> callback(@RequestBody OnlyOfficeCallbackParam param,
+                                        @RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String authorization) {
+        try {
+            onlyOfficeService.handleCallback(param, authorization);
+        } catch (DataException e) {
+            log.warn("OnlyOffice 鍥炶皟澶勭悊澶辫触锛宬ey={} status={}锛歿}", param.getKey(), param.getStatus(), e.getMessage());
+        } catch (Exception e) {
+            log.error("OnlyOffice 鍥炶皟澶勭悊寮傚父锛宬ey={} status={}", param.getKey(), param.getStatus(), e);
+        }
+        return Collections.singletonMap("error", 0);
+    }
+}

--
Gitblit v1.8.0