TestTaskEventCommand.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace App\Module\Task\Commands;
  3. use App\Module\Task\Events\TaskCompletedEvent;
  4. use App\Module\Task\Events\TaskRewardClaimedEvent;
  5. use Illuminate\Console\Command;
  6. use Carbon\Carbon;
  7. /**
  8. * 测试任务事件触发命令
  9. */
  10. class TestTaskEventCommand extends Command
  11. {
  12. /**
  13. * 命令签名
  14. *
  15. * @var string
  16. */
  17. protected $signature = 'task:test-event {user_id : 用户ID} {--type=completed : 事件类型(completed|reward)}';
  18. /**
  19. * 命令描述
  20. *
  21. * @var string
  22. */
  23. protected $description = '测试任务事件触发和暂存功能';
  24. /**
  25. * 执行命令
  26. *
  27. * @return int
  28. */
  29. public function handle(): int
  30. {
  31. $userId = (int) $this->argument('user_id');
  32. $type = $this->option('type');
  33. $this->info("测试用户 {$userId} 的任务事件触发");
  34. if ($type === 'completed') {
  35. // 触发任务完成事件
  36. $event = new TaskCompletedEvent(
  37. $userId,
  38. 1001, // 测试任务ID
  39. '测试任务',
  40. 'daily',
  41. Carbon::now(),
  42. [
  43. ['item_id' => 1001, 'quantity' => 10],
  44. ['item_id' => 1002, 'quantity' => 5]
  45. ]
  46. );
  47. event($event);
  48. $this->info('✓ 任务完成事件已触发');
  49. } elseif ($type === 'reward') {
  50. // 触发任务奖励领取事件
  51. $event = new TaskRewardClaimedEvent(
  52. $userId,
  53. 1001, // 测试任务ID
  54. '测试任务',
  55. [
  56. ['item_id' => 1001, 'quantity' => 10],
  57. ['item_id' => 1002, 'quantity' => 5]
  58. ],
  59. Carbon::now(),
  60. true
  61. );
  62. event($event);
  63. $this->info('✓ 任务奖励领取事件已触发');
  64. } else {
  65. $this->error('无效的事件类型,支持: completed, reward');
  66. return 1;
  67. }
  68. // 等待一下让事件处理完成
  69. sleep(1);
  70. // 检查暂存数据
  71. $this->info("\n检查暂存数据...");
  72. $this->call('task:test-temp', ['user_id' => $userId]);
  73. return 0;
  74. }
  75. }