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->condition_group_id) { $this->warn(" 已有条件组ID ({$config->condition_group_id}),跳过"); $skippedCount++; continue; } // 获取条件 $conditions = []; if (is_string($config->conditions)) { $conditions = json_decode($config->conditions, true) ?? []; } else { $conditions = $config->conditions ?? []; } if (empty($conditions)) { $this->warn(" 没有条件,跳过"); $skippedCount++; continue; } $this->info(" 找到条件: " . json_encode($conditions, JSON_UNESCAPED_UNICODE)); try { // 如果不是干运行模式,则创建条件组 if (!$dryRun) { DB::beginTransaction(); // 创建条件组 $conditionGroup = new GameConditionGroup(); $conditionGroup->name = "土地升级: {$config->from_type_id} -> {$config->to_type_id}"; $conditionGroup->code = "land_upgrade_{$config->from_type_id}_{$config->to_type_id}_" . Str::random(6); $conditionGroup->description = "从土地类型 {$config->from_type_id} 升级到 {$config->to_type_id} 所需条件"; $conditionGroup->logic_type = GameConditionGroup::LOGIC_TYPE_ALL; // 默认全部满足 $conditionGroup->save(); $this->info(" 创建条件组: ID={$conditionGroup->id}, 名称={$conditionGroup->name}"); // 创建条件项 if (isset($conditions['house_level_min'])) { $conditionItem = new GameConditionItem(); $conditionItem->group_id = $conditionGroup->id; $conditionItem->condition_type = CONDITION_TYPE::HOUSE_LEVEL->value; $conditionItem->target_id = 0; // 房屋等级不需要目标ID $conditionItem->operator = CONDITION_OPERATOR::GREATER_THAN_OR_EQUAL->value; $conditionItem->value = $conditions['house_level_min']; $conditionItem->save(); $this->info(" 创建条件项: ID={$conditionItem->id}, 类型=房屋等级, 运算符=大于等于, 值={$conditionItem->value}"); } // 处理特殊土地数量限制 if (isset($conditions['special_land_check']) && $conditions['special_land_check']) { // 这个条件比较特殊,需要在代码中处理,这里只是记录一下 $this->warn(" 特殊土地数量限制条件需要在代码中处理,已记录到条件组描述中"); $conditionGroup->description .= ",包含特殊土地数量限制"; $conditionGroup->save(); } // 更新土地升级配置 $config->condition_group_id = $conditionGroup->id; $config->save(); $this->info(" 更新土地升级配置: condition_group_id={$config->condition_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; } }