SET @listing_in_transaction_exists := ( SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'rental_listings' AND column_name = 'in_transaction' ); SET @add_listing_in_transaction_sql := IF( @listing_in_transaction_exists = 0, 'ALTER TABLE rental_listings ADD COLUMN in_transaction TINYINT(1) NOT NULL DEFAULT 0 AFTER deposit_amount', 'SELECT 1' ); PREPARE add_listing_in_transaction_stmt FROM @add_listing_in_transaction_sql; EXECUTE add_listing_in_transaction_stmt; DEALLOCATE PREPARE add_listing_in_transaction_stmt; SET @listing_price_exists := ( SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'rental_listings' AND column_name = 'price' ); SET @add_listing_price_sql := IF( @listing_price_exists = 0, 'ALTER TABLE rental_listings ADD COLUMN price DECIMAL(12,2) NOT NULL DEFAULT 0.00 AFTER owner_id', 'SELECT 1' ); PREPARE add_listing_price_stmt FROM @add_listing_price_sql; EXECUTE add_listing_price_stmt; DEALLOCATE PREPARE add_listing_price_stmt; UPDATE rental_listings SET price = CASE WHEN price_daily > 0 THEN price_daily WHEN price_hourly > 0 THEN price_hourly * 24 WHEN price_weekly > 0 THEN price_weekly / 7 ELSE price END WHERE price <= 0; INSERT INTO system_configs (`key`, `value`, description) VALUES ('order.pending_payment_timeout_minutes', '15', '订单待支付超时取消分钟数') ON DUPLICATE KEY UPDATE `key` = VALUES(`key`); CREATE TABLE IF NOT EXISTS order_checkouts ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, order_id BIGINT UNSIGNED NOT NULL, initiated_by BIGINT UNSIGNED NOT NULL, status VARCHAR(32) NOT NULL DEFAULT 'submitted', rent_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00, deposit_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00, consumable_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00, coin_consumed_m DECIMAL(12,2) NOT NULL DEFAULT 0.00, other_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00, deposit_deduct_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00, renter_refund_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00, owner_income_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00, content TEXT NULL, evidence_urls JSON NULL, owner_adjustment_reason TEXT NULL, owner_adjusted_at DATETIME NULL, renter_confirmed_at DATETIME NULL, renter_rejected_at DATETIME NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, KEY idx_order_checkouts_order_id (order_id), KEY idx_order_checkouts_status (status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;