lvzhiqiang 4 ヶ月 前
コミット
ed58464744

+ 4 - 0
src/main/java/top/lvzhiqiang/config/InitRunner.java

@@ -74,4 +74,8 @@ public class InitRunner implements ApplicationRunner {
             crawler4JavdbService.monitorActors();
         }
     }
+
+    public static void setProxy(Proxy proxy2) {
+        proxy = proxy2;
+    }
 }

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

@@ -66,4 +66,8 @@ public interface CoinService {
     Object login(String username, String password);
 
     R insertOrUpdateCurrentHolding(JSONObject params);
+
+    void monitorBitgetMixOrder();
+
+    void monitorBitgetMixReturnrate();
 }

+ 155 - 143
src/main/java/top/lvzhiqiang/service/impl/CoinServiceImpl.java

@@ -479,53 +479,7 @@ public class CoinServiceImpl implements CoinService {
     public String monitorJob() {
         // BITGET开仓平仓监控报警
         scheduler.scheduleWithFixedDelay(() -> {
-            if (!"1".equals(getMonitorJobStatus("bitget-mix-order"))) {
-                return;
-            }
-
-            LocalDateTime endTime = LocalDateTime.now();
-            // 全部历史委托列表
-            Map<String, String> paramMap = new LinkedHashMap<>();
-            paramMap.put("productType", "umcbl");
-            paramMap.put("startTime", String.valueOf(DateUtils.localDateTimeToMilliseconds(endTime.minusMinutes(1))));
-            paramMap.put("endTime", String.valueOf(DateUtils.localDateTimeToMilliseconds(endTime)));
-            paramMap.put("pageSize", "100");
-
-            String signQueryString = paramMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
-            try {
-                JSONObject response = requestApi4Common("/api/mix/v1/order/historyProductType", signQueryString, null, JsoupUtil.HTTP_GET, paramMap);
-                JSONArray orderList = response.getJSONObject("data").getJSONArray("orderList");
-                if (null == orderList) {
-                    return;
-                }
-
-                for (int i = 0; i < orderList.size(); i++) {
-                    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");
-                        log.warn("bitget-mix-order exec,orderId={}", orderId);
-
-                        String content = "<div class=\"highlight\">交易对:" + order.getString("symbol") + "</div>" +
-                                "<div>交易方向:" + InitRunner.publicParamsMap.get("tradeSide").getString(order.getString("tradeSide")) + "</div>" +
-                                "<div>杠杆倍数:" + order.getString("leverage") + "</div>" +
-                                "<div>成交均价:" + order.getString("priceAvg") + "</div>" +
-                                "<div>委托价格:" + order.getString("price") + "</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") ? "BITGET合约开单" : "BITGET合约平单") + "报警");
-                        params.put("logUrl", "https://jav.lvzhiqiang.top/coin/orderDetail2/" + orderId + "/" + symbol);
-                        params.put("btnTxt", "订单详情");
-                        SpringUtils.getBean(CoinServiceImpl.class).monitorAlarm4APP_TEXT_CARD(content, params, null);
-                    }
-                }
-            } catch (Exception e) {
-                log.error("bitget-mix-order error", e);
-            }
+            monitorBitgetMixOrder();
         }, 0, 10, TimeUnit.SECONDS);
 
         // OKX开仓平仓监控报警
