feat: update appraisal ordering and payment flows
This commit is contained in:
133
server-api/tools/schema_upgrade_service_price_packages.php
Normal file
133
server-api/tools/schema_upgrade_service_price_packages.php
Normal file
@@ -0,0 +1,133 @@
|
||||
<?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,
|
||||
]
|
||||
);
|
||||
|
||||
function column_exists(PDO $pdo, string $table, string $column): bool
|
||||
{
|
||||
$stmt = $pdo->prepare("SHOW COLUMNS FROM {$table} LIKE ?");
|
||||
$stmt->execute([$column]);
|
||||
return (bool)$stmt->fetch();
|
||||
}
|
||||
|
||||
function add_column_if_missing(PDO $pdo, string $table, string $column, string $definition): void
|
||||
{
|
||||
if (column_exists($pdo, $table, $column)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$pdo->exec("ALTER TABLE {$table} ADD COLUMN {$column} {$definition}");
|
||||
echo "ADD_COLUMN {$table}.{$column}\n";
|
||||
}
|
||||
|
||||
$pdo->exec(<<<'SQL'
|
||||
CREATE TABLE IF NOT EXISTS appraisal_service_price_packages (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
service_provider VARCHAR(32) NOT NULL DEFAULT 'anxinyan',
|
||||
package_name VARCHAR(128) NOT NULL DEFAULT '',
|
||||
package_code VARCHAR(64) NOT NULL DEFAULT '',
|
||||
price DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
||||
description VARCHAR(500) NOT NULL DEFAULT '',
|
||||
is_enabled TINYINT(1) NOT NULL DEFAULT 1,
|
||||
is_default TINYINT(1) NOT NULL DEFAULT 0,
|
||||
sort_order INT NOT NULL DEFAULT 0,
|
||||
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_appraisal_service_price_packages_code (service_provider, package_code),
|
||||
KEY idx_appraisal_service_price_packages_provider (service_provider),
|
||||
KEY idx_appraisal_service_price_packages_enabled (is_enabled)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='鉴定服务价格套餐'
|
||||
SQL);
|
||||
|
||||
add_column_if_missing($pdo, 'appraisal_drafts', 'price_package_id', 'BIGINT UNSIGNED NULL DEFAULT NULL AFTER service_provider');
|
||||
add_column_if_missing($pdo, 'appraisal_drafts', 'price_package_name', "VARCHAR(128) NOT NULL DEFAULT '' AFTER price_package_id");
|
||||
add_column_if_missing($pdo, 'appraisal_drafts', 'price_package_code', "VARCHAR(64) NOT NULL DEFAULT '' AFTER price_package_name");
|
||||
add_column_if_missing($pdo, 'appraisal_drafts', 'price_package_price', 'DECIMAL(10,2) NULL DEFAULT NULL AFTER price_package_code');
|
||||
|
||||
add_column_if_missing($pdo, 'orders', 'price_package_id', 'BIGINT UNSIGNED NULL DEFAULT NULL AFTER service_provider');
|
||||
add_column_if_missing($pdo, 'orders', 'price_package_name', "VARCHAR(128) NOT NULL DEFAULT '' AFTER price_package_id");
|
||||
add_column_if_missing($pdo, 'orders', 'price_package_code', "VARCHAR(64) NOT NULL DEFAULT '' AFTER price_package_name");
|
||||
add_column_if_missing($pdo, 'orders', 'price_package_price', 'DECIMAL(10,2) NULL DEFAULT NULL AFTER price_package_code');
|
||||
|
||||
$indexRows = $pdo->query("SHOW INDEX FROM orders WHERE Key_name = 'idx_orders_price_package_id'")->fetchAll();
|
||||
if (!$indexRows) {
|
||||
$pdo->exec('ALTER TABLE orders ADD KEY idx_orders_price_package_id (price_package_id)');
|
||||
echo "ADD_INDEX orders.idx_orders_price_package_id\n";
|
||||
}
|
||||
|
||||
$now = date('Y-m-d H:i:s');
|
||||
$seedStmt = $pdo->prepare(
|
||||
'INSERT INTO appraisal_service_price_packages (service_provider, package_name, package_code, price, description, is_enabled, is_default, sort_order, created_at, updated_at)
|
||||
SELECT ?, ?, ?, ?, ?, 1, 1, 1, ?, ?
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM appraisal_service_price_packages WHERE service_provider = ? AND package_code = ?
|
||||
)'
|
||||
);
|
||||
$seedStmt->execute(['anxinyan', '安心验基础套餐', 'anxinyan_basic', 99.00, '默认服务价格套餐', $now, $now, 'anxinyan', 'anxinyan_basic']);
|
||||
$seedStmt->execute(['zhongjian', '中检基础套餐', 'zhongjian_basic', 199.00, '默认服务价格套餐', $now, $now, 'zhongjian', 'zhongjian_basic']);
|
||||
|
||||
foreach (['anxinyan', 'zhongjian'] as $serviceProvider) {
|
||||
$candidateStmt = $pdo->prepare('SELECT id FROM appraisal_service_price_packages WHERE service_provider = ? AND is_enabled = 1 ORDER BY is_default DESC, sort_order ASC, id ASC LIMIT 1');
|
||||
$candidateStmt->execute([$serviceProvider]);
|
||||
$candidateId = (int)$candidateStmt->fetchColumn();
|
||||
if ($candidateId > 0) {
|
||||
$clearStmt = $pdo->prepare('UPDATE appraisal_service_price_packages SET is_default = 0, updated_at = ? WHERE service_provider = ? AND id <> ? AND is_default = 1');
|
||||
$clearStmt->execute([$now, $serviceProvider, $candidateId]);
|
||||
|
||||
$defaultStmt = $pdo->prepare('UPDATE appraisal_service_price_packages SET is_default = 1, updated_at = ? WHERE id = ? AND is_default <> 1');
|
||||
$defaultStmt->execute([$now, $candidateId]);
|
||||
echo "NORMALIZE_DEFAULT_PACKAGE {$serviceProvider}:{$candidateId}\n";
|
||||
} else {
|
||||
$clearStmt = $pdo->prepare('UPDATE appraisal_service_price_packages SET is_default = 0, updated_at = ? WHERE service_provider = ? AND is_default = 1');
|
||||
$clearStmt->execute([$now, $serviceProvider]);
|
||||
}
|
||||
}
|
||||
|
||||
$permissionStmt = $pdo->prepare(
|
||||
'INSERT INTO admin_permissions (name, code, module, action, created_at, updated_at)
|
||||
SELECT ?, ?, ?, ?, ?, ?
|
||||
WHERE NOT EXISTS (SELECT 1 FROM admin_permissions WHERE code = ?)'
|
||||
);
|
||||
$permissionStmt->execute(['管理服务价格', 'service_prices.manage', 'service_prices', 'manage', $now, $now, 'service_prices.manage']);
|
||||
$permissionIdStmt = $pdo->prepare('SELECT id FROM admin_permissions WHERE code = ?');
|
||||
$permissionIdStmt->execute(['service_prices.manage']);
|
||||
$permissionId = (int)$permissionIdStmt->fetchColumn();
|
||||
|
||||
$roleIdStmt = $pdo->prepare('SELECT id FROM admin_roles WHERE code = ? LIMIT 1');
|
||||
$roleIdStmt->execute(['super_admin']);
|
||||
$roleId = (int)$roleIdStmt->fetchColumn();
|
||||
if ($permissionId > 0 && $roleId > 0) {
|
||||
$rolePermissionStmt = $pdo->prepare(
|
||||
'INSERT INTO admin_role_permissions (role_id, permission_id, created_at)
|
||||
SELECT ?, ?, ?
|
||||
WHERE NOT EXISTS (SELECT 1 FROM admin_role_permissions WHERE role_id = ? AND permission_id = ?)'
|
||||
);
|
||||
$rolePermissionStmt->execute([$roleId, $permissionId, $now, $roleId, $permissionId]);
|
||||
}
|
||||
|
||||
$pdo->exec("DELETE FROM system_configs WHERE config_group = 'appraisal_service'");
|
||||
|
||||
echo "SCHEMA_UPGRADE_SERVICE_PRICE_PACKAGES_OK\n";
|
||||
Reference in New Issue
Block a user