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-eln/jnpf-eln-biz/src/main/java/jnpf/elnService/TemplateFillTicketService.java |   95 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 95 insertions(+), 0 deletions(-)

diff --git a/jnpf-eln/jnpf-eln-biz/src/main/java/jnpf/elnService/TemplateFillTicketService.java b/jnpf-eln/jnpf-eln-biz/src/main/java/jnpf/elnService/TemplateFillTicketService.java
new file mode 100644
index 0000000..f0b3ea7
--- /dev/null
+++ b/jnpf-eln/jnpf-eln-biz/src/main/java/jnpf/elnService/TemplateFillTicketService.java
@@ -0,0 +1,95 @@
+package jnpf.elnService;
+
+import jnpf.util.JsonUtil;
+import jnpf.util.TicketUtil;
+import lombok.Getter;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import java.util.Map;
+
+@Service
+public class TemplateFillTicketService {
+
+    private static final String SCOPE = "onlyoffice:eln-template-fill";
+    private static final String BIZ_MODULE = "eln.template";
+    private static final String BIZ_SCENE = "eln.template.fill";
+    private static final String PLUGIN_GUID = "asc.{7F4E8F35-5D66-47F8-A5B4-6AB3FAACF565}";
+
+    private final TicketParser ticketParser;
+
+    public TemplateFillTicketService() {
+        this(TicketUtil::parseTicket);
+    }
+
+    public TemplateFillTicketService(TicketParser ticketParser) {
+        this.ticketParser = ticketParser;
+    }
+
+    public FillTicketContext parse(String ticket) {
+        if (ObjectUtils.isEmpty(ticket)) {
+            throw new InvalidFillTicketException();
+        }
+        Object raw;
+        try {
+            raw = ticketParser.parse(ticket);
+        } catch (RuntimeException e) {
+            throw new InvalidFillTicketException();
+        }
+        if (!(raw instanceof String) || ObjectUtils.isEmpty(raw)) {
+            throw new InvalidFillTicketException();
+        }
+        Map<?, ?> payload;
+        try {
+            payload = JsonUtil.getJsonToBean((String) raw, Map.class);
+        } catch (RuntimeException e) {
+            throw new InvalidFillTicketException();
+        }
+        String scope = value(payload, "scope");
+        String tenantId = value(payload, "tenantId");
+        String userId = value(payload, "userId");
+        String fileId = value(payload, "fileId");
+        String bizDataId = value(payload, "bizDataId");
+        String bizModule = value(payload, "bizModule");
+        String bizScene = value(payload, "bizScene");
+        String pluginGuid = value(payload, "pluginGuid");
+        if (!SCOPE.equals(scope) || !BIZ_MODULE.equals(bizModule) || !BIZ_SCENE.equals(bizScene)
+                || !PLUGIN_GUID.equals(pluginGuid)) {
+            throw new InvalidFillTicketException();
+        }
+        return new FillTicketContext(tenantId, userId, fileId, bizDataId, pluginGuid);
+    }
+
+    private String value(Map<?, ?> payload, String key) {
+        Object value = payload.get(key);
+        if (!(value instanceof String) || ObjectUtils.isEmpty(value)) {
+            throw new InvalidFillTicketException();
+        }
+        return (String) value;
+    }
+
+    public interface TicketParser {
+        Object parse(String ticket);
+    }
+
+    public static class InvalidFillTicketException extends RuntimeException {
+        private static final long serialVersionUID = 1L;
+    }
+
+    @Getter
+    public static class FillTicketContext {
+        private final String tenantId;
+        private final String userId;
+        private final String fileId;
+        private final String bizDataId;
+        private final String pluginGuid;
+
+        FillTicketContext(String tenantId, String userId, String fileId, String bizDataId, String pluginGuid) {
+            this.tenantId = tenantId;
+            this.userId = userId;
+            this.fileId = fileId;
+            this.bizDataId = bizDataId;
+            this.pluginGuid = pluginGuid;
+        }
+    }
+}

--
Gitblit v1.8.0