ALTER TABLE `user` ADD COLUMN `password_changed_at` DATETIME NULL COMMENT '密码最后修改时间' AFTER `last_login`; CREATE TABLE IF NOT EXISTS `user_login_session` ( id BIGINT PRIMARY KEY COMMENT '主键 ID', user_id BIGINT NOT NULL COMMENT '所属用户 ID', access_token_id VARCHAR(64) NOT NULL COMMENT '访问令牌 ID', refresh_token_id VARCHAR(64) NOT NULL COMMENT '刷新令牌 ID', user_agent VARCHAR(512) COMMENT '客户端 User-Agent', ip VARCHAR(64) COMMENT '客户端 IP 地址', last_active_at DATETIME NOT NULL COMMENT '最后活跃时间', expires_at DATETIME NOT NULL COMMENT '过期时间戳', revoked_at DATETIME COMMENT '撤销时间', created_at DATETIME COMMENT '创建时间', UNIQUE KEY uk_session_access (access_token_id), UNIQUE KEY uk_session_refresh (refresh_token_id), KEY idx_session_user_active (user_id, revoked_at, expires_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `invoice_profile` ( id BIGINT PRIMARY KEY COMMENT '主键 ID', user_id BIGINT NOT NULL COMMENT '所属用户 ID', title VARCHAR(128) NOT NULL COMMENT '发票抬头', taxpayer_number VARCHAR(64) NOT NULL COMMENT '纳税人识别号', email VARCHAR(128) NOT NULL COMMENT '电子邮箱', is_default TINYINT DEFAULT 0 COMMENT '是否默认发票信息', created_at DATETIME COMMENT '创建时间', updated_at DATETIME COMMENT '更新时间', KEY idx_invoice_profile_user (user_id, is_default) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `invoice_request` ( id BIGINT PRIMARY KEY COMMENT '主键 ID', user_id BIGINT NOT NULL COMMENT '所属用户 ID', order_id BIGINT NOT NULL COMMENT '订单 ID', amount DECIMAL(10,2) NOT NULL COMMENT '开票金额', title VARCHAR(128) NOT NULL COMMENT '发票抬头', taxpayer_number VARCHAR(64) NOT NULL COMMENT '纳税人识别号', email VARCHAR(128) NOT NULL COMMENT '电子邮箱', status VARCHAR(16) DEFAULT 'pending' COMMENT '业务状态', invoice_number VARCHAR(64) COMMENT '发票号码', admin_remark VARCHAR(256) COMMENT '管理员备注', requested_at DATETIME COMMENT '申请时间', processed_at DATETIME COMMENT '处理时间', UNIQUE KEY uk_invoice_order (order_id), KEY idx_invoice_request_user (user_id, requested_at), KEY idx_invoice_request_status (status, requested_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE INDEX idx_download_log_user_created ON download_log (user_id, created_at DESC);