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) { // 使用统一的消耗类型描述器转换为数组 $materials[] = \App\Module\Game\Services\ConsumeTypeDescriptor::convertToArray($item); } return $materials; } }