RobotTaskController.cs
7.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
using Microsoft.AspNetCore.Mvc;
using Rcs.Application.Common;
using Rcs.Application.DTOs;
using MassTransit.Mediator;
using Rcs.Application.MessageBus.Commands;
using StatusCodes = Microsoft.AspNetCore.Http.StatusCodes;
namespace Rcs.Api.Controllers
{
/// <summary>
/// 任务管理控制器
/// @author zzy
/// </summary>
[ApiController]
[Route("api/[controller]")]
public class RobotTaskController : ControllerBase
{
private readonly ILogger<RobotTaskController> _logger;
private readonly IMediator _mediator;
public RobotTaskController(
ILogger<RobotTaskController> logger,
IMediator mediator)
{
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
_mediator = mediator;
}
/// <summary>
/// 获取任务列表
/// </summary>
/// <param name="query">查询参数</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>任务列表</returns>
[HttpGet("list")]
public async Task<IActionResult> GetRobotTaskList([FromQuery] GetRobotTasksQuery query, CancellationToken cancellationToken = default)
{
var client = _mediator.CreateRequestClient<GetRobotTasksQuery>();
var response = await client.GetResponse<PagedResponse<RobotTaskListItemDto>>(query, cancellationToken);
return Ok(response.Message);
}
/// <summary>
/// 获取历史主任务列表
/// </summary>
/// <param name="query">查询参数</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>历史主任务列表</returns>
[HttpGet("history/list")]
public async Task<IActionResult> GetRobotTaskHistoryList([FromQuery] GetRobotTaskHistoriesQuery query,
CancellationToken cancellationToken = default)
{
var client = _mediator.CreateRequestClient<GetRobotTaskHistoriesQuery>();
var response = await client.GetResponse<PagedResponse<RobotTaskHistoryListItemDto>>(query, cancellationToken);
return Ok(response.Message);
}
/// <summary>
/// 根据ID获取任务详情
/// </summary>
/// <param name="id">任务ID</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>任务详情</returns>
[HttpGet("{id}")]
public async Task<IActionResult> GetRobotTaskById(string id, CancellationToken cancellationToken = default)
{
if (!Guid.TryParse(id, out Guid taskId))
{
return BadRequest(ApiResponse.Failed("无效的任务ID格式", StatusCodes.Status400BadRequest));
}
var client = _mediator.CreateRequestClient<GetRobotTaskQuery>();
var response = await client.GetResponse<ApiResponse<RobotTaskDto>>(new GetRobotTaskQuery()
{
TaskId = taskId
}, cancellationToken);
return Ok(response.Message);
}
/// <summary>
/// 创建或更新任务
/// </summary>
/// <param name="command">创建或更新命令</param>
/// <returns>操作结果</returns>
[HttpPost]
public async Task<IActionResult> CreateOrUpdateRobotTask([FromBody] CreateOrUpdateRobotTaskCommand command)
{
var client = _mediator.CreateRequestClient<CreateOrUpdateRobotTaskCommand>();
var response = await client.GetResponse<ApiResponse>(command);
return Ok(response.Message);
}
/// <summary>
/// 删除任务
/// </summary>
/// <param name="id">任务ID</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>操作结果</returns>
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteRobotTaskById(string id, CancellationToken cancellationToken = default)
{
if (!Guid.TryParse(id, out Guid taskId))
{
return BadRequest(ApiResponse.Failed("无效的任务ID格式", StatusCodes.Status400BadRequest));
}
var client = _mediator.CreateRequestClient<DeleteRobotTaskCommand>();
var response = await client.GetResponse<ApiResponse>(new DeleteRobotTaskCommand()
{
TaskId = taskId
}, cancellationToken);
return Ok(response.Message);
}
/// <summary>
/// 重新执行任务(取消当前任务后创建同配置新任务)
/// </summary>
/// <param name="id">任务ID</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>操作结果</returns>
[HttpPost("{id}/retry")]
public async Task<IActionResult> RetryRobotTaskById(string id, CancellationToken cancellationToken = default)
{
if (!Guid.TryParse(id, out Guid taskId))
{
return BadRequest(ApiResponse.Failed("无效的任务ID格式", StatusCodes.Status400BadRequest));
}
var client = _mediator.CreateRequestClient<RetryRobotTaskCommand>();
var response = await client.GetResponse<ApiResponse>(new RetryRobotTaskCommand
{
TaskId = taskId
}, cancellationToken);
return Ok(response.Message);
}
/// <summary>
/// 手动完成任务(触发任务完成领域方法)
/// </summary>
/// <param name="id">任务ID</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>操作结果</returns>
[HttpPost("{id}/manual-complete")]
public async Task<IActionResult> ManualCompleteRobotTaskById(string id, CancellationToken cancellationToken = default)
{
if (!Guid.TryParse(id, out Guid taskId))
{
return BadRequest(ApiResponse.Failed("无效的任务ID格式", StatusCodes.Status400BadRequest));
}
var client = _mediator.CreateRequestClient<ManualCompleteRobotTaskCommand>();
var response = await client.GetResponse<ApiResponse>(new ManualCompleteRobotTaskCommand
{
TaskId = taskId
}, cancellationToken);
return Ok(response.Message);
}
/// <summary>
/// 执行子任务
/// 处理逻辑与SubTaskCompletedDomainEventHandler中85行前一致
/// </summary>
/// <param name="id">子任务ID</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>操作结果</returns>
[HttpPost("subtasks/{id}/execute")]
public async Task<IActionResult> ExecuteRobotSubTaskById(string id, CancellationToken cancellationToken = default)
{
if (!Guid.TryParse(id, out Guid subTaskId))
{
return BadRequest(ApiResponse.Failed("无效的子任务ID格式", StatusCodes.Status400BadRequest));
}
var client = _mediator.CreateRequestClient<ExecuteRobotSubTaskCommand>();
var response = await client.GetResponse<ApiResponse>(new ExecuteRobotSubTaskCommand
{
SubTaskId = subTaskId
}, cancellationToken);
return Ok(response.Message);
}
}
}