FixLobsterSysOnlyMenuNames.java 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.Statement;
  6. import java.util.ArrayList;
  7. import java.util.LinkedHashMap;
  8. import java.util.List;
  9. import java.util.Map;
  10. /**
  11. * Fix garbled lobster sys-only admin menu names in DB.
  12. * Usage: java -cp ".;lib/mysql-connector-j-8.0.33.jar" FixLobsterSysOnlyMenuNames [tenantDb]
  13. */
  14. public class FixLobsterSysOnlyMenuNames {
  15. private static final String HOST = "cq-cdb-8fjmemkb.sql.tencentcdb.com:27220";
  16. private static final String USER = "root";
  17. private static final String PASS = "Ylrz_1q2w3e4r5t6y";
  18. private static final String MASTER_DB = "ylrz_saas";
  19. private static final Map<Long, String> NAMES = new LinkedHashMap<>();
  20. static {
  21. NAMES.put(29925L, "\u654f\u611f\u8bcd\u5e93");
  22. NAMES.put(29963L, "\u8fdd\u7981\u8bcd\u5e93");
  23. NAMES.put(29964L, "\u6613\u9519\u8bcd\u5e93");
  24. NAMES.put(29951L, "\u5411\u91cf\u77e5\u8bc6\u5e93");
  25. NAMES.put(29907L, "\u63d0\u793a\u8bcd\u7ba1\u7406");
  26. NAMES.put(29908L, "\u9500\u51a0\u8bed\u6599\u5b66\u4e60");
  27. NAMES.put(29909L, "\u63a5\u53e3\u6ce8\u518c\u4e2d\u5fc3");
  28. }
  29. private static final String QDRANT_REMARK = "Qdrant\u5411\u91cf\u77e5\u8bc6\u5e93";
  30. public static void main(String[] args) throws Exception {
  31. Class.forName("com.mysql.cj.jdbc.Driver");
  32. String tenantDb = args.length > 0 ? args[0] : "fs_tenant_cs1";
  33. System.out.println("=== MASTER " + MASTER_DB + " tenant_sys_menu ===");
  34. try (Connection c = open(MASTER_DB)) {
  35. fixTable(c, "tenant_sys_menu");
  36. verify(c, "tenant_sys_menu");
  37. }
  38. System.out.println("\n=== TENANT " + tenantDb + " sys_menu ===");
  39. try (Connection c = open(tenantDb)) {
  40. fixTable(c, "sys_menu");
  41. verify(c, "sys_menu");
  42. }
  43. }
  44. private static void fixTable(Connection c, String table) throws Exception {
  45. int n = 0;
  46. for (Map.Entry<Long, String> e : NAMES.entrySet()) {
  47. String sql = "UPDATE " + table + " SET menu_name = ?, update_time = NOW() WHERE menu_id = ?";
  48. try (PreparedStatement ps = c.prepareStatement(sql)) {
  49. ps.setString(1, e.getValue());
  50. ps.setLong(2, e.getKey());
  51. n += ps.executeUpdate();
  52. }
  53. }
  54. try (PreparedStatement ps = c.prepareStatement(
  55. "UPDATE " + table + " SET remark = ?, update_time = NOW() WHERE menu_id = 29951")) {
  56. ps.setString(1, QDRANT_REMARK);
  57. n += ps.executeUpdate();
  58. }
  59. System.out.println("updated rows=" + n);
  60. }
  61. private static void verify(Connection c, String table) throws Exception {
  62. String ids = "29925,29963,29964,29951,29907,29908,29909";
  63. try (Statement st = c.createStatement();
  64. ResultSet rs = st.executeQuery(
  65. "SELECT menu_id, menu_name, HEX(menu_name) hx FROM " + table
  66. + " WHERE menu_id IN (" + ids + ") ORDER BY menu_id")) {
  67. while (rs.next()) {
  68. long id = rs.getLong("menu_id");
  69. String name = rs.getString("menu_name");
  70. String expected = NAMES.get(id);
  71. String ok = expected != null && expected.equals(name) ? "OK" : "BAD";
  72. System.out.printf("[%d] %s | %s | %s%n", id, name, rs.getString("hx"), ok);
  73. }
  74. }
  75. }
  76. private static Connection open(String db) throws Exception {
  77. String url = "jdbc:mysql://" + HOST + "/" + db
  78. + "?useSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8";
  79. return DriverManager.getConnection(url, USER, PASS);
  80. }
  81. }