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