单次随机奖励'; /** * 处理请求 * * @param Request $request * @return mixed */ public function handle(Request $request) { try { $id = $this->getKey(); // 获取奖励组信息 $group = GameRewardGroup::find($id); if (!$group) { return $this->response() ->error('奖励组不存在'); } // 模拟单次随机奖励 $result = RewardService::simulateReward($id); if (!$result->success) { return $this->response() ->error('模拟奖励失败: ' . $result->errorMessage); } // 格式化奖励结果 $rewardText = $this->formatRewardItems($result->items); return $this->response() ->success("单次随机奖励结果:\n{$rewardText}") ->detail('奖励组', $group->name) ->detail('编码', $group->code); } catch (\Exception $e) { return $this->response() ->error('操作失败: ' . $e->getMessage()); } } /** * 格式化奖励项显示 * * @param array $items * @return string */ private function formatRewardItems(array $items): string { if (empty($items)) { return '无奖励'; } $formatted = []; foreach ($items as $item) { $rewardTypeName = \App\Module\Game\Enums\REWARD_TYPE::getName($item->rewardType); $targetName = $this->getTargetName($item); $formatted[] = "• {$rewardTypeName}: {$targetName} × {$item->quantity}"; } return implode("\n", $formatted); } /** * 获取目标名称 * * @param \App\Module\Game\Dtos\RewardItemDto $item * @return string */ private function getTargetName($item): string { switch ($item->rewardType) { case \App\Module\Game\Enums\REWARD_TYPE::ITEM->value: $itemModel = \App\Module\GameItems\Models\Item::find($item->targetId); return $itemModel ? $itemModel->name : "物品ID: {$item->targetId}"; case \App\Module\Game\Enums\REWARD_TYPE::CURRENCY->value: // 暂时返回固定名称,后续可以根据实际模型调整 return "货币ID: {$item->targetId}"; case \App\Module\Game\Enums\REWARD_TYPE::PET->value: $pet = \App\Module\Pet\Models\PetConfig::find($item->targetId); return $pet ? $pet->name : "宠物ID: {$item->targetId}"; case \App\Module\Game\Enums\REWARD_TYPE::PET_POWER->value: return "宠物体力"; default: return "未知奖励类型 (ID: {$item->targetId})"; } } /** * 确认信息 * * @return array|string|void */ public function confirm() { return ['确定要进行单次随机奖励模拟吗?', '此操作仅模拟奖励结果,不会实际发放奖励']; } }