支持任务搜索和用户添加

This commit is contained in:
root 2024-12-07 18:17:14 +08:00
parent d09dcf7ecf
commit df3520272e
2 changed files with 168 additions and 0 deletions

View file

@ -475,5 +475,131 @@ namespace iFileProxy.Controllers
});
}
}
/// <summary>
/// 模糊搜索任务
/// </summary>
[HttpGet("SearchTasks")]
public async Task<ActionResult<CommonRsp>> SearchTasks(
[FromQuery] string keyword,
[FromQuery] int page = 1,
[FromQuery] int pageSize = 10)
{
try
{
var result = await _dbGateService.SearchTasksAsync(keyword, page, pageSize);
// 更新队列位置信息
foreach (var task in result.Data)
{
if (task.Status == TaskState.Queuing)
{
task.QueuePosition = _taskManager.GetQueuePosition(task.TaskId);
}
}
return Ok(new CommonRsp
{
Retcode = 0,
Message = "success",
Data = result
});
}
catch (Exception ex)
{
_logger.Error(ex, "搜索任务失败");
return Ok(new CommonRsp
{
Retcode = 1,
Message = "搜索任务失败"
});
}
}
/// <summary>
/// 添加新用户
/// </summary>
[Authorize(UserMask.Admin, UserMask.SuperAdmin)]
[HttpPost("AddUser")]
public async Task<ActionResult<CommonRsp>> AddUser([FromBody] AddUserRequest request)
{
try
{
// 获取当前操作者信息
var operatorId = HttpContext.Items["User"]?.ToString();
var operator_ = await _dbGateService.GetUserByIdAsync(operatorId);
// 检查权限
if (operator_?.Mask == UserMask.Admin && request.Mask > UserMask.Admin)
{
return Ok(new CommonRsp
{
Retcode = 1,
Message = "管理员只能创建普通管理员及以下权限的用户"
});
}
// 检查用户名和邮箱是否已存在
if (await _dbGateService.UserExistsAsync(request.Username, request.Email))
{
return Ok(new CommonRsp
{
Retcode = 1,
Message = "用户名或电子邮件已存在"
});
}
// 创建新用户
var user = new User
{
Username = request.Username,
PasswordHash = BCrypt.Net.BCrypt.HashPassword(request.Password),
Nickname = request.Nickname,
Email = request.Email,
Mask = request.Mask,
LastLoginIP = "N/A"
};
// 保存用户
var success = await _dbGateService.CreateUserAsync(user);
// 记录操作事件
if (success)
{
var userEvent = new UserEvent
{
UserId = user.UserId,
EventType = UserEventType.Registry,
EventIP = HttpContext.Connection.RemoteIpAddress?.ToString() ?? "unknown",
EventDetail = $"用户由管理员 {operator_?.Username} 创建"
};
await _dbGateService.CreateUserEventAsync(userEvent);
}
return Ok(new CommonRsp
{
Retcode = success ? 0 : 1,
Message = success ? "用户创建成功" : "用户创建失败"
});
}
catch (Exception ex)
{
_logger.Error(ex, "创建用户失败");
return Ok(new CommonRsp
{
Retcode = 1,
Message = "创建用户失败"
});
}
}
public class AddUserRequest
{
public string Username { get; set; } = string.Empty;
public string Password { get; set; } = string.Empty;
public string Nickname { get; set; } = string.Empty;
public string Email { get; set; } = string.Empty;
public UserMask Mask { get; set; } = UserMask.User;
}
}
}

View file

@ -1102,5 +1102,47 @@ namespace iFileProxy.Services
var result = await ExecuteNonQueryAsync(sql, parameters);
return result > 0;
}
public async Task<PagedResult<TaskInfo>> SearchTasksAsync(string keyword, int page, int pageSize)
{
var sql = new StringBuilder(@"
SELECT * FROM t_tasks_info
WHERE file_name LIKE @keyword
OR url LIKE @keyword
OR client_ip LIKE @keyword
OR tid LIKE @keyword
OR tag LIKE @keyword");
var parameters = new Dictionary<string, object>
{
{ "@keyword", $"%{keyword}%" },
{ "@offset", (page - 1) * pageSize },
{ "@limit", pageSize }
};
// 添加分页
sql.Append(" ORDER BY add_time DESC LIMIT @offset, @limit");
// 获取总记录数
var countSql = @"
SELECT COUNT(*) FROM t_tasks_info
WHERE file_name LIKE @keyword
OR url LIKE @keyword
OR client_ip LIKE @keyword
OR tid LIKE @keyword
OR tag LIKE @keyword";
var totalCount = await ExecuteScalarAsync<long>(countSql, parameters);
var tasks = await ExecuteQueryAsync<TaskInfo>(sql.ToString(), parameters);
return new PagedResult<TaskInfo>
{
Total = totalCount,
PageSize = pageSize,
CurrentPage = page,
TotalPages = (int)Math.Ceiling(totalCount / (double)pageSize),
Data = tasks
};
}
}
}