using Dapper; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Data; using System.Linq; namespace 全自动水压检测仪.DATA { /// /// 用户数据访问层 /// public class UserRepository { private readonly string _connectionString; public UserRepository() { _connectionString = "Server=localhost;Database=fullautowaterpressure;User=root;Password=123456;port=3306;charset=utf8;"; } /// /// 根据用户名查询用户 /// /// 用户名 /// 用户对象,不存在返回null public User GetUserByUsername(string username) { using (var connection = new MySqlConnection(_connectionString)) { connection.Open(); // 明确指定字段映射,避免命名差异问题 string sql = @"SELECT id AS Id, username AS Username, password_hash AS PasswordHash, salt AS Salt, user_role AS UserRole, status AS Status, create_time AS CreateTime, update_time AS UpdateTime, last_login_time AS LastLoginTime FROM sys_users WHERE username = @username AND status = 1"; var user = connection.QueryFirstOrDefault(sql, new { username }); // 调试输出 if (user != null) { System.Diagnostics.Debug.WriteLine($"\n[GetUserByUsername] 查询结果:"); System.Diagnostics.Debug.WriteLine($" 用户名: {user.Username}"); System.Diagnostics.Debug.WriteLine($" PasswordHash: '{user.PasswordHash ?? "(null)"}'"); System.Diagnostics.Debug.WriteLine($" PasswordHash 长度: {user.PasswordHash?.Length ?? 0}"); System.Diagnostics.Debug.WriteLine($" Salt: '{user.Salt ?? "(null)"}'"); System.Diagnostics.Debug.WriteLine($" UserRole: {user.UserRole}"); } else { System.Diagnostics.Debug.WriteLine($"\n[GetUserByUsername] 未找到用户: {username}"); } return user; } } /// /// 根据ID查询用户 /// /// 用户ID /// 用户对象,不存在返回null public User GetUserById(int userId) { using (var connection = new MySqlConnection(_connectionString)) { connection.Open(); // 明确指定字段映射 string sql = @"SELECT id AS Id, username AS Username, password_hash AS PasswordHash, salt AS Salt, user_role AS UserRole, status AS Status, create_time AS CreateTime, update_time AS UpdateTime, last_login_time AS LastLoginTime FROM sys_users WHERE id = @id"; return connection.QueryFirstOrDefault(sql, new { id = userId }); } } /// /// 创建用户 /// /// 用户对象 /// 明文密码 /// 是否创建成功 public bool CreateUser(User user, string plainPassword) { using (var connection = new MySqlConnection(_connectionString)) { connection.Open(); // 简单明文密码存储 string passwordHash = plainPassword; // 直接使用明文 string salt = ""; // 空字符串 string sql = @"INSERT INTO sys_users (username, password_hash, salt, user_role, status, create_time) VALUES (@username, @passwordHash, @salt, @userRole, 1, CURRENT_TIMESTAMP)"; int result = connection.Execute(sql, new { username = user.Username, passwordHash = passwordHash, salt = salt, userRole = user.UserRole }); return result > 0; } } /// /// 更新用户信息 /// /// 用户对象 /// 是否更新成功 public bool UpdateUser(User user) { using (var connection = new MySqlConnection(_connectionString)) { connection.Open(); string sql = @"UPDATE sys_users SET username = @username, user_role = @userRole, status = @status WHERE id = @id"; int result = connection.Execute(sql, new { username = user.Username, userRole = user.UserRole, status = user.Status, id = user.Id }); return result > 0; } } /// /// 删除用户 /// /// 用户ID /// 是否删除成功 public bool DeleteUser(int userId) { using (var connection = new MySqlConnection(_connectionString)) { connection.Open(); string sql = @"DELETE FROM sys_users WHERE id = @id"; int result = connection.Execute(sql, new { id = userId }); return result > 0; } } /// /// 获取所有用户 /// /// 用户列表 public List GetAllUsers() { using (var connection = new MySqlConnection(_connectionString)) { connection.Open(); // 明确指定字段映射 string sql = @"SELECT id AS Id, username AS Username, password_hash AS PasswordHash, salt AS Salt, user_role AS UserRole, status AS Status, create_time AS CreateTime, update_time AS UpdateTime, last_login_time AS LastLoginTime FROM sys_users ORDER BY create_time DESC"; return connection.Query(sql).ToList(); } } /// /// 用户修改密码 /// /// 用户ID /// 旧密码 /// 新密码 /// 是否修改成功 public bool ChangePassword(int userId, string oldPassword, string newPassword) { using (var connection = new MySqlConnection(_connectionString)) { connection.Open(); // 先验证旧密码 User user = GetUserById(userId); if (user == null) return false; // 简单明文密码比较 if (user.PasswordHash != oldPassword) return false; // 更新新密码(明文) string newPasswordHash = newPassword; string newSalt = ""; string sql = @"UPDATE sys_users SET password_hash = @passwordHash, salt = @salt, update_time = CURRENT_TIMESTAMP WHERE id = @id"; int result = connection.Execute(sql, new { passwordHash = newPasswordHash, salt = newSalt, id = userId }); return result > 0; } } /// /// 管理员重置用户密码 /// /// 用户ID /// 新密码 /// 是否重置成功 public bool ResetPassword(int userId, string newPassword) { using (var connection = new MySqlConnection(_connectionString)) { connection.Open(); // 简单明文密码存储 string newPasswordHash = newPassword; string newSalt = ""; string sql = @"UPDATE sys_users SET password_hash = @passwordHash, salt = @salt, update_time = CURRENT_TIMESTAMP WHERE id = @id"; int result = connection.Execute(sql, new { passwordHash = newPasswordHash, salt = newSalt, id = userId }); return result > 0; } } /// /// 更新最后登录时间 /// /// 用户名 /// 是否更新成功 public bool UpdateLastLoginTime(string username) { using (var connection = new MySqlConnection(_connectionString)) { connection.Open(); string sql = @"UPDATE sys_users SET last_login_time = CURRENT_TIMESTAMP WHERE username = @username"; int result = connection.Execute(sql, new { username }); return result > 0; } } } }