B2BÍøÂçÈí¼þ

 ÕÒ»ØÃÜÂë
 Á¢¼´×¢²á ÉóºËÍøÕ¾ºÅ:QQ:896757558
ËÑË÷
²é¿´: 4|»Ø¸´: 0
´òÓ¡ ÉÏÒ»Ö÷Ìâ ÏÂÒ»Ö÷Ìâ

Êý¾Ý¿âMYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐòÆô¶¯

[¸´ÖÆÁ´½Ó]

1000

Ö÷Ìâ

1005

Ìû×Ó

7277

»ý·Ö

abc

Rank: 9Rank: 9Rank: 9

»ý·Ö
7277
Ìø×ªµ½Ö¸¶¨Â¥²ã
Â¥Ö÷
Êý¾Ý¿âMYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐòÆô¶¯
Êý¾Ý¿âMYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐòÆô¶¯ B2BÍøÂçÈí¼þ

Êý¾Ý¿âMYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐòÆô¶¯ B2BÍøÂçÈí¼þ

  1. // MYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐò
  2. // Ä£ÄâÍêÕûµÄÒµÎñ²Ù×÷Á÷³Ì£¬°üÀ¨¶¨Ê±ÈÎÎñ¡¢Êý¾Ý¿â²Ù×÷ºÍ״̬¼à¿Ø

  3. print.log("===== MYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐòÆô¶¯ =====");

  4. // È«¾Ö±äÁ¿
  5. var conn = null;
  6. var pstmt = null;
  7. var heartbeatInterval = null;
  8. var isRunning = false;

  9. /**
  10. * Á¬½ÓÊý¾Ý¿â
  11. */
  12. function connectDatabase() {
  13.     try {
  14.         var url = "jdbc:mysql://mysql2.sqlpub.com:3307/chaook";
  15.         var user = "chaook";
  16.         var password = "JAVsRUMHkoJ123xJ";
  17.         var params = "?useSSL=false&characterEncoding=utf8";
  18.         
  19.         print.log("ÕýÔÚÁ¬½ÓÊý¾Ý¿â...");
  20.         conn = mysql.getConnection(url, user, password);
  21.         print.log("✅ Êý¾Ý¿âÁ¬½Ó³É¹¦");
  22.         return true;
  23.     } catch (e) {
  24.         print.log("❌ Êý¾Ý¿âÁ¬½Óʧ°Ü: " + e.message);
  25.         return false;
  26.     }
  27. }

  28. /**
  29. * ³õʼ»¯Êý¾Ý¿â±í½á¹¹
  30. */
  31. function initializeDatabase() {
  32.     try {
  33.         // ´´½¨É豸״̬±í
  34.         var deviceTableSql = "CREATE TABLE IF NOT EXISTS É豸״̬±í (" +
  35.                             "É豸ID VARCHAR(50) PRIMARY KEY," +
  36.                             "É豸Ãû³Æ VARCHAR(100)," +
  37.                             "ÔÚÏß״̬ TINYINT DEFAULT 0," +  // 0-ÀëÏß, 1-ÔÚÏß
  38.                             "×îºóÐÄÌøÊ±¼ä DATETIME," +
  39.                             "CPUʹÓÃÂÊ DECIMAL(5,2)," +
  40.                             "ÄÚ´æÊ¹ÓÃÂÊ DECIMAL(5,2)," +
  41.                             "´ÅÅÌʹÓÃÂÊ DECIMAL(5,2)" +
  42.                             ") ENGINE=InnoDB DEFAULT CHARSET=utf8";
  43.                            
  44.         var stmt = conn.createStatement();
  45.         stmt.executeUpdate(deviceTableSql);
  46.         stmt.close();
  47.         
  48.         // ´´½¨²Ù×÷ÈÕÖ¾±í
  49.         var logTableSql = "CREATE TABLE IF NOT EXISTS ²Ù×÷ÈÕÖ¾±í (" +
  50.                          "ÈÕÖ¾ID INT AUTO_INCREMENT PRIMARY KEY," +
  51.                          "É豸ID VARCHAR(50)," +
  52.                          "²Ù×÷ÀàÐÍ VARCHAR(50)," +
  53.                          "²Ù×÷ÏêÇé TEXT," +
  54.                          "²Ù×÷ʱ¼ä DATETIME DEFAULT CURRENT_TIMESTAMP," +
  55.                          "FOREIGN KEY (É豸ID) REFERENCES É豸״̬±í(É豸ID) ON DELETE CASCADE" +
  56.                          ") ENGINE=InnoDB DEFAULT CHARSET=utf8";
  57.                         
  58.         stmt = conn.createStatement();
  59.         stmt.executeUpdate(logTableSql);
  60.         stmt.close();
  61.         
  62.         print.log("✅ Êý¾Ý¿â±í½á¹¹³õʼ»¯Íê³É");
  63.         return true;
  64.     } catch (e) {
  65.         print.log("❌ Êý¾Ý¿â±í½á¹¹³õʼ»¯Ê§°Ü: " + e.message);
  66.         return false;
  67.     }
  68. }

  69. /**
  70. * ×¢²áÉ豸
  71. */
  72. function registerDevice(deviceId, deviceName) {
  73.     try {
  74.         var sql = "INSERT INTO É豸״̬±í (É豸ID, É豸Ãû³Æ, ÔÚÏß״̬, ×îºóÐÄÌøÊ±¼ä) VALUES (?, ?, 1, NOW()) " +
  75.                   "ON DUPLICATE KEY UPDATE É豸Ãû³Æ = VALUES(É豸Ãû³Æ), ÔÚÏß״̬ = 1, ×îºóÐÄÌøÊ±¼ä = NOW()";
  76.                   
  77.         var pstmt = conn.prepareStatement(sql);
  78.         pstmt.setString(1, deviceId);
  79.         pstmt.setString(2, deviceName);
  80.         pstmt.executeUpdate();
  81.         pstmt.close();
  82.         
  83.         logOperation(deviceId, "É豸ע²á", "É豸 " + deviceName + " ÒÑ×¢²á²¢ÉÏÏß");
  84.         print.log("✅ É豸 " + deviceName + " ×¢²á³É¹¦");
  85.         return true;
  86.     } catch (e) {
  87.         print.log("❌ É豸ע²áʧ°Ü: " + e.message);
  88.         return false;
  89.     }
  90. }

  91. /**
  92. * ·¢ËÍÐÄÌø°ü
  93. */
  94. function sendHeartbeat(deviceId, cpuUsage, memoryUsage, diskUsage) {
  95.     try {
  96.         var sql = "UPDATE É豸״̬±í SET ÔÚÏß״̬ = 1, ×îºóÐÄÌøÊ±¼ä = NOW(), " +
  97.                   "CPUʹÓÃÂÊ = ?, ÄÚ´æÊ¹ÓÃÂÊ = ?, ´ÅÅÌʹÓÃÂÊ = ? WHERE É豸ID = ?";
  98.                   
  99.         var pstmt = conn.prepareStatement(sql);
  100.         pstmt.setBigDecimal(1, new java.math.BigDecimal(cpuUsage.toFixed(2)));
  101.         pstmt.setBigDecimal(2, new java.math.BigDecimal(memoryUsage.toFixed(2)));
  102.         pstmt.setBigDecimal(3, new java.math.BigDecimal(diskUsage.toFixed(2)));
  103.         pstmt.setString(4, deviceId);
  104.         pstmt.executeUpdate();
  105.         pstmt.close();
  106.         
  107.         logOperation(deviceId, "ÐÄÌø°ü", "·¢ËÍÐÄÌø°ü - CPU:" + cpuUsage.toFixed(2) + "% ÄÚ´æ:" + memoryUsage.toFixed(2) + "% ´ÅÅÌ:" + diskUsage.toFixed(2) + "%");
  108.         print.log("✅ É豸 " + deviceId + " ÐÄÌø°ü·¢Ëͳɹ¦");
  109.         return true;
  110.     } catch (e) {
  111.         print.log("❌ ÐÄÌø°ü·¢ËÍʧ°Ü: " + e.message);
  112.         return false;
  113.     }
  114. }

  115. /**
  116. * ¼Ç¼²Ù×÷ÈÕÖ¾
  117. */
  118. function logOperation(deviceId, operationType, details) {
  119.     try {
  120.         var sql = "INSERT INTO ²Ù×÷ÈÕÖ¾±í (É豸ID, ²Ù×÷ÀàÐÍ, ²Ù×÷ÏêÇé) VALUES (?, ?, ?)";
  121.         var pstmt = conn.prepareStatement(sql);
  122.         pstmt.setString(1, deviceId);
  123.         pstmt.setString(2, operationType);
  124.         pstmt.setString(3, details);
  125.         pstmt.executeUpdate();
  126.         pstmt.close();
  127.         return true;
  128.     } catch (e) {
  129.         // ÈÕÖ¾¼Ç¼ʧ°Ü²»Ó°ÏìÖ÷Á÷³Ì
  130.         print.log("⚠️ ²Ù×÷ÈÕÖ¾¼Ç¼ʧ°Ü: " + e.message);
  131.         return false;
  132.     }
  133. }

  134. /**
  135. * ¼ì²éÉ豸״̬
  136. */
  137. function checkDeviceStatus() {
  138.     try {
  139.         var sql = "SELECT É豸ID, É豸Ãû³Æ, ÔÚÏß״̬, ×îºóÐÄÌøÊ±¼ä, CPUʹÓÃÂÊ, ÄÚ´æÊ¹ÓÃÂÊ, ´ÅÅÌʹÓÃÂÊ FROM É豸״̬±í";
  140.         var stmt = conn.createStatement();
  141.         var rs = stmt.executeQuery(sql);
  142.         
  143.         print.log("\n=== É豸״̬¼à¿Ø ===");
  144.         print.log("É豸ID\t\tÉ豸Ãû³Æ\t\tÔÚÏß״̬\t×îºóÐÄÌøÊ±¼ä\t\t\tCPU%\tÄÚ´æ%\t´ÅÅÌ%");
  145.         print.log("------------------------------------------------------------------------------------------------------------");
  146.         
  147.         var offlineDevices = [];
  148.         var highLoadDevices = [];
  149.         
  150.         while (rs.next()) {
  151.             var deviceId = rs.getString("É豸ID");
  152.             var deviceName = rs.getString("É豸Ãû³Æ");
  153.             var onlineStatus = rs.getInt("ÔÚÏß״̬");
  154.             var lastHeartbeat = rs.getTimestamp("×îºóÐÄÌøÊ±¼ä");
  155.             var cpuUsage = rs.getBigDecimal("CPUʹÓÃÂÊ") || new java.math.BigDecimal("0");
  156.             var memoryUsage = rs.getBigDecimal("ÄÚ´æÊ¹ÓÃÂÊ") || new java.math.BigDecimal("0");
  157.             var diskUsage = rs.getBigDecimal("´ÅÅÌʹÓÃÂÊ") || new java.math.BigDecimal("0");
  158.             
  159.             // ¸ñʽ»¯Êä³ö
  160.             var nameStr = deviceName + "\t\t";
  161.             if (deviceName.length >= 4) nameStr = deviceName + "\t";
  162.             
  163.             var statusStr = onlineStatus === 1 ? "ÔÚÏß" : "ÀëÏß";
  164.             
  165.             print.log(deviceId + "\t" + nameStr + statusStr + "\t\t" + lastHeartbeat + "\t" +
  166.                      cpuUsage + "\t" + memoryUsage + "\t" + diskUsage);
  167.             
  168.             // ¼ì²éÀëÏßÉ豸
  169.             if (onlineStatus !== 1) {
  170.                 offlineDevices.push({id: deviceId, name: deviceName});
  171.             }
  172.             
  173.             // ¼ì²é¸ß¸ºÔØÉ豸 (CPU»òÄÚ´æÊ¹ÓÃÂʳ¬¹ý80%)
  174.             if (cpuUsage.compareTo(new java.math.BigDecimal("80")) > 0 ||
  175.                 memoryUsage.compareTo(new java.math.BigDecimal("80")) > 0) {
  176.                 highLoadDevices.push({id: deviceId, name: deviceName, cpu: cpuUsage, memory: memoryUsage});
  177.             }
  178.         }
  179.         
  180.         rs.close();
  181.         stmt.close();
  182.         
  183.         // ±¨¸æÒì³£É豸
  184.         if (offlineDevices.length > 0) {
  185.             print.log("\n⚠️ ·¢ÏÖ " + offlineDevices.length + " ̨ÀëÏßÉ豸:");
  186.             for (var i = 0; i < offlineDevices.length; i++) {
  187.                 print.log("  - " + offlineDevices[i].name + " (" + offlineDevices[i].id + ")");
  188.             }
  189.         }
  190.         
  191.         if (highLoadDevices.length > 0) {
  192.             print.log("\n⚠️ ·¢ÏÖ " + highLoadDevices.length + " ̨¸ß¸ºÔØÉ豸:");
  193.             for (var i = 0; i < highLoadDevices.length; i++) {
  194.                 var dev = highLoadDevices[i];
  195.                 print.log("  - " + dev.name + " (" + dev.id + ") CPU:" + dev.cpu + "% ÄÚ´æ:" + dev.memory + "%");
  196.             }
  197.         }
  198.         
  199.         if (offlineDevices.length === 0 && highLoadDevices.length === 0) {
  200.             print.log("\n✅ ËùÓÐÉ豸״̬Õý³£");
  201.         }
  202.         
  203.         print.log("");
  204.         return true;
  205.     } catch (e) {
  206.         print.log("❌ É豸״̬¼ì²éʧ°Ü: " + e.message);
  207.         return false;
  208.     }
  209. }

  210. /**
  211. * Ä£ÄâÉ豸Êý¾ÝÉú³É
  212. */
  213. function generateDeviceData() {
  214.     var devices = [
  215.         {id: "DEVICE_001", name: "Web·þÎñÆ÷1"},
  216.         {id: "DEVICE_002", name: "Êý¾Ý¿â·þÎñÆ÷"},
  217.         {id: "DEVICE_003", name: "Ó¦Ó÷þÎñÆ÷1"},
  218.         {id: "DEVICE_004", name: "»º´æ·þÎñÆ÷"},
  219.         {id: "DEVICE_005", name: "¸ºÔؾùºâÆ÷"}
  220.     ];
  221.    
  222.     return devices;
  223. }

  224. /**
  225. * Ä£Äâϵͳ×ÊԴʹÓÃÂÊ
  226. */
  227. function simulateSystemMetrics() {
  228.     // Ä£ÄâCPUʹÓÃÂÊ (0-100%)
  229.     var cpu = Math.random() * 100;
  230.    
  231.     // Ä£ÄâÄÚ´æÊ¹ÓÃÂÊ (0-100%)
  232.     var memory = Math.random() * 100;
  233.    
  234.     // Ä£Äâ´ÅÅÌʹÓÃÂÊ (0-100%£¬Í¨³£½Ï¸ß)
  235.     var disk = 30 + Math.random() * 60;
  236.    
  237.     return {
  238.         cpu: cpu,
  239.         memory: memory,
  240.         disk: disk
  241.     };
  242. }

  243. /**
  244. * ÐÄÌøÈÎÎñÖ´Ðк¯Êý
  245. */
  246. function executeHeartbeatTask() {
  247.     print.log("\n⏰ Ö´ÐÐÐÄÌøÈÎÎñ - " + new Date());
  248.    
  249.     try {
  250.         // ¼ì²éÊý¾Ý¿âÁ¬½Ó
  251.         if (!conn || conn.isClosed()) {
  252.             print.log("⚠️ Êý¾Ý¿âÁ¬½ÓÒѶϿª£¬³¢ÊÔÖØÐÂÁ¬½Ó...");
  253.             if (!connectDatabase()) {
  254.                 print.log("❌ ÎÞ·¨ÖØÐÂÁ¬½ÓÊý¾Ý¿â£¬Ìø¹ý±¾´ÎÐÄÌøÈÎÎñ");
  255.                 return;
  256.             }
  257.         }
  258.         
  259.         // »ñÈ¡É豸Áбí
  260.         var devices = generateDeviceData();
  261.         
  262.         // Ϊÿ¸öÉ豸·¢ËÍÐÄÌø°ü
  263.         for (var i = 0; i < devices.length; i++) {
  264.             var device = devices[i];
  265.             var metrics = simulateSystemMetrics();
  266.             
  267.             // ×¢²áÉ豸£¨Èç¹ûÉÐδע²á£©
  268.             registerDevice(device.id, device.name);
  269.             
  270.             // ·¢ËÍÐÄÌø°ü
  271.             sendHeartbeat(device.id, metrics.cpu, metrics.memory, metrics.disk);
  272.         }
  273.         
  274.         // ¼ì²éÉ豸״̬
  275.         checkDeviceStatus();
  276.         
  277.         print.log("✅ ÐÄÌøÈÎÎñÖ´ÐÐÍê³É\n");
  278.     } catch (e) {
  279.         print.log("❌ ÐÄÌøÈÎÎñÖ´ÐÐʧ°Ü: " + e.message);
  280.     }
  281. }

  282. /**
  283. * Æô¶¯ÐÄÌø·þÎñ
  284. */
  285. function startHeartbeatService(intervalSeconds) {
  286.     if (isRunning) {
  287.         print.log("⚠️ ÐÄÌø·þÎñÒѾ­ÔÚÔËÐÐÖÐ");
  288.         return false;
  289.     }
  290.    
  291.     // Á¬½ÓÊý¾Ý¿â
  292.     if (!connectDatabase()) {
  293.         print.log("❌ ÎÞ·¨Æô¶¯ÐÄÌø·þÎñ£ºÊý¾Ý¿âÁ¬½Óʧ°Ü");
  294.         return false;
  295.     }
  296.    
  297.     // ³õʼ»¯Êý¾Ý¿â
  298.     if (!initializeDatabase()) {
  299.         print.log("❌ ÎÞ·¨Æô¶¯ÐÄÌø·þÎñ£ºÊý¾Ý¿â³õʼ»¯Ê§°Ü");
  300.         return false;
  301.     }
  302.    
  303.     isRunning = true;
  304.     print.log("✅ ÐÄÌø·þÎñÆô¶¯³É¹¦£¬¼ä¸ô: " + intervalSeconds + "Ãë");
  305.    
  306.     // Á¢¼´Ö´ÐÐÒ»´Î
  307.     executeHeartbeatTask();
  308.    
  309.     // ÉèÖö¨Ê±ÈÎÎñ
  310.     heartbeatInterval = setInterval(function() {
  311.         executeHeartbeatTask();
  312.     }, intervalSeconds * 1000);
  313.    
  314.     return true;
  315. }

  316. /**
  317. * Í£Ö¹ÐÄÌø·þÎñ
  318. */
  319. function stopHeartbeatService() {
  320.     if (!isRunning) {
  321.         print.log("⚠️ ÐÄÌø·þÎñδÔÚÔËÐÐ");
  322.         return false;
  323.     }
  324.    
  325.     if (heartbeatInterval) {
  326.         clearInterval(heartbeatInterval);
  327.         heartbeatInterval = null;
  328.     }
  329.    
  330.     isRunning = false;
  331.     print.log("✅ ÐÄÌø·þÎñÒÑÍ£Ö¹");
  332.     return true;
  333. }

  334. /**
  335. * ¹Ø±ÕÊý¾Ý¿âÁ¬½Ó
  336. */
  337. function closeConnection() {
  338.     try {
  339.         if (pstmt != null) {
  340.             pstmt.close();
  341.         }
  342.         if (conn != null) {
  343.             conn.close();
  344.         }
  345.         print.log("✅ Êý¾Ý¿âÁ¬½ÓÒѹرÕ");
  346.     } catch (e) {
  347.         print.log("❌ ¹Ø±ÕÁ¬½Óʱ³ö´í: " + e.message);
  348.     }
  349. }

  350. /**
  351. * ³ÌÐòÍ˳ö´¦Àí
  352. */
  353. function exitHandler() {
  354.     print.log("ÕýÔڹرÕÐÄÌø·þÎñ...");
  355.     stopHeartbeatService();
  356.     closeConnection();
  357.     print.log("&#128075; MYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐòÒÑÍ˳ö");
  358. }

  359. // Ö÷³ÌÐò
  360. try {
  361.     print.log("&#128640; Æô¶¯MYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐò");
  362.    
  363.     // ×¢²áÍ˳ö´¦Àíº¯Êý
  364.     java.lang.Runtime.getRuntime().addShutdownHook(new java.lang.Thread({
  365.         run: function() {
  366.             exitHandler();
  367.         }
  368.     }));
  369.    
  370.     // Æô¶¯ÐÄÌø·þÎñ (ÿ30ÃëÖ´ÐÐÒ»´Î)
  371.     if (startHeartbeatService(30)) {
  372.         print.log("✅ MYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐòÒÑÆô¶¯");
  373.         print.log("&#128161; °´ Ctrl+C Í£Ö¹³ÌÐò");
  374.         
  375.         // ±£³Ö³ÌÐòÔËÐÐ
  376.         while (isRunning) {
  377.             java.lang.Thread.sleep(1000);
  378.         }
  379.     } else {
  380.         print.log("❌ MYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐòÆô¶¯Ê§°Ü");
  381.     }
  382.    
  383. } catch (e) {
  384.     print.log("❌ ³ÌÐòÖ´Ðйý³ÌÖз¢Éú´íÎó: " + e.message);
  385.     exitHandler();
  386. }

  387. print.log("===== MYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐò½áÊø =====");
