Files
huachuang/docs/superpowers/specs/2026-08-06-shipping-area-task-design.md

79 lines
3.7 KiB
Markdown
Raw Permalink Normal View History

# 发货区 AGV 任务设计规格
## 目标
AGV 到达对接位后,以设备号和木箱号向 WMS 申请搬运任务。WMS 根据木箱最近一张未删除的出库单,在发货区分配目标点位并创建任务,保证同一出库单优先放在同一排,不同出库单不混排。
## 接口
- 地址:`POST /acs/call/shipping/apply`
- 权限:与现有 ACS 呼叫接口一致,使用 `@PermitAll`
- 入参:`deviceCode``boxNo`,均必填。
- 返回:`taskId``boxNo``pointCode``outboundBillId``outboundBillCode`
## 出库单关联
通过 `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_num``layer_num` 不参与分组、筛选或排序。
- 空闲点位要求 `vehicle_code` 为空且 `ing_task_code` 为空。
## 分配规则
第一优先级是同一出库单已使用的排。该排中所有已到位木箱和在途预占任务都必须属于当前出库单,不能存在其他出库单,同时至少有一个空闲点位。
第二优先级是新排。整排所有点位必须都没有木箱且没有在途任务。不同出库单只能从这种整排为空的排开始使用。
候选排按 `row_num` 排序,排内点位按 `col_num``point_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`
- `ownerService``WMS`
- `bizType``SHIPPING_AREA`
- `bizId`:出库单主表 ID。
- `handleCode``SHIPAREATASK`
- 创建成功、点位绑定任务 ID 后调用现有任务下发接口。
## 任务回调
新增 `ShipAreaTask` 继承 `AbstractTask`,只负责将完成和取消事件转发给发货区服务。
- 完成:按任务 ID 更新唯一目标点位,写入 `vehicle_code = boxNo``vehicle_qty = 1`,并清空 `ing_task_code`
- 取消:按任务 ID 清空 `ing_task_code`,不写入木箱信息。
- 不维护 `ios_id`
重复完成、重复取消或匹配不到唯一点位时抛出业务异常,不静默成功。
## 数据访问与并发
- 新增 `WmsPointDO``WmsPointMapper` 和 Mapper XML。
- 所有查询和更新 SQL 写在 Mapper XML不使用注解 SQL。
- 点位预占更新必须同时校验区域、启用状态、木箱为空和任务为空。
- 任务创建、点位绑定和本地业务写入处于同一事务;远程任务调用失败时抛出异常。
## 验收范围
- 木箱能正确关联最近一张未删除出库单。
- 同一出库单连续申请时优先分配同一 `row_num`
- 不同出库单不会分配到已被其他出库单使用的排。
- 没有同单排时能选择整排为空的新排。
- 并发申请不会重复占用同一点位。
- 完成和取消回调正确维护点位。
- WMS 后端编译、Mapper XML 校验通过。