浏览代码

update:跟单监控报警优化v1

tujidelv 2 年之前
父节点
当前提交
316ae23462

+ 3 - 0
src/main/java/top/lvzhiqiang/config/UnifiedReturnConfig.java

@@ -46,6 +46,9 @@ public class UnifiedReturnConfig {
             if (serverHttpRequest.getURI().toASCIIString().indexOf("/bg") >= 0) {
                 return body;
             }
+            if (serverHttpRequest.getURI().toASCIIString().indexOf("/coin/orderDetail") >= 0) {
+                return body;
+            }
 
             if (body instanceof R) {
                 return body;

+ 11 - 4
src/main/java/top/lvzhiqiang/controller/CoinController.java

@@ -2,14 +2,12 @@ package top.lvzhiqiang.controller;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import top.lvzhiqiang.entity.CoinApiConfig;
 import top.lvzhiqiang.exception.ParameterException;
 import top.lvzhiqiang.service.CoinApiConfigService;
 import top.lvzhiqiang.service.CoinService;
+import top.lvzhiqiang.util.StringUtils;
 
 import javax.annotation.Resource;
 import java.util.List;
@@ -56,4 +54,13 @@ public class CoinController {
 
         return coinService.mainSearch(params);
     }
+
+    @GetMapping("/orderDetail/{trackingNo}")
+    public String orderDetail(@PathVariable String trackingNo) {
+        if (StringUtils.isEmpty(trackingNo)) {
+            return "跟单号为空!";
+        }
+
+        return coinService.orderDetail(trackingNo);
+    }
 }

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

@@ -15,6 +15,10 @@ public interface CoinService {
 
     void monitorAlarm(String content, String jobAlarmMode);
 
+    void monitorAlarm4APP_TEXT_CARD(String content, JSONObject params);
+
+    void monitorAlarm4CHAT_BOT(String content, JSONObject params);
+
     /**
      * 主查询
      *
@@ -24,4 +28,6 @@ public interface CoinService {
     JSONArray mainSearch(JSONObject params) throws Exception;
 
     void syncData(String startTime, String endTime, String pageSize);
+
+    String orderDetail(String trackingNo);
 }

+ 139 - 4
src/main/java/top/lvzhiqiang/service/impl/CoinServiceImpl.java

@@ -121,6 +121,78 @@ public class CoinServiceImpl implements CoinService {
         }
     }
 
+    @Override
+    public String orderDetail(String trackingNo) {
+        Map<String, String> paramMap = new LinkedHashMap<>();
+        paramMap.put("traderId", "b1b5467f8bb73f53ac97");
+        paramMap.put("pageSize", "20");
+
+        StringBuffer sb = new StringBuffer();
+        for (int j = 1; j < 10; j++) {
+            try {
+                paramMap.put("pageNo", j + "");
+                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);
+                    String trackingNo1 = order.getString("trackingNo");
+                    if (trackingNo.equals(trackingNo1)) {
+                        sb.append("<table border=\"1\" cellspacing=\"0\"><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>");
+                        sb.append("<tr><td>开仓均价</td><td>").append(order.getString("openPrice")).append("</td></tr>");
+                        sb.append("<tr><td>开仓时间</td><td>").append(DateUtils.longToString(order.getLong("openTime"))).append("</td></tr>");
+                        sb.append("<tr><td>此笔订单跟单人数</td><td>").append(order.getString("followerNum")).append("</td></tr>");
+                        sb.append("<tr><td>保证金</td><td>").append(order.getString("marginAmount")).append("</td></tr>");
+                        sb.append("<tr><td>止盈价</td><td>").append(order.getString("takeProfitPrice")).append("</td></tr>");
+                        sb.append("<tr><td>止损价</td><td>").append(order.getString("stopLossPrice")).append("</td></tr>");
+                        sb.append("<tr><td>交易员</td><td>").append("hale").append("</td></tr>");
+
+                        sb.append("</table>");
+
+                        break;
+                    }
+                }
+            } catch (Exception e) {
+            }
+        }
+
+        if (sb.length() == 0) {
+            for (int j = 1; j < 10; j++) {
+                try {
+                    paramMap.put("pageNo", j + "");
+                    JSONObject response = requestApi4Common("/api/mix/v1/trace/report/order/historyList", 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);
+                        String trackingNo1 = order.getString("trackingNo");
+                        if (trackingNo.equals(trackingNo1)) {
+                            sb.append("<table border=\"1\" cellspacing=\"0\"><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>");
+                            sb.append("<tr><td>开仓均价</td><td>").append(order.getString("openPrice")).append("</td></tr>");
+                            sb.append("<tr><td>开仓时间</td><td>").append(DateUtils.longToString(order.getLong("openTime"))).append("</td></tr>");
+                            sb.append("<tr><td>此笔订单跟单人数</td><td>").append(order.getString("followerNum")).append("</td></tr>");
+                            sb.append("<tr><td>保证金</td><td>").append(order.getString("marginAmount")).append("</td></tr>");
+                            sb.append("<tr><td>平仓均价</td><td>").append(order.getString("closePrice")).append("</td></tr>");
+                            sb.append("<tr><td>平仓时间</td><td>").append(DateUtils.longToString(order.getLong("closeTime"))).append("</td></tr>");
+                            sb.append("<tr><td>平仓数量</td><td>").append(order.getString("closeAmount")).append("</td></tr>");
+                            sb.append("<tr><td>交易员</td><td>").append("hale").append("</td></tr>");
+
+                            sb.append("</table>");
+
+                            break;
+                        }
+                    }
+                } catch (Exception e) {
+                }
+            }
+        }
+
+        return sb.toString();
+    }
 
     @Override
     public String monitorJob() {
@@ -237,7 +309,7 @@ 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" +
+                        /*String content = "交易对:" + order.getString("symbol") + "\n" +
                                 "持仓方向:" + InitRunner.publicParamsMap.get("holdSide").getString(order.getString("holdSide")) + "\n" +
                                 "杠杆:" + order.getString("leverage") + "\n" +
                                 "开仓均价:" + order.getString("openPrice") + "\n" +
@@ -246,9 +318,21 @@ public class CoinServiceImpl implements CoinService {
                                 "保证金:" + 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);
+                                "交易员:" + "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>" +
+                                "<div>开仓均价:" + order.getString("openPrice") + "</div>" +
+                                "<div>开仓时间:" + DateUtils.longToString(order.getLong("openTime")) + "</div>" +
+                                "<div>止盈价:" + order.getString("takeProfitPrice") + "</div>" +
+                                "<div>止损价:" + order.getString("stopLossPrice") + "</div>" +
+                                "<div class=\"gray\">交易员:" + "hale" + "</div>";
+                        JSONObject params = new JSONObject();
+                        params.put("title", "跟单员监控报警");
+                        params.put("logUrl", "https://jav.lvzhiqiang.top/coin/orderDetail/" + order.getString("trackingNo"));
+                        params.put("btnTxt", "跟单详情");
+                        SpringUtils.getBean(CoinServiceImpl.class).monitorAlarm4APP_TEXT_CARD(content, params);
                     }
                 }
             } catch (Exception e) {
@@ -260,6 +344,57 @@ public class CoinServiceImpl implements CoinService {
 
     @Override
     @Async("coinTaskExecutor")
+    public void monitorAlarm4APP_TEXT_CARD(String content, JSONObject params) {
+        // 文本卡片模式发消息
+        String title = "监控告警明细";
+        if (params.containsKey("title")) {
+            title = params.getString("title");
+        }
+        String logUrl = "https://lvzhiqiang.top";
+        if (params.containsKey("logUrl")) {
+            logUrl = params.getString("logUrl");
+        }
+        String btnTxt = "日志详情";
+        if (params.containsKey("btnTxt")) {
+            btnTxt = params.getString("btnTxt");
+        }
+        String user = "LvZhiQiang";
+        if (params.containsKey("user")) {
+            user = params.getString("user");
+        }
+        String party = "";
+        if (params.containsKey("party")) {
+            party = params.getString("party");
+        }
+        String tag = "";
+        if (params.containsKey("tag")) {
+            tag = params.getString("tag");
+        }
+
+        WxCpMessage wxCpMessage = WxCpMessage.TEXTCARD().agentId(properties.getAgentId())
+                .toUser(user)
+                .toParty(party)
+                .toTag(tag)
+                .title(title).description(content)
+                .url(logUrl).btnTxt(btnTxt)
+                .build();
+        try {
+            log.info("企业微信推送消息,send message: {}", wxCpMessage);
+            WxCpMessageSendResult sendResult = wxCpService.getMessageService().send(wxCpMessage);
+            log.info("企业微信推送消息成功,send result: {}", sendResult);
+        } catch (WxErrorException e) {
+            log.error("企业微信推送消息失败!Detail: ", e);
+        }
+    }
+
+    @Override
+    @Async("coinTaskExecutor")
+    public void monitorAlarm4CHAT_BOT(String content, JSONObject params) {
+
+    }
+
+    @Override
+    @Async("coinTaskExecutor")
     public void monitorAlarm(String content, String jobAlarmMode) {
         // 判断告警模式
         if (StringUtils.isEmpty(JOB_ALARM_MODE)) {