Files
huachuang/docs/superpowers/specs/2026-08-12-auto-send-sub-roll-task-design.md
2026-08-18 18:44:13 +08:00

26 lines
1.6 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.

# 子卷下线送待检区任务设计
## 目标
定时扫描未锁定的子卷下线点,为每个点位分配一个未锁定的待检区点位,并在后续创建运输任务前锁定起点和目的点。
## 点位筛选
- 起点:`point_type = '1'``point_status = '3'``lock_status = '0'``deleted = 0`
- 目的点:`point_type = '2'``point_status = '1'``lock_status = '0'``deleted = 0`
- 两类点位均按 `sort_seq``point_id` 升序处理,保证分配顺序稳定。
## 并发与事务
业务方法在一个数据库事务中运行。点位加锁使用带原状态条件的更新:仅当 `lock_status = '0'` 时更新为 `'1'`,并以更新行数判断是否抢锁成功。
每个起点先尝试抢锁,再依次尝试目的点。目的点抢锁失败时继续尝试下一个;没有目的点可用时,将本次已抢到的起点恢复为未锁定并结束本轮扫描。运行期间发生异常时由事务回滚本轮全部数据库修改。
## 任务创建
起点和目的点都锁定成功后,通过 `TransportTaskApi.createTransportTask` 创建运输任务。任务归属为 LMS业务类型为 `SUB_ROLL_DOWN`,业务标识及物料编码使用子卷号,取放货点使用起点和目的点编码,回调处理器为 `subRollDownAgvTask`。任务创建失败时抛出异常,使点位锁随当前事务回滚。
## 调用边界
`BoxAutoJob` 只负责日志和调用 `PackageBoxBusinessService`。点位查询、配对、条件加锁和必要的解锁均由 `PackageBoxBusinessServiceImpl` 组织,数据库语句集中在 `PackagePointMapper.xml`