ProcessorDispatcher.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. namespace App\Module\Game\Logics\ConsumeProcessors;
  3. use App\Module\Game\Dtos\ConsumeItemDto;
  4. use App\Module\Game\Dtos\RewardItemDto;
  5. use App\Module\Game\Enums\CONSUME_TYPE;
  6. use App\Module\Game\Enums\REWARD_TYPE;
  7. use App\Module\Game\Logics\RewardProcessors\CurrencyRewardProcessor;
  8. use App\Module\Game\Logics\RewardProcessors\FarmShrineRewardProcessor;
  9. use App\Module\Game\Logics\RewardProcessors\FundConfigRewardProcessor;
  10. use App\Module\Game\Logics\RewardProcessors\ItemRewardProcessor;
  11. use App\Module\Game\Logics\RewardProcessors\OtherRewardProcessor;
  12. use App\Module\Game\Logics\RewardProcessors\PetEnergyRewardProcessor;
  13. use App\Module\Game\Logics\RewardProcessors\PetExpRewardProcessor;
  14. use App\Module\Game\Logics\RewardProcessors\PetPowerRewardProcessor;
  15. use App\Module\Game\Logics\RewardProcessors\PetRewardProcessor;
  16. use App\Module\Game\Logics\RewardProcessors\SkinRewardProcessor;
  17. use App\Module\Game\Models\GameConsumeItem;
  18. use App\Module\Game\Services\ConsumeService;
  19. use Exception;
  20. use Illuminate\Support\Facades\Log;
  21. /**
  22. * 奖励处理器分发器
  23. *
  24. * 根据奖励类型分发到对应的处理器进行处理
  25. */
  26. class ProcessorDispatcher
  27. {
  28. /**
  29. * 处理单个奖励项
  30. *
  31. * @param int $userId 用户ID
  32. * @param RewardItemDto $item 奖励项
  33. * @param string $sourceType 来源类型
  34. * @param int $sourceId 来源ID
  35. * @return void
  36. * @throws Exception
  37. */
  38. public static function process(int $userId, GameConsumeItem $consumeItem, string $sourceType, int $sourceId, $multiplier): array
  39. {
  40. switch ($consumeItem->consume_type) {
  41. case CONSUME_TYPE::ITEM->value:
  42. $res = ItemConsume::process($userId, $consumeItem, $sourceType, $sourceId, $multiplier);
  43. // 将 Res 对象转换为数组格式
  44. $result = [
  45. 'success' => $res->success,
  46. 'message' => $res->message,
  47. 'item_id' => $res->data['item_id'] ?? null,
  48. 'quantity' => $res->data['quantity'] ?? null
  49. ];
  50. break;
  51. case CONSUME_TYPE::FUND_CONFIG->value:
  52. $res = FundConfigConsume::process($userId, $consumeItem, $sourceType, $sourceId, $multiplier);
  53. // 将 Res 对象转换为数组格式
  54. $result = [
  55. 'success' => $res->success,
  56. 'message' => $res->message,
  57. 'fund_config_id' => $res->data['fund_config_id'] ?? null,
  58. 'amount' => $res->data['amount'] ?? null
  59. ];
  60. break;
  61. case CONSUME_TYPE::CURRENCY->value:
  62. $res = FundConfigConsume::process($userId, $consumeItem, $sourceType, $sourceId, $multiplier);
  63. // 将 Res 对象转换为数组格式
  64. $result = [
  65. 'success' => $res->success,
  66. 'message' => $res->message,
  67. 'fund_config_id' => $res->data['fund_config_id'] ?? null,
  68. 'amount' => $res->data['amount'] ?? null
  69. ];
  70. break;
  71. case CONSUME_TYPE::FUND_CONFIGS->value:
  72. $res = FundConfigsConsume::process($userId, $consumeItem, $sourceType, $sourceId, $multiplier);
  73. // 将 Res 对象转换为数组格式
  74. $result = [
  75. 'success' => $res->success,
  76. 'message' => $res->message,
  77. 'fund_config_ids' => $res->data['fund_config_ids'] ?? null,
  78. 'amount' => $res->data['amount'] ?? null
  79. ];
  80. break;
  81. default:
  82. $result = [
  83. 'success' => false,
  84. 'message' => "不支持的消耗类型: {$consumeItem->consume_type}"
  85. ];
  86. }
  87. return $result;
  88. }
  89. }