| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- <?php
- namespace App\Module\Farm\Commands;
- use App\Module\Farm\Models\FarmLandUpgradeConfig;
- use App\Module\Game\Enums\CONDITION_OPERATOR;
- use App\Module\Game\Enums\CONDITION_TYPE;
- use App\Module\Game\Models\GameConditionGroup;
- use App\Module\Game\Models\GameConditionItem;
- use Illuminate\Console\Command;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Str;
- /**
- * 将土地升级条件迁移到条件组的命令
- */
- class MigrateLandUpgradeConditionsToConditionGroupsCommand extends Command
- {
- /**
- * 命令名称
- *
- * @var string
- */
- protected $signature = 'farm:migrate-land-upgrade-conditions {--dry-run : 只显示将要执行的操作,不实际执行}';
- /**
- * 命令描述
- *
- * @var string
- */
- protected $description = '将土地升级条件迁移到条件组';
- /**
- * 执行命令
- *
- * @return int
- */
- public function handle()
- {
- $this->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;
- }
- }
|