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

1.6 KiB
Raw Blame History

子卷下线送待检区任务设计

目标

定时扫描未锁定的子卷下线点,为每个点位分配一个未锁定的待检区点位,并在后续创建运输任务前锁定起点和目的点。

点位筛选

  • 起点:point_type = '1'point_status = '3'lock_status = '0'deleted = 0
  • 目的点:point_type = '2'point_status = '1'lock_status = '0'deleted = 0
  • 两类点位均按 sort_seqpoint_id 升序处理,保证分配顺序稳定。

并发与事务

业务方法在一个数据库事务中运行。点位加锁使用带原状态条件的更新:仅当 lock_status = '0' 时更新为 '1',并以更新行数判断是否抢锁成功。

每个起点先尝试抢锁,再依次尝试目的点。目的点抢锁失败时继续尝试下一个;没有目的点可用时,将本次已抢到的起点恢复为未锁定并结束本轮扫描。运行期间发生异常时由事务回滚本轮全部数据库修改。

任务创建

起点和目的点都锁定成功后,通过 TransportTaskApi.createTransportTask 创建运输任务。任务归属为 LMS业务类型为 SUB_ROLL_DOWN,业务标识及物料编码使用子卷号,取放货点使用起点和目的点编码,回调处理器为 subRollDownAgvTask。任务创建失败时抛出异常,使点位锁随当前事务回滚。

调用边界

BoxAutoJob 只负责日志和调用 PackageBoxBusinessService。点位查询、配对、条件加锁和必要的解锁均由 PackageBoxBusinessServiceImpl 组织,数据库语句集中在 PackagePointMapper.xml