Files
anxinyan/server-api/tools/schema_upgrade_express_companies.php
2026-05-26 17:08:33 +08:00

73 lines
2.9 KiB
PHP

<?php
declare(strict_types=1);
require dirname(__DIR__) . '/vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(dirname(__DIR__));
$dotenv->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";