InspectLobsterMenuTree.java 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import java.sql.*;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class InspectLobsterMenuTree {
  5. static final String URL = "jdbc:mysql://cq-cdb-8fjmemkb.sql.tencentcdb.com:27220/fs_tenant_cs1?useSSL=false&serverTimezone=GMT%2B8";
  6. static final String USER = "root";
  7. static final String PASS = "Ylrz_1q2w3e4r5t6y";
  8. public static void main(String[] args) throws Exception {
  9. Class.forName("com.mysql.cj.jdbc.Driver");
  10. try (Connection c = DriverManager.getConnection(URL, USER, PASS)) {
  11. for (long rootId : new long[]{2951L, 29900L}) {
  12. System.out.println("\n=== subtree root=" + rootId + " ===");
  13. dumpTree(c, rootId, 0);
  14. }
  15. System.out.println("\n=== sys_role_menu refs under 2951 ===");
  16. try (Statement st = c.createStatement();
  17. ResultSet rs = st.executeQuery(
  18. "SELECT rm.role_id, rm.menu_id, m.menu_name FROM sys_role_menu rm "
  19. + "JOIN sys_menu m ON m.menu_id = rm.menu_id "
  20. + "WHERE rm.menu_id IN (SELECT menu_id FROM sys_menu WHERE menu_id=2951 OR parent_id=2951 "
  21. + "UNION SELECT menu_id FROM sys_menu WHERE parent_id IN "
  22. + "(SELECT menu_id FROM sys_menu WHERE parent_id=2951)) "
  23. + "OR rm.menu_id = 2951 LIMIT 50")) {
  24. int n = 0;
  25. while (rs.next()) {
  26. n++;
  27. System.out.printf("role=%d menu=%d %s%n", rs.getLong(1), rs.getLong(2), rs.getString(3));
  28. }
  29. if (n == 0) System.out.println("(none)");
  30. }
  31. }
  32. }
  33. static void dumpTree(Connection c, long parentId, int depth) throws SQLException {
  34. String sql = "SELECT menu_id, menu_name, path, component, menu_type, visible "
  35. + "FROM sys_menu WHERE parent_id = ? ORDER BY order_num, menu_id";
  36. try (PreparedStatement ps = c.prepareStatement(sql)) {
  37. ps.setLong(1, parentId);
  38. try (ResultSet rs = ps.executeQuery()) {
  39. while (rs.next()) {
  40. String indent = " ".repeat(depth);
  41. System.out.printf("%s[%s] id=%d name=%s path=%s comp=%s vis=%s%n",
  42. indent, rs.getString(5), rs.getLong(1), rs.getString(2),
  43. rs.getString(3), rs.getString(4), rs.getString(6));
  44. dumpTree(c, rs.getLong(1), depth + 1);
  45. }
  46. }
  47. }
  48. if (depth == 0) {
  49. try (PreparedStatement ps = c.prepareStatement(
  50. "SELECT menu_id, menu_name, path, component, menu_type, visible FROM sys_menu WHERE menu_id = ?")) {
  51. ps.setLong(1, parentId);
  52. try (ResultSet rs = ps.executeQuery()) {
  53. if (rs.next()) {
  54. System.out.printf("[ROOT %s] id=%d name=%s path=%s comp=%s vis=%s%n",
  55. rs.getString(5), rs.getLong(1), rs.getString(2),
  56. rs.getString(3), rs.getString(4), rs.getString(6));
  57. }
  58. }
  59. }
  60. }
  61. }
  62. }