支持任务搜索和用户添加
This commit is contained in:
parent
d09dcf7ecf
commit
df3520272e
2 changed files with 168 additions and 0 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue