import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * Fix garbled lobster sys-only admin menu names in DB. * Usage: java -cp ".;lib/mysql-connector-j-8.0.33.jar" FixLobsterSysOnlyMenuNames [tenantDb] */ public class FixLobsterSysOnlyMenuNames { private static final String HOST = "cq-cdb-8fjmemkb.sql.tencentcdb.com:27220"; private static final String USER = "root"; private static final String PASS = "Ylrz_1q2w3e4r5t6y"; private static final String MASTER_DB = "ylrz_saas"; private static final Map NAMES = new LinkedHashMap<>(); static { NAMES.put(29925L, "\u654f\u611f\u8bcd\u5e93"); NAMES.put(29963L, "\u8fdd\u7981\u8bcd\u5e93"); NAMES.put(29964L, "\u6613\u9519\u8bcd\u5e93"); NAMES.put(29951L, "\u5411\u91cf\u77e5\u8bc6\u5e93"); NAMES.put(29907L, "\u63d0\u793a\u8bcd\u7ba1\u7406"); NAMES.put(29908L, "\u9500\u51a0\u8bed\u6599\u5b66\u4e60"); NAMES.put(29909L, "\u63a5\u53e3\u6ce8\u518c\u4e2d\u5fc3"); } private static final String QDRANT_REMARK = "Qdrant\u5411\u91cf\u77e5\u8bc6\u5e93"; public static void main(String[] args) throws Exception { Class.forName("com.mysql.cj.jdbc.Driver"); String tenantDb = args.length > 0 ? args[0] : "fs_tenant_cs1"; System.out.println("=== MASTER " + MASTER_DB + " tenant_sys_menu ==="); try (Connection c = open(MASTER_DB)) { fixTable(c, "tenant_sys_menu"); verify(c, "tenant_sys_menu"); } System.out.println("\n=== TENANT " + tenantDb + " sys_menu ==="); try (Connection c = open(tenantDb)) { fixTable(c, "sys_menu"); verify(c, "sys_menu"); } } private static void fixTable(Connection c, String table) throws Exception { int n = 0; for (Map.Entry e : NAMES.entrySet()) { String sql = "UPDATE " + table + " SET menu_name = ?, update_time = NOW() WHERE menu_id = ?"; try (PreparedStatement ps = c.prepareStatement(sql)) { ps.setString(1, e.getValue()); ps.setLong(2, e.getKey()); n += ps.executeUpdate(); } } try (PreparedStatement ps = c.prepareStatement( "UPDATE " + table + " SET remark = ?, update_time = NOW() WHERE menu_id = 29951")) { ps.setString(1, QDRANT_REMARK); n += ps.executeUpdate(); } System.out.println("updated rows=" + n); } private static void verify(Connection c, String table) throws Exception { String ids = "29925,29963,29964,29951,29907,29908,29909"; try (Statement st = c.createStatement(); ResultSet rs = st.executeQuery( "SELECT menu_id, menu_name, HEX(menu_name) hx FROM " + table + " WHERE menu_id IN (" + ids + ") ORDER BY menu_id")) { while (rs.next()) { long id = rs.getLong("menu_id"); String name = rs.getString("menu_name"); String expected = NAMES.get(id); String ok = expected != null && expected.equals(name) ? "OK" : "BAD"; System.out.printf("[%d] %s | %s | %s%n", id, name, rs.getString("hx"), ok); } } } private static Connection open(String db) throws Exception { String url = "jdbc:mysql://" + HOST + "/" + db + "?useSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8"; return DriverManager.getConnection(url, USER, PASS); } }