From e1ec1ffbbee99c2b2b0d4d0b83a852fe9cd1092f Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 17 Dec 2025 11:15:35 +0800
Subject: [PATCH] refactor(okxNewPrice): 优化队列打印逻辑并调整日志描述

---
 src/main/java/com/xcong/excoin/modules/okxNewPrice/utils/WsParamBuild.java |   53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 53 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/okxNewPrice/utils/WsParamBuild.java b/src/main/java/com/xcong/excoin/modules/okxNewPrice/utils/WsParamBuild.java
index ed386d0..082e530 100644
--- a/src/main/java/com/xcong/excoin/modules/okxNewPrice/utils/WsParamBuild.java
+++ b/src/main/java/com/xcong/excoin/modules/okxNewPrice/utils/WsParamBuild.java
@@ -4,10 +4,36 @@
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+
 /**
  * @author Administrator
  */
 public class WsParamBuild {
+
+    public static String getOrderNum(String prefix) {
+        SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
+        String dd=df.format(new Date());
+        if (StrUtil.isNotBlank(prefix)) {
+            return prefix+dd+getRandomNum(5);
+        }
+        return dd+getRandomNum(5);
+    }
+
+    public static String getRandomNum(int length) {
+        String str = "0123456789";
+        Random random = new Random();
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < length; ++i) {
+            int number = random.nextInt(str.length());
+            sb.append(str.charAt(number));
+        }
+
+        return sb.toString();
+    }
 
     public static JSONObject buildJsonObject(String connId, String option, JSONArray argsArray) {
         JSONObject jsonObject = new JSONObject();
@@ -18,4 +44,31 @@
         jsonObject.put("args", argsArray);
         return jsonObject;
     }
+
+
+    /**
+     * 计算购买合约的数量
+     *
+     * USDT 币本位合约
+     * 公式:张数 = 保证金 / (面值 * 标记价格 / 杠杆倍数)
+     *
+     * @param margin 用户的保证金金额
+     * @param leverage 杠杆倍数
+     * @param faceValue 合约面值
+     * @param markPrice 标记价格
+     * @param minLotSz 最小下单精度
+     * @return 返回用户可以购买的合约数量
+     */
+    public static BigDecimal buyCnt(BigDecimal margin, BigDecimal leverage, BigDecimal faceValue, BigDecimal markPrice, int minLotSz) {
+        if (margin.compareTo(BigDecimal.ZERO) <= 0 ||
+                leverage.compareTo(BigDecimal.ZERO) <= 0 ||
+                faceValue.compareTo(BigDecimal.ZERO) <= 0 ||
+                markPrice.compareTo(BigDecimal.ZERO) <= 0) {
+            return BigDecimal.ZERO;
+        }
+
+        BigDecimal divisor = markPrice.divide(leverage, 10, BigDecimal.ROUND_DOWN);
+        BigDecimal denominator = faceValue.multiply(divisor);
+        return margin.divide(denominator, minLotSz, BigDecimal.ROUND_DOWN);
+    }
 }

--
Gitblit v1.9.1