B2BÍøÂçÈí¼þ

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

Êý¾Ý¿âMySQLÓû§ÔÚÏß״̬¹ÜÀíÐÄÌø³ÌÐò

[¸´ÖÆÁ´½Ó]

1001

Ö÷Ìâ

1006

Ìû×Ó

7281

»ý·Ö

abc

Rank: 9Rank: 9Rank: 9

»ý·Ö
7281
Ìø×ªµ½Ö¸¶¨Â¥²ã
Â¥Ö÷
Êý¾Ý¿âMySQLÓû§ÔÚÏß״̬¹ÜÀíÐÄÌø³ÌÐò
Êý¾Ý¿âMySQLÓû§ÔÚÏß״̬¹ÜÀíÐÄÌø³ÌÐò B2BÍøÂçÈí¼þ
Êý¾Ý¿âMySQLÓû§ÔÚÏß״̬¹ÜÀíÐÄÌø³ÌÐò B2BÍøÂçÈí¼þ

  1. // Óû§ÔÚÏß״̬¹ÜÀíÐÄÌø³ÌÐò
  2. // ÓÃÓÚ¸ú×ٺ͹ÜÀíÓû§ÔÚÏß״̬µÄʾÀý³ÌÐò
  3. //🍎½»Á÷QQȺ711841924Ⱥһ£¬Æ»¹ûÄÚ²âȺ£¬528816639
  4. print.log("===== Óû§ÔÚÏß״̬¹ÜÀíÐÄÌø³ÌÐòÆô¶¯ =====");

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

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

  29. /**
  30. * ³õʼ»¯Êý¾Ý¿â±í½á¹¹
  31. */
  32. function initializeDatabase() {
  33.     try {
  34.         // ´´½¨Óû§ÔÚÏß״̬±í
  35.         var userTableSql = "CREATE TABLE IF NOT EXISTS Óû§ÔÚÏß״̬±í (" +
  36.                           "Óû§ID VARCHAR(50) PRIMARY KEY," +
  37.                           "Óû§Ãû VARCHAR(100)," +
  38.                           "ÔÚÏß״̬ TINYINT DEFAULT 0," +  // 0-ÀëÏß, 1-ÔÚÏß
  39.                           "×îºó»îԾʱ¼ä DATETIME," +
  40.                           "»á»°¿ªÊ¼Ê±¼ä DATETIME," +
  41.                           "ÔÚÏßʱ³¤ INT DEFAULT 0" +       // µ¥Î»£ºÃë
  42.                           ") ENGINE=InnoDB DEFAULT CHARSET=utf8";
  43.                            
  44.         var stmt = conn.createStatement();
  45.         stmt.executeUpdate(userTableSql);
  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 userLogin(userId, username) {
  73.     try {
  74.         var sql = "INSERT INTO Óû§ÔÚÏß״̬±í (Óû§ID, Óû§Ãû, ÔÚÏß״̬, ×îºó»îԾʱ¼ä, »á»°¿ªÊ¼Ê±¼ä) " +
  75.                   "VALUES (?, ?, 1, NOW(), NOW()) " +
  76.                   "ON DUPLICATE KEY UPDATE Óû§Ãû = VALUES(Óû§Ãû), ÔÚÏß״̬ = 1, ×îºó»îԾʱ¼ä = NOW(), »á»°¿ªÊ¼Ê±¼ä = NOW()";
  77.                   
  78.         var pstmt = conn.prepareStatement(sql);
  79.         pstmt.setString(1, userId);
  80.         pstmt.setString(2, username);
  81.         pstmt.executeUpdate();
  82.         pstmt.close();
  83.         
  84.         logUserActivity(userId, "Óû§µÇ¼", "Óû§ " + username + " µÇ¼ϵͳ");
  85.         currentUser = {id: userId, name: username};
  86.         print.log("✅ Óû§ " + username + " µÇ¼³É¹¦");
  87.         return true;
  88.     } catch (e) {
  89.         print.log("❌ Óû§µÇ¼ʧ°Ü: " + e.message);
  90.         return false;
  91.     }
  92. }

  93. /**
  94. * ·¢ËÍÓû§ÐÄÌø°ü
  95. */
  96. function sendUserHeartbeat(userId) {
  97.     try {
  98.         var sql = "UPDATE Óû§ÔÚÏß״̬±í SET ÔÚÏß״̬ = 1, ×îºó»îԾʱ¼ä = NOW() WHERE Óû§ID = ?";
  99.                   
  100.         var pstmt = conn.prepareStatement(sql);
  101.         pstmt.setString(1, userId);
  102.         pstmt.executeUpdate();
  103.         pstmt.close();
  104.         
  105.         logUserActivity(userId, "ÐÄÌø°ü", "·¢ËÍÐÄÌø°ü£¬¸üÐÂÓû§»îԾʱ¼ä");
  106.         print.log("✅ Óû§ " + userId + " ÐÄÌø°ü·¢Ëͳɹ¦");
  107.         return true;
  108.     } catch (e) {
  109.         print.log("❌ ÐÄÌø°ü·¢ËÍʧ°Ü: " + e.message);
  110.         return false;
  111.     }
  112. }

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

  132. /**
  133. * ¼ì²éÓû§ÔÚÏß״̬
  134. */
  135. function checkUserStatus() {
  136.     try {
  137.         var sql = "SELECT Óû§ID, Óû§Ãû, ÔÚÏß״̬, ×îºó»îԾʱ¼ä, »á»°¿ªÊ¼Ê±¼ä FROM Óû§ÔÚÏß״̬±í";
  138.         var stmt = conn.createStatement();
  139.         var rs = stmt.executeQuery(sql);
  140.         
  141.         print.log("\n=== Óû§ÔÚÏß״̬¼à¿Ø ===");
  142.         print.log("Óû§ID\t\tÓû§Ãû\t\tÔÚÏß״̬\t×îºó»îԾʱ¼ä\t\t\t»á»°¿ªÊ¼Ê±¼ä");
  143.         print.log("-----------------------------------------------------------------------------------------------");
  144.         
  145.         var offlineUsers = [];
  146.         var onlineUsers = [];
  147.         
  148.         while (rs.next()) {
  149.             var userId = rs.getString("Óû§ID");
  150.             var username = rs.getString("Óû§Ãû");
  151.             var onlineStatus = rs.getInt("ÔÚÏß״̬");
  152.             var lastActive = rs.getTimestamp("×îºó»îԾʱ¼ä");
  153.             var sessionStart = rs.getTimestamp("»á»°¿ªÊ¼Ê±¼ä");
  154.             
  155.             // ¸ñʽ»¯Êä³ö
  156.             var nameStr = username + "\t\t";
  157.             if (username.length >= 4) nameStr = username + "\t";
  158.             
  159.             var statusStr = onlineStatus === 1 ? "ÔÚÏß" : "ÀëÏß";
  160.             
  161.             print.log(userId + "\t" + nameStr + statusStr + "\t\t" + lastActive + "\t" + sessionStart);
  162.             
  163.             // ·ÖÀàÓû§
  164.             if (onlineStatus === 1) {
  165.                 onlineUsers.push({id: userId, name: username, lastActive: lastActive});
  166.             } else {
  167.                 offlineUsers.push({id: userId, name: username});
  168.             }
  169.         }
  170.         
  171.         rs.close();
  172.         stmt.close();
  173.         
  174.         // ±¨¸æÍ³¼ÆÐÅÏ¢
  175.         print.log("\n📊 ͳ¼ÆÐÅÏ¢:");
  176.         print.log("  ÔÚÏßÓû§Êý: " + onlineUsers.length);
  177.         print.log("  ÀëÏßÓû§Êý: " + offlineUsers.length);
  178.         
  179.         if (onlineUsers.length > 0) {
  180.             print.log("\n🟢 ÔÚÏßÓû§Áбí:");
  181.             for (var i = 0; i < onlineUsers.length; i++) {
  182.                 var user = onlineUsers[i];
  183.                 print.log("  - " + user.name + " (" + user.id + ") ×îºó»îÔ¾: " + user.lastActive);
  184.             }
  185.         }
  186.         
  187.         if (offlineUsers.length > 0) {
  188.             print.log("\n&#128308; ÀëÏßÓû§Áбí:");
  189.             for (var i = 0; i < offlineUsers.length; i++) {
  190.                 var user = offlineUsers[i];
  191.                 print.log("  - " + user.name + " (" + user.id + ")");
  192.             }
  193.         }
  194.         
  195.         print.log("");
  196.         return true;
  197.     } catch (e) {
  198.         print.log("❌ Óû§×´Ì¬¼ì²éʧ°Ü: " + e.message);
  199.         return false;
  200.     }
  201. }

  202. /**
  203. * Óû§µÇ³ö
  204. */
  205. function userLogout(userId) {
  206.     try {
  207.         // ¸üÐÂÔÚÏßʱ³¤
  208.         var durationSql = "UPDATE Óû§ÔÚÏß״̬±í SET ÔÚÏßʱ³¤ = TIMESTAMPDIFF(SECOND, »á»°¿ªÊ¼Ê±¼ä, NOW()) WHERE Óû§ID = ?";
  209.         var pstmt = conn.prepareStatement(durationSql);
  210.         pstmt.setString(1, userId);
  211.         pstmt.executeUpdate();
  212.         pstmt.close();
  213.         
  214.         // ÉèÖÃΪÀëÏß״̬
  215.         var sql = "UPDATE Óû§ÔÚÏß״̬±í SET ÔÚÏß״̬ = 0 WHERE Óû§ID = ?";
  216.         pstmt = conn.prepareStatement(sql);
  217.         pstmt.setString(1, userId);
  218.         pstmt.executeUpdate();
  219.         pstmt.close();
  220.         
  221.         logUserActivity(userId, "Óû§µÇ³ö", "Óû§µÇ³öϵͳ");
  222.         print.log("✅ Óû§ " + userId + " µÇ³ö³É¹¦");
  223.         return true;
  224.     } catch (e) {
  225.         print.log("❌ Óû§µÇ³öʧ°Ü: " + e.message);
  226.         return false;
  227.     }
  228. }

  229. /**
  230. * ÐÄÌøÈÎÎñÖ´Ðк¯Êý
  231. */
  232. function executeHeartbeatTask() {
  233.     print.log("\n⏰ Ö´ÐÐÓû§ÐÄÌøÈÎÎñ - " + new Date());
  234.    
  235.     try {
  236.         // ¼ì²éÊý¾Ý¿âÁ¬½Ó
  237.         if (!conn || conn.isClosed()) {
  238.             print.log("⚠️ Êý¾Ý¿âÁ¬½ÓÒѶϿª£¬³¢ÊÔÖØÐÂÁ¬½Ó...");
  239.             if (!connectDatabase()) {
  240.                 print.log("❌ ÎÞ·¨ÖØÐÂÁ¬½ÓÊý¾Ý¿â£¬Ìø¹ý±¾´ÎÐÄÌøÈÎÎñ");
  241.                 return;
  242.             }
  243.         }
  244.         
  245.         // Èç¹ûÓе±Ç°Óû§£¬·¢ËÍÐÄÌø°ü
  246.         if (currentUser) {
  247.             sendUserHeartbeat(currentUser.id);
  248.         }
  249.         
  250.         // ¼ì²éËùÓÐÓû§×´Ì¬
  251.         checkUserStatus();
  252.         
  253.         print.log("✅ Óû§ÐÄÌøÈÎÎñÖ´ÐÐÍê³É\n");
  254.     } catch (e) {
  255.         print.log("❌ Óû§ÐÄÌøÈÎÎñÖ´ÐÐʧ°Ü: " + e.message);
  256.     }
  257. }

  258. /**
  259. * Æô¶¯ÐÄÌø·þÎñ
  260. */
  261. function startHeartbeatService(intervalSeconds) {
  262.     if (isRunning) {
  263.         print.log("⚠️ ÐÄÌø·þÎñÒѾ­ÔÚÔËÐÐÖÐ");
  264.         return false;
  265.     }
  266.    
  267.     // Á¬½ÓÊý¾Ý¿â
  268.     if (!connectDatabase()) {
  269.         print.log("❌ ÎÞ·¨Æô¶¯ÐÄÌø·þÎñ£ºÊý¾Ý¿âÁ¬½Óʧ°Ü");
  270.         return false;
  271.     }
  272.    
  273.     // ³õʼ»¯Êý¾Ý¿â
  274.     if (!initializeDatabase()) {
  275.         print.log("❌ ÎÞ·¨Æô¶¯ÐÄÌø·þÎñ£ºÊý¾Ý¿â³õʼ»¯Ê§°Ü");
  276.         return false;
  277.     }
  278.    
  279.     isRunning = true;
  280.     print.log("✅ ÐÄÌø·þÎñÆô¶¯³É¹¦£¬¼ä¸ô: " + intervalSeconds + "Ãë");
  281.    
  282.     // Á¢¼´Ö´ÐÐÒ»´Î
  283.     executeHeartbeatTask();
  284.    
  285.     // ÉèÖö¨Ê±ÈÎÎñ
  286.     heartbeatInterval = setInterval(function() {
  287.         executeHeartbeatTask();
  288.     }, intervalSeconds * 1000);
  289.    
  290.     return true;
  291. }

  292. /**
  293. * Í£Ö¹ÐÄÌø·þÎñ
  294. */
  295. function stopHeartbeatService() {
  296.     if (!isRunning) {
  297.         print.log("⚠️ ÐÄÌø·þÎñδÔÚÔËÐÐ");
  298.         return false;
  299.     }
  300.    
  301.     if (heartbeatInterval) {
  302.         clearInterval(heartbeatInterval);
  303.         heartbeatInterval = null;
  304.     }
  305.    
  306.     isRunning = false;
  307.     print.log("✅ ÐÄÌø·þÎñÒÑÍ£Ö¹");
  308.     return true;
  309. }

  310. /**
  311. * ¹Ø±ÕÊý¾Ý¿âÁ¬½Ó
  312. */
  313. function closeConnection() {
  314.     try {
  315.         if (conn != null) {
  316.             conn.close();
  317.         }
  318.         print.log("✅ Êý¾Ý¿âÁ¬½ÓÒѹرÕ");
  319.     } catch (e) {
  320.         print.log("❌ ¹Ø±ÕÁ¬½Óʱ³ö´í: " + e.message);
  321.     }
  322. }

  323. /**
  324. * ³ÌÐòÍ˳ö´¦Àí
  325. */
  326. function exitHandler() {
  327.     print.log("ÕýÔڹرÕÐÄÌø·þÎñ...");
  328.     // Èç¹ûÓÐÓû§µÇ¼£¬Ö´Ðеdzö²Ù×÷
  329.     if (currentUser) {
  330.         userLogout(currentUser.id);
  331.     }
  332.     stopHeartbeatService();
  333.     closeConnection();
  334.     print.log("&#128075; Óû§ÔÚÏß״̬¹ÜÀíÐÄÌø³ÌÐòÒÑÍ˳ö");
  335. }

  336. // Ö÷³ÌÐò
  337. try {
  338.     print.log("&#128640; Æô¶¯Óû§ÔÚÏß״̬¹ÜÀíÐÄÌø³ÌÐò");
  339.    
  340.     // ×¢²áÍ˳ö´¦Àíº¯Êý
  341.     java.lang.Runtime.getRuntime().addShutdownHook(new java.lang.Thread({
  342.         run: function() {
  343.             exitHandler();
  344.         }
  345.     }));
  346.    
  347.     // Æô¶¯ÐÄÌø·þÎñ (ÿ30ÃëÖ´ÐÐÒ»´Î)
  348.     if (startHeartbeatService(30)) {
  349.         print.log("✅ Óû§ÔÚÏß״̬¹ÜÀíÐÄÌø³ÌÐòÒÑÆô¶¯");
  350.         print.log("&#128161; °´ Ctrl+C Í£Ö¹³ÌÐò");
  351.         
  352.         // Ä£ÄâÓû§µÇ¼
  353.         print.log("&#128221; Ä£ÄâÓû§µÇ¼...");
  354.         userLogin("USER_001", "ÕÅÈý");
  355.         
  356.         // ±£³Ö³ÌÐòÔËÐÐ
  357.         while (isRunning) {
  358.             java.lang.Thread.sleep(1000);
  359.         }
  360.     } else {
  361.         print.log("❌ Óû§ÔÚÏß״̬¹ÜÀíÐÄÌø³ÌÐòÆô¶¯Ê§°Ü");
  362.     }
  363.    
  364. } catch (e) {
  365.     print.log("❌ ³ÌÐòÖ´Ðйý³ÌÖз¢Éú´íÎó: " + e.message);
  366.     exitHandler();
  367. }

  368. print.log("===== Óû§ÔÚÏß״̬¹ÜÀíÐÄÌø³ÌÐò½áÊø =====");
¸´ÖÆ´úÂë


»Ø¸´

ʹÓõÀ¾ß ¾Ù±¨

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

¹Ø±Õ

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

map2

GMT+8, 2025-12-12 22:56 , Processed in 0.190898 second(s), 36 queries .

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