Pārlūkot izejas kodu

add:增加跟单员监控报警v1

tujidelv 2 gadi atpakaļ
vecāks
revīzija
0522b7a770

+ 45 - 3
src/main/java/top/lvzhiqiang/service/impl/CoinServiceImpl.java

@@ -218,6 +218,43 @@ public class CoinServiceImpl implements CoinService {
             }
         }, 0, 5, TimeUnit.SECONDS);
 
+        scheduler.scheduleWithFixedDelay(() -> {
+            LocalDateTime endTime = LocalDateTime.now();
+            // 交易员当前带单列表
+            Map<String, String> paramMap = new LinkedHashMap<>();
+            paramMap.put("traderId", "b1b5467f8bb73f53ac97");
+            paramMap.put("pageNo", "1");
+            paramMap.put("pageSize", "20");
+
+            try {
+                JSONObject response = requestApi4Common("/api/mix/v1/trace/report/order/currentList", null, JSONObject.toJSONString(paramMap), JsoupUtil.HTTP_POST, paramMap);
+                JSONArray orderList = response.getJSONArray("data");
+
+                for (int i = 0; i < orderList.size(); i++) {
+                    JSONObject order = orderList.getJSONObject(i);
+                    LocalDateTime openTime = DateUtils.longToLocalDateTime(order.getLong("openTime"));
+                    String trackingNo = order.getString("trackingNo");
+                    if (Duration.between(openTime, endTime).getSeconds() < 50 && !orderMap.containsKey(trackingNo)) {
+                        orderMap.put(trackingNo, "1");
+
+                        String content = "交易对:" + order.getString("symbol") + "\n" +
+                                "持仓方向:" + InitRunner.publicParamsMap.get("holdSide").getString(order.getString("holdSide")) + "\n" +
+                                "杠杆:" + order.getString("leverage") + "\n" +
+                                "开仓均价:" + order.getString("openPrice") + "\n" +
+                                "开仓时间:" + DateUtils.longToString(order.getLong("openTime")) + "\n" +
+                                "此笔订单跟单人数:" + order.getString("followerNum") + "\n" +
+                                "保证金:" + order.getString("marginAmount") + "\n" +
+                                "止盈价:" + order.getString("takeProfitPrice") + "\n" +
+                                "止损价:" + order.getString("stopLossPrice") + "\n" +
+                                "交易员:" + "hale" + ",跟单号:" + order.getString("trackingNo");
+
+                        SpringUtils.getBean(CoinServiceImpl.class).monitorAlarm(content, JOB_ALARM_MODE_CHAT_BOT);
+                    }
+                }
+            } catch (Exception e) {
+            }
+        }, 0, 3, TimeUnit.SECONDS);
+
         return null;
     }
 
