info('开始迁移土地升级材料到消耗组...'); // 获取所有土地升级配置 $configs = FarmLandUpgradeConfig::all(); $this->info("找到 {$configs->count()} 个土地升级配置"); // 是否为干运行模式 $dryRun = $this->option('dry-run'); if ($dryRun) { $this->warn('干运行模式:不会实际执行数据库操作'); } // 开始迁移 $migratedCount = 0; $skippedCount = 0; $errorCount = 0; foreach ($configs as $config) { $this->line(''); $this->line("处理配置 ID: {$config->id}, 从 {$config->from_type_id} 到 {$config->to_type_id}"); // 如果已经有消耗组ID,则跳过 if ($config->consume_group_id) { $this->warn(" 已有消耗组ID ({$config->consume_group_id}),跳过"); $skippedCount++; continue; } // 获取材料 $materials = []; if (is_string($config->materials)) { $materials = json_decode($config->materials, true)['materials'] ?? []; } else { $materials = $config->materials['materials'] ?? []; } if (empty($materials)) { $this->warn(" 没有材料,跳过"); $skippedCount++; continue; } $this->info(" 找到 " . count($materials) . " 个材料项"); foreach ($materials as $material) { $this->line(" 物品ID: {$material['item_id']}, 数量: {$material['amount']}"); } try { // 如果不是干运行模式,则创建消耗组 if (!$dryRun) { DB::beginTransaction(); // 创建消耗组 $consumeGroup = new GameConsumeGroup(); $consumeGroup->name = "土地升级: {$config->from_type_id} -> {$config->to_type_id}"; $consumeGroup->code = "land_upgrade_{$config->from_type_id}_{$config->to_type_id}_" . Str::random(6); $consumeGroup->description = "从土地类型 {$config->from_type_id} 升级到 {$config->to_type_id} 所需材料"; $consumeGroup->save(); $this->info(" 创建消耗组: ID={$consumeGroup->id}, 名称={$consumeGroup->name}"); // 创建消耗项 foreach ($materials as $material) { $consumeItem = new GameConsumeItem(); $consumeItem->group_id = $consumeGroup->id; $consumeItem->consume_type = CONSUME_TYPE::ITEM->value; $consumeItem->target_id = $material['item_id']; $consumeItem->quantity = $material['amount']; $consumeItem->save(); $this->info(" 创建消耗项: ID={$consumeItem->id}, 物品ID={$consumeItem->target_id}, 数量={$consumeItem->quantity}"); } // 更新土地升级配置 $config->consume_group_id = $consumeGroup->id; $config->save(); $this->info(" 更新土地升级配置: consume_group_id={$config->consume_group_id}"); DB::commit(); } else { $this->info(" [干运行] 将创建消耗组和消耗项,并更新土地升级配置"); } $migratedCount++; } catch (\Exception $e) { if (!$dryRun) { DB::rollBack(); } $this->error(" 迁移失败: " . $e->getMessage()); $errorCount++; } } $this->line(''); $this->info("迁移完成: 成功 {$migratedCount}, 跳过 {$skippedCount}, 失败 {$errorCount}"); return 0; } }