Files
lotteryLaravel/fix-missing-tables.php
kang 1d13d19b65 fix(database): 修复缺失表结构并完善索引检查逻辑
- 新增 fix-missing-tables.php 脚本用于补建 settlement_batches 和 system_jobs 表
- 为 settlement_batches 表添加 draw_id 和 settle_version 联合索引
- 在迁移文件中添加表存在性检查避免索引操作失败
- 补录相关迁移记录到 migrations 表中确保迁移状态一致
- 完善 schema 检查逻辑防止对不存在的表进行索引操作
2026-06-10 14:42:23 +08:00

92 lines
3.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* 一次性修复脚本:补建生产库缺失的 settlement_batches 和 system_jobs 表。
*
* 用法php fix-missing-tables.php
* 执行完毕后删除此文件。
*/
require __DIR__ . '/vendor/autoload.php';
$app = require_once __DIR__ . '/bootstrap/app.php';
$app->make(\Illuminate\Contracts\Console\Kernel::class)->bootstrap();
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
$created = [];
$skipped = [];
// ── 1. settlement_batches ──
if (! Schema::hasTable('settlement_batches')) {
DB::statement('
CREATE TABLE settlement_batches (
id bigserial PRIMARY KEY,
draw_id bigint NOT NULL REFERENCES draws(id) ON DELETE CASCADE,
result_batch_id bigint NOT NULL REFERENCES draw_result_batches(id) ON DELETE CASCADE,
settle_version integer NOT NULL DEFAULT 1,
status varchar(32) NOT NULL,
total_ticket_count integer NOT NULL DEFAULT 0,
total_win_count integer NOT NULL DEFAULT 0,
total_payout_amount bigint NOT NULL DEFAULT 0,
total_jackpot_payout_amount bigint NOT NULL DEFAULT 0,
review_status varchar(32) NOT NULL DEFAULT \'pending\',
reviewed_by bigint REFERENCES admin_users(id) ON DELETE SET NULL,
reviewed_at timestamp,
review_remark varchar(255),
paid_at timestamp,
started_at timestamp,
finished_at timestamp,
created_at timestamp,
updated_at timestamp
)
');
DB::statement('CREATE INDEX idx_settlement_batches_draw_version ON settlement_batches (draw_id, settle_version)');
$created[] = 'settlement_batches';
} else {
$skipped[] = 'settlement_batches (已存在)';
}
// 补录迁移记录
if (! DB::table('migrations')->where('migration', '2026_05_08_130008_create_settlement_and_jackpot_tables')->exists()) {
DB::table('migrations')->insert([
'migration' => '2026_05_08_130008_create_settlement_and_jackpot_tables',
'batch' => 99,
]);
}
// ── 2. system_jobs ──
if (! Schema::hasTable('system_jobs')) {
DB::statement('
CREATE TABLE system_jobs (
id bigserial PRIMARY KEY,
job_key varchar(128) UNIQUE NOT NULL,
name varchar(128) NOT NULL,
schedule_cron varchar(64),
is_enabled boolean NOT NULL DEFAULT true,
last_started_at timestamp,
last_finished_at timestamp,
last_status varchar(32),
created_at timestamp,
updated_at timestamp
)
');
$created[] = 'system_jobs';
} else {
$skipped[] = 'system_jobs (已存在)';
}
// 补录迁移记录
if (! DB::table('migrations')->where('migration', '2026_05_08_130009_create_report_audit_reconcile_tables')->exists()) {
DB::table('migrations')->insert([
'migration' => '2026_05_08_130009_create_report_audit_reconcile_tables',
'batch' => 99,
]);
}
// ── 输出结果 ──
echo "=== 修复完成 ===\n";
echo "新建: " . (empty($created) ? '无' : implode(', ', $created)) . "\n";
echo "跳过: " . (empty($skipped) ? '无' : implode(', ', $skipped)) . "\n";
echo "\n接下来请执行: php artisan migrate --force\n";