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-audit/src/main/java/jnpf/bizcommon/audit/service/support/AuditDiffKey.java | 63 +++++++++++++++++++++++++++++++
1 files changed, 63 insertions(+), 0 deletions(-)
diff --git a/jnpf-biz-common/jnpf-biz-common-audit/src/main/java/jnpf/bizcommon/audit/service/support/AuditDiffKey.java b/jnpf-biz-common/jnpf-biz-common-audit/src/main/java/jnpf/bizcommon/audit/service/support/AuditDiffKey.java
new file mode 100644
index 0000000..2e2051e
--- /dev/null
+++ b/jnpf-biz-common/jnpf-biz-common-audit/src/main/java/jnpf/bizcommon/audit/service/support/AuditDiffKey.java
@@ -0,0 +1,63 @@
+package jnpf.bizcommon.audit.service.support;
+
+import java.util.Locale;
+
+/** 涓哄悓鍚嶅瓧娈甸檮鍔犵墿鐞嗚〃浣滅敤鍩熺殑鍙寔涔呭寲澶嶅悎閿�� */
+public final class AuditDiffKey {
+
+ private static final String SCOPED_PREFIX = "@table:";
+
+ private AuditDiffKey() {
+ }
+
+ /**
+ * 闀垮害鍓嶇紑璁╄〃鍚嶅拰瀛楁鍚嶇殑杈圭晫鏃犳涔夛紝鍚屾椂鍙娇鐢� PostgreSQL JSONB 鍙帴鍙楃殑鍙墦鍗板瓧绗︺��
+ */
+ public static String of(String targetTable, String field) {
+ String normalizedField = normalize(field);
+ String normalizedTable = normalize(targetTable);
+ if (normalizedTable == null) {
+ return normalizedField == null ? "" : normalizedField;
+ }
+ String effectiveField = normalizedField == null ? "" : normalizedField;
+ return SCOPED_PREFIX + normalizedTable.length() + ":" + normalizedTable + ":" + effectiveField;
+ }
+
+ public static boolean isScoped(String key) {
+ if (key == null || !key.startsWith(SCOPED_PREFIX)) {
+ return false;
+ }
+ int lengthEnd = key.indexOf(':', SCOPED_PREFIX.length());
+ if (lengthEnd < 0) {
+ return false;
+ }
+ try {
+ int tableLength = Integer.parseInt(key.substring(SCOPED_PREFIX.length(), lengthEnd));
+ long fieldSeparator = (long) lengthEnd + 1L + tableLength;
+ return tableLength >= 0 && fieldSeparator < key.length()
+ && key.charAt((int) fieldSeparator) == ':';
+ } catch (NumberFormatException ignored) {
+ return false;
+ }
+ }
+
+ /** 鍙敤浜庡吋瀹瑰凡鍔犺浇鍒板唴瀛樼殑鏃ч敭锛涜繑鍥炲�间笉浼氬啀鎼哄甫鏃� NUL 鍒嗛殧绗︺�� */
+ public static String normalizeStored(String key) {
+ if (key == null) {
+ return null;
+ }
+ int separator = key.indexOf(Character.MIN_VALUE);
+ if (separator < 0) {
+ return key;
+ }
+ return of(key.substring(0, separator), key.substring(separator + 1));
+ }
+
+ private static String normalize(String value) {
+ if (value == null) {
+ return null;
+ }
+ String normalized = value.trim().toLowerCase(Locale.ROOT);
+ return normalized.isEmpty() ? null : normalized;
+ }
+}
--
Gitblit v1.8.0