-- ============================================ -- 数据库初始化脚本 -- 包含所有表结构定义 -- ============================================ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ------------------------------------------- -- 用户相关表 -- ------------------------------------------- CREATE TABLE users ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, phone VARCHAR(32) NOT NULL, nickname VARCHAR(64) NOT NULL DEFAULT '', avatar_url VARCHAR(512) NOT NULL DEFAULT '', realname_status VARCHAR(32) NOT NULL DEFAULT 'unverified', risk_status VARCHAR(32) NOT NULL DEFAULT 'normal', credit_score INT NOT NULL DEFAULT 100, status VARCHAR(32) NOT NULL DEFAULT 'active', last_login_at DATETIME NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY uk_users_phone (phone) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE user_realname ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, user_id BIGINT UNSIGNED NOT NULL, provider VARCHAR(32) NOT NULL, provider_order_no VARCHAR(128) NOT NULL DEFAULT '', status VARCHAR(32) NOT NULL DEFAULT 'pending', masked_name VARCHAR(64) NOT NULL DEFAULT '', masked_id_no VARCHAR(64) NOT NULL DEFAULT '', verified_at DATETIME NULL, fail_reason 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, UNIQUE KEY uk_user_realname_user_id (user_id), KEY idx_user_realname_provider_order_no (provider_order_no) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ------------------------------------------- -- 游戏账号和商品表 -- ------------------------------------------- CREATE TABLE game_accounts ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, owner_id BIGINT UNSIGNED NOT NULL, game_name VARCHAR(64) NOT NULL DEFAULT 'delta_force', server_region VARCHAR(64) NOT NULL, login_platform VARCHAR(64) NOT NULL, title VARCHAR(128) NOT NULL, description TEXT NULL, rank_level VARCHAR(64) NOT NULL DEFAULT '', haf_coin_amount BIGINT NOT NULL DEFAULT 0, asset_summary JSON NULL, season_tags JSON NULL, screenshot_urls JSON NULL, status VARCHAR(32) NOT NULL DEFAULT 'draft', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, KEY idx_game_accounts_owner_id (owner_id), KEY idx_game_accounts_filter (game_name, server_region, login_platform) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE rental_listings ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, account_id BIGINT UNSIGNED NOT NULL, owner_id BIGINT UNSIGNED NOT NULL, price DECIMAL(12,2) NOT NULL DEFAULT 0.00, deposit_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00, in_transaction TINYINT(1) NOT NULL DEFAULT 0, status VARCHAR(32) NOT NULL DEFAULT 'draft', review_status VARCHAR(32) NOT NULL DEFAULT 'none', review_reason VARCHAR(255) NOT NULL DEFAULT '', published_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_rental_listings_account_id (account_id), KEY idx_rental_listings_owner_id (owner_id), KEY idx_rental_listings_filter (status, review_status, in_transaction, price) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ------------------------------------------- -- 订单相关表 -- ------------------------------------------- CREATE TABLE rental_orders ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(64) NOT NULL, listing_id BIGINT UNSIGNED NOT NULL, account_id BIGINT UNSIGNED NOT NULL, owner_id BIGINT UNSIGNED NOT NULL, renter_id BIGINT UNSIGNED NOT NULL, rented_at DATETIME NULL, estimated_duration_hours INT NOT NULL DEFAULT 24, rent_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00, owner_rent_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00, deposit_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00, platform_fee DECIMAL(12,2) NOT NULL DEFAULT 0.00, account_snapshot JSON NULL, status VARCHAR(32) NOT NULL DEFAULT 'pending_payment', handoff_status VARCHAR(32) NOT NULL DEFAULT 'none', settlement_status VARCHAR(32) NOT NULL DEFAULT 'unsettled', owner_settled_at DATETIME NULL, settled_at DATETIME NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY uk_rental_orders_order_no (order_no), KEY idx_rental_orders_renter_status (renter_id, status), KEY idx_rental_orders_owner_status (owner_id, status), KEY idx_rental_orders_listing_id (listing_id), KEY idx_rental_orders_rented_at (status, rented_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE 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, owner_rent_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00, platform_fee 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; CREATE TABLE handoff_records ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, order_id BIGINT UNSIGNED NOT NULL, from_user_id BIGINT UNSIGNED NOT NULL, to_user_id BIGINT UNSIGNED NOT NULL, type VARCHAR(32) NOT NULL, content TEXT NULL, attachment_urls JSON NULL, confirmed_by_renter_at DATETIME NULL, confirmed_by_owner_at DATETIME NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, KEY idx_handoff_records_order_id (order_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ------------------------------------------- -- 钱包相关表 -- ------------------------------------------- CREATE TABLE wallet_accounts ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, user_id BIGINT UNSIGNED NOT NULL, available_balance DECIMAL(12,2) NOT NULL DEFAULT 0.00, frozen_balance DECIMAL(12,2) NOT NULL DEFAULT 0.00, status VARCHAR(32) NOT NULL DEFAULT 'active', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY uk_wallet_accounts_user_id (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE wallet_ledger ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, ledger_no VARCHAR(64) NOT NULL, user_id BIGINT UNSIGNED NOT NULL, order_id BIGINT UNSIGNED NULL, direction VARCHAR(16) NOT NULL, amount DECIMAL(12,2) NOT NULL, balance_after DECIMAL(12,2) NOT NULL, balance_type VARCHAR(32) NOT NULL, biz_type VARCHAR(32) NOT NULL, biz_no VARCHAR(64) NOT NULL, remark VARCHAR(255) NOT NULL DEFAULT '', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_wallet_ledger_ledger_no (ledger_no), KEY idx_wallet_ledger_user_created (user_id, created_at), KEY idx_wallet_ledger_order_id (order_id), KEY idx_wallet_ledger_biz (biz_type, biz_no) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ------------------------------------------- -- 纠纷和通知表 -- ------------------------------------------- CREATE TABLE disputes ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, order_id BIGINT UNSIGNED NOT NULL, initiator_id BIGINT UNSIGNED NOT NULL, target_user_id BIGINT UNSIGNED NOT NULL, type VARCHAR(32) NOT NULL, status VARCHAR(32) NOT NULL DEFAULT 'open', description TEXT NULL, evidence_urls JSON NULL, arbitration_result VARCHAR(32) NOT NULL DEFAULT '', arbitration_remark TEXT NULL, handled_by BIGINT UNSIGNED NULL, handled_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_disputes_order_id (order_id), KEY idx_disputes_status (status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE notifications ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, user_id BIGINT UNSIGNED NOT NULL, type VARCHAR(32) NOT NULL, title VARCHAR(128) NOT NULL, content TEXT NULL, biz_type VARCHAR(32) NOT NULL DEFAULT '', biz_id BIGINT UNSIGNED NULL, read_at DATETIME NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, KEY idx_notifications_user_read_created (user_id, read_at, created_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE audit_logs ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, actor_type VARCHAR(32) NOT NULL, actor_id BIGINT UNSIGNED NOT NULL, action VARCHAR(64) NOT NULL, biz_type VARCHAR(32) NOT NULL, biz_id BIGINT UNSIGNED NULL, ip VARCHAR(64) NOT NULL DEFAULT '', user_agent VARCHAR(512) NOT NULL DEFAULT '', detail JSON NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, KEY idx_audit_logs_actor_created (actor_id, created_at), KEY idx_audit_logs_biz (biz_type, biz_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ------------------------------------------- -- 管理员和权限表 -- ------------------------------------------- CREATE TABLE admin_users ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, username VARCHAR(64) NOT NULL, password_hash VARCHAR(255) NOT NULL, nickname VARCHAR(64) NOT NULL DEFAULT '', status VARCHAR(32) NOT NULL DEFAULT 'active', last_login_at DATETIME NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY uk_admin_users_username (username) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE roles ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, code VARCHAR(64) NOT NULL, name VARCHAR(64) NOT NULL, description 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, UNIQUE KEY uk_roles_code (code) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE permissions ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, code VARCHAR(128) NOT NULL, name VARCHAR(64) NOT NULL, resource VARCHAR(128) NOT NULL, action VARCHAR(64) NOT NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY uk_permissions_code (code) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE admin_user_roles ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, admin_user_id BIGINT UNSIGNED NOT NULL, role_id BIGINT UNSIGNED NOT NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_admin_user_roles_user_role (admin_user_id, role_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE role_permissions ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, role_id BIGINT UNSIGNED NOT NULL, permission_id BIGINT UNSIGNED NOT NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_role_permissions_role_permission (role_id, permission_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ------------------------------------------- -- 系统配置表 -- ------------------------------------------- CREATE TABLE system_configs ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, `key` VARCHAR(128) NOT NULL, `value` TEXT NOT NULL, description VARCHAR(255) NOT NULL DEFAULT '', updated_by BIGINT UNSIGNED NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY uk_system_configs_key (`key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ------------------------------------------- -- 客服聊天表 -- ------------------------------------------- CREATE TABLE chat_conversations ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, order_id BIGINT UNSIGNED NULL, type VARCHAR(32) NOT NULL DEFAULT 'order_group', title VARCHAR(128) NOT NULL, status VARCHAR(32) NOT NULL DEFAULT 'active', last_message_id BIGINT UNSIGNED NULL, last_message_preview VARCHAR(255) NOT NULL DEFAULT '', last_message_at DATETIME NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY uk_chat_conversations_order_id (order_id), KEY idx_chat_conversations_last_message_at (last_message_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE chat_participants ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, conversation_id BIGINT UNSIGNED NOT NULL, participant_type VARCHAR(16) NOT NULL, participant_id BIGINT UNSIGNED NOT NULL, role VARCHAR(32) NOT NULL, remark VARCHAR(128) NOT NULL DEFAULT '', last_read_at DATETIME NULL, joined_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY uk_chat_participants_member (conversation_id, participant_type, participant_id), KEY idx_chat_participants_participant (participant_type, participant_id), KEY idx_chat_participants_conversation (conversation_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE chat_messages ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, conversation_id BIGINT UNSIGNED NOT NULL, sender_type VARCHAR(16) NOT NULL, sender_id BIGINT UNSIGNED NOT NULL DEFAULT 0, sender_role VARCHAR(32) NOT NULL DEFAULT '', content_type VARCHAR(32) NOT NULL DEFAULT 'text', content TEXT NULL, attachment_urls JSON NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, KEY idx_chat_messages_conversation_id (conversation_id, id), KEY idx_chat_messages_created_at (created_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE chat_quick_replies ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, admin_user_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '0=全局, >0=个人', title VARCHAR(64) NOT NULL COMMENT '快捷回复标题', content TEXT NOT NULL COMMENT '回复内容', sort_order INT NOT NULL DEFAULT 0 COMMENT '排序', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_admin_user_id (admin_user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='快捷回复模板'; SET FOREIGN_KEY_CHECKS = 1;