RewardProcessorDispatcher.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace App\Module\Game\Logics\RewardProcessors;
  3. use App\Module\Game\Dtos\RewardItemDto;
  4. use App\Module\Game\Enums\REWARD_TYPE;
  5. use Exception;
  6. use Illuminate\Support\Facades\Log;
  7. /**
  8. * 奖励处理器分发器
  9. *
  10. * 根据奖励类型分发到对应的处理器进行处理
  11. */
  12. class RewardProcessorDispatcher
  13. {
  14. /**
  15. * 处理单个奖励项
  16. *
  17. * @param int $userId 用户ID
  18. * @param RewardItemDto $item 奖励项
  19. * @param string $sourceType 来源类型
  20. * @param int $sourceId 来源ID
  21. * @return void
  22. * @throws Exception
  23. */
  24. public static function process(int $userId, RewardItemDto $item, string $sourceType, int $sourceId): void
  25. {
  26. switch ($item->rewardType) {
  27. case REWARD_TYPE::ITEM->valueInt():
  28. ItemRewardProcessor::process($userId, $item, $sourceType, $sourceId);
  29. break;
  30. case REWARD_TYPE::FUND_CONFIG->valueInt():
  31. FundConfigRewardProcessor::process($userId, $item, $sourceType, $sourceId);
  32. break;
  33. case REWARD_TYPE::CURRENCY->valueInt():
  34. CurrencyRewardProcessor::process($userId, $item, $sourceType, $sourceId);
  35. break;
  36. case REWARD_TYPE::PET_EXP->valueInt():
  37. PetExpRewardProcessor::process($userId, $item, $sourceType, $sourceId);
  38. break;
  39. case REWARD_TYPE::PET_ENERGY->valueInt():
  40. PetEnergyRewardProcessor::process($userId, $item, $sourceType, $sourceId);
  41. break;
  42. case REWARD_TYPE::FARM_SHRINE->valueInt():
  43. FarmShrineRewardProcessor::process($userId, $item, $sourceType, $sourceId);
  44. break;
  45. case REWARD_TYPE::PET->valueInt():
  46. PetRewardProcessor::process($userId, $item, $sourceType, $sourceId);
  47. break;
  48. case REWARD_TYPE::PET_POWER->valueInt():
  49. PetPowerRewardProcessor::process($userId, $item, $sourceType, $sourceId);
  50. break;
  51. case REWARD_TYPE::SKIN->valueInt():
  52. SkinRewardProcessor::process($userId, $item, $sourceType, $sourceId);
  53. break;
  54. case REWARD_TYPE::OTHER->valueInt():
  55. OtherRewardProcessor::process($userId, $item, $sourceType, $sourceId);
  56. break;
  57. default:
  58. // 未知奖励类型,记录日志
  59. Log::warning("未知的奖励类型", [
  60. 'userId' => $userId,
  61. 'rewardType' => $item->rewardType,
  62. 'targetId' => $item->targetId,
  63. 'quantity' => $item->quantity,
  64. 'sourceType' => $sourceType,
  65. 'sourceId' => $sourceId
  66. ]);
  67. break;
  68. }
  69. }
  70. }