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 []; } } }