| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- <?php
- namespace App\Console\Commands;
- use Illuminate\Console\Command;
- use App\Module\UrsPromotion\Events\UrsReferralCreatedEvent;
- /**
- * 测试URS推荐关系创建事件命令
- *
- * 用于测试UrsReferralCreatedEvent事件是否正常触发和处理
- */
- class TestUrsReferralCreatedEventCommand extends Command
- {
- /**
- * 命令签名
- */
- protected $signature = 'test:urs-referral-created-event {user_id} {referrer_id} {--direct : 直接触发事件而不创建推荐关系}';
- /**
- * 命令描述
- */
- protected $description = '测试URS推荐关系创建事件的触发和处理';
- /**
- * 执行命令
- */
- public function handle()
- {
- $userId = (int)$this->argument('user_id');
- $referrerId = (int)$this->argument('referrer_id');
- $directTrigger = $this->option('direct');
-
- $this->info("开始测试URS推荐关系创建事件");
- $this->info("用户ID: {$userId}");
- $this->info("推荐人ID: {$referrerId}");
- $this->info("直接触发: " . ($directTrigger ? '是' : '否'));
- $this->line('');
-
- try {
- if ($directTrigger) {
- // 直接触发事件进行测试
- $this->info("直接触发UrsReferralCreatedEvent事件...");
-
- event(new UrsReferralCreatedEvent($userId, $referrerId, 'test-code'));
-
- $this->info("✅ 事件已触发");
- } else {
- // 通过同步逻辑来触发事件
- $this->info("通过URS推荐关系同步逻辑触发事件...");
- // 获取URS用户ID(这里假设农场用户ID就是URS用户ID,实际使用时需要映射)
- $ursUserId = $userId;
- $this->info("执行URS推荐关系同步: URS用户{$ursUserId} -> 农场用户{$userId}");
- // 使用同步逻辑类
- $syncLogic = new \App\Module\UrsPromotion\Logics\UrsReferralSyncLogic();
- $result = $syncLogic->syncReferralRelations($ursUserId, $userId);
- $this->info("✅ 同步完成,结果: " . ($result ? '成功(首次进入)' : '失败或非首次进入'));
- }
-
- $this->line('');
- $this->info("请查看日志了解事件处理结果:");
- $this->info("tail -f storage/logs/laravel-" . date('Y-m-d') . ".log | grep -E '(URS推荐关系创建|DelayQueue)'");
-
- $this->line('');
- $this->info("如果事件处理正常,应该看到以下日志:");
- $this->info("1. URS推荐关系创建事件已触发");
- $this->info("2. URS推荐关系创建,更新推荐人达人等级");
- $this->info("3. 开始URS推荐关系创建的DelayQueue向上传播");
- $this->info("4. DelayQueue推荐关系任务添加成功");
-
- } catch (\Exception $e) {
- $this->error("❌ 测试失败: " . $e->getMessage());
- $this->error("错误详情: " . $e->getTraceAsString());
- return 1;
- }
-
- return 0;
- }
- }
|