@@ -567,98 +521,8 @@ public class CoinServiceImpl implements CoinService {
         }, 0, 10, TimeUnit.SECONDS);
 
         scheduler.scheduleWithFixedDelay(() -> {
-            if (!"1".equals(getMonitorJobStatus("bitget-mix-returnrate"))) {
-                return;
-            }
-
-            // BITGET全部合约仓位信息V2
-            Map<String, String> paramMap = new HashMap<>();
-            paramMap.put("productType", "umcbl");
-
-            String signQueryString = paramMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
-            try {
-                JSONObject response = requestApi4Common("/api/mix/v1/position/allPosition-v2", signQueryString, null, JsoupUtil.HTTP_GET, paramMap);
-                JSONArray mixList = response.getJSONArray("data");
-                for (int i = 0; i < mixList.size(); i++) {
-                    JSONObject mixData = mixList.getJSONObject(i);
-
-                    String symbol = mixData.getString("symbol");
-                    String margin = mixData.getString("margin");
-                    String averageOpenPrice = mixData.getString("averageOpenPrice");
-                    String key = symbol + margin + averageOpenPrice;
-
-                    // 回报率=未实现盈亏/保证金
-
-                    // 持仓方向 long:多头 short:空头
-                    String holdSide = mixData.getString("holdSide");
-                    BigDecimal returnRate = new BigDecimal(mixData.getString("unrealizedPL")).divide(new BigDecimal(margin), 4, RoundingMode.HALF_UP);
-                    for (int j = 1; j <= 10; j++) {
-                        BigDecimal grid = BigDecimal.valueOf(0.5).multiply(BigDecimal.valueOf(j));
-                        BigDecimal minusGrid = BigDecimal.valueOf(-0.5).multiply(BigDecimal.valueOf(j));
-                        if (returnRate.compareTo(grid) < 0) {
-                            if (mixMap.containsKey(key)) {
-                                mixMap.get(key).put("returnRate", returnRate);
-                            } else {
-                                JSONObject jsonObject = new JSONObject();
-                                jsonObject.put("returnRate", returnRate);
-                                mixMap.put(key, jsonObject);
-                            }
-                            break;
-                        }
-
-                        if (returnRate.compareTo(grid) > 0) {
-                            if (mixMap.containsKey(key)) {
-                                mixMap.get(key).put("returnRate", returnRate);
-                                if (mixMap.get(key).containsKey(grid.toPlainString())) {
-                                    continue;
-                                } else {
-                                    mixMap.get(key).put(grid.toPlainString(), true);
-
-                                    String requestUrl = mainUrl + "/api/mix/v1/market/ticker?symbol=" + symbol;
-                                    String last = "--";
-                                    try {
-                                        Connection.Response responseTicker = JsoupUtil.requestBody(requestUrl, JsoupUtil.HTTP_GET, InitRunner.proxy, null, null);
-                                        last = JSONObject.parseObject(responseTicker.body()).getJSONObject("data").getString("last");
-                                    } catch (Exception e) {
-                                    }
-                                    String content = "币对名称:" + symbol + "\n" +
-                                            "持仓方向:" + InitRunner.publicParamsMap.get("holdSide").getString(mixData.getString("holdSide")) + "\n" +
-                                            "杠杆倍数:" + mixData.getString("leverage") + "\n" +
-                                            "开仓均价:" + mixData.getString("averageOpenPrice") + "\n" +
-                                            "当前价格:" + last + "\n" +
-                                            "回报率:" + returnRate.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString() + ",超过" + grid.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString();
-                                    SpringUtils.getBean(CoinServiceImpl.class).monitorAlarm4CHAT_BOT(content, null);
-                                }
-                            } else {
-                                JSONObject jsonObject = new JSONObject();
-                                jsonObject.put("returnRate", returnRate);
-                                jsonObject.put(grid.toPlainString(), true);
-                                mixMap.put(key, jsonObject);
-
-                                String requestUrl = mainUrl + "/api/mix/v1/market/ticker?symbol=" + symbol;
-                                String last = "--";
-                                try {
-                                    Connection.Response responseTicker = JsoupUtil.requestBody(requestUrl, JsoupUtil.HTTP_GET, InitRunner.proxy, null, null);
-                                    last = JSONObject.parseObject(responseTicker.body()).getJSONObject("data").getString("last");
-                                } catch (Exception e) {
-                                }
-                                String content = "币对名称:" + symbol + "\n" +
-                                        "持仓方向:" + InitRunner.publicParamsMap.get("holdSide").getString(mixData.getString("holdSide")) + "\n" +
-                                        "杠杆倍数:" + mixData.getString("leverage") + "\n" +
-                                        "开仓均价:" + mixData.getString("averageOpenPrice") + "\n" +
-                                        "当前价格:" + last + "\n" +
-                                        "回报率:" + returnRate.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString() + ",超过" + grid.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString();
-                                SpringUtils.getBean(CoinServiceImpl.class).monitorAlarm4CHAT_BOT(content, null);
-
-                                //break;
-                            }
-                        }
-                    }
-                }
-            } catch (Exception e) {
-                log.error("bitget-mix-returnrate error", e);
-            }
-        }, 0, 5, TimeUnit.SECONDS);
+            monitorBitgetMixReturnrate();
+        }, 0, 10, TimeUnit.SECONDS);
 
         // BITGET跟单员监控报警
         scheduler.scheduleWithFixedDelay(() -> {
@@ -714,7 +578,7 @@ public class CoinServiceImpl implements CoinService {
             } catch (Exception e) {
                 log.error("bitget-mix-trader top error", e);
             }
-        }, 0, 3, TimeUnit.SECONDS);
+        }, 0, 10, TimeUnit.SECONDS);
 
         // 星球日报新闻快讯监控报警
         scheduler.scheduleWithFixedDelay(() -> {
@@ -770,7 +634,7 @@ public class CoinServiceImpl implements CoinService {
             } catch (Exception e) {
                 log.error("news-odaily top error", e);
             }
-        }, 0, 5, TimeUnit.SECONDS);
+        }, 0, 10, TimeUnit.SECONDS);
 
         // 律动日报新闻快讯监控报警
         scheduler.scheduleWithFixedDelay(() -> {
@@ -850,7 +714,7 @@ public class CoinServiceImpl implements CoinService {
             } catch (Exception e) {
                 log.error("news-theblockbeats top error", e);
             }
-        }, 0, 5, TimeUnit.SECONDS);
+        }, 0, 10, TimeUnit.SECONDS);
 
         // coingecko
         scheduler.scheduleWithFixedDelay(() -> {
@@ -948,7 +812,7 @@ public class CoinServiceImpl implements CoinService {
                 } catch (InterruptedException ex) {
                 }
             }
-        }, 0, 5, TimeUnit.SECONDS);
+        }, 0, 10, TimeUnit.SECONDS);
 
         return null;
     }
