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

2.7 KiB
Raw Blame History

name overview todos
子任务完成时更新容器位置 在子任务完成钩子中,根据任务链类型(移库/出库/入库)判断是否需要更新容器位置,调用容器位置绑定/解绑API更新容器与库位的关系。

子任务完成时更新容器位置

需求说明

在子任务完成时,根据任务链类型判断是否需要更新容器位置:

  • 移库完成:容器与源库位解绑,与目标库位绑定
  • 出库完成:容器与源库位解绑
  • 入库完成:容器与目标库位绑定

实现方案

1. 修改 MachineTaskCompletedHook

文件路径baoshi-robot/baoshi-robot-core/src/main/java/com/baoshi/robot/core/statemachine/hook/after/MachineTaskCompletedHook.java

变更内容

  • 注入 CustomLocationContainerRpcApiIMachineTaskChainService
  • execute 方法中,子任务完成时调用容器位置更新逻辑
  • 添加私有方法 updateContainerLocation 处理容器位置更新:
    • 通过 machineTask.getChainCode() 获取任务链
    • 根据任务链类型(MachineTaskChainTypeEnum)判断操作类型
    • 移库MOVE解绑源库位绑定目标库位
    • 出库OUTBOUND解绑源库位
    • 入库INBOUND绑定目标库位
    • 调用 CustomLocationContainerRpcApi 的相应方法

2. 实现细节

判断逻辑

  • 通过 machineTask.getChainCode() 查询 MachineTaskChain
  • 使用 MachineTaskChain.getType() 判断任务链类型
  • 根据类型执行相应的绑定/解绑操作

API调用

  • unbindContainerLocation(containerCode, warehouseId):解绑容器与库位
  • bindContainerLocation(ContainerBindLocationDTO):绑定容器与库位
    • 需要构建 ContainerBindLocationDTO,包含 warehouseIddataList
    • dataList 包含 ContainerLocationDataDTO,需要 containerCodelocationId

注意事项

  • 需要校验容器编码和库位编码不为空
  • 需要校验任务链类型是否支持位置更新
  • 异常处理:记录日志但不影响任务完成流程
  • 只在批次完成时执行(避免重复执行)

文件变更清单

  1. 修改文件

    • 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