cursor/plans/子任务完成时更新容器位置_100d5dfe.plan.md

79 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: 子任务完成时更新容器位置
overview: 在子任务完成钩子中,根据任务链类型(移库/出库/入库)判断是否需要更新容器位置,调用容器位置绑定/解绑API更新容器与库位的关系。
todos: []
---
# 子任务完成时更新容器位置
## 需求说明
在子任务完成时,根据任务链类型判断是否需要更新容器位置:
- **移库完成**:容器与源库位解绑,与目标库位绑定
- **出库完成**:容器与源库位解绑
- **入库完成**:容器与目标库位绑定
## 实现方案
### 1. 修改 `MachineTaskCompletedHook` 类
**文件路径**`baoshi-robot/baoshi-robot-core/src/main/java/com/baoshi/robot/core/statemachine/hook/after/MachineTaskCompletedHook.java`
**变更内容**
- 注入 `CustomLocationContainerRpcApi``IMachineTaskChainService`
-`execute` 方法中,子任务完成时调用容器位置更新逻辑
- 添加私有方法 `updateContainerLocation` 处理容器位置更新:
- 通过 `machineTask.getChainCode()` 获取任务链
- 根据任务链类型(`MachineTaskChainTypeEnum`)判断操作类型
- 移库MOVE解绑源库位绑定目标库位
- 出库OUTBOUND解绑源库位
- 入库INBOUND绑定目标库位
- 调用 `CustomLocationContainerRpcApi` 的相应方法
### 2. 实现细节
**判断逻辑**
- 通过 `machineTask.getChainCode()` 查询 `MachineTaskChain`
- 使用 `MachineTaskChain.getType()` 判断任务链类型
- 根据类型执行相应的绑定/解绑操作
**API调用**
- `unbindContainerLocation(containerCode, warehouseId)`:解绑容器与库位
- `bindContainerLocation(ContainerBindLocationDTO)`:绑定容器与库位
- 需要构建 `ContainerBindLocationDTO`,包含 `warehouseId``dataList`
- `dataList` 包含 `ContainerLocationDataDTO`,需要 `containerCode``locationId`
**注意事项**
- 需要校验容器编码和库位编码不为空
- 需要校验任务链类型是否支持位置更新
- 异常处理:记录日志但不影响任务完成流程
- 只在批次完成时执行(避免重复执行)
## 文件变更清单
1. **修改文件**
- `baoshi-robot/baoshi-robot-core/src/main/java/com/baoshi/robot/core/statemachine/hook/after/MachineTaskCompletedHook.java`
- 添加依赖注入
- 添加容器位置更新逻辑
- 添加私有方法处理位置更新
## 实现流程图
```mermaid
flowchart TD
A[子任务完成] --> B{获取任务链}
B --> C{判断任务链类型}
C -->|MOVE 移库| D[解绑源库位]
D --> E[绑定目标库位]
C -->|OUTBOUND 出库| F[解绑源库位]
C -->|INBOUND 入库| G[绑定目标库位]
E --> H[完成]
F --> H
G --> H
```