@@ -1182,6 +1046,154 @@ public class CoinServiceImpl implements CoinService {
         return R.ok().data("success");
     }
 
+    @Override
+    public void monitorBitgetMixOrder() {
+        if (!"1".equals(getMonitorJobStatus("bitget-mix-order"))) {
+            return;
+        }
+
+        LocalDateTime endTime = LocalDateTime.now();
+        // 全部历史委托列表
+        Map<String, String> paramMap = new LinkedHashMap<>();
+        paramMap.put("productType", "umcbl");
+        paramMap.put("startTime", String.valueOf(DateUtils.localDateTimeToMilliseconds(endTime.minusMinutes(1))));
+        //paramMap.put("startTime", String.valueOf(DateUtils.localDateTimeToMilliseconds(endTime.minusDays(3))));
+        paramMap.put("endTime", String.valueOf(DateUtils.localDateTimeToMilliseconds(endTime)));
+        paramMap.put("pageSize", "100");
+
+        String signQueryString = paramMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
+        try {
+            JSONObject response = requestApi4Common("/api/mix/v1/order/historyProductType", signQueryString, null, JsoupUtil.HTTP_GET, paramMap);
+            JSONArray orderList = response.getJSONObject("data").getJSONArray("orderList");
+            if (null == orderList) {
+                return;
+            }
+
+            log.warn("bitget-mix-order exec,orderList={}", orderList.size());
+            for (int i = 0; i < orderList.size(); i++) {
+                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() < 200 && !orderMap.containsKey(orderId)) {
+                    orderMap.put(orderId, "1");
+                    log.warn("bitget-mix-order exec,orderId={}", orderId);
+
+                    String content = "<div class=\"highlight\">交易对:" + order.getString("symbol") + "</div>" +
+                            "<div>交易方向:" + InitRunner.publicParamsMap.get("tradeSide").getString(order.getString("tradeSide")) + "</div>" +
+                            "<div>杠杆倍数:" + order.getString("leverage") + "</div>" +
+                            "<div>成交均价:" + order.getString("priceAvg") + "</div>" +
+                            "<div>委托价格:" + order.getString("price") + "</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") ? "BITGET合约开单" : "BITGET合约平单") + "报警");
+                    params.put("logUrl", "https://jav.lvzhiqiang.top/coin/orderDetail2/" + orderId + "/" + symbol);
+                    params.put("btnTxt", "订单详情");
+                    SpringUtils.getBean(CoinServiceImpl.class).monitorAlarm4APP_TEXT_CARD(content, params, null);
+                }
+            }
+        } catch (Exception e) {
+            log.error("bitget-mix-order error", e);
+        }
+    }
+
+    @Override
+    public void monitorBitgetMixReturnrate() {
+        if (!"1".equals(getMonitorJobStatus("bitget-mix-returnrate"))) {
+            return;
+        }
+
+        // BITGET全部合约仓位信息V2
+        Map<String, String> paramMap = new HashMap<>();
+        paramMap.put("productType", "umcbl");
+
+        String signQueryString = paramMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
+        try {
+            JSONObject response = requestApi4Common("/api/mix/v1/position/allPosition-v2", signQueryString, null, JsoupUtil.HTTP_GET, paramMap);
+            JSONArray mixList = response.getJSONArray("data");
+            for (int i = 0; i < mixList.size(); i++) {
+                JSONObject mixData = mixList.getJSONObject(i);
+
+                String symbol = mixData.getString("symbol");
+                String margin = mixData.getString("margin");
+                String averageOpenPrice = mixData.getString("averageOpenPrice");
+                String key = symbol + margin + averageOpenPrice;
+
+                // 回报率=未实现盈亏/保证金
+
+                // 持仓方向 long:多头 short:空头
+                String holdSide = mixData.getString("holdSide");
+                BigDecimal returnRate = new BigDecimal(mixData.getString("unrealizedPL")).divide(new BigDecimal(margin), 4, RoundingMode.HALF_UP);
+                for (int j = 1; j <= 10; j++) {
+                    BigDecimal grid = BigDecimal.valueOf(0.5).multiply(BigDecimal.valueOf(j));
+                    BigDecimal minusGrid = BigDecimal.valueOf(-0.5).multiply(BigDecimal.valueOf(j));
+                    if (returnRate.compareTo(grid) < 0) {
+                        if (mixMap.containsKey(key)) {
+                            mixMap.get(key).put("returnRate", returnRate);
+                        } else {
+                            JSONObject jsonObject = new JSONObject();
+                            jsonObject.put("returnRate", returnRate);
+                            mixMap.put(key, jsonObject);
+                        }
+                        break;
+                    }
+
+                    if (returnRate.compareTo(grid) > 0) {
+                        if (mixMap.containsKey(key)) {
+                            mixMap.get(key).put("returnRate", returnRate);
+                            if (mixMap.get(key).containsKey(grid.toPlainString())) {
+                                continue;
+                            } else {
+                                mixMap.get(key).put(grid.toPlainString(), true);
+
+                                String requestUrl = mainUrl + "/api/mix/v1/market/ticker?symbol=" + symbol;
+                                String last = "--";
+                                try {
+                                    Connection.Response responseTicker = JsoupUtil.requestBody(requestUrl, JsoupUtil.HTTP_GET, InitRunner.proxy, null, null);
+                                    last = JSONObject.parseObject(responseTicker.body()).getJSONObject("data").getString("last");
+                                } catch (Exception e) {
+                                }
+                                String content = "币对名称:" + symbol + "\n" +
+                                        "持仓方向:" + InitRunner.publicParamsMap.get("holdSide").getString(mixData.getString("holdSide")) + "\n" +
+                                        "杠杆倍数:" + mixData.getString("leverage") + "\n" +
+                                        "开仓均价:" + mixData.getString("averageOpenPrice") + "\n" +
+                                        "当前价格:" + last + "\n" +
+                                        "回报率:" + returnRate.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString() + ",超过" + grid.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString();
+                                SpringUtils.getBean(CoinServiceImpl.class).monitorAlarm4CHAT_BOT(content, null);
+                            }
+                        } else {
+                            JSONObject jsonObject = new JSONObject();
+                            jsonObject.put("returnRate", returnRate);
+                            jsonObject.put(grid.toPlainString(), true);
+                            mixMap.put(key, jsonObject);
+
+                            String requestUrl = mainUrl + "/api/mix/v1/market/ticker?symbol=" + symbol;
+                            String last = "--";
+                            try {
+                                Connection.Response responseTicker = JsoupUtil.requestBody(requestUrl, JsoupUtil.HTTP_GET, InitRunner.proxy, null, null);
+                                last = JSONObject.parseObject(responseTicker.body()).getJSONObject("data").getString("last");
+                            } catch (Exception e) {
+                            }
+                            String content = "币对名称:" + symbol + "\n" +
+                                    "持仓方向:" + InitRunner.publicParamsMap.get("holdSide").getString(mixData.getString("holdSide")) + "\n" +
+                                    "杠杆倍数:" + mixData.getString("leverage") + "\n" +
+                                    "开仓均价:" + mixData.getString("averageOpenPrice") + "\n" +
+                                    "当前价格:" + last + "\n" +
+                                    "回报率:" + returnRate.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString() + ",超过" + grid.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString();
+                            SpringUtils.getBean(CoinServiceImpl.class).monitorAlarm4CHAT_BOT(content, null);
+
+                            //break;
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("bitget-mix-returnrate error", e);
+        }
+    }
+
     private void initCexSpotFlag(Map<String, CoinWatchlistOther> coinWatchlistOtherMap4Symbol) {
         // spot
         String coingeckoExchangeTickersUrl = InitRunner.dicCodeMap.get("coingecko_exchange_tickers_url").getCodeValue();

+ 3 - 1
src/main/java/top/lvzhiqiang/service/impl/Crawler4JavdbServiceImpl.java

@@ -88,6 +88,7 @@ public class Crawler4JavdbServiceImpl implements Crawler4JavdbService {
 
             Document document;
             Elements itembSelects;
+            int findSize = 0;
             for (VideoMonitorActors videoMonitorActors : videoMonitorActorsList) {
                 try {
                     List<String> insertCodeList = new ArrayList<>();
@@ -134,13 +135,14 @@ public class Crawler4JavdbServiceImpl implements Crawler4JavdbService {
                     }
 
                     if (insertCodeList.size() > 0) {
+                        findSize += insertCodeList.size();
                         videoMonitorActorsMapper.insertLogList(insertCodeList, videoMonitorActors.getSymbol(), 1);
                     }
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
             }
-            log.warn("monitorActors结束==============================");
+            log.warn("monitorActors结束==============================findSize={}", findSize);
         }, 0, 2, TimeUnit.HOURS);
 
         scheduler.scheduleAtFixedRate(() -> {

+ 18 - 0
src/test/java/top/lvzhiqiang/TestCoin.java

@@ -7,6 +7,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import top.lvzhiqiang.config.InitRunner;
 import top.lvzhiqiang.entity.CoinWatchlist;
 import top.lvzhiqiang.mapper.CoinMapper;
 import top.lvzhiqiang.service.CoinService;
@@ -16,6 +17,8 @@ import top.lvzhiqiang.util.DateUtils;
 
 import javax.annotation.Resource;
 import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
 import java.time.LocalDateTime;
 import java.util.*;
 
@@ -104,6 +107,21 @@ public class TestCoin {
         coinYoutubeService.jsoupYoutubeLive4yt2140Chapter(3, "", null);
     }
 
+    @Test
+    public void testMonitorBitgetMixOrder() {
+        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 7897));
+        InitRunner.setProxy(proxy);
+        coinService.monitorBitgetMixOrder();
+    }
+
+
+    @Test
+    public void testMonitorBitgetMixReturnrate() {
+        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 7897));
+        InitRunner.setProxy(proxy);
+        coinService.monitorBitgetMixReturnrate();
+    }
+
     public static void main(String[] args) {
         String s = "[{\"id\":\"dogecoin\",\"symbol\":\"doge\",\"name\":\"Dogecoin\",\"image\":\"https://assets.coingecko.com/coins/images/5/large/dogecoin.png?1696501409\",\"current_price\":0.091631,\"market_cap\":13047603006,\"market_cap_rank\":11,\"fully_diluted_valuation\":13047543490,\"total_volume\":460955017,\"high_24h\":0.094371,\"low_24h\":0.090707,\"price_change_24h\":-0.002739353491127444,\"price_change_percentage_24h\":-2.90276,\"market_cap_change_24h\":-405382366.76885605,\"market_cap_change_percentage_24h\":-3.01333,\"circulating_supply\":142498276383.705,\"total_supply\":142497626383.705,\"max_supply\":null,\"ath\":0.731578,\"ath_change_percentage\":-87.46751,\"ath_date\":\"2021-05-08T05:08:23.458Z\",\"atl\":8.69e-05,\"atl_change_percentage\":105401.73855,\"atl_date\":\"2015-05-06T00:00:00.000Z\",\"roi\":null,\"last_updated\":\"2024-01-03T08:51:38.584Z\"}]";
         JSONArray marketData = JSONArray.parseArray(s);

+ 100 - 0
src/test/java/top/lvzhiqiang/TestVideo.java

@@ -1,6 +1,13 @@
 package top.lvzhiqiang;
 
+import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
+import org.jsoup.Connection;
+import org.jsoup.HttpStatusException;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -8,10 +15,17 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 import top.lvzhiqiang.entity.*;
 import top.lvzhiqiang.mapper.*;
 import top.lvzhiqiang.service.BgService;
+import top.lvzhiqiang.util.JsoupUtil;
 import top.lvzhiqiang.util.StringUtils;
 
 import javax.annotation.Resource;
+import javax.net.ssl.*;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
 import java.nio.charset.StandardCharsets;
+import java.security.SecureRandom;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
 import java.util.*;
 
 /**
@@ -46,6 +60,9 @@ public class TestVideo {
     @Resource
     private VideoInfoMapper videoInfoMapper;
 
+    @Resource
+    private VideoMonitorActorsMapper videoMonitorActorsMapper;
+
     @Test
     public void testGetBusinessDeptSummary() {
         List<VideoInfoPool> videoInfoPoolList = videoInfoPoolMapper.findAll();
@@ -63,6 +80,89 @@ public class TestVideo {
     }
 
     @Test
+    public void testMonitorActors(){
+        String website = "javdb";
+        List<VideoMonitorActors> videoMonitorActorsList = videoMonitorActorsMapper.findAllListByWebsite(website, 1);
+
+        Document document;
+        Elements itembSelects;
+        int findSize = 0;
+        for (VideoMonitorActors videoMonitorActors : videoMonitorActorsList) {
+            try {
+                List<String> insertCodeList = new ArrayList<>();
+                List<String> codeList = videoMonitorActorsMapper.findAllLogListBySymbol(videoMonitorActors.getSymbol(), 1);
+
+                Map<String, String> headerMap = new HashMap<>();
+                headerMap.put("referer", videoMonitorActors.getHttpUrl());
+                document = JsoupUtil.requestDocument(videoMonitorActors.getHttpUrl(), JsoupUtil.HTTP_GET, Proxy.NO_PROXY, null, headerMap, null);
+                itembSelects = document.select("div.movie-list").select("div.item");
+
+                for (Element itembSelect : itembSelects) {
+                    String code = itembSelect.select("a.box").get(0).select("div.video-title").select("strong").text().trim().toUpperCase();
+                    if (codeList.contains(code)) {
+                        continue;
+                    }
+
+                    String identificationCode = videoMonitorActorsMapper.findAllLogListByCode(code, 1);
+                    if (StringUtils.isNotEmpty(identificationCode)) {
+                        continue;
+                    }
+
+                    insertCodeList.add(code);
+
+                    String url = itembSelect.select("a.box").get(0).attr("abs:href");
+                    String title = itembSelect.select("a.box").get(0).attr("title");
+                    String score = itembSelect.select("a.box").get(0).select("div.score").text().replace("&nbsp;", "").trim();
+                    String date = itembSelect.select("a.box").get(0).select("div.meta").text().trim();
+                    String tags = itembSelect.select("a.box").get(0).select("div.tags").text().trim();
+
+                    Thread.sleep(2000);
+                }
+
+                if (insertCodeList.size() > 0) {
+                    findSize += insertCodeList.size();
+                    videoMonitorActorsMapper.insertLogList(insertCodeList, videoMonitorActors.getSymbol(), 1);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    private void generateJavdbCookies(Proxy proxy) throws Exception {
+        String loginUrl = "https://javdb.com/user_sessions";
+
+        try {
+            HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
+                @Override
+                public boolean verify(String hostname, SSLSession session) {
+                    return true;
+                }
+            });
+
+            SSLContext context = SSLContext.getInstance("TLS");
+            context.init(null, new X509TrustManager[]{new X509TrustManager() {
+                @Override
+                public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+                }
+
+                @Override
+                public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+                }
+
+                @Override
+                public X509Certificate[] getAcceptedIssuers() {
+                    return new X509Certificate[0];
+                }
+            }}, new SecureRandom());
+            HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    @Test
     public void testInsertOrUpdateVideoGenres() {
         VideoGenres videoGenres = new VideoGenres();
         videoGenres.setName("教学1");