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 = DatabaseConnectionManager.ConnectionString;
}
///
/// 根据用户名查询用户
///
/// 用户名
/// 用户对象,不存在返回null
public User GetUserByUsername(string username)
{
using (var connection = DatabaseConnectionManager.CreateConnection())
{
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 = DatabaseConnectionManager.CreateConnection())
{
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 = DatabaseConnectionManager.CreateConnection())
{
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 = DatabaseConnectionManager.CreateConnection())
{
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 = DatabaseConnectionManager.CreateConnection())
{
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 = DatabaseConnectionManager.CreateConnection())
{
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 = DatabaseConnectionManager.CreateConnection())
{
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 = DatabaseConnectionManager.CreateConnection())
{
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 = DatabaseConnectionManager.CreateConnection())
{
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;
}
}
}
}