| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- <?php
- namespace App\Module\Game\AdminControllers\Actions;
- use App\Module\Game\Services\RewardService;
- use App\Module\Game\Models\GameRewardGroup;
- use Dcat\Admin\Grid\RowAction;
- use Illuminate\Http\Request;
- /**
- * 单次随机奖励操作
- */
- class RandomRewardAction extends RowAction
- {
- /**
- * 操作按钮标题
- *
- * @var string
- */
- protected $title = '<i class="fa fa-gift"></i> 单次随机奖励';
- /**
- * 处理请求
- *
- * @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 ['确定要进行单次随机奖励模拟吗?', '此操作仅模拟奖励结果,不会实际发放奖励'];
- }
- }
|