safeLoad(); $dsn = sprintf( 'mysql:host=%s;port=%s;dbname=%s;charset=%s', $_ENV['DB_HOST'] ?? '127.0.0.1', $_ENV['DB_PORT'] ?? '3306', $_ENV['DB_DATABASE'] ?? '', $_ENV['DB_CHARSET'] ?? 'utf8mb4' ); $pdo = new PDO( $dsn, $_ENV['DB_USERNAME'] ?? '', $_ENV['DB_PASSWORD'] ?? '', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ] ); $pdo->exec(<<<'SQL' CREATE TABLE IF NOT EXISTS express_companies ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, company_name VARCHAR(64) NOT NULL DEFAULT '', company_code VARCHAR(64) NOT NULL DEFAULT '', status VARCHAR(32) NOT NULL DEFAULT 'enabled', is_default TINYINT(1) NOT NULL DEFAULT 0, sort_order INT NOT NULL DEFAULT 0, remark VARCHAR(255) NOT NULL DEFAULT '', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_express_companies_name (company_name), UNIQUE KEY uk_express_companies_code (company_code), KEY idx_express_companies_status (status), KEY idx_express_companies_default (is_default) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='快递公司字典' SQL); $now = date('Y-m-d H:i:s'); $stmt = $pdo->prepare('SELECT id, company_code FROM express_companies WHERE company_name = ? LIMIT 1'); $stmt->execute(['顺丰速运']); $exists = $stmt->fetch(); if (!$exists) { $insert = $pdo->prepare('INSERT INTO express_companies (company_name, company_code, status, is_default, sort_order, remark, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)'); $insert->execute(['顺丰速运', 'shunfeng', 'enabled', 1, 1, '系统默认快递公司', $now, $now]); echo "SEED_DEFAULT_EXPRESS_COMPANY\n"; } elseif (in_array((string)($exists['company_code'] ?? ''), ['', 'sf_express'], true) || str_starts_with((string)($exists['company_code'] ?? ''), 'express_')) { $update = $pdo->prepare('UPDATE express_companies SET company_code = ?, updated_at = ? WHERE id = ?'); $update->execute(['shunfeng', $now, (int)$exists['id']]); echo "UPDATE_DEFAULT_EXPRESS_COMPANY_CODE\n"; } $defaultCount = (int)$pdo->query("SELECT COUNT(*) FROM express_companies WHERE status = 'enabled' AND is_default = 1")->fetchColumn(); if ($defaultCount === 0) { $row = $pdo->query("SELECT id FROM express_companies WHERE status = 'enabled' ORDER BY sort_order ASC, id ASC LIMIT 1")->fetch(); if ($row) { $update = $pdo->prepare('UPDATE express_companies SET is_default = 1, updated_at = ? WHERE id = ?'); $update->execute([$now, (int)$row['id']]); echo "SET_DEFAULT_EXPRESS_COMPANY\n"; } } echo "SCHEMA_UPGRADE_OK\n";