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

66 lines
3.1 KiB
Markdown
Raw Normal View History

2026-08-07 13:48:56 +08:00
# 发货区 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 精确更新一个点位。
### 任务 4ACS 接口和任务回调
**文件:**
- 修改:`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` 排序、同单优先、空排回退和任务回调闭环。