Selaa lähdekoodia

uddate:监控跟单员采用动态配置v1

tujidelv 2 vuotta sitten
vanhempi
commit
9d26c8a1f1

+ 2 - 2
src/main/java/top/lvzhiqiang/entity/CoinMixTrader.java → src/main/java/top/lvzhiqiang/entity/CoinTrader.java

@@ -8,13 +8,13 @@ import java.io.Serializable;
 import java.time.LocalDateTime;
 
 /**
- * coin-合约交易员表
+ * coin-交易员表
  *
  * @author lvzhiqiang
  * 2023/9/24 10:41
  */
 @Data
-public class CoinMixTrader implements Serializable {
+public class CoinTrader implements Serializable {
 
     /**
      * 主键

+ 8 - 5
src/main/java/top/lvzhiqiang/mapper/CoinMapper.java

@@ -4,7 +4,7 @@ import org.apache.ibatis.annotations.Insert;
 import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Select;
 import top.lvzhiqiang.entity.CoinHistoryOrder;
-import top.lvzhiqiang.entity.CoinMixTrader;
+import top.lvzhiqiang.entity.CoinTrader;
 import top.lvzhiqiang.entity.CoinPubilcParams;
 
 import java.util.List;
@@ -51,7 +51,7 @@ public interface CoinMapper {
     List<CoinPubilcParams> findPublicParams();
 
     @Insert({"<script>" +
-            "INSERT INTO coin_mix_trader(traderUid,traderNickName,maxFollowCount,followCount,totalFollowers,profitOrderCount,lossOrderCount," +
+            "INSERT INTO coin_trader(traderUid,traderNickName,maxFollowCount,followCount,totalFollowers,profitOrderCount,lossOrderCount," +
             "totalTradeCount,dailyProfitRate,dailyProfit,copyTradeDays,roi,totalProfit,totalFollowersProfit,aum,maxCallbackRate,last3wWinRate," +
             "averageWinRate,traderHeadPic,canTrace,tradingPairsAvailable,profile,lastTradeTime,modify_time)" +
             " VALUES " +
@@ -66,10 +66,10 @@ public interface CoinMapper {
             "aum=values(aum),maxCallbackRate=values(maxCallbackRate),last3wWinRate=values(last3wWinRate),averageWinRate=values(averageWinRate),traderHeadPic=values(traderHeadPic)," +
             "canTrace=values(canTrace),tradingPairsAvailable=values(tradingPairsAvailable),profile=values(profile),lastTradeTime=values(lastTradeTime),modify_time=now()" +
             "</script>"})
-    void insertMixTradeList(List<CoinMixTrader> parseMixTradeList);
+    void insertMixTradeList(List<CoinTrader> parseMixTradeList);
 
     @Select({"<script>" +
-            "select *  from coin_mix_trader WHERE  1 = 1" +
+            "select *  from coin_trader WHERE  1 = 1" +
             "<if test=\"keyword != null and keyword != ''\">" +
             "   and traderNickName like concat('%',#{keyword},'%')" +
             "</if>" +
@@ -78,5 +78,8 @@ public interface CoinMapper {
             "</if>" +
             " order by ${sortField} ${sort}" +
             "</script>"})
-    List<CoinMixTrader> findMixTraderList(Map<String, Object> params);
+    List<CoinTrader> findMixTraderList(Map<String, Object> params);
+
+    @Select("select concat(traderUid, '|', traderNickName) from coin_monitor_trader where delete_flag = '1'")
+    List<String> findMonitorTraderList();
 }

+ 43 - 36
src/main/java/top/lvzhiqiang/service/impl/CoinServiceImpl.java

@@ -20,7 +20,7 @@ import org.springframework.util.StopWatch;
 import top.lvzhiqiang.config.InitRunner;
 import top.lvzhiqiang.config.WorkWeixinProperties;
 import top.lvzhiqiang.entity.CoinHistoryOrder;
-import top.lvzhiqiang.entity.CoinMixTrader;
+import top.lvzhiqiang.entity.CoinTrader;
 import top.lvzhiqiang.mapper.CoinMapper;
 import top.lvzhiqiang.service.CoinService;
 import top.lvzhiqiang.util.*;
@@ -84,6 +84,7 @@ public class CoinServiceImpl implements CoinService {
     private final ForkJoinPool forkJoinPool2 = new ForkJoinPool(16);
     private final ForkJoinPool forkJoinPool3 = new ForkJoinPool(16);
     private final ForkJoinPool forkJoinPool4 = new ForkJoinPool(16);
+    private final ForkJoinPool forkJoinPool5 = new ForkJoinPool(16);
     private static final DecimalFormat df1 = new DecimalFormat("#,##0.00");
 
     static {
@@ -167,8 +168,8 @@ public class CoinServiceImpl implements CoinService {
         coinMapper.insertMixTradeList(parseMixTradeList(dataList));
     }
 
-    private List<CoinMixTrader> parseMixTradeList(JSONArray dataList) {
-        List<CoinMixTrader> mixTraderList = JSONArray.parseArray(dataList.toJSONString(), CoinMixTrader.class);
+    private List<CoinTrader> parseMixTradeList(JSONArray dataList) {
+        List<CoinTrader> mixTraderList = JSONArray.parseArray(dataList.toJSONString(), CoinTrader.class);
         mixTraderList.stream().forEach(e -> {
             Map<String, String> columnMap = e.getColumnList().stream().filter(Objects::nonNull)
                     .collect(Collectors.toMap(
@@ -437,41 +438,47 @@ public class CoinServiceImpl implements CoinService {
 
         // 跟单员监控报警
         scheduler.scheduleWithFixedDelay(() -> {
-            LocalDateTime endTime = LocalDateTime.now();
-            // 交易员当前带单列表
-            Map<String, String> paramMap = new LinkedHashMap<>();
-            paramMap.put("traderId", "b1b5467f8bb73f53ac97");
-            paramMap.put("pageNo", "1");
-            paramMap.put("pageSize", "20");
+            List<String> monitorTraderList = coinMapper.findMonitorTraderList();
+            forkJoinPool5.submit(() -> monitorTraderList.parallelStream().forEach(e -> {
+                LocalDateTime endTime = LocalDateTime.now();
+                // 交易员当前带单列表
+                Map<String, String> paramMap = new LinkedHashMap<>();
 
-            try {
-                JSONObject response = requestApi4Common("/api/mix/v1/trace/report/order/currentList", null, JSONObject.toJSONString(paramMap), JsoupUtil.HTTP_POST, paramMap);
-                JSONArray orderList = response.getJSONArray("data");
+                String[] split = e.split("\\|");
 
-                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");
+                paramMap.put("traderId", split[0]);
+                paramMap.put("pageNo", "1");
+                paramMap.put("pageSize", "20");
 
-                        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>止盈价:" + order.getString("takeProfitPrice") + "</div>" +
-                                "<div>止损价:" + order.getString("stopLossPrice") + "</div>" +
-                                "<div >交易员:" + "hale" + "</div>" +
-                                "<div class=\"gray\">开仓时间:" + DateUtils.longToString(order.getLong("openTime")) + "</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);
+                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 = "<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>止盈价:" + order.getString("takeProfitPrice") + "</div>" +
+                                    "<div>止损价:" + order.getString("stopLossPrice") + "</div>" +
+                                    "<div >交易员:" + split[1] + "</div>" +
+                                    "<div class=\"gray\">开仓时间:" + DateUtils.longToString(order.getLong("openTime")) + "</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 ex) {
                 }
-            } catch (Exception e) {
-            }
+            })).join();
         }, 0, 3, TimeUnit.SECONDS);
 
         return null;
@@ -654,7 +661,7 @@ public class CoinServiceImpl implements CoinService {
             result = (JSONArray) JSON.toJSON(historyOrderList);
         } else if (params.getString("nameEn").equals("traderList")) {
             PageHelper.startPage(params.getInteger("pageNo"), params.getInteger("pageSize"), true);
-            List<CoinMixTrader> mixTraderList = coinMapper.findMixTraderList(params.toJavaObject(Map.class));
+            List<CoinTrader> mixTraderList = coinMapper.findMixTraderList(params.toJavaObject(Map.class));
 
             renderMainSearch4TraderList(mixTraderList);
             result = (JSONArray) JSON.toJSON(mixTraderList);
@@ -684,8 +691,8 @@ public class CoinServiceImpl implements CoinService {
         return result;
     }
 
-    private void renderMainSearch4TraderList(List<CoinMixTrader> mixTraderList) {
-        for (CoinMixTrader mixTrader : mixTraderList) {
+    private void renderMainSearch4TraderList(List<CoinTrader> mixTraderList) {
+        for (CoinTrader mixTrader : mixTraderList) {
 
             mixTrader.setLastTradeTime(DateUtils.longToString(Long.valueOf(mixTrader.getLastTradeTime())));
         }

+ 1 - 1
src/main/resources/static/bg.html

@@ -198,7 +198,7 @@
                 <option value="javdb">javdb</option>
             </select>
             <span>url</span>
-            <input type="text" name="url" placeholder="https://www.javbus.com" style="width: 100px;"/>
+            <input type="text" name="url" placeholder="https://www.javbus.com"/>
             <span>identificationCode</span>
             <input type="text" name="identificationCode"/>
             <input type="submit" value="提交">