291 lines
10 KiB
C#
291 lines
10 KiB
C#
using Dapper;
|
||
using MySql.Data.MySqlClient;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.Linq;
|
||
|
||
namespace 全自动水压检测仪.DATA
|
||
{
|
||
/// <summary>
|
||
/// 用户数据访问层
|
||
/// </summary>
|
||
public class UserRepository
|
||
{
|
||
private readonly string _connectionString;
|
||
|
||
public UserRepository()
|
||
{
|
||
_connectionString = DatabaseConnectionManager.ConnectionString;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据用户名查询用户
|
||
/// </summary>
|
||
/// <param name="username">用户名</param>
|
||
/// <returns>用户对象,不存在返回null</returns>
|
||
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<User>(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;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据ID查询用户
|
||
/// </summary>
|
||
/// <param name="userId">用户ID</param>
|
||
/// <returns>用户对象,不存在返回null</returns>
|
||
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<User>(sql, new { id = userId });
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 创建用户
|
||
/// </summary>
|
||
/// <param name="user">用户对象</param>
|
||
/// <param name="plainPassword">明文密码</param>
|
||
/// <returns>是否创建成功</returns>
|
||
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;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新用户信息
|
||
/// </summary>
|
||
/// <param name="user">用户对象</param>
|
||
/// <returns>是否更新成功</returns>
|
||
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;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除用户
|
||
/// </summary>
|
||
/// <param name="userId">用户ID</param>
|
||
/// <returns>是否删除成功</returns>
|
||
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;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取所有用户
|
||
/// </summary>
|
||
/// <returns>用户列表</returns>
|
||
public List<User> 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<User>(sql).ToList();
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 用户修改密码
|
||
/// </summary>
|
||
/// <param name="userId">用户ID</param>
|
||
/// <param name="oldPassword">旧密码</param>
|
||
/// <param name="newPassword">新密码</param>
|
||
/// <returns>是否修改成功</returns>
|
||
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;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 管理员重置用户密码
|
||
/// </summary>
|
||
/// <param name="userId">用户ID</param>
|
||
/// <param name="newPassword">新密码</param>
|
||
/// <returns>是否重置成功</returns>
|
||
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;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新最后登录时间
|
||
/// </summary>
|
||
/// <param name="username">用户名</param>
|
||
/// <returns>是否更新成功</returns>
|
||
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;
|
||
}
|
||
}
|
||
}
|
||
}
|