|
@@ -0,0 +1,163 @@
|
|
|
|
|
+package com.fs.company;
|
|
|
|
|
+
|
|
|
|
|
+import java.sql.*;
|
|
|
|
|
+import java.io.*;
|
|
|
|
|
+
|
|
|
|
|
+public class AddSmsApiMenu {
|
|
|
|
|
+ public static void main(String[] args) {
|
|
|
|
|
+ String url = "jdbc:mysql://cq-cdb-8fjmemkb.sql.tencentcdb.com:27220/ylrz_saas?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false";
|
|
|
|
|
+ String user = "root";
|
|
|
|
|
+ String password = "Ylrz_1q2w3e4r5t6y";
|
|
|
|
|
+
|
|
|
|
|
+ String outFile = "d:/AICODE/saas/add_sms_api_menu_result.txt";
|
|
|
|
|
+ PrintWriter pw = null;
|
|
|
|
|
+ try {
|
|
|
|
|
+ pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ System.err.println("无法创建输出文件: " + e.getMessage());
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ Class.forName("com.mysql.cj.jdbc.Driver");
|
|
|
|
|
+ pw.println("DEBUG: Driver loaded");
|
|
|
|
|
+ pw.flush();
|
|
|
|
|
+
|
|
|
|
|
+ Connection conn = DriverManager.getConnection(url, user, password);
|
|
|
|
|
+ pw.println("DEBUG: Connected to database");
|
|
|
|
|
+ pw.flush();
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 查找通信管理分组
|
|
|
|
|
+ String findGroupSql = "SELECT menu_id, menu_name, parent_id, order_num, path, component FROM sys_menu WHERE menu_name = '通信管理' AND menu_type = 'M' AND status = '0'";
|
|
|
|
|
+ Statement stmt = conn.createStatement();
|
|
|
|
|
+ ResultSet rs = stmt.executeQuery(findGroupSql);
|
|
|
|
|
+
|
|
|
|
|
+ long groupId = -1;
|
|
|
|
|
+ String groupName = "";
|
|
|
|
|
+ pw.println("\n=== 通信管理分组 ===");
|
|
|
|
|
+ while (rs.next()) {
|
|
|
|
|
+ groupId = rs.getLong("menu_id");
|
|
|
|
|
+ groupName = rs.getString("menu_name");
|
|
|
|
|
+ pw.println("menu_id=" + groupId + ", menu_name=" + groupName + ", parent_id=" + rs.getLong("parent_id"));
|
|
|
|
|
+ }
|
|
|
|
|
+ rs.close();
|
|
|
|
|
+ stmt.close();
|
|
|
|
|
+
|
|
|
|
|
+ if (groupId == -1) {
|
|
|
|
|
+ pw.println("ERROR: 找不到通信管理分组!");
|
|
|
|
|
+ conn.close();
|
|
|
|
|
+ pw.close();
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 查看通信管理下的现有子菜单
|
|
|
|
|
+ String findChildrenSql = "SELECT menu_id, menu_name, order_num, path, component FROM sys_menu WHERE parent_id = " + groupId + " AND menu_type IN ('M','C') AND status = '0' ORDER BY order_num";
|
|
|
|
|
+ Statement stmt2 = conn.createStatement();
|
|
|
|
|
+ ResultSet rs2 = stmt2.executeQuery(findChildrenSql);
|
|
|
|
|
+
|
|
|
|
|
+ pw.println("\n=== 通信管理下的子菜单 ===");
|
|
|
|
|
+ int maxOrderNum = 0;
|
|
|
|
|
+ long maxMenuId = 0;
|
|
|
|
|
+ boolean smsApiExists = false;
|
|
|
|
|
+ while (rs2.next()) {
|
|
|
|
|
+ long mid = rs2.getLong("menu_id");
|
|
|
|
|
+ String mname = rs2.getString("menu_name");
|
|
|
|
|
+ int order = rs2.getInt("order_num");
|
|
|
|
|
+ String mpath = rs2.getString("path");
|
|
|
|
|
+ pw.println("menu_id=" + mid + ", menu_name=" + mname + ", order_num=" + order + ", path=" + mpath);
|
|
|
|
|
+ if (order > maxOrderNum) maxOrderNum = order;
|
|
|
|
|
+ if (mid > maxMenuId) maxMenuId = mid;
|
|
|
|
|
+ if ("smsApi".equals(mpath) || "短信接口".equals(mname)) smsApiExists = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ rs2.close();
|
|
|
|
|
+ stmt2.close();
|
|
|
|
|
+
|
|
|
|
|
+ if (smsApiExists) {
|
|
|
|
|
+ pw.println("\n短信接口菜单已存在,跳过插入");
|
|
|
|
|
+ conn.close();
|
|
|
|
|
+ pw.close();
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 插入短信接口菜单
|
|
|
|
|
+ // 找一个不冲突的menu_id:在现有最大menu_id基础上+1
|
|
|
|
|
+ String findMaxIdSql = "SELECT MAX(menu_id) as max_id FROM sys_menu";
|
|
|
|
|
+ Statement stmt3 = conn.createStatement();
|
|
|
|
|
+ ResultSet rs3 = stmt3.executeQuery(findMaxIdSql);
|
|
|
|
|
+ long newMenuId = 28261; // 默认值
|
|
|
|
|
+ if (rs3.next()) {
|
|
|
|
|
+ long dbMax = rs3.getLong("max_id");
|
|
|
|
|
+ newMenuId = Math.max(dbMax + 1, 28261);
|
|
|
|
|
+ }
|
|
|
|
|
+ rs3.close();
|
|
|
|
|
+ stmt3.close();
|
|
|
|
|
+
|
|
|
|
|
+ // 短信相关菜单排在短信管理之后,短信套餐之前
|
|
|
|
|
+ // 找短信管理的order_num
|
|
|
|
|
+ String findSmsOrderSql = "SELECT order_num FROM sys_menu WHERE parent_id = " + groupId + " AND path = 'sms'";
|
|
|
|
|
+ Statement stmt4 = conn.createStatement();
|
|
|
|
|
+ ResultSet rs4 = stmt4.executeQuery(findSmsOrderSql);
|
|
|
|
|
+ int smsOrder = 8; // 默认
|
|
|
|
|
+ if (rs4.next()) {
|
|
|
|
|
+ smsOrder = rs4.getInt("order_num");
|
|
|
|
|
+ }
|
|
|
|
|
+ rs4.close();
|
|
|
|
|
+ stmt4.close();
|
|
|
|
|
+
|
|
|
|
|
+ // 将短信套餐和之后的菜单order_num后移
|
|
|
|
|
+ String shiftOrdersSql = "UPDATE sys_menu SET order_num = order_num + 1 WHERE parent_id = " + groupId + " AND order_num > " + smsOrder;
|
|
|
|
|
+ Statement stmt5 = conn.createStatement();
|
|
|
|
|
+ int shiftCount = stmt5.executeUpdate(shiftOrdersSql);
|
|
|
|
|
+ pw.println("\n后移了 " + shiftCount + " 个菜单的order_num");
|
|
|
|
|
+ stmt5.close();
|
|
|
|
|
+
|
|
|
|
|
+ // 插入短信接口菜单
|
|
|
|
|
+ String insertSql = "INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, menu_type, icon, visible, status, perms, is_frame, is_cache, create_by, create_time) " +
|
|
|
|
|
+ "VALUES (" + newMenuId + ", '短信接口', " + groupId + ", " + (smsOrder + 1) + ", 'smsApi', 'admin/smsApi/index', 'C', 'el-icon-connection', '0', '0', '', 0, 0, 'admin', NOW())";
|
|
|
|
|
+ Statement stmt6 = conn.createStatement();
|
|
|
|
|
+ int insertCount = stmt6.executeUpdate(insertSql);
|
|
|
|
|
+ pw.println("\n插入短信接口菜单: menu_id=" + newMenuId + ", 影响" + insertCount + "行");
|
|
|
|
|
+ stmt6.close();
|
|
|
|
|
+
|
|
|
|
|
+ // 给超级管理员角色授权 (role_id=1)
|
|
|
|
|
+ String insertRoleMenuSql = "INSERT INTO sys_role_menu (role_id, menu_id) VALUES (1, " + newMenuId + ")";
|
|
|
|
|
+ Statement stmt7 = conn.createStatement();
|
|
|
|
|
+ int rmCount = stmt7.executeUpdate(insertRoleMenuSql);
|
|
|
|
|
+ pw.println("插入角色菜单关联: role_id=1, menu_id=" + newMenuId + ", 影响" + rmCount + "行");
|
|
|
|
|
+ stmt7.close();
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 验证插入结果
|
|
|
|
|
+ String verifySql = "SELECT menu_id, menu_name, parent_id, order_num, path, component FROM sys_menu WHERE menu_id = " + newMenuId;
|
|
|
|
|
+ Statement stmt8 = conn.createStatement();
|
|
|
|
|
+ ResultSet rs8 = stmt8.executeQuery(verifySql);
|
|
|
|
|
+ pw.println("\n=== 验证插入结果 ===");
|
|
|
|
|
+ while (rs8.next()) {
|
|
|
|
|
+ pw.println("menu_id=" + rs8.getLong("menu_id") + ", menu_name=" + rs8.getString("menu_name") +
|
|
|
|
|
+ ", parent_id=" + rs8.getLong("parent_id") + ", order_num=" + rs8.getInt("order_num") +
|
|
|
|
|
+ ", path=" + rs8.getString("path") + ", component=" + rs8.getString("component"));
|
|
|
|
|
+ }
|
|
|
|
|
+ rs8.close();
|
|
|
|
|
+ stmt8.close();
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 显示更新后的通信管理下子菜单
|
|
|
|
|
+ String verifyChildrenSql = "SELECT menu_id, menu_name, order_num, path, component FROM sys_menu WHERE parent_id = " + groupId + " AND menu_type IN ('M','C') AND status = '0' ORDER BY order_num";
|
|
|
|
|
+ Statement stmt9 = conn.createStatement();
|
|
|
|
|
+ ResultSet rs9 = stmt9.executeQuery(verifyChildrenSql);
|
|
|
|
|
+ pw.println("\n=== 更新后通信管理下的子菜单 ===");
|
|
|
|
|
+ while (rs9.next()) {
|
|
|
|
|
+ pw.println("menu_id=" + rs9.getLong("menu_id") + ", menu_name=" + rs9.getString("menu_name") +
|
|
|
|
|
+ ", order_num=" + rs9.getInt("order_num") + ", path=" + rs9.getString("path"));
|
|
|
|
|
+ }
|
|
|
|
|
+ rs9.close();
|
|
|
|
|
+ stmt9.close();
|
|
|
|
|
+
|
|
|
|
|
+ conn.close();
|
|
|
|
|
+ pw.println("\nDONE!");
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ pw.println("ERROR: " + e.getMessage());
|
|
|
|
|
+ e.printStackTrace(pw);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ pw.close();
|
|
|
|
|
+ }
|
|
|
|
|
+}
|