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-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsCursorCodec.java |   45 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 45 insertions(+), 0 deletions(-)

diff --git a/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsCursorCodec.java b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsCursorCodec.java
new file mode 100644
index 0000000..3b14922
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsCursorCodec.java
@@ -0,0 +1,45 @@
+package jnpf.dmsPermission;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.nio.charset.StandardCharsets;
+import java.sql.Timestamp;
+import java.time.Instant;
+import java.util.Base64;
+import java.util.Date;
+import java.util.UUID;
+
+@Component
+public class DmsCursorCodec {
+
+    public String encode(Date time, UUID id) {
+        String raw = time.toInstant().toString() + "|" + id;
+        return Base64.getUrlEncoder().withoutPadding().encodeToString(raw.getBytes(StandardCharsets.UTF_8));
+    }
+
+    public Cursor decode(String value) {
+        if (value == null || value.trim().isEmpty()) {
+            return new Cursor(null, null);
+        }
+        try {
+            String raw = new String(Base64.getUrlDecoder().decode(value), StandardCharsets.UTF_8);
+            int separator = raw.indexOf('|');
+            if (separator < 1) {
+                throw new IllegalArgumentException("missing separator");
+            }
+            return new Cursor(Timestamp.from(Instant.parse(raw.substring(0, separator))),
+                    UUID.fromString(raw.substring(separator + 1)));
+        } catch (RuntimeException ex) {
+            throw DmsPermissionException.of(DmsPermissionError.INVALID_REQUEST, "鍒嗛〉 cursor 鏃犳晥");
+        }
+    }
+
+    @Data
+    @AllArgsConstructor
+    public static class Cursor {
+        private Date time;
+        private UUID id;
+    }
+}

--
Gitblit v1.8.0