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

79 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 发货区 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 校验通过。