修复URS推广模块中达人等级更新时缺少向上传播机制的bug,使用DelayQueue延时队列实现分层处理。
✅ 已完成
app/Module/UrsPromotion/Services/UrsTalentUpstreamUpdateService.phpupdateTalentLevel(array $runParam): boolbatchUpdateTalentLevels(array $userIds): arrayapp/Module/UrsPromotion/Listeners/UrsTalentLevelUpListener.phpupdateUpstreamTalentLevels() - 分层向上传播主逻辑updateDirectReferrerTalentLevel() - 即时更新直接上级addDelayQueueUpdate() - 添加DelayQueue延时任务app/Module/UrsPromotion/Listeners/UrsReferralCreatedListener.phpupdateUpstreamTalentLevels() - 推荐关系创建时的向上传播addDelayQueueUpdate() - DelayQueue任务添加$a->set($key, 1, $delay)改为$a->setex($key, $delay, 1)app/Module/DelayQueue/Redis.phpcomposer require predis/predisconfig/database.php使用predis客户端app/Console/Commands/TestUrsTalentUpstream.phptests/Unit/UrsPromotion/UrsTalentUpstreamUpdateTest.php$delaySeconds = match($level) {
1 => 0, // 直接上级:即时处理
2 => 5, // 上上级:延时5秒
3 => 10, // 第3级:延时10秒
4 => 15, // 第4级:延时15秒
default => min(($level - 1) * 5, 60) // 最大延时60秒
};
Log::info('DelayQueue开始更新上级达人等级', [
'referrer_id' => $referrerId,
'original_user_id' => $originalUserId,
'level' => $level,
'delay_duration' => time() - $triggerTime
]);
app-delayqueue:run命令正常运行=== 测试Redis连接 ===
✓ Redis连接成功
✓ 测试键值操作正常
=== 测试DelayQueue功能 ===
✓ DelayQueue任务添加成功
✓ 防重复机制正常工作
=== 测试回调方法 ===
✓ 参数验证正常
✓ 回调方法执行正常
✓ 批量更新功能正常
PHPUnit 11.5.20 by Sebastian Bergmann and contributors.
...... 6 / 6 (100%)
OK (6 tests, 25 assertions)
本次任务成功修复了URS达人等级向上传播更新的bug,通过DelayQueue延时队列实现了分层处理机制,既保证了直接上级的实时更新,又通过延时处理避免了系统压力。整个解决方案具有良好的性能、稳定性和可扩展性,为URS推广模块的稳定运行提供了重要保障。