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