From 6a51f45e6a00b65a9e7b0b0707b453c11311f3ef Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 11 May 2026 22:38:13 +0800
Subject: [PATCH] feat(okxApi): 添加仓位模式配置和REST客户端功能
---
src/main/java/com/xcong/excoin/modules/okxApi/OkxWsUtil.java | 38 ++++++++++++++++++++++++++++++++------
1 files changed, 32 insertions(+), 6 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/okxApi/OkxWsUtil.java b/src/main/java/com/xcong/excoin/modules/okxApi/OkxWsUtil.java
index 5322251..7e11158 100644
--- a/src/main/java/com/xcong/excoin/modules/okxApi/OkxWsUtil.java
+++ b/src/main/java/com/xcong/excoin/modules/okxApi/OkxWsUtil.java
@@ -51,8 +51,16 @@
// ==================== HMAC-SHA256 签名 ====================
public static String signWebsocket(String timestamp, String secretKey) {
+ return sign(timestamp, "GET", "/users/self/verify", "", secretKey);
+ }
+
+ public static String signRest(String timestamp, String method, String path, String body, String secretKey) {
+ return sign(timestamp, method.toUpperCase(), path, body, secretKey);
+ }
+
+ private static String sign(String timestamp, String method, String path, String body, String secretKey) {
try {
- String message = String.format("%s%s%s", timestamp, "GET", "/users/self/verify");
+ String message = String.format("%s%s%s%s", timestamp, method, path, body);
Mac mac = Mac.getInstance("HmacSHA256");
SecretKeySpec spec = new SecretKeySpec(secretKey.getBytes("UTF-8"), "HmacSHA256");
mac.init(spec);
@@ -66,9 +74,14 @@
// ==================== 订单ID ====================
+ private static final ThreadLocal<SimpleDateFormat> ORDER_ID_DF =
+ ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyyMMddHHmmss"));
+
+ private static final ThreadLocal<Random> RANDOM =
+ ThreadLocal.withInitial(Random::new);
+
public static String getOrderNum(String prefix) {
- SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
- String dd = df.format(new Date());
+ String dd = ORDER_ID_DF.get().format(new Date());
if (prefix != null && !prefix.isEmpty()) {
return prefix + dd + getRandomNum(5);
}
@@ -77,7 +90,7 @@
private static String getRandomNum(int length) {
String str = "0123456789";
- Random random = new Random();
+ Random random = RANDOM.get();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; ++i) {
sb.append(str.charAt(random.nextInt(str.length())));
@@ -99,8 +112,21 @@
// ==================== 日期格式化 ====================
+ private static final ThreadLocal<SimpleDateFormat> DATE_TIME_DF =
+ ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
+
+ private static final ThreadLocal<SimpleDateFormat> ISO8601_DF =
+ ThreadLocal.withInitial(() -> {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
+ sdf.setTimeZone(java.util.TimeZone.getTimeZone("UTC"));
+ return sdf;
+ });
+
+ public static String getIso8601Timestamp() {
+ return ISO8601_DF.get().format(new Date());
+ }
+
public static String timestampToDateTime(long timestamp) {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- return sdf.format(new Date(timestamp));
+ return DATE_TIME_DF.get().format(new Date(timestamp));
}
}
--
Gitblit v1.9.1