ApplyAdminMenuIcons.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. import java.io.IOException;
  2. import java.nio.file.*;
  3. import java.sql.*;
  4. import java.util.*;
  5. /** Fix admin sys_menu icons and tenant upgrade menu route metadata. */
  6. public class ApplyAdminMenuIcons {
  7. private static final String MASTER_HOST = getenv("DB_HOST", "cq-cdb-8fjmemkb.sql.tencentcdb.com");
  8. private static final int MASTER_PORT = Integer.parseInt(getenv("DB_PORT", "27220"));
  9. private static final String MASTER_USER = getenv("DB_USER", "root");
  10. private static final String MASTER_PASSWORD = getenv("DB_PASSWORD", "Ylrz_1q2w3e4r5t6y");
  11. private static final String MASTER_DB = getenv("DB_NAME", "ylrz_saas");
  12. private static final String SVG_DIR = "d:/ylrz_saas_new/adminui/src/assets/icons/svg";
  13. private static final Map<String, String> ICON_ALIAS = new LinkedHashMap<>();
  14. static {
  15. ICON_ALIAS.put("system", "build");
  16. ICON_ALIAS.put("form", "edit");
  17. ICON_ALIAS.put("phone", "message");
  18. ICON_ALIAS.put("job", "time");
  19. ICON_ALIAS.put("log", "documentation");
  20. ICON_ALIAS.put("dashboard", "chart");
  21. ICON_ALIAS.put("validCode", "lock");
  22. ICON_ALIAS.put("tool", "build");
  23. ICON_ALIAS.put("bug", "education");
  24. ICON_ALIAS.put("wechat", "message");
  25. ICON_ALIAS.put("upload", "documentation");
  26. ICON_ALIAS.put("shopping", "money");
  27. ICON_ALIAS.put("share", "guide");
  28. ICON_ALIAS.put("warning", "education");
  29. ICON_ALIAS.put("tree", "tree-table");
  30. }
  31. private static final String MENU_FIX_SQL =
  32. "UPDATE sys_menu SET menu_name='\u79df\u6237\u5e93\u7ed3\u6784\u5347\u7ea7', "
  33. + "parent_id=2820, path='tenantUpgrade', component='saas/tenant/upgrade/index', "
  34. + "menu_type='C', visible='0', status='0', icon='el-icon-upload2' "
  35. + "WHERE menu_id=32850;"
  36. + "UPDATE sys_menu SET menu_type='F', visible='1', path='#', component=NULL "
  37. + "WHERE menu_id IN (32851,32852);"
  38. + "UPDATE sys_menu SET icon='build' WHERE icon='system' AND menu_type IN ('C','M');"
  39. + "UPDATE sys_menu SET icon='edit' WHERE icon='form' AND menu_type IN ('C','M');"
  40. + "UPDATE sys_menu SET icon='message' WHERE icon IN ('phone','wechat') AND menu_type IN ('C','M');"
  41. + "UPDATE sys_menu SET icon='time' WHERE icon='job' AND menu_type IN ('C','M');"
  42. + "UPDATE sys_menu SET icon='documentation' WHERE icon IN ('log','upload') AND menu_type IN ('C','M');"
  43. + "UPDATE sys_menu SET icon='chart' WHERE icon='dashboard' AND menu_type IN ('C','M');"
  44. + "UPDATE sys_menu SET icon='lock' WHERE icon='validCode' AND menu_type IN ('C','M');"
  45. + "UPDATE sys_menu SET icon='build' WHERE icon='tool' AND menu_type IN ('C','M');"
  46. + "UPDATE sys_menu SET icon='education' WHERE icon IN ('bug','warning') AND menu_type IN ('C','M');"
  47. + "UPDATE sys_menu SET icon='money' WHERE icon='shopping' AND menu_type IN ('C','M');"
  48. + "UPDATE sys_menu SET icon='tree-table' WHERE icon='tree' AND menu_type IN ('C','M');"
  49. + "UPDATE sys_menu SET icon='guide' WHERE icon='share' AND menu_type IN ('C','M');";
  50. public static void main(String[] args) throws Exception {
  51. Set<String> svgs = loadSvgs();
  52. int updated = 0;
  53. try (Connection c = open(MASTER_HOST, MASTER_PORT, MASTER_DB, MASTER_USER, MASTER_PASSWORD)) {
  54. execBatch(c, MENU_FIX_SQL);
  55. System.out.println("[OK] tenant upgrade menu metadata fixed");
  56. try (Statement st = c.createStatement();
  57. ResultSet rs = st.executeQuery(
  58. "SELECT menu_id, menu_name, icon FROM sys_menu "
  59. + "WHERE menu_type IN ('C','M') AND visible='0' AND status='0'")) {
  60. try (PreparedStatement ps = c.prepareStatement("UPDATE sys_menu SET icon=? WHERE menu_id=?")) {
  61. while (rs.next()) {
  62. long menuId = rs.getLong(1);
  63. String name = rs.getString(2);
  64. String icon = rs.getString(3);
  65. String fixed = resolveIcon(name, icon, svgs);
  66. if (fixed == null || Objects.equals(fixed, icon)) continue;
  67. ps.setString(1, fixed);
  68. ps.setLong(2, menuId);
  69. ps.executeUpdate();
  70. updated++;
  71. System.out.printf("[UPDATE] %s | %s | %s -> %s%n", menuId, name, icon, fixed);
  72. }
  73. }
  74. }
  75. }
  76. System.out.println("[OK] updated " + updated + " menu icons");
  77. }
  78. private static String resolveIcon(String menuName, String icon, Set<String> svgs) {
  79. if (icon != null && icon.startsWith("el-icon-")) return icon;
  80. if (icon != null && !icon.isEmpty() && !icon.equals("#") && svgs.contains(icon)) return icon;
  81. if (icon != null && ICON_ALIAS.containsKey(icon)) {
  82. String alias = ICON_ALIAS.get(icon);
  83. if (svgs.contains(alias)) return alias;
  84. }
  85. return pickByName(menuName, svgs);
  86. }
  87. private static String pickByName(String name, Set<String> svgs) {
  88. if (name == null || name.isEmpty()) return pick("documentation", svgs);
  89. if (name.contains("\u5347\u7ea7")) return "el-icon-upload2";
  90. if (name.contains("\u6a21\u677f")) return pick("documentation", svgs);
  91. if (name.contains("\u5de5\u4f5c\u6d41")) return pick("guide", svgs);
  92. if (name.contains("\u5b9e\u4f8b") || name.contains("\u76d1\u63a7")) return pick("monitor", svgs);
  93. if (name.contains("\u654f\u611f") || name.contains("\u8fdd\u7981") || name.contains("\u6613\u9519")
  94. || name.contains("\u8fdd\u89c4") || name.contains("\u5173\u952e\u8bcd")) return pick("education", svgs);
  95. if (name.contains("\u79df\u6237")) return pick("peoples", svgs);
  96. if (name.contains("\u914d\u7f6e") || name.contains("\u8bbe\u7f6e") || name.contains("\u53c2\u6570"))
  97. return pick("build", svgs);
  98. if (name.contains("\u65e5\u5fd7")) return pick("documentation", svgs);
  99. if (name.contains("\u4efb\u52a1") || name.contains("\u5b9a\u65f6")) return pick("time", svgs);
  100. if (name.contains("CID") || name.contains("\u8bbe\u5907") || name.contains("\u670d\u52a1"))
  101. return pick("server", svgs);
  102. if (name.contains("\u5fae\u4fe1") || name.contains("\u4f01\u5fae")) return pick("message", svgs);
  103. if (name.contains("\u5b57\u5178")) return pick("documentation", svgs);
  104. if (name.contains("\u8ba2\u5355") || name.contains("\u6536\u8d39") || name.contains("\u8d44\u91d1"))
  105. return pick("money", svgs);
  106. if (name.contains("\u7edf\u8ba1") || name.contains("\u62a5\u8868") || name.contains("\u770b\u677f"))
  107. return pick("chart", svgs);
  108. if (name.contains("\u7528\u6237")) return pick("user", svgs);
  109. if (name.contains("\u89d2\u8272")) return pick("peoples", svgs);
  110. if (name.contains("\u90e8\u95e8") || name.contains("\u83dc\u5355")) return pick("tree-table", svgs);
  111. if (name.contains("\u901a\u77e5") || name.contains("\u516c\u544a")) return pick("message", svgs);
  112. if (name.contains("\u7cfb\u7edf")) return pick("build", svgs);
  113. return pick("documentation", svgs);
  114. }
  115. private static String pick(String icon, Set<String> svgs) {
  116. return svgs.contains(icon) ? icon : "documentation";
  117. }
  118. private static Set<String> loadSvgs() throws IOException {
  119. Set<String> svgs = new HashSet<>();
  120. try (DirectoryStream<Path> ds = Files.newDirectoryStream(Paths.get(SVG_DIR), "*.svg")) {
  121. for (Path p : ds) {
  122. String fn = p.getFileName().toString();
  123. svgs.add(fn.substring(0, fn.length() - 4));
  124. }
  125. }
  126. return svgs;
  127. }
  128. private static void execBatch(Connection conn, String sql) throws SQLException {
  129. try (Statement st = conn.createStatement()) {
  130. for (String part : sql.split(";")) {
  131. String s = part.trim();
  132. if (!s.isEmpty()) st.execute(s);
  133. }
  134. }
  135. }
  136. private static Connection open(String host, int port, String database, String user, String password)
  137. throws SQLException {
  138. return DriverManager.getConnection(
  139. "jdbc:mysql://" + host + ":" + port + "/" + database
  140. + "?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&allowMultiQueries=true",
  141. user, password);
  142. }
  143. private static String getenv(String key, String defaultValue) {
  144. String v = System.getenv(key);
  145. return v != null && !v.isEmpty() ? v : defaultValue;
  146. }
  147. }