| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- <?php
- namespace App\Module\Game\Services;
- use App\Module\Fund\Models\FundConfigModel;
- use App\Module\Fund\Models\FundCurrencyModel;
- use App\Module\Game\Enums\REWARD_TYPE;
- use App\Module\Game\Models\GameRewardGroup;
- use App\Module\GameItems\Models\Item;
- use App\Module\Pet\Models\PetConfig;
- use Illuminate\Support\Facades\Log;
- /**
- * 奖励组服务类
- *
- * 提供奖励组相关的服务,包括获取奖励组详情、获取奖励组奖励等功能
- */
- class RewardGroupService
- {
- /**
- * 获取奖励组详情
- *
- * @param int|string $rewardGroupCode 奖励组ID或编码
- * @return GameRewardGroup|null 奖励组详情
- */
- public static function getRewardGroup($rewardGroupCode): ?GameRewardGroup
- {
- try {
- // 获取奖励组
- $rewardGroup = is_numeric($rewardGroupCode)
- ? GameRewardGroup::with('rewardItems')->find($rewardGroupCode)
- : GameRewardGroup::with('rewardItems')->where('code', $rewardGroupCode)->first();
- return $rewardGroup;
- } catch (\Exception $e) {
- Log::error('获取奖励组详情失败', [
- 'reward_group' => $rewardGroupCode,
- 'error' => $e->getMessage()
- ]);
- return null;
- }
- }
- /**
- * 批量获取奖励组详情
- *
- * @param array $rewardGroupIds 奖励组ID数组
- * @return array 奖励组详情数组,以ID为键
- */
- public static function getRewardGroups(array $rewardGroupIds): array
- {
- try {
- if (empty($rewardGroupIds)) {
- return [];
- }
- // 批量获取奖励组
- $rewardGroups = GameRewardGroup::with('rewardItems')
- ->whereIn('id', $rewardGroupIds)
- ->get()
- ->keyBy('id');
- return $rewardGroups->toArray();
- } catch (\Exception $e) {
- Log::error('批量获取奖励组详情失败', [
- 'reward_group_ids' => $rewardGroupIds,
- 'error' => $e->getMessage()
- ]);
- return [];
- }
- }
- /**
- * 获取奖励组奖励
- *
- * @param int|string $rewardGroupCode 奖励组ID或编码
- * @return array 奖励组奖励
- */
- public static function getRewardItems($rewardGroupCode): array
- {
- try {
- // 获取奖励组
- $rewardGroup = self::getRewardGroup($rewardGroupCode);
- if (!$rewardGroup || $rewardGroup->rewardItems->isEmpty()) {
- return [];
- }
- $rewards = [];
- // 处理每个奖励项
- foreach ($rewardGroup->rewardItems as $item) {
- $rewardItem = [
- 'id' => $item->id,
- 'type' => $item->reward_type,
- 'target_id' => $item->target_id,
- 'quantity' => $item->quantity,
- 'weight' => $item->weight,
- 'is_guaranteed' => $item->is_guaranteed,
- 'group_id' => $rewardGroup->id,
- 'group_code' => $rewardGroup->code,
- 'group_name' => $rewardGroup->name,
- 'is_random' => $rewardGroup->is_random,
- 'random_count' => $rewardGroup->random_count
- ];
- // 根据奖励类型获取目标名称
- if ($item->reward_type == REWARD_TYPE::ITEM->value) {
- $itemInfo = Item::find($item->target_id);
- $rewardItem['target_name'] = $itemInfo ? $itemInfo->name : "物品 {$item->target_id}";
- $rewardItem['reward_name'] = "物品奖励";
- } elseif ($item->reward_type == REWARD_TYPE::CURRENCY->value) {
- $currency = FundCurrencyModel::find($item->target_id);
- $rewardItem['target_name'] = $currency ? $currency->name : "货币 {$item->target_id}";
- $rewardItem['reward_name'] = "货币奖励";
- } elseif ($item->reward_type == REWARD_TYPE::PET_EXP->value) {
- $pet = PetConfig::find($item->target_id);
- $rewardItem['target_name'] = $pet ? $pet->name : "宠物 {$item->target_id}";
- $rewardItem['reward_name'] = "宠物经验";
- } elseif ($item->reward_type == REWARD_TYPE::PET_ENERGY->value) {
- $pet = PetConfig::find($item->target_id);
- $rewardItem['target_name'] = $pet ? $pet->name : "宠物 {$item->target_id}";
- $rewardItem['reward_name'] = "宠物体力";
- } elseif ($item->reward_type == REWARD_TYPE::FUND_CONFIG->value) {
- $fund = FundConfigModel::find($item->target_id);
- $rewardItem['target_name'] = $fund ? $fund->name : "代币账户 {$item->target_id}";
- $rewardItem['reward_name'] = "代币奖励";
- } elseif ($item->reward_type == REWARD_TYPE::PET->value) {
- $petConfig = \App\Module\Pet\Models\PetConfig::find($item->target_id);
- $rewardItem['target_name'] = $petConfig ? $petConfig->name : "宠物配置 {$item->target_id}";
- $rewardItem['reward_name'] = "宠物奖励";
- } elseif ($item->reward_type == REWARD_TYPE::PET_POWER->value) {
- $pet = \App\Module\Pet\Models\PetUser::find($item->target_id);
- $rewardItem['target_name'] = $pet ? $pet->name : "宠物 {$item->target_id}";
- $rewardItem['reward_name'] = "宠物体力奖励";
- } else {
- $rewardItem['target_name'] = "其他 {$item->target_id}";
- $rewardItem['reward_name'] = "其他奖励";
- }
- $rewards[] = $rewardItem;
- }
- return $rewards;
- } catch (\Exception $e) {
- Log::error('获取奖励组奖励失败', [
- 'reward_group' => $rewardGroupCode,
- 'error' => $e->getMessage()
- ]);
- return [];
- }
- }
- }
|