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