1.6 KiB
1.6 KiB
子卷下线送待检区任务设计
目标
定时扫描未锁定的子卷下线点,为每个点位分配一个未锁定的待检区点位,并在后续创建运输任务前锁定起点和目的点。
点位筛选
- 起点:
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。