90 lines
3.3 KiB
Markdown
90 lines
3.3 KiB
Markdown
# 选择机器人块输出参数立即更新说明
|
||
|
||
## 修改背景
|
||
|
||
选择机器人块(CSelectAgvBp)和机器人执行动作块(CAgvOperationBp)是嵌套关系。之前的实现中,虽然选择机器人块在选择完成后状态就显示为成功,但是输出内容(选择出的机器人结果)要等到整个嵌套的动作块执行完成后才会更新到表中,在任务记录详情里才能显示出来。这不符合实际的显示需求。
|
||
|
||
## 修改内容
|
||
|
||
### 1. 修改 `RobotBlockHandler.update_block_record` 方法
|
||
**文件**: `services/execution/handlers/robot_scheduling.py`
|
||
|
||
**修改点**:
|
||
- 增加 `block_name` 和 `output_data` 参数
|
||
- 在选择机器人成功后,立即更新块记录的输出参数到数据库
|
||
- 构建完整的输出结构:`{"blocks": {"块名称": {"selectedAgvId": "机器人名称"}}}`
|
||
- 同时更新 `output_params` 和 `block_out_params_value` 字段
|
||
|
||
### 2. 修改选择机器人块的调用逻辑
|
||
**文件**: `services/execution/handlers/robot_scheduling.py`
|
||
|
||
**修改点**:
|
||
- 在选择机器人成功后(第897-902行),立即调用 `update_block_record` 方法
|
||
- 传入块名称和输出数据(包含选择的机器人名称)
|
||
- 这样用户可以立即在任务记录详情中看到选择的机器人
|
||
|
||
## 执行流程
|
||
|
||
### 修改前的流程
|
||
1. 选择机器人块开始执行
|
||
2. 调用天风系统接口选择机器人
|
||
3. 等待机器人选择完成
|
||
4. 更新块记录状态为成功(但不更新输出参数)
|
||
5. 执行嵌套的动作块
|
||
6. **等待所有子块执行完成**
|
||
7. **最后才更新输出参数到数据库**
|
||
8. 用户才能看到选择的机器人
|
||
|
||
### 修改后的流程
|
||
1. 选择机器人块开始执行
|
||
2. 调用天风系统接口选择机器人
|
||
3. 等待机器人选择完成
|
||
4. **立即更新块记录状态为成功,并更新输出参数到数据库**
|
||
5. **用户立即可以在任务记录详情中看到选择的机器人**
|
||
6. 执行嵌套的动作块
|
||
7. 所有子块执行完成后,再次更新输出参数(内容相同,不影响显示)
|
||
|
||
## 技术细节
|
||
|
||
### 输出参数格式
|
||
```json
|
||
{
|
||
"blocks": {
|
||
"块名称": {
|
||
"selectedAgvId": "机器人名称"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### 数据库字段
|
||
- `output_params`: 完整的输出结构(包含 blocks 层级)
|
||
- `block_out_params_value`: 输出参数值(只包含选择的机器人信息)
|
||
|
||
## 注意事项
|
||
|
||
1. **输出参数会被更新两次**:第一次在选择机器人完成时立即更新,第二次在所有子块执行完成后再次更新。两次更新的内容相同,不会造成问题。
|
||
|
||
2. **不影响子块执行**:立即更新输出参数不会影响子块的执行逻辑,子块仍然可以正常访问 context 中的机器人信息。
|
||
|
||
3. **兼容性**:这个修改不会影响其他类型的块,只针对选择机器人块(CSelectAgvBp)。
|
||
|
||
## 测试建议
|
||
|
||
1. 启动一个包含选择机器人块和嵌套动作块的任务
|
||
2. 在选择机器人完成后,立即查询任务记录详情
|
||
3. 验证能否看到选择的机器人信息
|
||
4. 等待动作块执行完成后,再次查询任务记录详情
|
||
5. 验证机器人信息保持一致
|
||
|
||
## 相关文件
|
||
|
||
- `services/execution/handlers/robot_scheduling.py` - 选择机器人块处理器
|
||
- `services/execution/block_executor.py` - 块执行器
|
||
- `data/models/blockrecord.py` - 块记录数据模型
|
||
|
||
## 修改日期
|
||
|
||
2025-10-17
|
||
|