feat: 扩展玩法配置快照字段并切换目录生效来源

This commit is contained in:
2026-05-16 10:27:59 +08:00
parent f7f6c58b02
commit 7daf0c3bba
15 changed files with 254 additions and 47 deletions

View File

@@ -0,0 +1,79 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::table('play_config_items', function (Blueprint $table): void {
$table->string('category', 16)->nullable()->after('play_code');
$table->unsignedTinyInteger('dimension')->nullable()->after('category');
$table->string('bet_mode', 32)->nullable()->after('dimension');
$table->string('display_name_zh', 64)->nullable()->after('bet_mode');
$table->string('display_name_en', 64)->nullable()->after('display_name_zh');
$table->string('display_name_ne', 64)->nullable()->after('display_name_en');
$table->boolean('supports_multi_number')->default(false)->after('display_name_ne');
$table->json('reserved_rule_json')->nullable()->after('supports_multi_number');
});
$playTypes = DB::table('play_types')
->select([
'play_code',
'category',
'dimension',
'bet_mode',
'display_name_zh',
'display_name_en',
'display_name_ne',
'supports_multi_number',
'reserved_rule_json',
])
->get()
->keyBy('play_code');
DB::table('play_config_items')
->select(['id', 'play_code'])
->orderBy('id')
->chunkById(200, function ($rows) use ($playTypes): void {
foreach ($rows as $row) {
$pt = $playTypes->get($row->play_code);
if ($pt === null) {
continue;
}
DB::table('play_config_items')
->where('id', $row->id)
->update([
'category' => $pt->category,
'dimension' => $pt->dimension,
'bet_mode' => $pt->bet_mode,
'display_name_zh' => $pt->display_name_zh,
'display_name_en' => $pt->display_name_en,
'display_name_ne' => $pt->display_name_ne,
'supports_multi_number' => (bool) $pt->supports_multi_number,
'reserved_rule_json' => $pt->reserved_rule_json,
]);
}
}, 'id');
}
public function down(): void
{
Schema::table('play_config_items', function (Blueprint $table): void {
$table->dropColumn([
'category',
'dimension',
'bet_mode',
'display_name_zh',
'display_name_en',
'display_name_ne',
'supports_multi_number',
'reserved_rule_json',
]);
});
}
};

View File

@@ -66,10 +66,18 @@ final class OperationalConfigV1Seeder extends Seeder
PlayConfigItem::query()->create([
'version_id' => $playVersion->id,
'play_code' => $pt->play_code,
'category' => $pt->category,
'dimension' => $pt->dimension,
'bet_mode' => $pt->bet_mode,
'display_name_zh' => $pt->display_name_zh,
'display_name_en' => $pt->display_name_en,
'display_name_ne' => $pt->display_name_ne,
'is_enabled' => (bool) $pt->is_enabled,
'min_bet_amount' => 100,
'max_bet_amount' => 500_000_000,
'display_order' => (int) $pt->sort_order,
'supports_multi_number' => (bool) $pt->supports_multi_number,
'reserved_rule_json' => $pt->reserved_rule_json,
'rule_text_zh' => null,
'rule_text_en' => null,
'rule_text_ne' => null,

View File

@@ -61,10 +61,18 @@ final class PlayOperationalAlignmentSeeder extends Seeder
PlayConfigItem::query()->create([
'version_id' => $vid,
'play_code' => $pt->play_code,
'category' => $pt->category,
'dimension' => $pt->dimension,
'bet_mode' => $pt->bet_mode,
'display_name_zh' => $pt->display_name_zh,
'display_name_en' => $pt->display_name_en,
'display_name_ne' => $pt->display_name_ne,
'is_enabled' => (bool) $pt->is_enabled,
'min_bet_amount' => self::MIN_BET,
'max_bet_amount' => self::MAX_BET,
'display_order' => (int) $pt->sort_order,
'supports_multi_number' => (bool) $pt->supports_multi_number,
'reserved_rule_json' => $pt->reserved_rule_json,
'rule_text_zh' => null,
'rule_text_en' => null,
'rule_text_ne' => null,