Files
huachuang/docs/superpowers/specs/2026-08-06-shipping-area-task-design.md
2026-08-06 12:05:29 +08:00

3.7 KiB
Raw Permalink Blame History

发货区 AGV 任务设计规格

目标

AGV 到达对接位后,以设备号和木箱号向 WMS 申请搬运任务。WMS 根据木箱最近一张未删除的出库单,在发货区分配目标点位并创建任务,保证同一出库单优先放在同一排,不同出库单不混排。

接口

  • 地址:POST /acs/call/shipping/apply
  • 权限:与现有 ACS 呼叫接口一致,使用 @PermitAll
  • 入参:deviceCodeboxNo,均必填。
  • 返回:taskIdboxNopointCodeoutboundBillIdoutboundBillCode

出库单关联

通过 wms_iostorinvdis.storagevehicle_code = boxNo 关联出库主表 wms_iostorinv,只筛选主表 deleted = 0,按主表 create_time DESC、主键倒序查询最近一张。单据状态不参与筛选。查不到时抛出业务异常。

发货区与排定义

  • 只使用 wms_point.region_code = 'FH'is_used = 1 的点位。
  • row_num 唯一定义一排。
  • col_num 决定排内点位分配顺序。
  • block_numlayer_num 不参与分组、筛选或排序。
  • 空闲点位要求 vehicle_code 为空且 ing_task_code 为空。

分配规则

第一优先级是同一出库单已使用的排。该排中所有已到位木箱和在途预占任务都必须属于当前出库单,不能存在其他出库单,同时至少有一个空闲点位。

第二优先级是新排。整排所有点位必须都没有木箱且没有在途任务。不同出库单只能从这种整排为空的排开始使用。

候选排按 row_num 排序,排内点位按 col_numpoint_code 排序。Mapper XML 限量返回候选Service 使用条件更新逐个抢占;并发抢占失败时尝试下一个候选。

不新增出库单字段的识别方式

  • 已到位点位:通过 wms_point.vehicle_code 查询该木箱最近一张未删除出库单。
  • 已创建任务的点位:通过 wms_point.ing_task_code 关联 task_transport_job.task_id,任务 biz_id 保存出库单主表 ID。
  • 创建任务前的短暂预占:ing_task_code 写入 B{出库单主表ID}。任务创建成功后,再条件更新为任务 ID。

不新增点位出库单字段,不维护 wms_point.ios_id

任务创建

  • 任务起点:请求的 deviceCode
  • 任务终点:分配的 wms_point.point_code
  • 载具编码:boxNo
  • ownerServiceWMS
  • bizTypeSHIPPING_AREA
  • bizId:出库单主表 ID。
  • handleCodeSHIPAREATASK
  • 创建成功、点位绑定任务 ID 后调用现有任务下发接口。

任务回调

新增 ShipAreaTask 继承 AbstractTask,只负责将完成和取消事件转发给发货区服务。

  • 完成:按任务 ID 更新唯一目标点位,写入 vehicle_code = boxNovehicle_qty = 1,并清空 ing_task_code
  • 取消:按任务 ID 清空 ing_task_code,不写入木箱信息。
  • 不维护 ios_id

重复完成、重复取消或匹配不到唯一点位时抛出业务异常,不静默成功。

数据访问与并发

  • 新增 WmsPointDOWmsPointMapper 和 Mapper XML。
  • 所有查询和更新 SQL 写在 Mapper XML不使用注解 SQL。
  • 点位预占更新必须同时校验区域、启用状态、木箱为空和任务为空。
  • 任务创建、点位绑定和本地业务写入处于同一事务;远程任务调用失败时抛出异常。

验收范围

  • 木箱能正确关联最近一张未删除出库单。
  • 同一出库单连续申请时优先分配同一 row_num
  • 不同出库单不会分配到已被其他出库单使用的排。
  • 没有同单排时能选择整排为空的新排。
  • 并发申请不会重复占用同一点位。
  • 完成和取消回调正确维护点位。
  • WMS 后端编译、Mapper XML 校验通过。