2.7 KiB
2.7 KiB
| name | overview | todos |
|---|---|---|
| 子任务完成时更新容器位置 | 在子任务完成钩子中,根据任务链类型(移库/出库/入库)判断是否需要更新容器位置,调用容器位置绑定/解绑API更新容器与库位的关系。 |
子任务完成时更新容器位置
需求说明
在子任务完成时,根据任务链类型判断是否需要更新容器位置:
- 移库完成:容器与源库位解绑,与目标库位绑定
- 出库完成:容器与源库位解绑
- 入库完成:容器与目标库位绑定
实现方案
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
- 需要构建
注意事项:
- 需要校验容器编码和库位编码不为空
- 需要校验任务链类型是否支持位置更新
- 异常处理:记录日志但不影响任务完成流程
- 只在批次完成时执行(避免重复执行)
文件变更清单
-
修改文件:
baoshi-robot/baoshi-robot-core/src/main/java/com/baoshi/robot/core/statemachine/hook/after/MachineTaskCompletedHook.java- 添加依赖注入
- 添加容器位置更新逻辑
- 添加私有方法处理位置更新
实现流程图
flowchart TD
A[子任务完成] --> B{获取任务链}
B --> C{判断任务链类型}
C -->|MOVE 移库| D[解绑源库位]
D --> E[绑定目标库位]
C -->|OUTBOUND 出库| F[解绑源库位]
C -->|INBOUND 入库| G[绑定目标库位]
E --> H[完成]
F --> H
G --> H