¸´ÖÆ´úÂë



»Ø¸´

ʹÓõÀ¾ß ¾Ù±¨

±¾°æ»ý·Ö¹æÔò

¹Ø±Õ

QQ|»ÓªÏúÈí¼þ×ÛºÏÌÖÂÛ|»ÓªÏúÈí¼þÓÐÎʱشð|»ÓªÏúÈí¼þ½Ì³Ì×¨Çø|»ÓªÏúÈí¼þPOST½Å±¾·ÖÏí|»ÓªÏúÈí¼þÆÕͨ½Å±¾·ÖÏí|»ÓªÏúÈí¼þÈí¼þ×ÊѶ|»ÓªÏúÈí¼þ¾«Æ·Èí¼þ|»ÓªÏúÈí¼þ¸üй«¸æ|ÓªÏúÈí¼þ|B2BÈí¼þ|B2BÍøÂçÈí¼þ ( ¾©ICP±¸09078825ºÅ )±¾ÍøÕ¾¿ª·¢µÄÓªÏúÈí¼þÊÇÒ»¿îеÄÍøÂçÓªÏúÈí¼þ£¬Õâ¿îÓªÏú¿ÉÒÔÈ¥ÍøÕ¾Èí¼þ£¬²©¿ÍÈí¼þ£¬B2BÈí¼þ£¬·ÖÀàÐÅÏ¢Íø·¢Ìù£¬¿ÉÒÔÇÀɳ·¢£¬¿ÉÒÔµ½°Ù¶ÈÎÄ¿âÉÏ´«WORDÎĵµ£¬¿ÉÒÔµ½Ò»Ð©ÊÇÏà²áÍøÕ¾×Ô¶¯ÉÏ´«Í¼Æ¬£¬Õâ¸ö×Ô¶¯·¢ÌûÈí¼þ×Ô´øÔÆÖ©Ö룬¼Ó¿ìÊÕ¼£¬ÓÐ6ÖÖ¶Ô½Ó´òÂë½Ó¿Ú£¬·½±ã£¬Ð§Âʸߣ¬Ëٶȿ죬¶øÇÒ¶ÔÍ϶¯µÄÑéÖ¤ÂëÈ«ÍøµÚÒ»¼Ò¶À¼ÒÖ§³Ö£¬È«²¿Ô­´´¼¼Êõ£¬¶À¼ÒÑз¢£¬Õý°æÔ­´´´ø°æÈ¨Èí¼þ¡£Ñ¡ÔñÍòÄÜÓªÏúÈí¼þ£¬¾ÍÑ¡ÔñÁËÒ»ÖÖ׬ǮµÄЧÂÊ£¬´ÓûÓб»³¬Ô½¹ý£¬Ò»Ö±ÔÚŬÁ¦Ñз¢Ð¼¼Êõ¡£·Å·ÉÃÎÏ룬½â·ÅË«ÊÖ£¬À´µã´´Ò⣬³É¾ÍÄãµÄÃÎÏ룬¾ÍÔÚÍòÄÜÓªÏúÈí¼þ¿ªÊ¼

map2

GMT+8, 2025-12-11 21:45 , Processed in 0.237453 second(s), 35 queries .

¿ìËٻظ´ ·µ»Ø¶¥²¿ ·µ»ØÁбí