diff --git a/Sln.Wcs.HikRoBotDispatcher/HikRoBotDispatchHub.cs b/Sln.Wcs.HikRoBotDispatcher/HikRoBotDispatchHub.cs index 674320f..dcb21df 100644 --- a/Sln.Wcs.HikRoBotDispatcher/HikRoBotDispatchHub.cs +++ b/Sln.Wcs.HikRoBotDispatcher/HikRoBotDispatchHub.cs @@ -24,6 +24,7 @@ #endregion << 版 本 注 释 >> using Sln.Wcs.HikRoBotAdapter.Domain.Dto.GbTaskSubmit; +using Sln.Wcs.HikRoBotAdapter.Domain.Dto.QueryTask; using Sln.Wcs.HikRoBotAdapter.Enum; using Sln.Wcs.HikRoBotAdapter.Service; using Sln.Wcs.Model.Domain; @@ -62,6 +63,31 @@ public class HikRoBotDispatchHub _logger.Info($"调度任务{taskDetail.taskCode}下发失败:{submitResultDto.msg}"); } } + + /// + /// 获取任务状态 + /// + /// + /// + public string GetTaskStatus(string taskCode) + { + string result = string.Empty; + QueryTaskResultDto taskStatus = _hikRobotAdapter.QueryTaskStatus(new QueryTaskDto() + { + RobotTaskCode = taskCode, + }); + + if (taskStatus.code == HikRoBotStatusEnum.成功) + { + _logger.Info($"调度任务{taskCode}状态获取成功:{taskStatus.data.TaskStatus}"); + result = taskStatus.data.TaskStatus; + } + else + { + _logger.Info($"调度任务{taskCode}状态获取失败:{taskStatus.msg}"); + } + return result; + } } \ No newline at end of file diff --git a/Sln.Wcs.HikRoBotServer/Program.cs b/Sln.Wcs.HikRoBotServer/Program.cs index 7a9370f..f3cded7 100644 --- a/Sln.Wcs.HikRoBotServer/Program.cs +++ b/Sln.Wcs.HikRoBotServer/Program.cs @@ -96,6 +96,13 @@ api.MapPost("/task/receive", (ReceiveTaskRequest req) => return Results.Ok(new { success = true }); }); +// Hub 方法: GetTaskStatus +api.MapGet("/task/status", (string taskCode) => +{ + string taskStatus = hub.GetTaskStatus(taskCode); + return Results.Ok(new { time = DateTime.Now, status = "ok" , taskStatus = taskStatus }); +}); + api.MapGet("/health", () => Results.Ok(new { time = DateTime.Now, status = "ok" })); log.Info("HikRoBotServer 就绪: http://localhost:5200/swagger"); diff --git a/TODO.md b/TODO.md index 334065f..c8ebdc9 100644 --- a/TODO.md +++ b/TODO.md @@ -11,22 +11,24 @@ ## 待完成 -### 1. 任务执行引擎(分组并行方案) -- [ ] 重新实现 BaseTaskExecutor、6 个执行类、TaskExecutorFactory -- [ ] MaterialStrategy.ProcessTask 改为调用工厂 -- [ ] SemaphoreSlim 实现分组并行 + 组内串行 -- [ ] 移除旧的 DispatchToAgv/DispatchToHoist stub +### 1.调度逻辑修改 +- [ ] HoistDispatcher、HikRoBotDispatcher任务下发后需要监控任务执行情况,任务执行完成后,才可以返回ok给Strategy +- [ ] AGV 任务下发后开始获取任务状态(调用/task/status),只有状态为FINISHED/MANUALED完成或手动完成时才可以进行后序任务,CANCELLED时终端调度任务后序也不执行 + 等待步骤执行WAIT => 筛选提升机、下发提升机任务 + FINISHED/MANUALED => 完成/手动完成,可以进行后序任务 + CANCELLED => 任务取消,终止调度任务 +- [ ] Strategy执行到提升机任务时进行读取托盘条码,验证物料并下发提升机启动信号 -### 2. 登录与权限 -- [ ] 登录窗口 + 用户认证 -- [ ] 菜单权限控制 -- [ ] 用户管理页面(已有部分代码,需恢复) +### 2. 任务执行引擎(分组并行方案) +- [ ] 包材入库逻辑测试 +- [ ] 包材出库、成品入库、成品出库逻辑测试 +- [ ] 任务执行引擎抽象,优化代码结构 ### 3. UI 优化 -- [ ] 选中行高亮颜色与编辑按钮区分(FluentTheme 内部限制,待找替代方案) - [ ] 码垛机 HMI 接入实时 PLC 数据 - [ ] 任务页面添加"下发"按钮(调用 HoistServer/HikRoBotServer API) -### 4. 方案设计 -- [ ] 前端/引擎通信协议确定(HTTP API 已就绪,需确认请求/响应格式) -- [ ] 设备并行数调优(当前 SemaphoreSlim(1)) +### 4. 登录与权限 +- [ ] 登录窗口 + 用户认证 +- [ ] 菜单权限控制 +