From 80b6cbfc9c861469146318d0b3dd5f8b8b525b8a Mon Sep 17 00:00:00 2001
From: xiejun <xiejun@vci-tech.com>
Date: 星期五, 01 十一月 2024 15:11:19 +0800
Subject: [PATCH] Revert "集成获取mdm分发通用数据格式接口集成"

---
 Source/BladeX-Tool/blade-starter-mongo/src/main/java/org/springblade/core/mongo/utils/MongoJsonUtils.java |  126 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 126 insertions(+), 0 deletions(-)

diff --git a/Source/BladeX-Tool/blade-starter-mongo/src/main/java/org/springblade/core/mongo/utils/MongoJsonUtils.java b/Source/BladeX-Tool/blade-starter-mongo/src/main/java/org/springblade/core/mongo/utils/MongoJsonUtils.java
new file mode 100644
index 0000000..31acdab
--- /dev/null
+++ b/Source/BladeX-Tool/blade-starter-mongo/src/main/java/org/springblade/core/mongo/utils/MongoJsonUtils.java
@@ -0,0 +1,126 @@
+package org.springblade.core.mongo.utils;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import java.util.*;
+
+/**
+ * 澶勭悊 mongo json 鏁版嵁缁撴瀯
+ *
+ * @author L.cm
+ */
+public class MongoJsonUtils {
+
+	/**
+	 * 鑾峰彇鎵�鏈夌殑鍙跺瓙鑺傜偣鍜岃矾寰勪俊鎭�
+	 *
+	 * @param jsonNode jsonTree
+	 * @return tree鍙跺瓙淇℃伅
+	 */
+	public static List<JsonNodeInfo> getLeafNodes(JsonNode jsonNode) {
+		if (jsonNode == null || !jsonNode.isObject()) {
+			return Collections.emptyList();
+		}
+		List<JsonNodeInfo> list = new ArrayList<>();
+		// 鍙屽悜鐨勯槦鍒� Deque 浠f浛 Stack锛孲tack 鎬ц兘涓嶅ソ
+		LinkedList<String> deque = new LinkedList<>();
+		// 閫掑綊鑾峰彇鍙跺瓙 馃崈馃崈馃崈 鑺傜偣
+		getLeafNodes(jsonNode, null, deque, list);
+		return list;
+	}
+
+	private static void getLeafNodes(JsonNode jsonNode, JsonNode parentNode, LinkedList<String> deque, List<JsonNodeInfo> list) {
+		Iterator<Map.Entry<String, JsonNode>> iterator;
+		if (parentNode == null) {
+			iterator = jsonNode.fields();
+		} else {
+			iterator = parentNode.fields();
+		}
+		// tree 瀛愯妭鐐�
+		while (iterator.hasNext()) {
+			Map.Entry<String, JsonNode> entry = iterator.next();
+			String fieldName = entry.getKey();
+			JsonNode nextNode = entry.getValue();
+			// 濡傛灉涓嶆槸鍊艰妭鐐�
+			if (nextNode.isObject()) {
+				// 娣诲姞鍒伴槦鍒楀熬锛屽厛杩涘厛鍑�
+				deque.addLast(fieldName);
+				getLeafNodes(parentNode, nextNode, deque, list);
+			}
+			// 濡傛灉鏄�艰妭鐐癸紝涔熷氨鏄埌鍙跺瓙鑺傜偣浜嗭紝鍙栧彾瀛愯妭鐐逛笂绾у嵆鍙�
+			if (nextNode.isValueNode()) {
+				// 灏佽鑺傜偣鍒楄〃
+				LinkedList<String> elements = new LinkedList<>(deque);
+				// tree 鐨� 鍙跺瓙鑺傜偣锛屾澶勪负寮曠敤
+				list.add(new JsonNodeInfo(elements, parentNode));
+				break;
+			}
+			// 鏍堥潪绌烘椂寮瑰嚭
+			if (!deque.isEmpty()) {
+				deque.removeLast();
+			}
+		}
+	}
+
+	/**
+	 * 鏋勫缓鏍戝舰鑺傜偣
+	 *
+	 * @param jsonNode 鐖剁骇鑺傜偣
+	 * @param elements tree鑺傜偣鍒楄〃
+	 * @return JsonNode 鍙跺瓙鑺傜偣锛岃繑鍥炵敤浜庡鏁版嵁
+	 */
+	public static ObjectNode buildNode(ObjectNode jsonNode, List<String> elements) {
+		ObjectNode newNode = jsonNode;
+		for (String element : elements) {
+			// 濡傛灉宸茬粡瀛樺湪鑺傜偣锛岃繖涓嶇敓鎴愭柊鐨�
+			if (newNode.has(element)) {
+				newNode = (ObjectNode) newNode.get(element);
+			} else {
+				newNode = newNode.putObject(element);
+			}
+		}
+		return newNode;
+	}
+
+	/**
+	 * 鑾峰彇鎵�鏈� 馃崈馃崈馃崈 鑺傜偣鐨勫�硷紝骞舵瀯寤烘垚 mongodb update 璇彞
+	 * @param prefix 鍓嶇紑
+	 * @param nodeKeys mongo keys
+	 * @param objectNode tree 馃崈 鑺傜偣
+	 * @return tree 鑺傜偣淇℃伅
+	 */
+	public static Map<String, Object> getAllUpdate(String prefix, String nodeKeys, ObjectNode objectNode) {
+		Map<String, Object> values = new HashMap<>(8);
+		Iterator<String> iterator = objectNode.fieldNames();
+		while (iterator.hasNext()) {
+			String fieldName = iterator.next();
+			JsonNode valueNode = objectNode.get(fieldName);
+			if (valueNode.isValueNode()) {
+				Object value;
+				if (valueNode.isShort()) {
+					value = valueNode.shortValue();
+				} else if (valueNode.isInt()) {
+					value = valueNode.intValue();
+				} else if (valueNode.isLong()) {
+					value = valueNode.longValue();
+				} else if (valueNode.isBoolean()) {
+					value = valueNode.booleanValue();
+				} else if (valueNode.isFloat()) {
+					value = valueNode.floatValue();
+				} else if (valueNode.isDouble()) {
+					value = valueNode.doubleValue();
+				} else if (valueNode.isMissingNode()) {
+					value = null;
+				} else {
+					value = valueNode.textValue();
+				}
+				if (value != null) {
+					String valueKey = prefix + '.' + nodeKeys + '.' + fieldName;
+					values.put(valueKey, value);
+				}
+			}
+		}
+		return values;
+	}
+}

--
Gitblit v1.9.3