QueryLobsterMenusForUi.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import java.sql.*;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. /** List lobster engine menus for saas-mgnui and saas-companyui. */
  5. public class QueryLobsterMenusForUi {
  6. private static final String HOST = "cq-cdb-8fjmemkb.sql.tencentcdb.com:27220";
  7. private static final String USER = "root";
  8. private static final String PASS = "Ylrz_1q2w3e4r5t6y";
  9. public static void main(String[] args) throws Exception {
  10. long companyId = args.length > 0 ? Long.parseLong(args[0]) : 338L;
  11. String tenantDb = args.length > 1 ? args[1] : "fs_tenant_cs1";
  12. printSection("saas-mgnui", "ylrz_saas", "tenant_sys_menu", null, false);
  13. printSection("saas-mgnui platform sys_menu", "ylrz_saas", "sys_menu", null, false);
  14. printSection("saas-companyui template", "ylrz_saas", "tenant_company_menu", null, false);
  15. printSection("saas-companyui tenant companyId=" + companyId, tenantDb, "company_menu", companyId, true);
  16. }
  17. private static void printSection(String label, String db, String table, Long companyId, boolean groupByCompany)
  18. throws Exception {
  19. System.out.println("\n" + "=".repeat(90));
  20. System.out.println(label + " [" + db + "." + table + "]");
  21. System.out.println("=".repeat(90));
  22. if (!tableExists(db, table)) {
  23. System.out.println(" (table not found)");
  24. return;
  25. }
  26. String sql = "SELECT menu_id, menu_name, parent_id, order_num, path, component, menu_type, visible, status, perms"
  27. + (companyId != null ? ", company_id" : "")
  28. + " FROM " + table
  29. + " WHERE (menu_id = 29900 OR parent_id = 29900 OR path LIKE '%lobster%' OR component LIKE 'lobster/%')"
  30. + (companyId != null ? " AND (company_id IS NULL OR company_id = " + companyId + ")" : "")
  31. + " ORDER BY parent_id, order_num, menu_id";
  32. try (Connection c = open(db);
  33. Statement st = c.createStatement();
  34. ResultSet rs = st.executeQuery(sql)) {
  35. int n = 0;
  36. List<String> visible = new ArrayList<>();
  37. List<String> hidden = new ArrayList<>();
  38. while (rs.next()) {
  39. n++;
  40. String line = formatRow(rs, companyId != null);
  41. if ("0".equals(rs.getString("visible")) && "0".equals(rs.getString("status"))) {
  42. visible.add(line);
  43. } else {
  44. hidden.add(line);
  45. }
  46. }
  47. System.out.println(" total=" + n + " visible=" + visible.size() + " hidden/disabled=" + hidden.size());
  48. System.out.println("\n --- visible (visible=0, status=0) ---");
  49. if (visible.isEmpty()) {
  50. System.out.println(" (none)");
  51. } else {
  52. visible.forEach(s -> System.out.println(" " + s));
  53. }
  54. if (!hidden.isEmpty()) {
  55. System.out.println("\n --- hidden/disabled ---");
  56. hidden.forEach(s -> System.out.println(" " + s));
  57. }
  58. }
  59. if (groupByCompany && companyId != null) {
  60. try (Connection c = open(db);
  61. Statement st = c.createStatement();
  62. ResultSet rs = st.executeQuery(
  63. "SELECT COUNT(*) FROM " + table
  64. + " WHERE parent_id=29900 AND menu_type='C' AND visible='0' AND status='0'"
  65. + " AND company_id=" + companyId)) {
  66. rs.next();
  67. System.out.println("\n company " + companyId + " lobster leaf menus (visible): " + rs.getInt(1));
  68. }
  69. }
  70. }
  71. private static String formatRow(ResultSet rs, boolean withCompany) throws SQLException {
  72. StringBuilder sb = new StringBuilder();
  73. sb.append(String.format("%-6d", rs.getLong("menu_id")));
  74. sb.append(" | ").append(pad(rs.getString("menu_name"), 18));
  75. sb.append(" | pid=").append(String.format("%-5d", rs.getLong("parent_id")));
  76. sb.append(" | ord=").append(String.format("%-3d", rs.getInt("order_num")));
  77. sb.append(" | ").append(pad(nullToEmpty(rs.getString("path")), 22));
  78. sb.append(" | ").append(pad(trunc(nullToEmpty(rs.getString("component")), 36), 36));
  79. sb.append(" | ").append(rs.getString("menu_type"));
  80. if (withCompany) {
  81. Object cid = rs.getObject("company_id");
  82. sb.append(" | co=").append(cid == null ? "NULL" : cid);
  83. }
  84. String perms = rs.getString("perms");
  85. if (perms != null && !perms.isBlank()) {
  86. sb.append(" | ").append(perms);
  87. }
  88. return sb.toString();
  89. }
  90. private static boolean tableExists(String db, String table) throws SQLException {
  91. try (Connection c = open(db);
  92. ResultSet rs = c.getMetaData().getTables(c.getCatalog(), null, table, null)) {
  93. return rs.next();
  94. }
  95. }
  96. private static Connection open(String db) throws SQLException {
  97. String url = "jdbc:mysql://" + HOST + "/" + db + "?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf8";
  98. return DriverManager.getConnection(url, USER, PASS);
  99. }
  100. private static String pad(String s, int w) {
  101. if (s == null) s = "";
  102. if (s.length() >= w) return s.substring(0, w);
  103. return s + " ".repeat(w - s.length());
  104. }
  105. private static String trunc(String s, int max) {
  106. return s.length() <= max ? s : s.substring(0, max - 3) + "...";
  107. }
  108. private static String nullToEmpty(String s) {
  109. return s == null ? "" : s;
  110. }
  111. }