using Dapper; using MySql.Data.MySqlClient; using System; using System.Diagnostics; namespace 全自动水压检测仪.DATA { /// /// 数据库初始化辅助类 /// 用于创建用户表和初始化默认管理员账户 /// public static class DatabaseInitializer { private static readonly string _connectionString = DatabaseConnectionManager.ConnectionString; /// /// 初始化用户表和默认管理员账户 /// public static void Initialize() { try { CreateUsersTable(); CreateDefaultAdminIfNotExists(); } catch (Exception ex) { throw new Exception($"数据库初始化失败:{ex.Message}", ex); } } /// /// 强制重置默认用户(删除并重新创建) /// public static void ForceResetDefaultUsers() { using (var connection = DatabaseConnectionManager.CreateConnection()) { connection.Open(); try { // 删除现有的默认用户 connection.Execute("DELETE FROM sys_users WHERE username IN ('admin', 'csi')"); Debug.WriteLine("已删除现有默认用户"); // 重新创建 CreateUserIfNotExists(connection, "admin", "admin123", 1); CreateUserIfNotExists(connection, "csi", "123456", 0); Debug.WriteLine("默认用户重置完成!"); } catch (Exception ex) { Debug.WriteLine($"重置用户失败: {ex.Message}"); throw; } } } /// /// 创建用户表 /// private static void CreateUsersTable() { using (var connection = DatabaseConnectionManager.CreateConnection()) { connection.Open(); // 先检查表是否存在,如果不存在则创建 string checkTableSql = @"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = @database AND table_name = 'sys_users'"; int tableExists = connection.ExecuteScalar(checkTableSql, new { database = "fullautowaterpressure" }); if (tableExists == 0) { string sql = @" CREATE TABLE `sys_users` ( `id` INT NOT NULL AUTO_INCREMENT COMMENT '用户ID', `username` VARCHAR(50) NOT NULL COMMENT '用户名', `password_hash` VARCHAR(255) NOT NULL COMMENT '密码哈希值', `salt` VARCHAR(64) NOT NULL COMMENT '盐值', `user_role` TINYINT NOT NULL DEFAULT 0 COMMENT '用户角色:0=普通用户,1=管理员', `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0=禁用,1=启用', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `last_login_time` DATETIME DEFAULT NULL COMMENT '最后登录时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统用户表'"; connection.Execute(sql); } } } /// /// 创建默认管理员账户(如果不存在) /// 默认账户:admin / admin123 /// private static void CreateDefaultAdminIfNotExists() { using (var connection = DatabaseConnectionManager.CreateConnection()) { connection.Open(); try { // 先检查 sys_users 表是否存在 string checkTableSql = @"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = @database AND table_name = 'sys_users'"; int tableExists = connection.ExecuteScalar(checkTableSql, new { database = "fullautowaterpressure" }); if (tableExists == 0) { Debug.WriteLine("sys_users table does not exist, skipping admin creation"); return; } // 创建默认管理员账户 admin / admin123 CreateUserIfNotExists(connection, "admin", "admin123", 1); // 创建默认普通用户账户 csi / 123456 CreateUserIfNotExists(connection, "csi", "123456", 0); } catch (Exception ex) { // 捕获其他异常 Debug.WriteLine($"✗ Error creating default users: {ex.GetType().Name} - {ex.Message}"); } } } /// /// 创建用户(如果不存在) /// /// 数据库连接 /// 用户名 /// 密码(明文) /// 用户角色:0=普通用户,1=管理员 private static void CreateUserIfNotExists(MySqlConnection connection, string username, string password, int userRole) { try { // 检查用户是否已存在 string checkUserSql = "SELECT COUNT(*) FROM `sys_users` WHERE `username` = @username"; int userExists = connection.ExecuteScalar(checkUserSql, new { username }); if (userExists > 0) { Debug.WriteLine($"用户 '{username}' 已存在,跳过创建"); return; } // 简单明文密码存储 // password_hash 字段存储明文密码 // salt 字段存储空字符串(保持兼容性) string passwordHash = password; // 直接使用明文 string salt = ""; // 空字符串 // 调试输出 Debug.WriteLine($"\n=== 创建用户: {username} ==="); Debug.WriteLine($" 密码: {password}"); Debug.WriteLine($" 角色: {(userRole == 1 ? "管理员" : "普通用户")}"); // 插入用户 string insertSql = @" INSERT INTO `sys_users` (`username`, `password_hash`, `salt`, `user_role`, `status`, `create_time`) VALUES (@username, @passwordHash, @salt, @userRole, @status, NOW())"; int rowsAffected = connection.Execute(insertSql, new { username = username, passwordHash = passwordHash, salt = salt, userRole = userRole, status = 1 // 启用 }); if (rowsAffected > 0) { string roleText = userRole == 1 ? "管理员" : "普通用户"; Debug.WriteLine($"✓ 用户创建成功: {username} / {password} ({roleText})"); } else { Debug.WriteLine($"✗ 创建用户失败: {username}"); } } catch (MySqlException ex) { Debug.WriteLine($"✗ MySQL错误 (创建用户 '{username}'): [{ex.Number}] {ex.Message}"); if (ex.Number == 1062) { Debug.WriteLine($"用户 '{username}' 已存在(重复键)"); } } catch (Exception ex) { Debug.WriteLine($"✗ 异常 (创建用户 '{username}'): {ex.Message}"); } } } }