From 9eed388bf3c07dc0ea24fb0637b4964c8e387437 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 22 Dec 2025 16:45:43 +0800
Subject: [PATCH] fix(symbols): 修复K线数据获取逻辑
---
src/main/java/com/xcong/excoin/modules/newPrice/utils/UrlBuilder.java | 128 ++++++++++++++++++++++++++++++++++++++++++
1 files changed, 128 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/newPrice/utils/UrlBuilder.java b/src/main/java/com/xcong/excoin/modules/newPrice/utils/UrlBuilder.java
new file mode 100644
index 0000000..5e28e12
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/newPrice/utils/UrlBuilder.java
@@ -0,0 +1,128 @@
+package com.xcong.excoin.modules.newPrice.utils;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+
+public final class UrlBuilder {
+ private static final int MAX_DECIMAL_DIGITS = 30;
+ private static DecimalFormat df;
+
+
+ private UrlBuilder() {
+ }
+
+ public static String buildFullUrl(String baseUrl, String urlPath, LinkedHashMap<String, Object> parameters, String signature) {
+ if (parameters != null && !parameters.isEmpty()) {
+ StringBuilder sb = new StringBuilder(baseUrl);
+ sb.append(urlPath).append('?');
+ joinQueryParameters(sb, parameters);
+ if (null != signature) {
+ sb.append("&signature=").append(signature);
+ }
+ return sb.toString();
+ } else {
+ return baseUrl + urlPath;
+ }
+ }
+
+ public static String buildStreamUrl(String baseUrl, ArrayList<String> streams) {
+ StringBuilder sb = new StringBuilder(baseUrl);
+ sb.append("?streams=");
+ return joinStreamUrls(sb, streams);
+ }
+
+ //concatenate query parameters
+ public static String joinQueryParameters(LinkedHashMap<String, Object> parameters) {
+ return joinQueryParameters(new StringBuilder(), parameters).toString();
+ }
+
+ public static StringBuilder joinQueryParameters(StringBuilder urlPath, LinkedHashMap<String, Object> parameters) {
+ if (parameters == null || parameters.isEmpty()) {
+ return urlPath;
+ }
+
+ boolean isFirst = true;
+ for (Map.Entry<String, Object> mapElement : parameters.entrySet()) {
+
+ if (mapElement.getValue() instanceof Double) {
+ parameters.replace(mapElement.getKey(), getFormatter().format(mapElement.getValue()));
+ } else if (mapElement.getValue() instanceof ArrayList) {
+ if (((ArrayList<?>) mapElement.getValue()).isEmpty()) {
+ continue;
+ }
+ String key = mapElement.getKey();
+ joinArrayListParameters(key, urlPath, (ArrayList<?>) mapElement.getValue(), isFirst);
+ isFirst = false;
+ continue;
+ }
+
+ if (isFirst) {
+ isFirst = false;
+ } else {
+ urlPath.append('&');
+ }
+
+ urlPath.append(mapElement.getKey())
+ .append('=')
+ .append(urlEncode(mapElement.getValue().toString()));
+ }
+ return urlPath;
+ }
+
+ private static void joinArrayListParameters(String key, StringBuilder urlPath, ArrayList<?> values, boolean isFirst) {
+ for (Object value: values) {
+ if (isFirst) {
+ isFirst = false;
+ } else {
+ urlPath.append('&');
+ }
+
+ urlPath.append(key)
+ .append('=')
+ .append(urlEncode(value.toString()));
+ }
+ }
+
+ private static String joinStreamUrls(StringBuilder urlPath, ArrayList<String> streams) {
+ boolean isFirst = true;
+ for (String stream: streams) {
+ if (isFirst) {
+ isFirst = false;
+ } else {
+ urlPath.append('/');
+ }
+ urlPath.append(stream);
+ }
+ return urlPath.toString();
+ }
+
+
+ public static String urlEncode(String s) {
+ try {
+ return URLEncoder.encode(s, StandardCharsets.UTF_8.name());
+ } catch (UnsupportedEncodingException e) {
+ // UTF-8 being unsuppored is unlikely
+ // Replace with a unchecked exception to tidy up exception handling
+ throw new RuntimeException(StandardCharsets.UTF_8.name() + " is unsupported", e);
+ }
+ }
+
+ private static DecimalFormat getFormatter() {
+ if (null == df) {
+ df = new DecimalFormat();
+ df.setMaximumFractionDigits(MAX_DECIMAL_DIGITS);
+ df.setGroupingUsed(false);
+ }
+ return df;
+ }
+
+ public static String buildTimestamp() {
+ return String.valueOf(System.currentTimeMillis());
+ }
+}
--
Gitblit v1.9.1