3.1 KiB
发货区 AGV 任务实现计划
面向 AI 代理的工作者: 必需子技能:使用 superpowers:subagent-driven-development(推荐)或 superpowers:executing-plans 逐任务实现此计划。步骤使用复选框(
- [ ])语法来跟踪进度。
目标: 接收 AGV 对接位和木箱号,根据木箱最近未删除出库单分配发货区点位并创建、下发搬运任务。
架构: ACS Controller 接收请求,ShippingAreaService 负责出库单关联、同单同排选位、条件抢占和任务生命周期;WmsPointMapper XML 负责候选排及点位更新;ShipAreaTask 只转发完成和取消回调。
技术栈: Java 17、Spring Boot、MyBatis XML、MySQL、现有 TransportTaskApi。
任务 1:请求响应与出库单关联查询
文件:
-
创建:
controller/acs/vo/AcsShippingApplyReqVO.java -
创建:
controller/acs/vo/AcsShippingApplyRespVO.java -
修改:
IostorinvDisMapper.java、IostorinvDisMapper.xml -
请求定义必填
deviceCode、boxNo;响应返回任务、木箱、点位和出库单信息。 -
Mapper 按木箱号关联主表,只筛选
deleted = 0,按创建时间和主键倒序返回最近一张。 -
查询无结果时由 Service 抛出明确业务异常。
任务 2:发货点持久化与并发抢占
文件:
-
创建:
dal/dataobject/point/WmsPointDO.java -
创建:
dal/dataobject/point/ShippingPointRowCandidate.java -
创建:
dal/mysql/point/WmsPointMapper.java -
创建:
resources/mapper/point/WmsPointMapper.xml -
同单候选排只按
row_num分组,识别已到位木箱、已创建任务和B{billId}临时预占。 -
空排要求该
row_num下所有点位的载具和任务均为空。 -
排内按
col_num, point_code选择空闲点位。 -
条件更新预占点位,创建任务后绑定任务 ID。
-
完成写木箱号和数量并清任务;取消只清任务。
-
xmllint --noout WmsPointMapper.xml退出码为 0。
任务 3:领域服务和任务创建
文件:
-
创建:
service/shippingarea/ShippingAreaService.java -
创建:
service/shippingarea/ShippingAreaServiceImpl.java -
查询木箱最近出库单。
-
先遍历同单排,再遍历空排,条件抢占点位。
-
创建任务,起点为设备号、终点为点位,
bizId为出库单 ID,handleCode为SHIPAREATASK。 -
将预占码替换为任务 ID 后下发。
-
完成和取消按任务 ID 精确更新一个点位。
任务 4:ACS 接口和任务回调
文件:
-
修改:
controller/acs/CallTaskController.java -
创建:
task/ShipAreaTask.java -
增加
POST /acs/call/shipping/apply,使用@PermitAll和参数校验。 -
ShipAreaTask完成、取消事件转发到 ShippingAreaService。
任务 5:验证
- 检查无新增注解 SQL。
- 校验 Mapper XML 和
git diff --check。 - 编译 WMS Server 及依赖模块,预期
BUILD SUCCESS。 - 核对
row_num分组、col_num排序、同单优先、空排回退和任务回调闭环。