@@ -273,7 +310,7 @@ public class CoinServiceImpl implements CoinService {
         Map<String, String> headerMap = new HashMap<>();
         headerMap.putAll(basicHeaderMap);
         try {
-            String accessSign = CheckSign4Bitget.generate(timestamp, "GET", requestPath, signQueryString, signBody, secretKey);
+            String accessSign = CheckSign4Bitget.generate(timestamp, httpMethod, requestPath, signQueryString, signBody, secretKey);
             headerMap.put("ACCESS-TIMESTAMP", timestamp);
             headerMap.put("ACCESS-SIGN", accessSign);
         } catch (CloneNotSupportedException e) {
@@ -286,9 +323,14 @@ public class CoinServiceImpl implements CoinService {
 
         try {
             String requestUrl = mainUrl + requestPath;
-            Connection.Response response = JsoupUtil.requestBody(requestUrl, httpMethod, InitRunner.proxy, headerMap, paramMap);
 
-            return JSONObject.parseObject(response.body());
+            if (httpMethod.equals(JsoupUtil.HTTP_GET)) {
+                Connection.Response response = JsoupUtil.requestBody(requestUrl, httpMethod, InitRunner.proxy, headerMap, paramMap);
+                return JSONObject.parseObject(response.body());
+            } else {
+                Connection.Response response = JsoupUtil.requestBodyJSON(requestUrl, httpMethod, InitRunner.proxy, null, headerMap, paramMap);
+                return JSONObject.parseObject(response.body());
+            }
         } catch (Exception e) {
             throw new RuntimeException(e);
         }

+ 67 - 1
src/test/java/Test4.java

@@ -18,8 +18,21 @@
  * 3、刷票。很多投票的网页一个IP只允许投票一次,如果我们借助大量代理IP去投票,结果可想而知....
  */
 
+import com.alibaba.fastjson.JSONObject;
+import org.jsoup.Connection;
+import top.lvzhiqiang.util.CheckSign4Bitget;
+import top.lvzhiqiang.util.JsoupUtil;
+
+import java.io.UnsupportedEncodingException;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
+import java.security.InvalidKeyException;
 import java.time.Duration;
 import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 爬取网上免费代理IP,搭建自己的Ip池
@@ -27,7 +40,60 @@ import java.time.LocalDateTime;
 public class Test4 {
     public static void main(String[] args) {
         LocalDateTime cTime = LocalDateTime.now().minusSeconds(3);
-        LocalDateTime endTime =  LocalDateTime.now();
+        LocalDateTime endTime = LocalDateTime.now();
         System.out.println(Duration.between(cTime, endTime).getSeconds());
+
+        Map<String, String> paramMap = new LinkedHashMap<>();
+        paramMap.put("traderId","b1b5467f8bb73f53ac97");
+        paramMap.put("pageNo","1");
+        paramMap.put("pageSize","10");
+
+        String signQueryString = paramMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
+        String url = "/api/mix/v1/trace/report/order/currentList";
+
+        String s = JSONObject.toJSONString(paramMap);
+        JSONObject response = requestApi4Common(url, null, s, JsoupUtil.HTTP_POST, paramMap);
+        System.out.println(response);
+    }
+
+    private static JSONObject requestApi4Common(String requestPath, String signQueryString, String signBody, String httpMethod, Map<String, String> paramMap) {
+        String timestamp = String.valueOf(System.currentTimeMillis());
+        Map<String, String> basicHeaderMap = new HashMap<>();
+        basicHeaderMap.put("ACCESS-KEY", "bg_433d37306df0e8901c6d107c6d9e9111");
+        // 使用base64编码签名(请参阅签名消息)。
+        basicHeaderMap.put("ACCESS-SIGN", "");
+        // 您请求的时间戳。
+        basicHeaderMap.put("ACCESS-TIMESTAMP", "");
+        // 您在创建API KEY时设置的口令。
+        basicHeaderMap.put("ACCESS-PASSPHRASE", "7f934f62f2701bee932204580d115228");
+        // 统一设置为application/json。
+        basicHeaderMap.put("Content-Type", "application/json");
+        // 支持多语言, 如:中文(zh-CN),英语(en-US)
+        basicHeaderMap.put("locale", "zh-CN");
+
+        Map<String, String> headerMap = new HashMap<>();
+        headerMap.putAll(basicHeaderMap);
+        try {
+            String accessSign = CheckSign4Bitget.generate(timestamp, httpMethod, requestPath, signQueryString, signBody, "1fdd0fc2976bea80189ba13710e12825ca3ef6c5e25a0d76fd03f8f6cd4a61d9");
+            headerMap.put("ACCESS-TIMESTAMP", timestamp);
+            headerMap.put("ACCESS-SIGN", accessSign);
+        } catch (CloneNotSupportedException e) {
+            throw new RuntimeException(e);
+        } catch (InvalidKeyException e) {
+            throw new RuntimeException(e);
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+
+        try {
+            Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 1080));
+            String mainUrl = "https://api.bitget.com";
+            String requestUrl = mainUrl + requestPath;
+            Connection.Response response = JsoupUtil.requestBodyJSON(requestUrl, httpMethod, proxy,null, headerMap, paramMap);
+
+            return JSONObject.parseObject(response.body());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
     }
 }