find($consumeGroupCode) : GameConsumeGroup::with('consumeItems')->where('code', $consumeGroupCode)->first(); return $consumeGroup; } catch (\Exception $e) { Log::error('获取消耗组详情失败', [ 'consume_group' => $consumeGroupCode, 'error' => $e->getMessage() ]); return null; } } /** * 批量获取消耗组详情 * * @param array $consumeGroupIds 消耗组ID数组 * @return array 消耗组详情数组,以ID为键 */ public static function getConsumeGroups(array $consumeGroupIds): array { try { if (empty($consumeGroupIds)) { return []; } // 批量获取消耗组 $consumeGroups = GameConsumeGroup::with('consumeItems') ->whereIn('id', $consumeGroupIds) ->get() ->keyBy('id'); return $consumeGroups->toArray(); } catch (\Exception $e) { Log::error('批量获取消耗组详情失败', [ 'consume_group_ids' => $consumeGroupIds, 'error' => $e->getMessage() ]); return []; } } /** * 获取消耗组材料 * * @param int|string $consumeGroupCode 消耗组ID或编码 * @return array 消耗组材料 */ public static function getConsumeMaterials($consumeGroupCode): array { try { // 获取消耗组 $consumeGroup = self::getConsumeGroup($consumeGroupCode); if (!$consumeGroup || $consumeGroup->consumeItems->isEmpty()) { return []; } return self::consumeItems2Array($consumeGroup->consumeItems); } catch (\Exception $e) { Log::error('获取消耗组材料失败', [ 'consume_group' => $consumeGroupCode, 'error' => $e->getMessage() ]); return []; } } /** * 消耗组材料数组 * @param array|GameConsumeItem[] $consumeGroup 消耗组 * @return array 消耗组材料 */ static public function consumeItems2Array( $consumeItems ) { $materials = []; // 处理每个消耗项 foreach ($consumeItems as $item) { if ($item->consume_type == CONSUME_TYPE::ITEM->value) { // 获取物品信息 $itemInfo = Item::find($item->target_id); $materials[] = [ 'type' => $item->consume_type, 'item_id' => $item->target_id, 'item_name' => $itemInfo ? $itemInfo->name : "物品 {$item->target_id}", 'amount' => $item->quantity ]; } elseif ($item->consume_type == CONSUME_TYPE::CURRENCY->value) { // 获取货币信息 $currencyInfo = FundCurrencyModel::find($item->target_id); $materials[] = [ 'type' => $item->consume_type, 'currency_id' => $item->target_id, 'currency_name' => $currencyInfo ? $currencyInfo->name : "货币 {$item->target_id}", 'amount' => $item->quantity ]; } elseif ($item->consume_type == CONSUME_TYPE::FUND_CONFIG->value) { // 获取代币账户信息 $fundInfo = FundConfigModel::find($item->target_id); $materials[] = [ 'type' => $item->consume_type, 'fund_id' => $item->target_id, 'fund_name' => $fundInfo ? $fundInfo->name : "代币账户 {$item->target_id}", 'amount' => $item->quantity ]; } } return $materials; } }