79 lines
2.7 KiB
Markdown
79 lines
2.7 KiB
Markdown
---
|
||
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
|
||
``` |