with([ 'consumeGroup.consumeItems', 'rewardGroup.rewardItems', 'conditionGroup.conditionItems' ]) ->where('is_active', 1) ->orderBy('sort_order', 'desc') ->get() ->map(function (ItemRecipe $recipe) { // 构建配方数据 $recipeData = [ 'id' => $recipe->id, 'name' => $recipe->name, 'code' => $recipe->code, 'description' => $recipe->description, 'success_rate' => $recipe->success_rate, 'display_attributes'=>$recipe->display_attributes, 'cooldown_seconds' => $recipe->cooldown_seconds, 'sort_order' => $recipe->sort_order, ]; // 消耗组数据 if ($recipe->consume_group_id && $recipe->consumeGroup) { $consume = ConsumeService::getConsumeGroupAsDeduct($recipe->consume_group_id); $recipeData['consume_group'] = json_decode($consume->serializeToJsonString(),true); } // 奖励组数据 if ($recipe->reward_group_id && $recipe->rewardGroup) { $reward = RewardService::getRewardGroupAsReward($recipe->reward_group_id); $recipeData['reward_group'] = json_decode($reward->serializeToJsonString(),true); } // 条件组,临时跳过 return $recipeData; }) ->toArray(); // 准备完整数据,包含生成时间 $data = [ 'generated_ts' => time(), 'recipes' => $recipes ]; return $data; } catch (\Exception $e) { Log::error('Generate 合成配方 failed: ' . $e->getMessage()); return false; } } /** * 执行命令 */ public function handle() { $this->info('Generating 合成配方 JSON data...'); if (RecipeJsonConfig::getData([], true)) { $this->info('Successfully generated recipe.json with timestamp'); } else { $this->error('Failed to generate 合成配方 '); } } }