c24b1eb64137eda5907738cb6a59ef37627a18d3
1. 直接派发空闲兜底(补 autoDispatchNext 之外的另一条派发入口) DispatchEngineImpl.executeDispatch 在 DIRECT_DISPATCH/PUSH_AND_ENQUEUE 前增加 MySQL 兜底校验:若执行人仍挂活跃工单(Redis 判空闲但 MySQL 不一致的场景),强制降级为 ENQUEUE_ONLY 让任务进队列等待下一轮 autoDispatchNext 接力。避免同一设备再次出现并行多单。 2. 队列同步按活跃状态过滤 syncUserQueueToRedis / getTasksByUserId 的 MySQL 回填路径此前调用 selectListByUserId 不过滤状态,会把历史 REMOVED 记录一并同步到 Redis(线上观察到设备 31 的 Redis ZSet 塞了 206 条、其中 205 条是 REMOVED)。新增 OpsOrderQueueMapper.selectActiveListByUserId,只返 回 WAITING/PROCESSING/PAUSED,两条同步链路改走此方法。原 selectList ByUserId 保留给审计/统计场景。 未清理历史 REMOVED 记录,保留审计追溯。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Description
Languages
Java
80.2%
PLpgSQL
12.7%
TSQL
6.7%
Python
0.2%