| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- <?php
- namespace App\Module\Game\Logics\ConsumeProcessors;
- use App\Module\Game\Dtos\ConsumeItemDto;
- use App\Module\Game\Dtos\RewardItemDto;
- use App\Module\Game\Enums\CONSUME_TYPE;
- use App\Module\Game\Enums\REWARD_TYPE;
- use App\Module\Game\Logics\RewardProcessors\CurrencyRewardProcessor;
- use App\Module\Game\Logics\RewardProcessors\FarmShrineRewardProcessor;
- use App\Module\Game\Logics\RewardProcessors\FundConfigRewardProcessor;
- use App\Module\Game\Logics\RewardProcessors\ItemRewardProcessor;
- use App\Module\Game\Logics\RewardProcessors\OtherRewardProcessor;
- use App\Module\Game\Logics\RewardProcessors\PetEnergyRewardProcessor;
- use App\Module\Game\Logics\RewardProcessors\PetExpRewardProcessor;
- use App\Module\Game\Logics\RewardProcessors\PetPowerRewardProcessor;
- use App\Module\Game\Logics\RewardProcessors\PetRewardProcessor;
- use App\Module\Game\Logics\RewardProcessors\SkinRewardProcessor;
- use App\Module\Game\Models\GameConsumeItem;
- use App\Module\Game\Services\ConsumeService;
- use Exception;
- use Illuminate\Support\Facades\Log;
- /**
- * 奖励处理器分发器
- *
- * 根据奖励类型分发到对应的处理器进行处理
- */
- class ProcessorDispatcher
- {
- /**
- * 处理单个奖励项
- *
- * @param int $userId 用户ID
- * @param RewardItemDto $item 奖励项
- * @param string $sourceType 来源类型
- * @param int $sourceId 来源ID
- * @return void
- * @throws Exception
- */
- public static function process(int $userId, GameConsumeItem $consumeItem, string $sourceType, int $sourceId, $multiplier): array
- {
- switch ($consumeItem->consume_type) {
- case CONSUME_TYPE::ITEM->value:
- $res = ItemConsume::process($userId, $consumeItem, $sourceType, $sourceId, $multiplier);
- // 将 Res 对象转换为数组格式
- $result = [
- 'success' => $res->success,
- 'message' => $res->message,
- 'item_id' => $res->data['item_id'] ?? null,
- 'quantity' => $res->data['quantity'] ?? null
- ];
- break;
- case CONSUME_TYPE::FUND_CONFIG->value:
- $res = FundConfigConsume::process($userId, $consumeItem, $sourceType, $sourceId, $multiplier);
- // 将 Res 对象转换为数组格式
- $result = [
- 'success' => $res->success,
- 'message' => $res->message,
- 'fund_config_id' => $res->data['fund_config_id'] ?? null,
- 'amount' => $res->data['amount'] ?? null
- ];
- break;
- case CONSUME_TYPE::CURRENCY->value:
- $res = FundConfigConsume::process($userId, $consumeItem, $sourceType, $sourceId, $multiplier);
- // 将 Res 对象转换为数组格式
- $result = [
- 'success' => $res->success,
- 'message' => $res->message,
- 'fund_config_id' => $res->data['fund_config_id'] ?? null,
- 'amount' => $res->data['amount'] ?? null
- ];
- break;
- case CONSUME_TYPE::FUND_CONFIGS->value:
- $res = FundConfigsConsume::process($userId, $consumeItem, $sourceType, $sourceId, $multiplier);
- // 将 Res 对象转换为数组格式
- $result = [
- 'success' => $res->success,
- 'message' => $res->message,
- 'fund_config_ids' => $res->data['fund_config_ids'] ?? null,
- 'amount' => $res->data['amount'] ?? null
- ];
- break;
- default:
- $result = [
- 'success' => false,
- 'message' => "不支持的消耗类型: {$consumeItem->consume_type}"
- ];
- }
- return $result;
- }
- }
|