增加了手机操作端
This commit is contained in:
@@ -32,6 +32,20 @@ function hasTable(PDO $pdo, string $table): bool
|
||||
return (int)$stmt->fetchColumn() > 0;
|
||||
}
|
||||
|
||||
function hasColumn(PDO $pdo, string $table, string $column): bool
|
||||
{
|
||||
$stmt = $pdo->prepare('SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?');
|
||||
$stmt->execute([$table, $column]);
|
||||
return (int)$stmt->fetchColumn() > 0;
|
||||
}
|
||||
|
||||
function hasIndex(PDO $pdo, string $table, string $index): bool
|
||||
{
|
||||
$stmt = $pdo->prepare('SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND INDEX_NAME = ?');
|
||||
$stmt->execute([$table, $index]);
|
||||
return (int)$stmt->fetchColumn() > 0;
|
||||
}
|
||||
|
||||
function hasPermission(PDO $pdo, string $code): bool
|
||||
{
|
||||
$stmt = $pdo->prepare('SELECT COUNT(*) FROM admin_permissions WHERE code = ?');
|
||||
@@ -45,6 +59,18 @@ CREATE TABLE material_batches (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
batch_no VARCHAR(64) NOT NULL,
|
||||
total_count INT NOT NULL DEFAULT 0,
|
||||
status VARCHAR(32) NOT NULL DEFAULT 'active',
|
||||
invalidated_at DATETIME NULL DEFAULT NULL,
|
||||
invalidated_by BIGINT UNSIGNED NULL DEFAULT NULL,
|
||||
invalidated_by_name VARCHAR(64) NOT NULL DEFAULT '',
|
||||
invalid_reason VARCHAR(500) NOT NULL DEFAULT '',
|
||||
package_status VARCHAR(32) NOT NULL DEFAULT 'pending',
|
||||
package_path VARCHAR(255) NOT NULL DEFAULT '',
|
||||
package_url VARCHAR(500) NOT NULL DEFAULT '',
|
||||
package_error VARCHAR(500) NOT NULL DEFAULT '',
|
||||
package_requested_at DATETIME NULL DEFAULT NULL,
|
||||
package_generated_at DATETIME NULL DEFAULT NULL,
|
||||
package_purged_at DATETIME NULL DEFAULT NULL,
|
||||
remark VARCHAR(500) NOT NULL DEFAULT '',
|
||||
download_count INT NOT NULL DEFAULT 0,
|
||||
last_downloaded_at DATETIME NULL DEFAULT NULL,
|
||||
@@ -54,12 +80,55 @@ CREATE TABLE material_batches (
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_material_batches_batch_no (batch_no),
|
||||
KEY idx_material_batches_status (status),
|
||||
KEY idx_material_batches_package_status (package_status),
|
||||
KEY idx_material_batches_package_generated_at (package_generated_at),
|
||||
KEY idx_material_batches_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='物料二维码批次'
|
||||
SQL);
|
||||
echo "CREATE_TABLE material_batches\n";
|
||||
}
|
||||
|
||||
if (hasTable($pdo, 'material_batches')) {
|
||||
$columns = [
|
||||
'status' => "ALTER TABLE material_batches ADD COLUMN status VARCHAR(32) NOT NULL DEFAULT 'active' AFTER total_count",
|
||||
'invalidated_at' => "ALTER TABLE material_batches ADD COLUMN invalidated_at DATETIME NULL DEFAULT NULL AFTER status",
|
||||
'invalidated_by' => "ALTER TABLE material_batches ADD COLUMN invalidated_by BIGINT UNSIGNED NULL DEFAULT NULL AFTER invalidated_at",
|
||||
'invalidated_by_name' => "ALTER TABLE material_batches ADD COLUMN invalidated_by_name VARCHAR(64) NOT NULL DEFAULT '' AFTER invalidated_by",
|
||||
'invalid_reason' => "ALTER TABLE material_batches ADD COLUMN invalid_reason VARCHAR(500) NOT NULL DEFAULT '' AFTER invalidated_by_name",
|
||||
'package_status' => "ALTER TABLE material_batches ADD COLUMN package_status VARCHAR(32) NOT NULL DEFAULT 'pending' AFTER invalid_reason",
|
||||
'package_path' => "ALTER TABLE material_batches ADD COLUMN package_path VARCHAR(255) NOT NULL DEFAULT '' AFTER package_status",
|
||||
'package_url' => "ALTER TABLE material_batches ADD COLUMN package_url VARCHAR(500) NOT NULL DEFAULT '' AFTER package_path",
|
||||
'package_error' => "ALTER TABLE material_batches ADD COLUMN package_error VARCHAR(500) NOT NULL DEFAULT '' AFTER package_url",
|
||||
'package_requested_at' => "ALTER TABLE material_batches ADD COLUMN package_requested_at DATETIME NULL DEFAULT NULL AFTER package_error",
|
||||
'package_generated_at' => "ALTER TABLE material_batches ADD COLUMN package_generated_at DATETIME NULL DEFAULT NULL AFTER package_requested_at",
|
||||
'package_purged_at' => "ALTER TABLE material_batches ADD COLUMN package_purged_at DATETIME NULL DEFAULT NULL AFTER package_generated_at",
|
||||
];
|
||||
|
||||
foreach ($columns as $column => $sql) {
|
||||
if (!hasColumn($pdo, 'material_batches', $column)) {
|
||||
$pdo->exec($sql);
|
||||
echo "ADD_COLUMN material_batches.{$column}\n";
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasIndex($pdo, 'material_batches', 'idx_material_batches_status')) {
|
||||
$pdo->exec('ALTER TABLE material_batches ADD KEY idx_material_batches_status (status)');
|
||||
echo "ADD_INDEX material_batches.idx_material_batches_status\n";
|
||||
}
|
||||
if (!hasIndex($pdo, 'material_batches', 'idx_material_batches_package_status')) {
|
||||
$pdo->exec('ALTER TABLE material_batches ADD KEY idx_material_batches_package_status (package_status)');
|
||||
echo "ADD_INDEX material_batches.idx_material_batches_package_status\n";
|
||||
}
|
||||
if (!hasIndex($pdo, 'material_batches', 'idx_material_batches_package_generated_at')) {
|
||||
$pdo->exec('ALTER TABLE material_batches ADD KEY idx_material_batches_package_generated_at (package_generated_at)');
|
||||
echo "ADD_INDEX material_batches.idx_material_batches_package_generated_at\n";
|
||||
}
|
||||
|
||||
$pdo->exec("UPDATE material_batches SET status = 'active' WHERE status = ''");
|
||||
$pdo->exec("UPDATE material_batches SET package_status = 'pending' WHERE package_status = ''");
|
||||
}
|
||||
|
||||
if (!hasTable($pdo, 'material_tag_codes')) {
|
||||
$pdo->exec(<<<'SQL'
|
||||
CREATE TABLE material_tag_codes (
|
||||
@@ -67,7 +136,17 @@ CREATE TABLE material_tag_codes (
|
||||
batch_id BIGINT UNSIGNED NOT NULL,
|
||||
qr_token VARCHAR(80) NOT NULL,
|
||||
qr_url VARCHAR(500) NOT NULL,
|
||||
qr_image_url VARCHAR(500) NOT NULL DEFAULT '',
|
||||
qr_image_path VARCHAR(255) NOT NULL DEFAULT '',
|
||||
qr_image_status VARCHAR(32) NOT NULL DEFAULT 'pending',
|
||||
qr_image_error VARCHAR(500) NOT NULL DEFAULT '',
|
||||
qr_image_generated_at DATETIME NULL DEFAULT NULL,
|
||||
verify_code VARCHAR(16) NOT NULL,
|
||||
status VARCHAR(32) NOT NULL DEFAULT 'active',
|
||||
invalidated_at DATETIME NULL DEFAULT NULL,
|
||||
invalidated_by BIGINT UNSIGNED NULL DEFAULT NULL,
|
||||
invalidated_by_name VARCHAR(64) NOT NULL DEFAULT '',
|
||||
invalid_reason VARCHAR(500) NOT NULL DEFAULT '',
|
||||
bind_status VARCHAR(32) NOT NULL DEFAULT 'unbound',
|
||||
report_id BIGINT UNSIGNED NULL DEFAULT NULL,
|
||||
report_no VARCHAR(64) NOT NULL DEFAULT '',
|
||||
@@ -89,12 +168,53 @@ CREATE TABLE material_tag_codes (
|
||||
KEY idx_material_tag_codes_batch_id (batch_id),
|
||||
KEY idx_material_tag_codes_verify_code (verify_code),
|
||||
KEY idx_material_tag_codes_report_no (report_no),
|
||||
KEY idx_material_tag_codes_bind_status (bind_status)
|
||||
KEY idx_material_tag_codes_bind_status (bind_status),
|
||||
KEY idx_material_tag_codes_status (status),
|
||||
KEY idx_material_tag_codes_qr_image_status (qr_image_status),
|
||||
KEY idx_material_tag_codes_qr_image_generated_at (qr_image_generated_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='物料吊牌二维码'
|
||||
SQL);
|
||||
echo "CREATE_TABLE material_tag_codes\n";
|
||||
}
|
||||
|
||||
if (hasTable($pdo, 'material_tag_codes')) {
|
||||
$columns = [
|
||||
'qr_image_url' => "ALTER TABLE material_tag_codes ADD COLUMN qr_image_url VARCHAR(500) NOT NULL DEFAULT '' AFTER qr_url",
|
||||
'qr_image_path' => "ALTER TABLE material_tag_codes ADD COLUMN qr_image_path VARCHAR(255) NOT NULL DEFAULT '' AFTER qr_image_url",
|
||||
'qr_image_status' => "ALTER TABLE material_tag_codes ADD COLUMN qr_image_status VARCHAR(32) NOT NULL DEFAULT 'pending' AFTER qr_image_path",
|
||||
'qr_image_error' => "ALTER TABLE material_tag_codes ADD COLUMN qr_image_error VARCHAR(500) NOT NULL DEFAULT '' AFTER qr_image_status",
|
||||
'qr_image_generated_at' => "ALTER TABLE material_tag_codes ADD COLUMN qr_image_generated_at DATETIME NULL DEFAULT NULL AFTER qr_image_error",
|
||||
'status' => "ALTER TABLE material_tag_codes ADD COLUMN status VARCHAR(32) NOT NULL DEFAULT 'active' AFTER verify_code",
|
||||
'invalidated_at' => "ALTER TABLE material_tag_codes ADD COLUMN invalidated_at DATETIME NULL DEFAULT NULL AFTER status",
|
||||
'invalidated_by' => "ALTER TABLE material_tag_codes ADD COLUMN invalidated_by BIGINT UNSIGNED NULL DEFAULT NULL AFTER invalidated_at",
|
||||
'invalidated_by_name' => "ALTER TABLE material_tag_codes ADD COLUMN invalidated_by_name VARCHAR(64) NOT NULL DEFAULT '' AFTER invalidated_by",
|
||||
'invalid_reason' => "ALTER TABLE material_tag_codes ADD COLUMN invalid_reason VARCHAR(500) NOT NULL DEFAULT '' AFTER invalidated_by_name",
|
||||
];
|
||||
|
||||
foreach ($columns as $column => $sql) {
|
||||
if (!hasColumn($pdo, 'material_tag_codes', $column)) {
|
||||
$pdo->exec($sql);
|
||||
echo "ADD_COLUMN material_tag_codes.{$column}\n";
|
||||
}
|
||||
}
|
||||
|
||||
$indexes = [
|
||||
'idx_material_tag_codes_status' => 'ALTER TABLE material_tag_codes ADD KEY idx_material_tag_codes_status (status)',
|
||||
'idx_material_tag_codes_qr_image_status' => 'ALTER TABLE material_tag_codes ADD KEY idx_material_tag_codes_qr_image_status (qr_image_status)',
|
||||
'idx_material_tag_codes_qr_image_generated_at' => 'ALTER TABLE material_tag_codes ADD KEY idx_material_tag_codes_qr_image_generated_at (qr_image_generated_at)',
|
||||
];
|
||||
|
||||
foreach ($indexes as $index => $sql) {
|
||||
if (!hasIndex($pdo, 'material_tag_codes', $index)) {
|
||||
$pdo->exec($sql);
|
||||
echo "ADD_INDEX material_tag_codes.{$index}\n";
|
||||
}
|
||||
}
|
||||
|
||||
$pdo->exec("UPDATE material_tag_codes SET qr_image_status = 'pending' WHERE qr_image_status = ''");
|
||||
$pdo->exec("UPDATE material_tag_codes SET status = 'active' WHERE status = ''");
|
||||
}
|
||||
|
||||
if (!hasTable($pdo, 'material_batch_download_logs')) {
|
||||
$pdo->exec(<<<'SQL'
|
||||
CREATE TABLE material_batch_download_logs (
|
||||
|
||||
Reference in New Issue
Block a user