Bladeren bron

update:开单监控报警优化v1

tujidelv 2 jaren geleden
bovenliggende
commit
0331af6fa3

+ 9 - 0
src/main/java/top/lvzhiqiang/controller/CoinController.java

@@ -63,4 +63,13 @@ public class CoinController {
 
         return coinService.orderDetail(trackingNo);
     }
+
+    @GetMapping("/orderDetail2/{orderId}/{symbol}")
+    public String orderDetail2(@PathVariable String orderId, @PathVariable String symbol) {
+        if (StringUtils.isEmpty(orderId) || StringUtils.isEmpty(symbol)) {
+            return "订单ID何币对名称为空!";
+        }
+
+        return coinService.orderDetail2(orderId, symbol);
+    }
 }

+ 2 - 0
src/main/java/top/lvzhiqiang/service/CoinService.java

@@ -30,4 +30,6 @@ public interface CoinService {
     void syncData(String startTime, String endTime, String pageSize);
 
     String orderDetail(String trackingNo);
+
+    String orderDetail2(String orderId, String symbol);
 }

+ 57 - 18
src/main/java/top/lvzhiqiang/service/impl/CoinServiceImpl.java

@@ -128,7 +128,8 @@ public class CoinServiceImpl implements CoinService {
         paramMap.put("pageSize", "20");
 
         StringBuffer sb = new StringBuffer();
-        for (int j = 1; j < 10; j++) {
+        // 交易员当前带单列表筛选
+        for (int j = 1; j < 5; j++) {
             try {
                 paramMap.put("pageNo", j + "");
                 JSONObject response = requestApi4Common("/api/mix/v1/trace/report/order/currentList", null, JSONObject.toJSONString(paramMap), JsoupUtil.HTTP_POST, paramMap);
@@ -157,9 +158,9 @@ public class CoinServiceImpl implements CoinService {
             } catch (Exception e) {
             }
         }
-
+        // 交易员历史带单列表筛选
         if (sb.length() == 0) {
-            for (int j = 1; j < 10; j++) {
+            for (int j = 1; j < 5; j++) {
                 try {
                     paramMap.put("pageNo", j + "");
                     JSONObject response = requestApi4Common("/api/mix/v1/trace/report/order/historyList", null, JSONObject.toJSONString(paramMap), JsoupUtil.HTTP_POST, paramMap);
@@ -168,7 +169,7 @@ public class CoinServiceImpl implements CoinService {
                         JSONObject order = orderList.getJSONObject(i);
                         String trackingNo1 = order.getString("trackingNo");
                         if (trackingNo.equals(trackingNo1)) {
-                            sb.append("<table border=\"1\" cellspacing=\"0\"><tr><th>键</th><th>值</th></tr>");
+                            sb.append("<table border=\"1\" cellspacing=\"0\" style=\"font-size: 20px;\"><tr><th>键</th><th>值</th></tr>");
                             sb.append("<tr><td>交易对</td><td>").append(order.getString("symbol")).append("</td></tr>");
                             sb.append("<tr><td>持仓方向</td><td>").append(InitRunner.publicParamsMap.get("holdSide").getString(order.getString("holdSide"))).append("</td></tr>");
                             sb.append("<tr><td>杠杆倍数</td><td>").append(order.getString("leverage")).append("</td></tr>");
@@ -195,10 +196,46 @@ public class CoinServiceImpl implements CoinService {
     }
 
     @Override
+    public String orderDetail2(String orderId, String symbol) {
+        Map<String, String> paramMap = new LinkedHashMap<>();
+        paramMap.put("symbol", symbol);
+        paramMap.put("orderId", orderId);
+
+        StringBuffer sb = new StringBuffer("<table border=\"1\" cellspacing=\"0\" style=\"font-size: 20px;\"><tr><th>键</th><th>值</th></tr>");
+        // 获取订单详情
+        try {
+            String signQueryString = paramMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
+            JSONObject response = requestApi4Common("/api/mix/v1/order/detail", signQueryString, null, JsoupUtil.HTTP_GET, paramMap);
+            JSONObject order = response.getJSONObject("data");
+
+            sb.append("<tr><td>交易对</td><td>").append(order.getString("symbol")).append("</td></tr>");
+            sb.append("<tr><td>交易方向</td><td>").append(InitRunner.publicParamsMap.get("side").getString(order.getString("side"))).append("</td></tr>");
+            sb.append("<tr><td>杠杆倍数</td><td>").append(order.getString("leverage")).append("</td></tr>");
+            sb.append("<tr><td>成交均价</td><td>").append(order.getString("priceAvg")).append("</td></tr>");
+            sb.append("<tr><td>委托价格</td><td>").append(order.getString("price")).append("</td></tr>");
+            sb.append("<tr><td>手续费</td><td>").append(order.getString("fee")).append("</td></tr>");
+            sb.append("<tr><td>订单状态</td><td>").append(InitRunner.publicParamsMap.get("state").getString(order.getString("state"))).append("</td></tr>");
+            sb.append("<tr><td>交易类型</td><td>").append(InitRunner.publicParamsMap.get("orderType").getString(order.getString("orderType"))).append("</td></tr>");
+            sb.append("<tr><td>总盈亏</td><td>").append(order.getString("totalProfits")).append("</td></tr>");
+            sb.append("<tr><td>预设止盈价格</td><td>").append(order.getString("presetTakeProfitPrice")).append("</td></tr>");
+            sb.append("<tr><td>预设止损价格</td><td>").append(order.getString("presetStopLossPrice")).append("</td></tr>");
+            sb.append("<tr><td>创建时间</td><td>").append(DateUtils.longToString(order.getLong("cTime"))).append("</td></tr>");
+            sb.append("<tr><td>更新时间</td><td>").append(DateUtils.longToString(order.getLong("uTime"))).append("</td></tr>");
+        } catch (Exception e) {
+            log.error("orderDetail2 error,orderId={},symbol={}", orderId, symbol, e);
+        }
+
+        sb.append("</table>");
+
+        return sb.toString();
+    }
+
+    @Override
     public String monitorJob() {
+        // 开仓平仓监控报警
         scheduler.scheduleWithFixedDelay(() -> {
             LocalDateTime endTime = LocalDateTime.now();
-            // 全部历史委托监控
+            // 全部历史委托列表
             Map<String, String> paramMap = new LinkedHashMap<>();
             paramMap.put("productType", "umcbl");
             paramMap.put("startTime", String.valueOf(DateUtils.localDateTimeToMilliseconds(endTime.minusMinutes(1))));
@@ -214,10 +251,22 @@ public class CoinServiceImpl implements CoinService {
                     JSONObject order = orderList.getJSONObject(i);
                     LocalDateTime cTime = DateUtils.longToLocalDateTime(order.getLong("cTime"));
                     String orderId = order.getString("orderId");
+                    String symbol = order.getString("symbol");
                     if (Duration.between(cTime, endTime).getSeconds() < 50 && !orderMap.containsKey(orderId)) {
                         orderMap.put(orderId, "1");
-                        String content = order.getString("symbol") + "委托单已经触发,成交均价为" + order.getString("priceAvg");
-                        SpringUtils.getBean(CoinServiceImpl.class).monitorAlarm(content, JOB_ALARM_MODE_APP_TEXT_CARD);
+
+                        String content = "<div class=\"highlight\">交易对:" + order.getString("symbol") + "</div>" +
+                                "<div>交易方向:" + InitRunner.publicParamsMap.get("side").getString(order.getString("side")) + "</div>" +
+                                "<div>杠杆倍数:" + order.getString("leverage") + "</div>" +
+                                "<div>成交均价:" + order.getString("openPrice") + "</div>" +
+                                "<div>订单状态:" + InitRunner.publicParamsMap.get("state").getString(order.getString("state")) + "</div>" +
+                                "<div>订单类型:" + InitRunner.publicParamsMap.get("orderType").getString(order.getString("orderType")) + "</div>" +
+                                "<div class=\"gray\">订单时间:" + DateUtils.longToString(order.getLong("cTime")) + "</div>";
+                        JSONObject params = new JSONObject();
+                        params.put("title", order.getString("side").contains("open") ? "开仓" : "平仓" + "监控报警");
+                        params.put("logUrl", "https://jav.lvzhiqiang.top/coin/orderDetail2/" + orderId + "/" + symbol);
+                        params.put("btnTxt", "订单详情");
+                        SpringUtils.getBean(CoinServiceImpl.class).monitorAlarm4APP_TEXT_CARD(content, params);
                     }
                 }
             } catch (Exception e) {
@@ -290,6 +339,7 @@ public class CoinServiceImpl implements CoinService {
             }
         }, 0, 5, TimeUnit.SECONDS);
 
+        // 跟单员监控报警
         scheduler.scheduleWithFixedDelay(() -> {
             LocalDateTime endTime = LocalDateTime.now();
             // 交易员当前带单列表
@@ -309,17 +359,6 @@ public class CoinServiceImpl implements CoinService {
                     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");*/
-
                         String content = "<div class=\"highlight\">交易对:" + order.getString("symbol") + "</div>" +
                                 "<div>持仓方向:" + InitRunner.publicParamsMap.get("holdSide").getString(order.getString("holdSide")) + "</div>" +
                                 "<div>杠杆倍数:" + order.getString("leverage") + "</div>" +

+ 21 - 4
src/test/java/Test4.java

@@ -44,15 +44,26 @@ public class Test4 {
         System.out.println(Duration.between(cTime, endTime).getSeconds());
 
         Map<String, String> paramMap = new LinkedHashMap<>();
-        paramMap.put("traderId","b1b5467f8bb73f53ac97");
+        /*paramMap.put("traderId","b1b5467f8bb73f53ac97");
         paramMap.put("pageNo","1");
-        paramMap.put("pageSize","10");
+        paramMap.put("pageSize","10");*/
+
+        /*paramMap.put("productType", "umcbl");
+        paramMap.put("startTime", String.valueOf(DateUtils.localDateTimeToMilliseconds(endTime.minusDays(1))));
+        paramMap.put("endTime", String.valueOf(DateUtils.localDateTimeToMilliseconds(endTime)));
+        paramMap.put("pageSize", "100");
+        paramMap.put("clientOid", "1089293404165083137");*/
+
+        paramMap.put("symbol", "LEVERUSDT_UMCBL");
+        paramMap.put("orderId", "1089364238096883714");
 
         String signQueryString = paramMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
         String url = "/api/mix/v1/trace/report/order/currentList";
+        url = "/api/mix/v1/order/detail";
 
         String s = JSONObject.toJSONString(paramMap);
-        JSONObject response = requestApi4Common(url, null, s, JsoupUtil.HTTP_POST, paramMap);
+        //JSONObject response = requestApi4Common(url, null, s, JsoupUtil.HTTP_POST, paramMap);
+        JSONObject response = requestApi4Common(url, signQueryString, null, JsoupUtil.HTTP_GET, paramMap);
         System.out.println(response);
     }
 
@@ -89,7 +100,13 @@ public class Test4 {
             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);
+
+            Connection.Response response;
+            if (httpMethod.equals("POST")) {
+                response = JsoupUtil.requestBodyJSON(requestUrl, httpMethod, proxy, null, headerMap, paramMap);
+            } else {
+                response = JsoupUtil.requestBody(requestUrl, httpMethod, proxy, null, headerMap, paramMap);
+            }
 
             return JSONObject.parseObject(response.body());
         } catch (Exception e) {