TestUrsReferralCreatedEventCommand.php 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use App\Module\UrsPromotion\Events\UrsReferralCreatedEvent;
  5. /**
  6. * 测试URS推荐关系创建事件命令
  7. *
  8. * 用于测试UrsReferralCreatedEvent事件是否正常触发和处理
  9. */
  10. class TestUrsReferralCreatedEventCommand extends Command
  11. {
  12. /**
  13. * 命令签名
  14. */
  15. protected $signature = 'test:urs-referral-created-event {user_id} {referrer_id} {--direct : 直接触发事件而不创建推荐关系}';
  16. /**
  17. * 命令描述
  18. */
  19. protected $description = '测试URS推荐关系创建事件的触发和处理';
  20. /**
  21. * 执行命令
  22. */
  23. public function handle()
  24. {
  25. $userId = (int)$this->argument('user_id');
  26. $referrerId = (int)$this->argument('referrer_id');
  27. $directTrigger = $this->option('direct');
  28. $this->info("开始测试URS推荐关系创建事件");
  29. $this->info("用户ID: {$userId}");
  30. $this->info("推荐人ID: {$referrerId}");
  31. $this->info("直接触发: " . ($directTrigger ? '是' : '否'));
  32. $this->line('');
  33. try {
  34. if ($directTrigger) {
  35. // 直接触发事件进行测试
  36. $this->info("直接触发UrsReferralCreatedEvent事件...");
  37. event(new UrsReferralCreatedEvent($userId, $referrerId, 'test-code'));
  38. $this->info("✅ 事件已触发");
  39. } else {
  40. // 通过同步逻辑来触发事件
  41. $this->info("通过URS推荐关系同步逻辑触发事件...");
  42. // 获取URS用户ID(这里假设农场用户ID就是URS用户ID,实际使用时需要映射)
  43. $ursUserId = $userId;
  44. $this->info("执行URS推荐关系同步: URS用户{$ursUserId} -> 农场用户{$userId}");
  45. // 使用同步逻辑类
  46. $syncLogic = new \App\Module\UrsPromotion\Logics\UrsReferralSyncLogic();
  47. $result = $syncLogic->syncReferralRelations($ursUserId, $userId);
  48. $this->info("✅ 同步完成,结果: " . ($result ? '成功(首次进入)' : '失败或非首次进入'));
  49. }
  50. $this->line('');
  51. $this->info("请查看日志了解事件处理结果:");
  52. $this->info("tail -f storage/logs/laravel-" . date('Y-m-d') . ".log | grep -E '(URS推荐关系创建|DelayQueue)'");
  53. $this->line('');
  54. $this->info("如果事件处理正常,应该看到以下日志:");
  55. $this->info("1. URS推荐关系创建事件已触发");
  56. $this->info("2. URS推荐关系创建,更新推荐人达人等级");
  57. $this->info("3. 开始URS推荐关系创建的DelayQueue向上传播");
  58. $this->info("4. DelayQueue推荐关系任务添加成功");
  59. } catch (\Exception $e) {
  60. $this->error("❌ 测试失败: " . $e->getMessage());
  61. $this->error("错误详情: " . $e->getTraceAsString());
  62. return 1;
  63. }
  64. return 0;
  65. }
  66. }