ApplyLobsterCanonicalMenus.java 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import java.nio.charset.StandardCharsets;
  2. import java.nio.file.Files;
  3. import java.nio.file.Path;
  4. import java.sql.Connection;
  5. import java.sql.DriverManager;
  6. import java.sql.ResultSet;
  7. import java.sql.Statement;
  8. /**
  9. * Apply lobster canonical menu sync to master + tenant DB(s).
  10. * Usage:
  11. * java -cp ".;lib/mysql-connector-j-8.0.33.jar" ApplyLobsterCanonicalMenus [tenantDb]
  12. */
  13. public class ApplyLobsterCanonicalMenus {
  14. private static final String HOST = "cq-cdb-8fjmemkb.sql.tencentcdb.com:27220";
  15. private static final String USER = "root";
  16. private static final String PASS = "Ylrz_1q2w3e4r5t6y";
  17. private static final String MASTER_DB = "ylrz_saas";
  18. public static void main(String[] args) throws Exception {
  19. Class.forName("com.mysql.cj.jdbc.Driver");
  20. String tenantDb = args.length > 0 ? args[0] : "fs_tenant_cs1";
  21. Path tenantSql = Path.of("d:/ylrz_saas_new/java/fs-agent/src/main/resources/db/migration/tenant/V20260727_01__lobster_menu_canonical_sync.sql");
  22. Path masterSql = Path.of("d:/ylrz_saas_new/java/sql/master/V20260727_01__lobster_menu_canonical_sync.sql");
  23. System.out.println("=== MASTER " + MASTER_DB + " ===");
  24. try (Connection c = open(MASTER_DB)) {
  25. exec(c, readSql(masterSql));
  26. report(c, "tenant_sys_menu");
  27. report(c, "tenant_company_menu");
  28. }
  29. System.out.println("\n=== TENANT " + tenantDb + " ===");
  30. try (Connection c = open(tenantDb)) {
  31. exec(c, readSql(tenantSql));
  32. report(c, "sys_menu");
  33. report(c, "company_menu");
  34. }
  35. System.out.println("\nDone.");
  36. }
  37. private static String readSql(Path path) throws Exception {
  38. byte[] bytes = Files.readAllBytes(path);
  39. String sql = new String(bytes, StandardCharsets.UTF_8);
  40. if (!sql.isEmpty() && sql.charAt(0) == '') {
  41. sql = sql.substring(1);
  42. }
  43. return sql;
  44. }
  45. private static void exec(Connection c, String sql) throws Exception {
  46. try (Statement st = c.createStatement()) {
  47. st.execute(sql);
  48. }
  49. }
  50. private static void report(Connection c, String table) throws Exception {
  51. System.out.println("\n--- " + table + " ---");
  52. String sql = "SELECT menu_id, menu_name, order_num, path FROM " + table
  53. + " WHERE menu_id=29900 OR parent_id=29900 ORDER BY order_num, menu_id";
  54. try (Statement st = c.createStatement(); ResultSet rs = st.executeQuery(sql)) {
  55. while (rs.next()) {
  56. System.out.printf("[%d] order=%d | %s | %s%n",
  57. rs.getLong("menu_id"), rs.getInt("order_num"),
  58. rs.getString("menu_name"), rs.getString("path"));
  59. }
  60. }
  61. }
  62. private static Connection open(String db) throws Exception {
  63. return DriverManager.getConnection(
  64. "jdbc:mysql://" + HOST + "/" + db
  65. + "?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf8&allowMultiQueries=true",
  66. USER, PASS);
  67. }
  68. }