feat: update appraisal ordering and payment flows

This commit is contained in:
wushumin
2026-06-03 18:14:40 +08:00
parent 0838db5aba
commit 6383ec5a2a
50 changed files with 6143 additions and 988 deletions

View 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";