Files
FT546MWS/scripts/shadow-lane-lock

影子通道汇总锁定值修复(2026-09-14)

现场 locked=N 表示未锁定;旧 alg.usp_rebuild_lane_state 仅接受 NULL/空白,导致通道可用数量归零。补丁让它与现有货位视图一致,接受 NULL、空白、0、N。其他占用、库存、角色、预留、出库与空洞限制全部保留。两个完整安装 SQL 也同步修正,避免以后安装重新引入问题。

对正在运行的业务有何影响

影子读取生产 dbo 数据,生成 alg.* 快照,再规划和记录比较结果。此次只 ALTER alg.usp_rebuild_lane_state,其运行结果写入 alg.lane_state。不修改生产货位的锁定值、货位状态、库存、订单或 Legacy 分配过程,不切换 ACTIVE,不需要替换 JAR 或重启 WMS/WCS。

现有三通道混放试点是另外一套已批准的业务规则,本补丁不更改其范围或开关。共用 SQL Server 仍会共享 CPU、I/O、内存及锁资源,不能承诺性能影响为零;补丁使用 1.5 秒锁等待上限,等待失败退出,不结束其他会话。

从 CMD 操作

在本目录执行,使用 Windows 集成认证;账号需要读取过程定义及 ALTER 此过程的权限。默认数据库仅支持 FT546-wms。

repair-shadow-lane-lock.cmd -Mode Check

记录返回的 sha256。确认状态为 NEEDS_FIX 后,将下面的占位文字换成该值;备份文件使用全新路径(不能覆盖已有文件):

repair-shadow-lane-lock.cmd -Mode Apply -ExpectedSha256 检查返回的sha256 -BackupFile "C:\project\FT546WMS-shadow-lane-lock-20260914\original-procedure.json"

返回 status=OK 后,等待现有影子流程在业务退出后的安静窗口正常刷新;它不是固定每隔几分钟必刷。不要手动重建正在使用的快照,也不要为此运行完整 shadow-v3-install.cmd。补丁不改整包版本标识,用过程哈希确认状态。ALREADY_FIXED 表示无需重复更新;hash mismatch 表示现场定义有变化,应先核对。锁超时或失败时事务自动回滚,已有备份保留;重试采用新的备份文件名。

只读检查(SQL 查询窗口):

SELECT snapshot_generation,snapshot_status,synchronized_at,last_error
FROM alg.shadow_snapshot_state WHERE warehouse_id='01';
SELECT COUNT(*) candidate_lanes,SUM(l.available_count) aggregated_available_spaces
FROM alg.lane_state l JOIN alg.shadow_snapshot_state p
 ON p.warehouse_id=l.warehouse_id AND p.snapshot_generation=l.snapshot_generation
WHERE l.warehouse_id='01' AND p.snapshot_status='PUBLISHED'
 AND l.available_count>0 AND l.pending_outbound=0 AND l.has_gap=0;

候选通道恢复不代表任意托盘一定能分配,也不代表完整算法可以接管。仍需新发生的真实入库/出库比较和混放移库闭环证据。

回退

重新 Check,将返回的当前 sha256 填入命令,使用 Apply 保存的原始备份。只恢复此过程原文及 ANSI/quoted 设置;有后续改动时会拒绝覆盖:

repair-shadow-lane-lock.cmd -Mode Rollback -ExpectedSha256 当前sha256 -BackupFile "C:\project\FT546WMS-shadow-lane-lock-20260914\original-procedure.json"

回退后下一次正常刷新会恢复旧汇总行为,包括旧的 N 误排除问题。既有影子记录不删除,业务数据不回退。

隔离回归

powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -File scripts\shadow-lane-lock\test-shadow-lane-lock.ps1 -TestRepair

从项目根目录执行。自动创建随机名称 FT546WMS_LaneLock_Test_<GUID> 的小型测试库,只放人工数据;不会接收生产库作为测试目标。执行两个源 SQL 中真实的 rebuild 过程,指纹计算使用明确标注的测试桩。覆盖锁值、各排除规则、跨代次、跨仓库/通道、重复刷新、修复的精确范围、哈希拒绝、重复更新、DDL 失败回滚及恢复原文。退出时删除本次测试库;此测试不验证现场托盘的实际规划效果。